टेस्ट ड्रिवेन डेवलपमेंट पिछले कुछ वर्षों से .NET समुदाय में रोष है। हाल ही में, मैंने बीडीडी के बारे में ALT.NET समुदाय में गड़बड़ी सुनी है। यह क्या है? क्या यह TDD से अलग है?
टेस्ट ड्रिवेन डेवलपमेंट पिछले कुछ वर्षों से .NET समुदाय में रोष है। हाल ही में, मैंने बीडीडी के बारे में ALT.NET समुदाय में गड़बड़ी सुनी है। यह क्या है? क्या यह TDD से अलग है?
जवाबों:
मैं समझता हूं कि बीडीडी परीक्षण की तुलना में विनिर्देश के बारे में अधिक होना चाहिए । यह डोमेन ड्रिवेन डिज़ाइन से जुड़ा हुआ है (क्या आपको ये * डीडी समरूपता पसंद नहीं है?)।
यह उच्च स्तरीय परीक्षणों सहित उपयोगकर्ता कहानियों को लिखने के लिए एक निश्चित तरीके से जुड़ा हुआ है। टॉम दस थिज द्वारा एक उदाहरण :
Story: User logging in
As a user
I want to login with my details
So that I can get access to the site
Scenario: User uses wrong password
Given a username 'jdoe'
And a password 'letmein'
When the user logs in with username and password
Then the login form should be shown again
(अपने लेख में, टॉम रूबी में इस परीक्षण विनिर्देश को सीधे निष्पादित करने के लिए जाता है।)
BDD का पोप डैन नॉर्थ है । आपको उनके परिचय BDD लेख में एक महान परिचय मिलेगा ।
आपको इस वीडियो में BDD और TDD की तुलना मिलेगी । जेरेमी डी। मिलर द्वारा बीडीडी के बारे में "टीडीडी ने सही किया" के बारे में भी एक राय
25 मार्च, 2013 अपडेट
ऊपर दिया गया वीडियो कुछ समय से गायब है। यहाँ Llewellyn Falco, BDD बनाम TDD (समझाया) द्वारा हाल ही में एक है । मुझे उनका स्पष्टीकरण स्पष्ट और बिंदु पर है।
मेरे लिए BDD और TDD के बीच प्राथमिक अंतर फोकस और वर्डिंग है। और शब्द आपके इरादे को संप्रेषित करने के लिए महत्वपूर्ण हैं।
टीडीडी निर्देश परीक्षण पर ध्यान केंद्रित करता है। और चूंकि "पुरानी झरना दुनिया" परीक्षण कार्यान्वयन के बाद आते हैं, तो यह मानसिकता गलत समझ और व्यवहार की ओर ले जाती है।
BDD निर्देश व्यवहार और विनिर्देश पर ध्यान केंद्रित करता है, और इसलिए झरना मन विचलित होता है। तो BDD को डिजाइन अभ्यास के रूप में अधिक आसानी से समझा जाता है न कि परीक्षण अभ्यास के रूप में।
बीडीडी दो प्रकार के प्रतीत होते हैं।
पहली मूल शैली है जिस पर डैन नॉर्थ चर्चा करता है और जिसके कारण xBehave स्टाइल फ्रेमवर्क का निर्माण होता है। मेरे लिए यह शैली मुख्य रूप से डोमेन वस्तुओं के खिलाफ स्वीकृति परीक्षण या विशिष्टताओं के लिए लागू है।
दूसरी शैली है जो डेव एस्टेल्स लोकप्रिय हुई और जो, मेरे लिए, टीडीडी का एक नया रूप है जिसके कुछ गंभीर लाभ हैं। यह परीक्षण के बजाय व्यवहार पर ध्यान केंद्रित करता है और छोटे परीक्षण वर्ग भी, उस बिंदु पर पहुंचने की कोशिश करता है जहां आपके पास मूल रूप से प्रति विनिर्देश (परीक्षण) विधि एक पंक्ति होती है। यह शैली परीक्षण के सभी स्तरों के अनुकूल है और किसी भी मौजूदा इकाई परीक्षण ढांचे का उपयोग करके किया जा सकता है, हालांकि नए फ्रेमवर्क (xSpec style) परीक्षण के बजाय किसी एक व्यवहार पर ध्यान केंद्रित करने में मदद करते हैं।
एक बीडीडी समूह भी है जो आपको उपयोगी लग सकता है:
टेस्ट-ड्रिवेन डेवलपमेंट एक टेस्ट-फर्स्ट सॉफ्टवेयर डेवलपमेंट मेथडोलॉजी है, जिसका मतलब है कि वास्तविक कोड लिखने से पहले टेस्ट कोड लिखने की आवश्यकता होती है। केंट बेक के शब्दों में:
यहाँ शैली कोड की कुछ पंक्तियों को लिखने के लिए है, फिर एक परीक्षण जिसे चलाने के लिए, या उससे भी बेहतर होना चाहिए, एक परीक्षण लिखने के लिए जो नहीं चलेगा, फिर उस कोड को लिखें जो इसे चलाएगा।
यह पता लगाने के बाद कि कोड का एक छोटा टुकड़ा कैसे लिखा जाए, अब, केवल कोडिंग के बजाय, हम तत्काल प्रतिक्रिया प्राप्त करना चाहते हैं और अभ्यास "कोड थोड़ा, परीक्षण थोड़ा, कोड थोड़ा, परीक्षण थोड़ा।" इसलिए हम तुरंत इसके लिए एक परीक्षण लिखते हैं।
तो TDD एक निम्न-स्तरीय, तकनीकी कार्यप्रणाली है जो प्रोग्रामर स्वच्छ कोड का उत्पादन करने के लिए उपयोग करते हैं जो काम करता है।
व्यवहार-प्रेरित विकास एक पद्धति है जिसे टीडीडी पर आधारित बनाया गया था, लेकिन यह एक ऐसी प्रक्रिया में विकसित हुआ, जो केवल प्रोग्रामर और परीक्षक की चिंता नहीं करता, बल्कि पूरी टीम और सभी महत्वपूर्ण हितधारकों, तकनीकी और गैर-तकनीकी से संबंधित है। BDD ने कुछ सरल प्रश्नों से शुरुआत की, जिनका TDD अच्छी तरह से उत्तर नहीं देता है: मुझे कितने परीक्षण लिखने चाहिए? मुझे वास्तव में क्या परीक्षण करना चाहिए - और मुझे क्या नहीं करना चाहिए? मेरे द्वारा लिखे गए परीक्षणों में से कौन सा वास्तव में व्यवसाय के लिए या उत्पाद की समग्र गुणवत्ता के लिए महत्वपूर्ण होगा, और जो सिर्फ मेरी ओवर-इंजीनियरिंग हैं?
जैसा कि आप देख सकते हैं, ऐसे सवालों के लिए प्रौद्योगिकी और व्यवसाय के बीच सहयोग की आवश्यकता होती है। व्यावसायिक हितधारक और डोमेन विशेषज्ञ अक्सर इंजीनियरों को बता सकते हैं कि किस तरह के परीक्षण ध्वनि की तरह होते हैं जैसे कि वे उपयोगी होंगे - लेकिन केवल यदि परीक्षण उच्च-स्तरीय परीक्षण हैं जो महत्वपूर्ण व्यावसायिक पहलुओं से निपटते हैं। BDD ऐसे व्यवसाय-जैसे परीक्षणों को "उदाहरण" कहता है, जैसे कि "मुझे यह बताएं कि यह सुविधा कैसे सही ढंग से व्यवहार करनी चाहिए," का एक उदाहरण है, और निम्न-स्तरीय, डेटा सत्यापन या परीक्षण API एकीकरण जैसी तकनीकी जाँच के लिए शब्द "परीक्षण" को सुरक्षित रखता है। महत्वपूर्ण हिस्सा यह है कि जबकि परीक्षण केवल प्रोग्रामर और परीक्षकों द्वारा बनाए जा सकते हैं, उदाहरणों को पूरी डिलीवरी टीम द्वारा - डिजाइनरों, विश्लेषकों, और इसी तरह से एकत्र और विश्लेषण किया जा सकता है।
एक वाक्य में, BDD मैं का सबसे अच्छा परिभाषाओं में से एक है पाया अब तक BDD के बारे में है कि "डोमेन के विशेषज्ञों के साथ बातचीत करने के और उदाहरण का उपयोग करते हुए वांछित व्यवहार का एक साझा समझ पाने और अज्ञात की खोज के लिए।" खोज हिस्सा बहुत महत्वपूर्ण है। जैसा कि डिलीवरी टीम अधिक उदाहरण एकत्र करती है, वे व्यवसाय के डोमेन को अधिक से अधिक समझना शुरू करते हैं और इस प्रकार वे उस उत्पाद के कुछ पहलुओं के बारे में अपनी अनिश्चितता को कम करते हैं जिनसे उन्हें निपटना पड़ता है। जैसे ही अनिश्चितता घटती है, रचनात्मकता और वितरण टीम की स्वायत्तता बढ़ती है। उदाहरण के लिए, वे अब अपने स्वयं के उदाहरणों का सुझाव देना शुरू कर सकते हैं जो कि व्यावसायिक उपयोगकर्ताओं को नहीं लगता था कि उनकी तकनीकी विशेषज्ञता की कमी के कारण संभव नहीं था।
अब, व्यापार और डोमेन विशेषज्ञों के साथ बातचीत करने में बहुत अच्छा लगता है, लेकिन हम सभी जानते हैं कि यह अक्सर अभ्यास में कैसे समाप्त होता है। मैंने एक प्रोग्रामर के रूप में टेक के साथ अपनी यात्रा शुरू की। प्रोग्रामर के रूप में, हमें कोड- एल्गोरिदम, डिज़ाइन पैटर्न, अमूर्त लिखना सिखाया जाता है । या, यदि आप एक डिजाइनर हैं, तो आपको डिजाइन करना सिखाया जाता है- जानकारी को व्यवस्थित करें और सुंदर इंटरफेस बनाएं। लेकिन जब हम अपनी एंट्री-लेवल जॉब प्राप्त करते हैं, तो हमारे नियोक्ता हमसे उम्मीद करते हैं कि "ग्राहकों को मूल्य प्रदान करें।" और उन ग्राहकों में से हो सकता है, उदाहरण के लिए ... एक बैंक। लेकिन मुझे बैंकिंग के बारे में कुछ भी नहीं पता था — सिवाय इसके कि कैसे अपने खाते के बैलेंस को कुशलता से घटाया जाए। इसलिए मुझे किसी भी तरह से अनुवाद करना होगा जो मुझसे कोड में अपेक्षित है ... यदि मुझे कोई मूल्य वितरित करना है तो मुझे बैंकिंग और मेरी तकनीकी विशेषज्ञता के बीच एक पुल का निर्माण करना होगा। BDD मुझे डिलीवरी टीम और डोमेन विशेषज्ञों के बीच द्रव संचार की एक स्थिर नींव पर इस तरह के पुल का निर्माण करने में मदद करता है।
और अधिक जानें
यदि आप BDD के बारे में अधिक पढ़ना चाहते हैं, तो मैंने इस विषय पर एक पुस्तक लिखी। "राइटिंग ग्रेट स्पेसिफिकेशंस" आवश्यकताओं का विश्लेषण करने की कला की खोज करता है और आपको यह सीखने में मदद करेगा कि एक महान बीडीडी प्रक्रिया का निर्माण कैसे करें और उस प्रक्रिया के मुख्य भाग के रूप में उदाहरणों का उपयोग करें। पुस्तक सर्वव्यापी भाषा के बारे में बात करती है, उदाहरणों को इकट्ठा करती है, और तथाकथित निष्पादन योग्य विनिर्देशों (स्वचालित परीक्षणों) को उदाहरणों से बाहर कर देती है - तकनीक जो बीडीडी टीमों को समय पर और बजट पर बहुत सॉफ्टवेअर देने में मदद करती है।
अगर आप "राइटिंग ग्रेट स्पेसिफिकेशन्स" खरीदने में रुचि रखते हैं, तो आप प्रोमो कोड 39nicieja2 के साथ 39% बचा सकते हैं :)
मैंने BDD दृष्टिकोण के साथ थोड़ा प्रयोग किया है और मेरा समय से पहले निष्कर्ष यह है कि BDD केस कार्यान्वयन का उपयोग करने के लिए अच्छी तरह से अनुकूल है, लेकिन अंतर्निहित विवरण पर नहीं। टीडीडी अभी भी उस स्तर पर रॉक कर रहा है।
BDD का उपयोग संचार उपकरण के रूप में भी किया जाता है। लक्ष्य निष्पादन योग्य विशिष्टताओं को लिखना है जिसे डोमेन विशेषज्ञों द्वारा समझा जा सकता है।
मुझे ऐसा लगता है कि BDD एक व्यापक दायरा है। इसका मतलब है कि लगभग TDD का उपयोग किया जाता है, BDD एक व्यापक कार्यप्रणाली है जो तीव्र प्रतिक्रिया प्राप्त करने के लिए अन्य चीजों, TDD प्रथाओं का उपयोग करने के लिए सूचना और आवश्यकताओं को इकट्ठा करता है।
व्यवहार प्रेरित विकास डेवलपर्स और परीक्षकों के बीच बातचीत और संचार पर अधिक ध्यान केंद्रित करता है।
विकिपीडिया लेख में एक स्पष्टीकरण है:
हालांकि खुद बीडीडी का अभ्यास नहीं कर रहे हैं।
TDD के प्राथमिक लाभ पर विचार करें। इसे टेस्ट ड्रिवेन डिज़ाइन कहा जाना चाहिए। BDD TDD का एक उपसमूह है, इसे व्यवहार प्रेरित डिजाइन कहते हैं।
अब टीडीडी - यूनिट परीक्षण के एक लोकप्रिय कार्यान्वयन पर विचार करें। यूनिट टेस्टिंग में इकाइयाँ आम तौर पर एक तर्क होती हैं जो आपके द्वारा की जाने वाली सबसे छोटी इकाई होती है।
जब आप उन इकाइयों को मशीनों के लिए वांछित व्यवहार का वर्णन करने के लिए एक कार्यात्मक तरीके से एक साथ रखते हैं, तो आपको उस व्यवहार को समझने की आवश्यकता है जिसे आप मशीन के लिए वर्णन कर रहे हैं। व्यवहार प्रेरित डिजाइन उपयोग मामलों / आवश्यकताओं / जो कुछ भी के कार्यान्वयन की समझ को सत्यापित करने और प्रत्येक सुविधा के कार्यान्वयन की पुष्टि करने पर केंद्रित है। बीडीडी और टीडीडी सामान्य रूप से डिजाइन को सूचित करने के महत्वपूर्ण उद्देश्य और कार्यान्वयन की शुद्धता को सत्यापित करने का दूसरा उद्देश्य है, खासकर जब यह बदलता है। बीडीडी को किया गया अधिकार बिज़ और देव (और क्यूए) शामिल है, जबकि यूनिट टेस्टिंग (संभवतः एक प्रकार के टीडीडी के बजाय टीडीडी के रूप में गलत रूप से देखा जाता है) आमतौर पर देव साइलो में किया जाता है।
मुझे लगता है कि BDD परीक्षण जीवित आवश्यकताओं के रूप में काम करेगा।
BDD काफी हद तक सही TDD है। हालाँकि, अतिरिक्त मूल्य है जो BDD प्रदान करता है। यहाँ उस पर एक लिंक है:
टीडीडी और बीडीडी में कोई अंतर नहीं है। सिवाय आप अपने परीक्षणों को बेहतर ढंग से पढ़ सकते हैं, और आप उन्हें आवश्यकताओं के रूप में उपयोग कर सकते हैं। यदि आप अपनी आवश्यकताओं को उन्हीं शब्दों के साथ लिखते हैं जैसे आप बीडीडी परीक्षण लिखते हैं तो आप अपने क्लाइंट को कोड लिखने के लिए तैयार अपने कुछ परीक्षणों से परिभाषित कर सकते हैं।
परीक्षण-संचालित विकास (TDD) और व्यवहार-संचालित विकास (BDD) के बीच अंतर
BDD सिस्टम के व्यवहारिक पहलू पर ध्यान केंद्रित करता है न
कि उस सिस्टम के कार्यान्वयन पहलू पर जो TDD पर केंद्रित है।
BDD
डेवलपर और ग्राहक के दृष्टिकोण से सिस्टम को क्या करना चाहिए, इसकी स्पष्ट समझ देता है । TDD केवल
डेवलपर को यह समझ देता है कि सिस्टम को क्या करना चाहिए।
BDD डेवलपर और ग्राहक दोनों को आवश्यकताओं के विश्लेषण पर एक साथ काम करने की अनुमति देता है जो सिस्टम के स्रोत कोड में निहित है।
यहाँ त्वरित स्नैपशॉट है:
TDD को लिखने से पहले परीक्षण कोड की प्रक्रिया है!
DDD, कोड को छूने के प्रत्येक चक्र से पहले डोमेन के बारे में सूचित किए जाने की प्रक्रिया है!
BDD TDD का एक कार्यान्वयन है जो DDD के कुछ पहलुओं को सामने लाता है!