जब प्राकृतिक भाषाएं अस्पष्ट होती हैं तो व्यवहार प्रेरित विकास कैसे स्पष्टता लाता है?


9

मैं वर्तमान में ककड़ी की तरह बीडीडी परीक्षण ढांचे की खोज कर रहा हूं और जब लोग कहते हैं तो मुझे यह उत्सुक लगता है

चूँकि फीचर फाइलें सरल प्राकृतिक भाषा में होती हैं इसलिए यह स्पष्टता में सुधार करती है और स्पष्ट दृष्टि देती है

लेकिन, प्राकृतिक भाषा सॉफ्टवेयर इंजीनियरिंग में हमारे लिए सबसे ज्यादा परेशानी का कारण नहीं है?

प्राकृतिक भाषा अस्पष्ट है और यही कारण है कि कई सॉफ्टवेयर परियोजनाएं ग्राहकों की आवश्यकताओं की गलत व्याख्या और डेवलपर की समझ के कारण विफल हो जाती हैं। मैं यहाँ आला नहीं मिलता है।

हां, छोटे-छोटे सरल कर्मों में परीक्षणों को तोड़ना समझ में आता है और एक निश्चित स्तर की स्पष्टता देता है लेकिन क्या इससे उत्पादकता में सुधार होता है?

पुनश्च: मैं एक विशेषज्ञ नहीं हूं और मैं यहां एक राय नहीं बना रहा हूं। मैं अवधारणा को समझने के लिए उत्सुक हूं।


1
बहुत अच्छा सवाल है। मुझे कहना होगा कि मैंने कभी ऐसी चीजें नहीं देखीं, जैसे ककड़ी प्रैक्टिस में काम करती है। प्राकृतिक तकनीकी सटीक तकनीकी कार्यों के लिए अनुपयुक्त है, जैसे परीक्षण निर्दिष्ट करना।
एंड्रेस एफ।

बीडीडी भाषा का उपयोग व्यावसायिक डोमेन की मौजूदा भाषा को प्रतिबिंबित करने के लिए किया गया है, जो पहले से ही व्यापार के लिए असंतुलित होना चाहिए। विकिपीडिया लेख बताता है कि पाठ में जल्दी।
मार्टिन स्पैमर

जवाबों:


8

तुम सही हो। BDD भाषा की अस्पष्टता के साथ समस्याओं को समाप्त नहीं करता है - बिल्कुल नहीं। जैसा कि अन्य लोगों ने बताया, अनुवादित किए गए स्निपेट्स को ठीक से परिभाषित करके मिलान करने की आवश्यकता है, लेकिन यह अंतर्निहित अस्पष्टता समस्या को भी संबोधित नहीं करता है।

अब बीडीडी वास्तव में इस समस्या को हल करने के बावजूद क्यों सार्थक नहीं है? कुछ कारण हैं और यह सूची निश्चित रूप से पूरी नहीं हुई है।

अस्पष्टता हल नहीं हुई है

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

तकनीकी रूप से, भाषा की अस्पष्टता की समस्या का हल लज्जान जैसी कलात्मक भाषाओं के साथ किया गया है , लेकिन फिर, आपके ग्राहक और डेवलपर्स को संभवतः उस भाषा का पता नहीं होगा।

सर्वव्यापी भाषा

BDD एक सर्वव्यापी भाषा के विचार के साथ हाथ से जाता है। सभी ग्राहकों, परीक्षकों और डेवलपर्स के साथ मिलकर परिदृश्यों को निर्दिष्ट करने में सक्षम होने के नाते, बस BDD को अन्य दृष्टिकोणों पर बढ़त देता है।

सभी आवश्यकताओं को लिखने वाले एक पारंपरिक आवश्यकताओं इंजीनियर पर विचार करें। एक बार जब आप एक परीक्षक या ग्राहक के रूप में प्राप्त करते हैं, तो आपकी समीक्षा के लिए आवश्यकताओं से भरा 300 पेज का दस्तावेज़ उस शब्दावली का बहुत अधिक दबाव होगा, जो वहां इस्तेमाल की गई थी।

उपयोगकर्ता कहानियां उस मोर्चे पर थोड़ा बेहतर करती हैं, क्योंकि वे अपने निर्माण में सभी हितधारकों को भी शामिल करते हैं। सर्वव्यापी भाषा के संदर्भ में, मैं यह नहीं कहूंगा कि या तो बीडीडी या उपयोगकर्ता कहानियां बेहतर हैं - हालांकि वे अगले बिंदु में काफी भिन्न हैं।

testability

BDD का एक प्रमुख पहलू यह है कि आपके विनिर्देश वास्तव में निष्पादन योग्य हैं (ककड़ी या इस तरह के माध्यम से)। न तो आवश्यकताएं और न ही उपयोगकर्ता कहानियां इस सुविधा की पेशकश करती हैं। मेरे लिए व्यक्तिगत रूप से, यह BDD के लिए मुख्य विक्रय बिंदु है।

पारंपरिक आवश्यकताओं के साथ विरोधाभास - हम उम्र के लिए आवश्यकताओं इंजीनियरों को बता रहे हैं कि उनकी आवश्यकताओं का परीक्षण किया जाना चाहिए। फिर भी, हर परियोजना एक ऐसा मामला देखती है, जहाँ कहीं न कहीं लाइन टेस्टर्स को यह एहसास होता है कि उन्हें इस बात का कोई अंदाज़ा नहीं है कि एक निश्चित आवश्यकता का परीक्षण कैसे किया जाए।

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

दूसरी ओर BDD स्वचालित रूप से आपको एक निष्पादन योग्य परीक्षा परिदृश्य देता है। इसके आस-पास कोई बहाना नहीं है और कोई भी तरीका नहीं है (अच्छी तरह से जब तक आप स्वचालन की परतों को पूरी तरह से अनदेखा नहीं करते हैं और सिर्फ फैंसी कविता के लिए परिदृश्य लिखते हैं)।

अधिक आम तौर पर, टेस्ट फर्स्ट एक ऐसा सिद्धांत है, जो सॉफ्टवेयर डेवलपमेंट के सभी चरणों में बहुत फायदेमंद रहा है और BDD, विकास की सबसे बाहरी परत (इकाई स्तर पर f.ex. TDD की तुलना में) के लिए इसका अनुप्रयोग है।

सारांश

सारांश में, बीडीडी आपको प्राकृतिक भाषा अस्पष्टता की समस्याओं से दूर नहीं करता है। हालांकि, यह आपको दो महत्वपूर्ण बिंदुओं के माध्यम से उस समस्या से निपटने में मदद करता है: अस्पष्टता को कम करने के लिए एक सर्वव्यापी भाषा पर ध्यान केंद्रित करना (यह उन्हें पूरी तरह से समाप्त नहीं करेगा, लेकिन यह एक टन मदद करता है!) और आपको निष्पादन योग्य लिखने के लिए मजबूर करता है। विशेष विवरण। उत्तरार्द्ध बिंदु ज्यादातर अस्पष्टता की समस्याओं को दूर करने में मदद कर रहा है, क्योंकि यही वह बिंदु है जहां अस्पष्टताएं अन्यथा समस्याओं के रूप में दिखाई देने लगती हैं।


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

4

जब कोई चीज़ "प्राकृतिक भाषा" में लिखी जाती है, तो इसका मतलब बहुत सारी चीज़ें हो सकती हैं:

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

  • यह अंग्रेजी है, लेकिन प्रासंगिक शब्द ठीक परिभाषित हैं। ऐसी भाषा का उपयोग कानूनी दस्तावेजों, या गणितीय ग्रंथों में किया जाता है।

  • यह एक औपचारिक भाषा है, लेकिन भाषा को प्राकृतिक भाषा के सम्मेलनों के बाद बहुत बारीकी से तैयार किया जाता है। यह सभी प्रोग्रामिंग भाषाओं का वर्णन करता है, कुछ हद तक। अंग्रेजी की तरह औपचारिक भाषा, अप्रशिक्षित पाठकों के लिए समझने में जितनी आसान है। इस लक्ष्य के साथ प्रोग्रामिंग भाषाओं के उल्लेखनीय उदाहरणों में COBOL और SQL शामिल हैं: select id, name from persons where age > 18तुरंत स्पष्ट है। इन भाषाओं का नुकसान यह है कि आपको कामकाजी कोड लिखने के लिए औपचारिक भाषा को समझने की आवश्यकता है । इसके अलावा, इन भाषाओं में अक्सर बहुत वर्बोज़ होता है।

डीडीडी सुझाव देता है कि परियोजना डोमेन का वर्णन करने के लिए एक सर्वव्यापी भाषा का उपयोग करती है। यह अनिवार्य रूप से मामला 2 है: प्रासंगिक शब्दों को परिभाषित करें ताकि आप प्राकृतिक भाषा में सटीक संवाद कर सकें।

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

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


विस्तृत जानकारी के लिए धन्यवाद। मुझे लगता है कि केस 2 और केस 3 के बीच में खीरा कुछ हद तक होता है। 3. इसके विपरीत एसक्यूएल जहां आप वास्तव में "फ्री विल" के कुछ प्रकार नहीं रख सकते हैं और सख्त औपचारिक वाक्यविन्यास के साथ छड़ी कर सकते हैं। मेरे सीमित ज्ञान के लिए, खीरे को "दिए गए", "कब" अपने परिदृश्य के लिए कीवर्ड के बाद किसी भी रूप में पाठ की अनुमति नहीं है? यह उतना ही सरल हो सकता है, लेकिन मैं एक गैर अंग्रेजी मूल के देश से हूं और लोगों को सटीक स्निपेट देने के लिए इसकी सबसे अधिक संभावना है।
रघुराम

1
हां, आप Given/ When/ के बाद कुछ भी डाल सकते हैं Then, लेकिन a) आप और आपकी टीम इसका ठीक-ठीक मतलब है, और b) आप कोड , यानी औपचारिक भाषा में मैचर्स में अर्थ को परिभाषित करते हैं।
जोर्ग डब्ल्यू मित्तग

0

@ रघुराम8892, दिए गए / जब / तब / और कीवर्ड के बाद के पाठ को "स्निपेट" से मेल खाना है, अन्यथा चरण अपरिभाषित या "लंबित" के रूप में विफल रहता है। इस प्रकार, यह 3 स्थिति में चौकोर हो जाता है।

"अंग्रेजी" के बारे में, ककड़ी और इसकी भाषा, घेरकिन को अंतर्राष्ट्रीय उपयोग के लिए डिज़ाइन किया गया है। आप cucumber --i18n helpवर्तमान में समर्थित भाषाओं की सूची देखने के लिए, और cucumber --i18n $CODEकिसी विशेष भाषा कोड के लिए कीवर्ड देखने के लिए , कमांड का उपयोग कर सकते हैं। उदाहरण के लिए, cucumber --i18n eoस्क्रीनशॉट के लिए कीवर्ड देता है।

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