tdd vs bdd analyze differences with examples
यह ट्यूटोरियल उदाहरणों के साथ TDD बनाम BDD के बीच के अंतर को बताता है:
टीडीडी या टेस्ट ड्रिवेन डेवलपमेंट और बीडीडी या बिहेवियर ड्रिवेन डेवलपमेंट दो सॉफ्टवेयर डेवलपमेंट तकनीक हैं।
इससे पहले कि हम इन दोनों के बीच के अंतर को और गहरा कर दें, आइए पहले समझते हैं कि इनका व्यक्तिगत रूप से क्या मतलब है और इनका उपयोग कैसे किया जाता है?
चलो शुरू करते हैं!!
सिस्टम परीक्षण और उपयोगकर्ता स्वीकृति परीक्षण के बीच अंतर
आप क्या सीखेंगे:
TDD क्या है?
TDD का मतलब टेस्ट ड्रिवेन डेवलपमेंट है। इस सॉफ्टवेयर डेवलपमेंट तकनीक में, हम पहले टेस्ट केस बनाते हैं और फिर उन टेस्ट केस को अंतर्निहित कोड लिखते हैं। हालांकि टीडीडी एक विकास तकनीक है, इसका उपयोग स्वचालन परीक्षण विकास के लिए भी किया जा सकता है।
जो दल टीडीडी को लागू करते हैं, वे विकास के लिए अधिक समय लेते हैं, हालांकि वे बहुत कम दोष पाते हैं। TDD में कोड की गुणवत्ता में सुधार होता है और जो कोड अधिक पुन: प्रयोज्य और लचीला होता है।
टीडीडी उच्च प्राप्त करने में भी मदद करता है परीक्षण कवरेज लगभग 90-100%। टीडीडी के बाद डेवलपर्स के लिए सबसे चुनौतीपूर्ण बात कोड लिखने से पहले उनके परीक्षण मामलों को लिखना है।
सुझाव पढ़ें => उत्कृष्ट टेस्ट केस लिखने के लिए अंतिम गाइड
टीडीडी की प्रक्रिया
TDD कार्यप्रणाली बहुत ही सरल 6 चरण प्रक्रिया का अनुसरण करती है:
1) एक परीक्षण मामला लिखें: आवश्यकताओं के आधार पर, एक स्वचालित परीक्षण मामला लिखें।
2) सभी परीक्षण मामलों को चलाएं: वर्तमान में विकसित कोड पर इन स्वचालित परीक्षण मामलों को चलाएं।
3) उस परीक्षण मामलों के लिए कोड विकसित करें: यदि परीक्षण मामला विफल हो जाता है, तो उस परीक्षण-केस को अपेक्षित रूप से कार्य करने के लिए कोड लिखें।
4) फिर से परीक्षण के मामले चलाएं: परीक्षण मामलों को फिर से चलाएं और जांचें कि क्या अब तक विकसित सभी परीक्षण मामलों को लागू किया गया है।
5) अपने कोड को रिफलेक्टर करें: यह एक वैकल्पिक कदम है। हालाँकि, अपने कोड को अधिक पठनीय और पुन: प्रयोज्य बनाने के लिए उसे पुन: सक्रिय करना महत्वपूर्ण है।
6) नए परीक्षण मामलों के लिए चरण 1- 5 दोहराएं: अन्य परीक्षण मामलों के लिए चक्र को दोहराएं जब तक कि सभी परीक्षण मामलों को लागू नहीं किया जाता है।
TDD में एक टेस्ट केस कार्यान्वयन का उदाहरण
मान लें कि हमें एक एप्लिकेशन के लिए एक लॉगिन कार्यक्षमता विकसित करने की आवश्यकता है जिसमें उपयोगकर्ता नाम और पासवर्ड फ़ील्ड और सबमिट बटन है।
चरण 1: टेस्ट केस बनाएं।
@Test Public void checkLogin(){ LoginPage.enterUserName('UserName'); LoginPage.enterPassword('Password'); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
चरण 2: यह परीक्षण मामला चलाएँ और हमें एक त्रुटि मिलेगी जो कहती है कि लॉगिन पृष्ठ परिभाषित नहीं है और enterUserName, enterPassword और सबमिट नाम के साथ कोई विधियाँ नहीं हैं।
चरण 3: उस परीक्षण मामले के लिए कोड विकसित करें। अंतर्निहित कोड लिखें जो उपयोगकर्ता नाम और पासवर्ड दर्ज करेगा और सही होने पर एक होम पेज ऑब्जेक्ट प्राप्त करेगा।
public class LoginPage{ String username; String password; //store username public void enterUserName(String username){ this.username = username; } //store password public void enterPassword(String password){ this.password = password; } //match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } } }
चरण 4: परीक्षण मामले को फिर से चलाएँ और हमें मुख पृष्ठ का एक उदाहरण मिलेगा।
चरण 5: मान लीजिए कि यदि जमा पद्धति में स्थितियां सही हैं, तो सही त्रुटि संदेश देने के लिए कोड को सही नहीं है।
//match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } else{ System.out.println('Please provide correct password'); return; } } else{ System.out.println('Please provide correct username'); }
चरण 6: अब एक खाली उपयोगकर्ता नाम और पासवर्ड के साथ एक नया परीक्षण मामला लिखें।
@Test Public void checkLogin(){ LoginPage.enterUserName(''); LoginPage.enterPassword(''); HomePage homePage = LoginPage.submit(); Assert.assertNotNull(homePage); }
अब यदि आप इस परीक्षण मामले को चलाने की कोशिश करते हैं, तो यह विफल हो जाएगा। इस परीक्षण मामले के लिए चरण 1 से 5 दोहराएं और फिर खाली उपयोगकर्ता नाम और पासवर्ड स्ट्रिंग को संभालने के लिए कार्यक्षमता जोड़ें।
BDD क्या है?
BDD का अर्थ व्यवहार प्रेरित विकास है। बीडीडी टीडीडी का एक विस्तार है जहां परीक्षण मामलों को लिखने के बजाय, हम एक व्यवहार लिखकर शुरू करते हैं। बाद में, हम उस कोड को विकसित करते हैं जो व्यवहार के लिए हमारे आवेदन के लिए आवश्यक है।
बीडीडी दृष्टिकोण में परिभाषित परिदृश्य डेवलपर्स, परीक्षकों और व्यावसायिक उपयोगकर्ताओं के लिए सहयोग करना आसान बनाता है।
जब यह आता है तो BDD को एक सर्वोत्तम अभ्यास माना जाता है स्वचालित परीक्षण जैसा कि यह एप्लिकेशन के व्यवहार पर केंद्रित है और कोड के कार्यान्वयन के बारे में सोचने पर नहीं।
आवेदन का व्यवहार बीडीडी में ध्यान का केंद्र है और यह डेवलपर्स और परीक्षकों को ग्राहक के जूते में चलने के लिए मजबूर करता है।
बीडीडी की प्रक्रिया
BDD कार्यप्रणाली में शामिल प्रक्रिया में 6 चरण शामिल हैं और यह TDD के समान है।
1) आवेदन का व्यवहार लिखें: एप्लिकेशन का व्यवहार सरल अंग्रेजी में उत्पाद स्वामी या व्यवसाय विश्लेषकों या QAs द्वारा भाषा में लिखा जाता है।
2) स्वचालित स्क्रिप्ट लिखें: भाषा की तरह यह सरल अंग्रेजी तब प्रोग्रामिंग परीक्षणों में बदल जाती है।
3) कार्यात्मक कोड को लागू करें: तब व्यवहार में अंतर्निहित कार्यात्मक कोड को लागू किया जाता है।
4) जाँच करें कि क्या व्यवहार सफल है: व्यवहार चलाएं और देखें कि क्या यह सफल है। सफल होने पर, अगले व्यवहार पर जाएं अन्यथा एप्लिकेशन व्यवहार को प्राप्त करने के लिए कार्यात्मक कोड में त्रुटियों को ठीक करें।
5) रिफैक्टर या संगठित कोड: इसे अधिक पठनीय और पुनः प्रयोग करने योग्य बनाने के लिए अपने कोड को रिफलेक्टर या व्यवस्थित करें।
6) नए व्यवहार के लिए चरण 1-5 दोहराएं: अपने आवेदन में अधिक व्यवहार को लागू करने के लिए चरणों को दोहराएं।
यह भी पढ़ें => कैसे परीक्षक TDD, BDD और ATDD तकनीकों में शामिल किए गए हैं
बीडीडी में व्यवहार कार्यान्वयन का उदाहरण
मान लें कि हमें एक एप्लिकेशन के लिए एक लॉगिन कार्यक्षमता विकसित करने की आवश्यकता है जिसमें उपयोगकर्ता नाम और पासवर्ड फ़ील्ड और सबमिट बटन है।
चरण 1: उपयोगकर्ता नाम और पासवर्ड दर्ज करने के लिए आवेदन का व्यवहार लिखें।
Scenario: Login check Given I am on the login page When I enter 'username' username And I enter 'Password' password And I click on the 'Login' button Then I am able to login successfully.
चरण 2: इस व्यवहार के लिए स्वचालित परीक्षण स्क्रिप्ट लिखें जैसा कि नीचे दिखाया गया है।
@RunWith(Cucumber.class) public class MyStepDefinitions { @Steps LoginPage loginPage; @Steps HomePage hp; @Given('^I am on the login page $') public void i_am_on_the_login_page(){ loginPage.gotoLoginPage(); } @When('^I enter '((^')*)' username$') public void i_enter_something_username(String username) { loginPage.enterUserName(username); } @When('^I enter '((^')*)' password$') public void i_enter_something_password(String password) { loginPage.enterPassword(password); } @When('^I click on the '((^')*)' button$') public void i_click_on_the_submit_button(String strArg1) { hp = loginPage.submit(); } @Then('^I am able to login successfully.$') public void i_am_able_to_login_successfully() { Assert.assertNotNull(hp); } }
चरण 3: कार्यात्मक कोड को लागू करें (यह TDD उदाहरण चरण 3 में कार्यात्मक कोड के समान है)।
public class LoginPage{ String username = ''; String password = ''; //store username public void enterUserName(String username){ this.username = username; } //store password public void enterPassword(String password){ this.password = password; } //match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } } }
चरण 4: इस व्यवहार को चलाएं और देखें कि क्या यह सफल है। यदि यह सफल है, तो चरण 5 पर जाएं अन्यथा कार्यात्मक कार्यान्वयन को डीबग करें और फिर इसे फिर से चलाएं।
चरण 5: कार्यान्वयन को फिर से दिखाना एक वैकल्पिक कदम है और इस मामले में, हम टीडीडी उदाहरण के लिए चरण 5 में दिखाए गए त्रुटि संदेशों को प्रिंट करने के लिए सबमिट विधि में कोड को पुन: सक्रिय कर सकते हैं।
//match username and passowrd in db and return home page public HomePage submit(){ if(username.existsInDB()){ String dbPassword = getPasswordFromDB(username); if(dbPassword.equals(password){ Return new HomePage(); } else{ System.out.println('Please provide correct password'); return; } } else{ System.out.println('Please provide correct username'); }
चरण 6: एक अलग व्यवहार लिखें और इस नए व्यवहार के लिए चरण 1 से 5 तक का पालन करें।
हम नीचे दिखाए गए अनुसार उपयोगकर्ता नाम दर्ज नहीं करने के लिए त्रुटि मिलने पर जाँच करने के लिए एक नया व्यवहार लिख सकते हैं:
शुरुआती के लिए सबसे अच्छा खेल बना सॉफ्टवेयर
Scenario: Login check Given I am on the login page And I click on the 'Login' button Then I get an error to enter username.
टीडीडी बनाम बीडीडी - प्रमुख अंतर
टीडीडी | BDD |
---|---|
उन परियोजनाओं के लिए बेहतर दृष्टिकोण हो सकता है जिनमें एपीआई और तीसरे पक्ष के उपकरण शामिल हैं। | उन परियोजनाओं के लिए एक बेहतर दृष्टिकोण हो सकता है जो उपयोगकर्ता के कार्यों से संचालित होते हैं। उदाहरण के लिए: ई-कॉमर्स वेबसाइट, आवेदन प्रणाली, आदि। |
टेस्ट प्रेरित विकास के लिए खड़ा है। | व्यवहार प्रेरित विकास के लिए खड़ा है। |
टेस्ट केस लिखने से प्रक्रिया शुरू होती है। | अपेक्षित व्यवहार के अनुसार परिदृश्य लिखकर प्रक्रिया प्रारंभ होती है। |
टीडीडी इस बात पर केंद्रित है कि कार्यक्षमता कैसे लागू की जाती है। | BDD अंतिम उपयोगकर्ता के लिए एक अनुप्रयोग के व्यवहार पर केंद्रित है। |
एक प्रोग्रामिंग भाषा में टेस्ट केस लिखे जाते हैं। | टीडीडी की तुलना में परिदृश्य अधिक पठनीय होते हैं क्योंकि वे सरल अंग्रेजी प्रारूप में लिखे जाते हैं। |
TDD में परीक्षण के मामलों में अनुप्रयोग के कार्यों पर बहुत अधिक प्रभाव पड़ता है। | BDD परिदृश्य कार्यक्षमता परिवर्तनों से बहुत अधिक प्रभावित नहीं होते हैं। |
केवल डेवलपर्स के बीच सहयोग आवश्यक है। | सभी हितधारकों के बीच सहयोग की आवश्यकता है। |
TDD का समर्थन करने वाले कुछ उपकरण हैं: JUnit, TestNG, NUnit, आदि। | बीडीडी का समर्थन करने वाले कुछ उपकरण SpecFlow, Cucumber, MSpec आदि हैं। |
TDD में परीक्षण केवल प्रोग्रामिंग ज्ञान वाले लोगों द्वारा समझा जा सकता है, | BDD में टेस्ट को बिना किसी प्रोग्रामिंग ज्ञान के किसी भी व्यक्ति द्वारा समझा जा सकता है। |
टीडीडी आपके परीक्षणों में कीड़े होने की संभावना को कम करता है। | टीडीडी की तुलना में परीक्षणों में कीड़े को ट्रैक करना मुश्किल है। |
निष्कर्ष
टीडीडी बनाम बीडीडी के बीच चयन बहुत मुश्किल हो सकता है। कुछ लोग तर्क दे सकते हैं कि बीडीडी बग ढूंढने के लिए बेहतर है जबकि अन्य केवल यह कह सकते हैं कि टीडीडी उच्च कोड कवरेज देता है।
न ही कार्यप्रणाली दूसरे से बेहतर है। यह व्यक्ति और परियोजना टीम पर निर्भर करता है कि वह किस कार्यप्रणाली का उपयोग करने का निर्णय लेता है।
हमें उम्मीद है कि इस लेख ने TDD बनाम BDD के बारे में आपके संदेह को साफ़ कर दिया है !!
अनुशंसित पाठ
- 180+ वेब अनुप्रयोग परीक्षण उदाहरण परीक्षण मामले (नमूना चेकलिस्ट)
- ऑटोमेशन लिपियों में मैनुअल टेस्ट के मामलों का अनुवाद कैसे करें? - उदाहरण के साथ स्टेप बाय स्टेप गाइड
- टेस्ट के मामले साक्षात्कार के प्रश्न: परिदृश्य के आधार पर टेस्ट के मामले लिखें
- टेस्टर्स को TDD, BDD और ATDD तकनीकों में कैसे शामिल किया जाता है
- सॉफ्टवेयर परीक्षण में परीक्षण कवरेज (परीक्षण कवरेज को अधिकतम करने के लिए सुझाव)
- 8 सबसे अच्छा व्यवहार प्रेरित विकास (BDD) उपकरण और परीक्षण चौखटे
- Specflow Tutorial: BDD टूल के लिए अंतिम गाइड
- टेस्ट केस कैसे लिखें: उदाहरणों के साथ अंतिम गाइड