TDD: पहली इकाई परीक्षण से पहले क्या होता है?


18

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

उदाहरण के लिए, मान लें कि मैं अपने परिवार के काम को संभालने में मदद करने के लिए एक ऐप लिखना चाहता हूं। यहाँ मेरे दिमाग में कुछ सवाल हैं: मैं इस विचार से अपने पहले परीक्षण में कैसे जाऊँ? मुझे शुरू करने से पहले कितना तय किया जाना चाहिए, और परीक्षण शुरू करने के बाद मुझे कितना पता चलेगा? जब मैं किसी पाठ फ़ाइल या डेटाबेस में डेटा संग्रहीत करने के लिए निर्णय लेता हूं, तो मैं क्या करूं? आरंभ करने से पहले क्या मुझे उपयोगकर्ता स्वीकृति परीक्षण करना चाहिए? क्या मुझे UI डिज़ाइन करना चाहिए? क्या मुझे कल्पना करनी चाहिए? (मुझे पता है कि इनमें से कम से कम कुछ उदाहरण प्रश्न "ग्रे एरिया" में हैं)।

प्रथम इकाई परीक्षण के बारे में शीर्षक प्रश्न के अलावा, क्या आप इस बात का भी उदाहरण दे सकते हैं कि नमूना परियोजना जैसी परियोजना के लिए पहली इकाई परीक्षण कैसा दिख सकता है?


5
मैं अच्छी तरह से नेट प्रीस और स्टीव फ्रीमैन द्वारा GOOS किताब पढ़ने की सलाह देता हूं ... कार्यक्षमता के 'पतले स्लाइस' के साथ अंत-टू-एंड टेस्ट पास करने के बारे में कुछ बेहतरीन जानकारी है।
खाली

जवाबों:


6

मुझे फीचर्स की एक सूची के साथ शुरुआत करना पसंद है, और प्रत्येक फीचर के लिए उपयोगकर्ता कहानियां लिखें, फिर प्रत्येक कहानी के लिए परीक्षण विवरण लिखें।

एक बिट के लिए डिजाइन के बारे में सोचो, फिर एक परीक्षण विवरण चुनें और कोडिंग शुरू करें: लाल-हरा-रिफ्लेक्टर।

जब तक सभी टेस्ट पास न हो जाएं तब तक दोहराएं।

हां, स्वीकृति परीक्षणों को इस का हिस्सा माना जाना चाहिए, जो उपयुक्त कहानी से जुड़ा हुआ है।


यह मुझे पंसद है। यह एक बहुत ही स्पष्ट प्रक्रिया है जिसका मैं अनुसरण कर सकता हूं: सुविधाओं की सूची बनाएं, प्रत्येक सुविधा के लिए उपयोगकर्ता कहानियों की एक उप-सूची बनाएं, प्रत्येक उपयोगकर्ता कहानी के लिए उप-सूची बनाएं। मैं इस प्रक्रिया को आज़माऊँगा।
एथेल इवांस

मैं इसे स्वीकार कर रहा हूं क्योंकि यह पता करता है कि मैं व्यक्तिगत रूप से क्या जानना चाहता था, लेकिन लोगों को कार्ल से प्रतिक्रिया (अधिक उत्कीर्ण) पढ़ने की सलाह देते हैं।
एथेल इवांस

18

आपको पता चला है कि TDD डिज़ाइन के बारे में शुरू से ही कैसा है । अपना पहला परीक्षण लिखने से पहले, आपको यह सोचना होगा कि आपकी पहली कार्यक्षमता क्या है, और आपका कार्यक्रम कैसा दिखेगा यदि वह कार्यक्षमता काम कर रही थी।

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

मैं अपने परिवार के काम को संभालने में मदद करने के लिए एक ऐप लिखना चाहता हूं।

ठंडा। अगर वह ऐप काम कर रहा होता, तो वह क्या करता? ठीक है, एक चोर शायद एक व्यक्ति को सौंपा जा सकता है, है ना?

Person fred = new Person("fred")
Chore mow = new Chore("mow the lawn");
mow.assignTo(fred);
assertEquals(fred, mow.whoIsAssigned());

एक शुरुआत है। उस जगह को नहीं जिसे आपको शुरू करना है, जरूरी नहीं कि शुरू करने के लिए सबसे अच्छी जगह है - लेकिन यह एक जगह है। यह ऐसा कुछ है जिसे आप अपना कोड समर्थन देना चाहते हैं (हालांकि मुझे यकीन है कि आप बेहतर नामों के साथ आ सकते हैं)। वहां से शुरू करें, इसे विफल देखें। इसे पास करो। इसे साफ करो। बल्कि, कुल्ला, दोहराएं।


मुझे उदाहरण पसंद नहीं है, लेकिन मैं इस बात से सहमत नहीं हूँ; परीक्षण-प्रथम कार्यप्रणाली केवल तभी समझ में आती है जब आप सक्षम होते हैं और कम से कम कुछ अप-फ्रंट डिज़ाइन करने को तैयार होते हैं । वास्तव में आप वास्तव में एक कंकाल डोमेन मॉडल की जरूरत है, या कम से कम एक बड़े आकार का एक हिस्सा है।
जूनी

5
यहाँ कोई अप फ्रंट डिज़ाइन नहीं है। परीक्षण में कोई भी वर्ग अभी तक मौजूद नहीं है। डिजाइन परीक्षण में होता है, जब वे परीक्षण पास बनाने के लिए बनाए जाते हैं।
Torbjørn

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

2
@ ईथेल हां, यह उतना ही सोचा जाता है जितना कि मैं इसे (दोनों उदाहरण में और सामान्य रूप से) इसमें डालने की सलाह दूंगा। किसी परीक्षण योग्य चीज़ का चित्रण करें, जो आपको इच्छित उत्पाद की ओर ले जाए और फिर उसके लिए एक परीक्षण लिखें।
कार्ल मैनस्टर

1
यह एक टीम पर कैसे काम करता है यह एक बड़ा और अलग सवाल है। और TDD के पास टीम के काम के समन्वय के बारे में कहने के लिए बहुत कुछ नहीं है। जोड़ी प्रोग्रामिंग और योजना खेल उस के साथ मदद कर सकते हैं; आपके द्वारा योजना के संदर्भ में, TDD अभी भी लागू होता है। jamesshore.com/Agile-Book/the_planning_game.html भी, टीम के काम की योजना बनाने के बारे में कुछ कहना है।
कार्ल मैनस्टर

5

हाँ, TDD में यह समस्या है। इसलिए मैं अब व्यवहार प्रेरित विकास की सलाह देता हूं।

मैन्युअल रूप से प्रारंभ करें। उपयोगकर्ता कहानी के समान कुछ लिखें:

  • एक उपयोगकर्ता के रूप में
  • जब मैं Add To Shopping Cart का चयन करता हूं तो मैं चाहता हूं कि उत्पाद को पारदर्शी रूप से पृष्ठभूमि में जोड़ा जाए
  • ताकि मैं अपने खरीदारी के अनुभव को निर्बाध रूप से जारी रख सकूं

अब ऐसी कौन सी विशेषताएँ हैं जो उस लक्ष्य का समर्थन करती हैं ('तो वह' भाग)?

  • जब किसी वस्तु को शॉपिंग कार्ट में जोड़ा जाता है
    • उपयोगकर्ता के लिए शॉपिंग कार्ट में नया आइटम होगा
    • कार्ट में कुल आइटम एक से बढ़ेंगे
    • उपयोगकर्ता को पुनर्निर्देशित नहीं किया जाना चाहिए
    • अब चेक आउट का विकल्प उपलब्ध होगा
  • जब शॉपिंग कार्ट में दो आइटम होते हैं और उपयोगकर्ता जांचना चुनता है
    • उपयोगकर्ता को चेक आउट पृष्ठ पर पुनः निर्देशित किया जाएगा
    • दोनों आइटम दिखाई देंगे

ये सभी चीजें हैं जो आप कर सकते हैं, और मैन्युअल रूप से जांच करनी चाहिए।

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

.Net के पास वेबपेज को स्वचालित करने के लिए WatiN है या, यदि आप एक एपीआई का परीक्षण करना चाहते हैं, तो मैं xspnit या MSpec के साथ सबस्पेक को जोड़ने की सलाह दूंगा (आप किसी भी परीक्षण ढांचे के साथ भी ऐसा कर सकते हैं, बस उन लोगों को एक तरह से इन परीक्षणों को नाम देना आसान है। इस सोच की शैली का समर्थन करता है)।

रूबी के पास स्वचालन परीक्षण के लिए ककड़ी और निचले स्तर के एपीआई परीक्षण के लिए rspec है

जावास्क्रिप्ट में चमेली और qUnit है।

डॉट डॉट डॉट


.NET के लिए ककड़ी क्लोन / विकल्प भी हैं: इस StackOverflow सवाल
Carson63000

@ Carson63000 हाँ, वहाँ हैं, लेकिन मैं व्यक्तिगत रूप से एक बिंदु के ज्यादा नहीं देखते हैं। रूबी आयरनरुबी में एक .Net भाषा है। बस एक IronRuby प्रोजेक्ट बनाएं और वास्तविक ककड़ी का उपयोग करें।
जॉर्ज मौयर

मुझे BDD से प्यार है और StoryQ का उपयोग करता हूं। यह बताना न भूलें कि कहानी को / कब / तब के साथ कहानी में विस्तारित किया जा सकता है। यह देखते हुए कि कुछ सामान हुआ है और जब मैं ऐसा करता हूं तो मुझे यह और यह उम्मीद है। TechEd पर इस पर डेविड स्टार की बात की जाँच करें channel9.msdn.com/Events/TechEd/NorthAmerica/2010/DPR302 और भी StoryQ पर एक नज़र यदि आप .net का उपयोग कर रहे है storyq.codeplex.com
Bronumski

3

मैं इस विचार से अपने पहले परीक्षण के लिए कैसे जाऊं? मुझे शुरू करने से पहले कितना तय किया जाना चाहिए, और परीक्षण शुरू करने के बाद मुझे कितना पता चलेगा?

अपने आवेदन को काटने के आकार की कहानियों में तोड़ दें। ("एक उपयोगकर्ता के रूप में, मैं एक आइकन पर डबल क्लिक करना चाहता हूं और प्रोग्राम लॉन्च करना चाहता हूं।" या "एक उपयोगकर्ता के रूप में, मैं अपना ब्राउज़र खोलना चाहता हूं और कार्यक्रम में जाना चाहता हूं। जो भी हो।"

फिर कहानी को कुछ कार्यों में तोड़ दें। (जैसे ग्रहण में एक प्रोजेक्ट बनाएं, एक कोड रिपॉजिटरी सेट करें) जब आपको एक कोडिंग कार्य करने के लिए मिलता है, तो अपना पहला परीक्षण लिखें।

जब मैं किसी पाठ फ़ाइल या डेटाबेस में डेटा संग्रहीत करने के लिए निर्णय लेता हूं, तो मैं क्या करूं?

यदि आप अनिश्चित हैं, तो जो कभी आसान लगता है उसे उठाएं और ऐसा करें। (शायद पाठ फ़ाइल) यदि आपको लगता है कि आपने गलती की है, तो रिफ्लेक्टर। यदि आपके परीक्षण अच्छी तरह से संरचित हैं, तो आपको बैक एंड परिवर्तन करने और अनपेक्षित दुष्प्रभावों को पकड़ने में सक्षम होना चाहिए जो फसल को प्रभावित करते हैं।


3

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

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


0

पहली इकाई परीक्षण से पहले आप सोचते हैं कि आप क्या करना चाहते हैं और फिर सोचें कि आप इसका परीक्षण कैसे करेंगे। फिर उस परीक्षण को लिखें, इसे विफल देखें और इसे पास करने के लिए कुछ कोड लागू करें।

कुल्ला, दोहराना आदि।

मेरे लिए, यह इस बारे में सोच रही है कि आप इसे कैसे परीक्षण करेंगे कि यह महत्वपूर्ण है और यह वही है जो आपके डिजाइन को चला सकता है।

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