क्या BDD वास्तव में गैर-प्रोग्रामर द्वारा लिखने योग्य है?


24

व्यवहार-संबंधी विकास के साथ इसका प्रतीक "दिया-जब-तब" परिदृश्य वाक्य-विन्यास हाल ही में सॉफ्टवेयर कार्यक्षमता मूल्यांकन के लिए एक सीमा वस्तु के रूप में इसके संभावित उपयोग के लिए काफी सम्मोहित किया गया है ।

मैं निश्चित रूप से सहमत हूँ कि Gherkin , या जो भी सुविधा परिभाषा आप पसंद करते हैं स्क्रिप्ट, एक व्यापार पठनीय DSL है , और पहले से ही इस तरह के रूप में मूल्य प्रदान करता है।

हालांकि, मैं इससे सहमत नहीं है कि यह है लिखने योग्य गैर प्रोग्रामर द्वारा (करता है के रूप में मार्टिन Fowler )।

क्या किसी के पास गैर-प्रोग्रामर द्वारा लिखे जा रहे परिदृश्यों का लेखा-जोखा है, फिर डेवलपर्स द्वारा लिखी गई है?

यदि वास्तव में लेखन की कमी पर एक आम सहमति है, तो क्या आप एक उपकरण के साथ एक समस्या देखेंगे, जो परिदृश्यों के साथ शुरू करने और उन्हें इंस्ट्रूमेंट करने के बजाय वास्तविक परीक्षणों से व्यापार-पढ़ने योग्य परिदृश्य उत्पन्न करेगा ?

अद्यतन: "परिदृश्य-जनरेटर" उपकरण के बारे में, यह निश्चित रूप से व्यावसायिक भाषा का अनुमान नहीं लगाएगा;) लेकिन, जैसे हम वर्तमान में शीर्ष-डाउन दृष्टिकोण (अमूर्त आयाम पर) में परीक्षण बनाने के लिए regexp मिलान का उपयोग करते हैं, हम उपयोग कर सकते हैं। स्ट्रिंग बिल्डरों एक नीचे-अप दृष्टिकोण में परिदृश्य बनाने के लिए।

एक "केवल एक विचार देने के लिए" उदाहरण:

Given I am on page ${test.currentPage.name}
And I click on element ${test.currentAction.element}
…

यह लंबे समय से पहले होगा जब मनुष्य अन्य मनुष्यों द्वारा पढ़ने योग्य सामान्य भाषा के साथ सटीक तरीके से आ पाएंगे, भले ही कंप्यूटर पहले से ही कंप्यूटर के लिए कोड लिखने में सक्षम होंगे।

विडंबना यह है कि JBehave 1 (पहला BDD टूल) व्यवसाय-पढ़ने योग्य परिदृश्य उत्पन्न करके शुरू हुआ। हमने ककड़ी तक अंग्रेजी को पार्स नहीं किया। मुझे लगता है कि जेहेव 1 1 वास्तव में लोगों को याद दिलाने के लिए उपयोगी था कि उन्हें पहले उनके बारे में बात करनी थी ...
लूनीवोर

जवाबों:


20

मैंने देखा है। अच्छी तरह से समाप्त नहीं हुआ।

मुझे लगता है कि खीरा बोझिल है (<- lol: D) इस सटीक कारण के लिए अमूर्त। गैर-तकनीकी लोगों के लिए स्वयं द्वारा लिखना बहुत कठिन है; तकनीकी लोगों के लिए भी क्रिया।

गैर तकनीकी लोग सिर्फ प्रोग्रामर की तरह सोचना नहीं सीखते हैं। यह अमूर्त ज्ञान को समझने, इसे तोड़ने, नए सिरे से बनाने और फिर भी सफलतापूर्वक अस्पष्टता से दूर भागने में सक्षम होना हमारा विशेषाधिकार है। यही हमें भुगतान किया जाता है।

यदि वास्तव में लेखन की कमी पर एक आम सहमति है, तो क्या आप एक उपकरण के साथ एक समस्या देखेंगे, जो परिदृश्यों के साथ शुरू करने और उन्हें इंस्ट्रूमेंट करने के बजाय वास्तविक परीक्षणों से व्यापार-पढ़ने योग्य परिदृश्य उत्पन्न करेगा?

उपकरण स्वयं उन्हें उत्पन्न करने में सक्षम नहीं होंगे। व्यावसायिक डोमेन के बारे में कंप्यूटर कुछ नहीं जानता है। अंत में - प्रोग्रामर ड्राइंग के लिए जिम्मेदार होगा जो वैसे भी उत्पन्न करने की आवश्यकता है और फिर भी - संभावना है कि उन परिदृश्यों को उनके अंतिम-उपयोगकर्ताओं के लिए बहुत अधिक क्रियात्मक / गूढ़ होगा।


20
Non technical people just haven't learned to think like programmers. सच्चाई। इसी अवधारणा को पिछले 20 वर्षों में कई बार सम्मोहित और पुष्ट किया गया है और यह लगभग हमेशा खराब परिणामों के साथ समाप्त होती है। व्यवसायों को उन लालची रक्त चूसने वाले लीच सॉफ़्टवेयर डेवलपर्स को भुगतान किए बिना सॉफ़्टवेयर प्राप्त करने की अवधारणा पसंद है, लेकिन वे यह भूल जाते हैं कि सॉफ़्टवेयर विकास का सबसे कठिन हिस्सा व्यवसाय के नियमों को समझने में सबसे अधिक है और व्यवसाय के लोगों की तुलना में अधिक जटिल है।
maple_shaft

2
"गैर तकनीकी लोग बस प्रोग्रामर की तरह सोचना नहीं सीखते हैं।" हाँ, समस्याओं को विघटित करने और उन्हें निर्दिष्ट परमाणु तार्किक शर्तों के भीतर व्यक्त करने की क्षमता शायद वही है जो एक प्रोग्रामर / विश्लेषक बनाती है। यह विचार कि अंग्रेजी की तरह दिखने वाला घेरकिन किसी के द्वारा प्रयोग करने योग्य है, मुझे अविश्वसनीय रूप से भोला लगता है। इसकी पुष्टि करने के लिए धन्यवाद :) Computer knows nothing about business domain.बेशक। मैंने अपने विचार को बहुत स्पष्ट नहीं किया, इसके बारे में खेद है। मैं प्रश्न में जानकारी जोड़ूंगा।
मटिसीजी

8
@maple_shaft: पिछले 20 साल? पिछले 60 वर्षों का प्रयास करें। COBOL के आसपास कुछ शुरुआती प्रचार यह था कि व्यवसायी लोग इसे लिख सकते थे, जिससे प्रोग्रामर की आवश्यकता समाप्त हो गई। जब ऐसा होने में नाकाम रहे, तो लोग चौथी पीढ़ी की भाषाओं के एक समूह के साथ आए, जो ऐसा ही करने वाले थे।
डेविड थॉर्नले

11

विनिर्देशों के दस्तावेज को लिखने में ग्राहक के लिए कठिनाई का एक हिस्सा यह है कि ग्राहक अक्सर यह नहीं जानता कि ग्राहक को उन चीजों का अनुवाद कैसे करना है जो ग्राहक किसी भाषा में चाहता है जो वास्तव में वर्णन करता है कि ग्राहक को क्या चाहिए। हालांकि ग्राहक कह सकते हैं कि वे एक प्रणाली में मौजूद एक निश्चित व्यवहार चाहते हैं, वे आम तौर पर minutiae के साथ तब तक चिंतित नहीं होते हैं जब तक कि उन्होंने सॉफ्टवेयर को काम करने और उपयोग करने का अनुभव नहीं किया और अनुभव किया हो, जो ग्राहक को लगता है कि उनके साथ मेल नहीं खाता है की जरूरत है।

जब ग्राहक किसी व्यावसायिक प्रक्रिया का वर्णन करते हैं, तो वे अक्सर बहुत सारी प्रासंगिक जानकारी छोड़ देते हैं। अक्सर यह जानकारी एक ऐसी प्रक्रिया के बारे में होती है, जो आमतौर पर ग्राहक के विशेष डोमेन के भीतर समझी जाती है और जो इसलिए दी जाती है और अक्सर प्रोग्रामर के पास नहीं जाती है। अन्य समय में, ग्राहक वास्तव में यह नहीं जानता है कि किसी प्रणाली के भीतर सभी सीमाओं की स्थिति से कैसे निपटें, और मार्गदर्शन के लिए प्रोग्रामर को देख रहा है। कभी-कभी यह प्रयोज्यता का एक सरल मामला होता है, ग्राहक की सोच के साथ वे चाहते हैं कि वे एक तरह से काम करें, लेकिन बाद में मन बदलने पर यह स्पष्ट हो जाता है कि चीजों को अलग तरीके से काम करना चाहिए।

ठीक है, इतना "प्रोग्रामर के लिए ग्राहक-संबंध 101"। सवाल यह है कि क्या विनिर्देशन को परिभाषित करने के लिए ग्राहक एक व्यावसायिक पठनीय डीएसएल का उपयोग करने में अभी भी मूल्य है। मेरा मानना ​​है कि मार्गदर्शन के साथ, उत्तर एक अस्थायी 'हां' है, और मैं कहता हूं कि क्योंकि मेरा अगला सवाल यह है कि मन में आता है, तो आपके पास ग्राहक शिल्प एक डीएसएल क्यों होगा जब आपके पास एक प्रोग्रामर हो सकता है जो आसानी से एक को परिभाषित करेगा। सिस्टम को काम करने की आवश्यकता को परिभाषित करने के लिए एक सरल लेकिन समृद्ध भाषा के साथ एक ग्राहक प्रदान करें?

जब आपने एक ग्राहक को यह बताने के लिए एक भाषा प्रदान की है कि वे कैसे काम करने के लिए एक प्रणाली चाहते हैं, तो आप उन कथनों को समाप्त करने जा रहे हैं जो कुछ इस प्रकार हैं:

"for a given 'subsystem', as a 'business entity' I want 'some feature' so that I might achieve 'some result'".

इस प्रकार का कथन बहुत स्पष्ट तरीके से एक आवश्यकता का वर्णन करने के लिए समाप्त होता है, समग्र आकार प्रदान करता है कि ग्राहक मूल रूप से सिस्टम को ग्रहण करना चाहता है, या इसे देखने का एक और तरीका यह है कि ग्राहक वर्णन कर रहा है कि सिस्टम क्या है। यदि आप चाहते हैं कि आपका ग्राहक कुछ और चीजों के बारे में सोचें, तो आप उनसे उन नियमों का वर्णन करने के लिए कह सकते हैं, जिन्हें इस तरह के कई बयानों का उपयोग करते हुए इस सुविधा का पालन करना चाहिए:

"Given 'some system state', When 'some action occurs', Then expect 'some result'

फिर बहुत स्पष्ट विवरण, इस बार कैसे के बारे मेंसिस्टम को व्यवहार करना चाहिए। बात यह है, यह सभी रिक्त स्थान को भरने के लिए एक सॉफ्टवेयर डेवलपर की आवश्यकता को प्रतिस्थापित नहीं करेगा, और आगे के विवरणों को छेड़ने के लिए कि ग्राहक केवल परिधीय रूप से अवगत हो सकता है। यद्यपि ग्राहक एक अच्छा प्रोग्रामर-अनुकूल प्रारूप में सुविधाओं और व्यवहारों का वर्णन करने के लिए प्रोग्रामर द्वारा 'प्रशिक्षित' होने में सक्षम हो सकता है, ग्राहक के पास वास्तव में परीक्षण मामलों को उत्पन्न करने के लिए कौशल या ज्ञान नहीं होगा, न ही कार्यान्वयन प्रदान करने के लिए। कोड। मुझे लगता था कि ओपी ने मार्टिन फाउलर लेख के बिंदु को संदर्भित किया है। तो हाँ, सॉफ़्टवेयर स्वयं ग्राहक द्वारा लिखने योग्य नहीं है, लेकिन सॉफ़्टवेयर का विवरण निश्चित रूप से - और IMHO - ग्राहक द्वारा लिखा जाना चाहिए। इसके लायक क्या है, मैंने यह कहते हुए फाउलर का लेख नहीं पढ़ा कि ग्राहक को चाहिए '

मुझे लगता है कि हम प्रोग्रामर कभी-कभी यह भूल सकते हैं कि हमारे ग्राहक आमतौर पर अपने व्यवसायों और व्यापार प्रक्रियाओं की अपनी समझ के मामले में बहुत स्मार्ट हैं, निश्चित रूप से हम जितना करते हैं उससे बेहतर है। जब उनके पास यह बताने के लिए प्रोग्रामर नहीं होता है कि वे एक सॉफ्टवेयर सिस्टम का निर्माण कैसे करें, तो ग्राहक आमतौर पर अन्य का सहारा लेते हैं - शायद कम कुशल - का मतलब है कि वे अपने विशेष व्यवसाय प्रबंधन की समस्याओं को हल करते हैं। इसका मतलब है कि मैं सरल डेटाबेस (एक्सेस पर विचार करता हूं) या स्प्रैडशीट, या यहां तक ​​कि हाथ से लिखे जाने वाले लीडर्स में, और उन प्रक्रियाओं को प्रबंधित करने के लिए अच्छी तरह से परिभाषित नियमों और प्रक्रियाओं के साथ। कितने ग्राहकों की कमी यह निर्धारित करने का साधन नहीं है कि किसी प्रणाली को काम करने की आवश्यकता है, बल्कि इसे कैसे बनाया जाना चाहिए , और इससे भी महत्वपूर्ण बात यह है कि किसी व्यक्ति के लिए सिस्टम के व्यवहार नियमों का कुशलतापूर्वक वर्णन कैसे करेंकरते कौशल वास्तव में प्रणाली का निर्माण करने की है।

यदि वास्तव में लेखन की कमी पर एक आम सहमति है, तो क्या आप एक उपकरण के साथ एक समस्या देखेंगे, जो परिदृश्यों के साथ शुरू करने और उन्हें इंस्ट्रूमेंट करने के बजाय वास्तविक परीक्षणों से व्यापार-पढ़ने योग्य परिदृश्य उत्पन्न करेगा?

मुझे लगता है कि यह मुद्दे को गलत तरीके से देख रहा है। मैं एक उपकरण के साथ एक बड़ी समस्या देखूंगा जो परीक्षणों से प्रलेखन उत्पन्न करता है यदि उस दस्तावेज को किसी भी तरह से विनिर्देश का प्रतिनिधित्व करने का इरादा था। किसी परिदृश्‍य का परीक्षण करने के लिए, आपको इसे समझने की आवश्‍यकता है, इसलिए परिदृश्‍य को आपके लिए पहले से ही मौजूद होना चाहिए ताकि दोनों इसके लिए एक परीक्षण निर्धारित कर सकें। यदि आप बीडीडी-वाक्यविन्यास में परिदृश्य का वर्णन करते हैं, तो आप इसे पहले ही निर्दिष्ट कर चुके हैं, और इस प्रकार आप केवल तथ्य के बाद परिदृश्यों को लिख सकते हैं। यदि दूसरी ओर आपके पास एक उपकरण होता है जो ग्राहक को एक अच्छी प्रोग्रामिंग-फ्रेंडली डीएसएल में एक प्रणाली का वर्णन करने की अनुमति देता है, और यदि उस टूल का उपयोग कोड टेम्पलेट उत्पन्न करने के लिए किया जा सकता है जो कि टेस्ट सूट के रूप में उपयोग किया जाएगा, तो मैं ' d का कहना है कि इस तरह के टूल में बहुत अच्छा मूल्य होगा। यह ग्राहक को प्रोग्रामर को समीकरण से बाहर नहीं देखेगा, और यह ग्राहक की इच्छाओं को लेने के लिए आवश्यक प्रयास को कम करने और बीडीडी फैशन में परीक्षण-एन्कोडेड आवश्यकताओं को उत्पन्न करने में मदद करेगा, और शायद ग्राहक की इच्छाओं को अधिक आसानी से समझ में आएगा। हालांकि, ग्राहक की जरूरतों से ग्राहक की जरूरतों को अलग करने के लिए ग्राहक की मदद करने के लिए हाथ पर एक अनुभवी सॉफ्टवेयर डेवलपर होने का विकल्प नहीं होगा।


"आदेश एक परिदृश्य का परीक्षण करने के लिए, आपको यह समझने की जरूरत है, इसलिए परिदृश्य की जरूरत है दोनों के लिए आप के लिए पहले से मौजूद हैं इसके लिए एक परीक्षण परिभाषित करते हैं।" मैं सहमत हूँ। मैं जो सवाल कर रहा हूं वह यह है कि क्या भाषा की बाधाओं को लागू करना कुछ भी मायने रखता है। मेरा दावा नहीं है कि हमें केवल परीक्षण लिखना चाहिए; लेकिन मुझे आश्चर्य है कि क्या हमें इस तथ्य को स्वीकार नहीं करना चाहिए कि व्यवसाय विवरण (और शायद) हमेशा सादा, मुक्त रूप वर्णन होना चाहिए । इसलिए, हमारे पास शुद्ध व्यापारिक रेगिस्तान होंगे, और पठनीय परिदृश्य उत्पन्न होंगे, जिससे मनुष्य यह तय कर सकेंगे कि वे मेल खाते हैं या नहीं; दिखावा करने के बजाय हम परीक्षण करने के लिए वास्तविक descs का उपयोग करते हैं ।
मटिसीज

@MattiSG ...whether enforcing language constraints is worth anything। यह अच्छा प्रश्न है। मुक्त-रूप वर्णन लेखक के लिए अधिक अभिव्यंजक और स्वाभाविक हैं, लेकिन परिणामी टिप्पणी में परिणाम है कि एक उपयोगी कल्पना प्राप्त करने के लिए विच्छेदन की आवश्यकता होती है। आवश्यकताओं और चश्मा लिखने के लिए औपचारिक 'नियमों' (उर्फ एक डीएसएल) को परिभाषित करके, आपके पास एक सामान्य भाषा है जिसे ग्राहक और प्रोग्रामर दोनों समझ सकते हैं, गलतफहमी को सीमित कर सकते हैं। यदि आपको विवरण सही मिलते हैं, तो उन्हें आपके परीक्षणों के लिए टेम्पलेट के रूप में शब्दशः उपयोग किया जा सकता है। इस प्रकार कुछ भी "उत्पन्न" करने के लिए जटिल उपकरणों की आवश्यकता नहीं है।
S.Robins

@ माटीएसजी एफडब्ल्यूआईडब्ल्यू, एक डीएसएल और बीडीडी का उपयोग करना प्रणाली है जो मैं खुद उपयोग करता हूं। आवश्यकताओं को एंटिटी-फ़ीचर-बेनिफिट स्टेटमेंट्स के रूप में परिभाषित किया गया है, और एक युक्ति के साथ पीछा किया गया है जो एएए (आइए: गिवेन-व्हेन-तब) स्टेटमेंट्स ... अनिवार्य रूप से परिदृश्य स्टेटमेंट्स का उपयोग करके प्रारंभिक आवश्यकताओं के बयानों का विस्तार करता है। मुफ्त पाठ को डिकोड करने का प्रयास करते समय कठिनाई यह है कि डीएसएल के बिना, आपके पास एल्गोरिथ्म को परिभाषित करने के लिए एक आसान साधन नहीं है जो सार्थक संग्रह परिदृश्य उत्पन्न कर सकता है। मेरा कहना था कि परिदृश्यों को उत्पन्न करने के लिए शुरुआती बिंदु के रूप में परीक्षणों का उपयोग करना पीछे की तरह है।
S.Robins

5

मैंने देखा है कि डेवलपर्स परिदृश्य लिखते हैं; परीक्षक परिदृश्य लिखते हैं और यहां तक ​​कि उत्पाद स्वामी भी परिदृश्य लिखते हैं। मेरे पास स्पष्ट रूप से परिदृश्यों को लाने के लिए डिज़ाइन की गई बातचीत है - "यह देखते हुए <यह अन्य संदर्भ>, तब क्या होना चाहिए?" - और नीचे लिखे शब्दों का व्यावसायिक उपयोग करें।

मेरे कार्यालय में रहते हुए उत्पाद स्वामी के साथ बातचीत करने से सबसे अच्छे परिणाम, उन्हें विकी पर कब्जा करना और फिर उन्हें भेजना था ताकि वह सही हो सके और अधिक जोड़ सकें। उन्होंने पाया कि हमारी बातचीत में एक दंपत्ति छूट गया। वह हिल गया।

सबसे खराब परिदृश्य मैंने देखा है कि डेवलपर्स ने व्यवसाय के साथ किसी भी बातचीत के बिना खुद को लिखा है। मैं बता सकता हूं क्योंकि वे "जब मैं खोज करता हूं" जैसे शब्दों का उपयोग करता हूं, या "जब मैं आज की तारीख + 3 के साथ फॉर्म जमा करता हूं"। वे आम तौर पर बहुत दिलचस्प परिदृश्य नहीं होते हैं, उनमें से बहुत सारे, बहुत कम विस्तार के स्तर और इसलिए पूरी तरह से अप्राप्य हैं। व्यवसाय भी इन्हें नहीं पढ़ते हैं।

बातचीत IMO पर ध्यान केंद्रित करने के लिए बेहतर है। मैंने देखा है कि कुछ टीम कुछ महीनों के लिए गुणवत्ता में भारी सुधार के साथ ऐसा करती है, स्वचालन के बावजूद। एक टीम ने कुछ हफ्तों के बाद बहुत ही मुश्किल माहौल में काम करने के लिए स्वचालन प्राप्त करने में कामयाबी हासिल की, जो कि परीक्षक की खुशी के लिए बहुत कुछ था! लेकिन वास्तव में, जब तक टीम बातचीत कर रही है और परिदृश्यों का उपयोग करके अन्य परिदृश्यों को निकाल रही है, मुझे नहीं लगता कि यह कोई मायने रखता है कि उन्हें कौन लिखता है।


+1 संचार वास्तव में महत्वपूर्ण है, और परिदृश्यों को वास्तव में उन स्थितियों में रहने की आवश्यकता होती है, जो व्यापार के लोग हमें देते हैं, इसलिए ओपी प्रश्न के साथ, अगर हम एक डीएसएल बनाते हैं, तो यह वास्तव में एक करीबी मैच होने में सक्षम होना चाहिए। ग्राहक क्या कहने जा रहा है, न कि प्रोग्रामर को लगता है कि ग्राहक को क्या कहना चाहिए।
रॉबिन्स

0

मेरा अनुभव यह है कि GWT ( गिवेन-व्हेन-तब ) s (SpecFlow का उपयोग करके अनुभव) लिखने के लिए BA (बिजनेस एनालिस्ट) को छोड़ दिया जाना सबसे अच्छा है । बीए GWT में ग्राहकों की आवश्यकताओं का अनुवाद कर सकता है और व्यवसाय इसे पढ़ सकता है। ग्राहक सिस्टम को समझते हैं, लेकिन उनके पास तकनीक को इस तरह से आवश्यकताओं को लिखने के लिए नहीं है जो हम उपयोग कर सकते हैं।

आदर्श रूप से बीए कुछ GWT लिखता है, मैं कुछ संशोधन करूंगा, बीए समीक्षा / पुनरीक्षण दोहराएगा जब तक कि बीए और व्यापार कवरेज में भरोसा नहीं था। व्यावहारिक रूप से बीए मुझे एक कठिन ड्राफ्ट देगा जिसे मैं साफ कर दूंगा और काम करूंगा। व्यापार यह कहकर सिकुड़ जाता है कि फिर आश्चर्य होता है कि इसने कुछ क्षेत्रों को कवर क्यों नहीं किया जिसके बारे में किसी ने सोचा भी नहीं था।


क्या आप स्पष्ट कर सकते हैं कि आपके लिए GWT का क्या मतलब है? :)
मैटीएसजी

@ माटीएसजी: यह जब-जब-तब (ओपी देखें) के लिए है।
sleske

@MattiSG - पोस्ट को अच्छी तरह से पकड़ लें।
सोयलेंटग्रे 13
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.