unit testing - टीडीडी बनाम यूनिट परीक्षण




unit-testing language-agnostic (12)

कोड लिखने के बाद मैं शायद यूनिट परीक्षण लिखने में टीम बनने में सफल हो सकता हूं (शायद कोड में जांच करने की आवश्यकता के रूप में) और मेरी धारणा यह है कि उन यूनिट परीक्षणों को लिखने में अभी भी मूल्य है।

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

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

मेरी कंपनी हमारे कोड का परीक्षण करने के लिए बिल्कुल नया है। मैं कुछ समय के लिए टीडीडी और यूनिट परीक्षण के बारे में पढ़ रहा हूं और उनके मूल्य से आश्वस्त हूं। मैंने हमारी टीम को यह समझाने का प्रयास किया है कि टीडीडी सीखने और हमारे दिमाग को बदलने के प्रयास के लायक है कि हम कैसे कार्यक्रम करते हैं लेकिन यह एक संघर्ष है। जो मुझे मेरे प्रश्न (ओं) में लाता है।

टीडीडी समुदाय में बहुत से लोग हैं जो परीक्षा लिखने के बारे में बहुत धार्मिक हैं और फिर कोड (और मैं उनके साथ हूं), लेकिन टीडीडी के साथ संघर्ष करने वाली एक टीम के लिए समझौता अभी भी अतिरिक्त लाभ लाता है?

कोड लिखने के बाद मैं शायद यूनिट परीक्षण लिखने में टीम बनने में सफल हो सकता हूं (शायद कोड में जांच करने की आवश्यकता के रूप में) और मेरी धारणा यह है कि उन यूनिट परीक्षणों को लिखने में अभी भी मूल्य है।

टीडीडी में एक संघर्षरत टीम लाने का सबसे अच्छा तरीका क्या है? और यह असफल रहा है कि कोड लिखने के बाद भी यह यूनिट परीक्षण लिखने लायक है?

संपादित करें

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

जाँच करना

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


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

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


इसमें कोई संदेह नहीं है कि परीक्षण (पहला, जबकि या यहां तक ​​कि बाद भी) आपके बेकन को बचाएगा, और आपकी उत्पादकता और आत्मविश्वास में सुधार करेगा। मैं इसे अपनाने की सलाह देते हैं!

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


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

लेखन परीक्षण पहले लिखने से पहले कोड को क्या करना चाहिए इस पर ध्यान केंद्रित करने के बारे में है। हां आपको यह भी करने का परीक्षण मिलता है और यह अच्छा है, लेकिन कुछ तर्क दे सकते हैं कि यह सबसे महत्वपूर्ण बिंदु भी नहीं है।

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


टीडीडी एक ऐसा उपकरण है जो डेवलपर्स बेहतर कोड बनाने के लिए उपयोग कर सकते हैं। मुझे लगता है कि टेस्टेबल कोड लिखने का अभ्यास कम से कम परीक्षण के रूप में मूल्यवान है। परीक्षण प्रयोजनों के लिए IUT (परीक्षण के तहत कार्यान्वयन) को अलग करना आपके कोड को डीकॉप्लिंग करने के पक्ष में पड़ता है।

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

मैं आमतौर पर स्वचालित स्वीकृति परीक्षण गैर-विचारणीय बना देता हूं, लेकिन डेवलपर्स को टीडीडी को अपनाने की अनुमति देता है क्योंकि यह उनके अनुरूप है। मेरे पास अनुभवी टीडीडीर्स ट्रेन / बाकी के सलाहकार हैं और कई महीनों की अवधि में उदाहरण के द्वारा उपयोगिता को साबित करते हैं।

यह एक सामाजिक / सांस्कृतिक परिवर्तन है क्योंकि यह एक तकनीकी है।


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

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


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

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

इस दृष्टिकोण ने अतीत में मेरे लिए कई बार काम किया है।


मैंने इसे कैलेंडर पर अभी पढ़ा है: "हर नियम, अपने चरम पर निष्पादित, हास्यास्पद या खतरनाक हो जाता है।" तो मेरा सुझाव इसके बारे में धार्मिक नहीं होना चाहिए। परीक्षण के समय आपकी टीम के प्रत्येक सदस्य को "सही" महसूस करने के बीच संतुलन मिलना चाहिए। इस तरह, आपकी टीम का हर सदस्य सबसे अधिक उत्पादक होगा (कहने के बजाय, "मुझे यह एसटीआई **** परीक्षा क्यों लिखनी है?")।

तो कुछ परीक्षण किसी से भी बेहतर नहीं होते हैं, कोड के बाद परीक्षण कुछ परीक्षणों से बेहतर होते हैं और कोड के बाद कोड बेहतर होता है। लेकिन प्रत्येक चरण की अपनी योग्यता होती है और आपको छोटे चरणों पर भी फहराया नहीं जाना चाहिए।


यदि टीम टीडीडी लागू करने में तेजी से बढ़ रही है, लेकिन वे पहले यूनिट टेस्ट नहीं बना रहे थे ... फिर उनके कोड लिखने के बाद यूनिट टेस्ट बनाकर उन्हें शुरू करें। कोड के बाद लिखे गए यूनिट परीक्षण भी यूनिट टेस्ट से बेहतर हैं!

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


यदि वे आईएमओ की तुलना में परीक्षण करने के लिए नए हैं तो परीक्षण कोड शुरू करें जो पहले से ही लिखा गया है और धीरे-धीरे परीक्षण लिखने के लिए स्नातक हैं। चूंकि कोई व्यक्ति टीडीडी सीखने और इकाई परीक्षण के लिए नया सीखने की कोशिश करता है, मुझे एक पूर्ण 180 करना मुश्किल लगता है और कोड से पहले परीक्षण लिखने के लिए मेरी मानसिकता बदलती है, इसलिए जिस दृष्टिकोण को मैं ले रहा हूं वह 50-50 मिश्रण है ; जब मुझे पता चलेगा कि कोड कैसा दिखाई देगा, तो मैं कोड लिखूंगा और फिर इसे सत्यापित करने के लिए एक टेस्ट लिखूंगा। ऐसी परिस्थितियों के लिए जहां मैं पूरी तरह से सुनिश्चित नहीं हूं, तो मैं एक परीक्षा के साथ शुरू करूंगा और पीछे की तरफ काम करूंगा।

यह भी याद रखें कि परीक्षण को पूरा करने के लिए कोड लिखने के बजाय, कोड सत्यापित करने के लिए परीक्षण लिखने में कुछ भी गलत नहीं है। यदि आपकी टीम टीडीडी मार्ग नहीं जाना चाहती है तो इसे लागू न करें।


कोड लिखने के बाद इकाई परीक्षणों को लिखना बिल्कुल सही है। यह सिर्फ इतना है कि कभी-कभी यह अक्सर कठिन होता है क्योंकि आपका कोड टेस्ट करने योग्य नहीं बनाया गया था, और आपने इसे अधिक जटिल बना दिया होगा।

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


यह मेरी नम्र राय में 100% परीक्षण कवरेज के साथ "कोड पहले, परीक्षण के बाद" और 100% पूर्ण पुस्तकालय, 100% परीक्षण कवरेज और टीडीडी के साथ 50% पूर्ण पुस्तकालय के साथ बेहतर है। थोड़ी देर के बाद, आपके साथी डेवलपर्स उम्मीद करेंगे कि वे इसे पढ़ने वाले सभी public कोड के लिए परीक्षण लिखने के लिए मनोरंजक और शैक्षणिक रूप से खोज लेंगे, इसलिए टीडीडी अपने विकास की दिनचर्या में अपना रास्ता छीन लेगा।





tdd