हालांकि, मैं सभी यूनिट परीक्षण के लिए हूं, मुझे कभी-कभी आश्चर्य होता है कि क्या परीक्षण का यह रूप पहले विकास वास्तव में फायदेमंद है ...
इस तरह के छोटे, तुच्छ परीक्षण आपके कोडबस के लिए "कोयला में कैनरी" हो सकते हैं, इससे पहले कि बहुत देर हो जाए खतरे से सावधान। तुच्छ परीक्षण आसपास रखने के लिए उपयोगी होते हैं क्योंकि वे आपको अंतःक्रियाएं प्राप्त करने में मदद करते हैं।
उदाहरण के लिए, एक एपीआई परीक्षण के बारे में सोचें, जो आपके द्वारा अपरिचित एपीआई का उपयोग करने के तरीके की जांच करने के लिए किया गया हो। यदि उस परीक्षण की कोई प्रासंगिकता है जो आप उस कोड में कर रहे हैं जो एपीआई का उपयोग करता है "असली के लिए" तो यह उस परीक्षण को बनाए रखने के लिए उपयोगी है। जब एपीआई एक नया संस्करण जारी करता है और आपको अपग्रेड करने की आवश्यकता होती है। अब आपके पास इस बारे में आपकी धारणाएं हैं कि आप कैसे उम्मीद करते हैं कि एपीआई एक निष्पादन योग्य प्रारूप में रिकॉर्ड किए गए व्यवहार को रिकॉर्ड करने के लिए उपयोग कर सकते हैं।
... [I] ना वास्तविक प्रक्रिया, आपके पास अपने कोड (व्यवसाय अनुरोध, आवश्यकताएँ दस्तावेज़, वास्तुकला दस्तावेज़) के ऊपर ३-४ परतें होती हैं, जहाँ वास्तविक परिभाषित व्यापार नियम (डिस्काउंट मूल्य मूल्य - छूट) गलत हो सकता है। यदि ऐसी स्थिति है, तो आपके यूनिट टेस्ट का मतलब आपके लिए कुछ भी नहीं है।
यदि आप परीक्षण लिखे बिना वर्षों से कोडिंग कर रहे हैं तो यह आपके लिए तुरंत स्पष्ट नहीं हो सकता है कि कोई मूल्य है। लेकिन अगर आप इस मानसिकता के हैं कि काम करने का सबसे अच्छा तरीका है "जल्दी रिलीज़ होना, अक्सर रिलीज़ होना" या "फुर्तीली" जिसमें आप तेज़ी से / लगातार तैनात करने की क्षमता चाहते हैं, तो आपके परीक्षण का निश्चित रूप से कुछ मतलब है। ऐसा करने का एकमात्र तरीका एक परीक्षण के साथ कोड में किए गए हर परिवर्तन को वैध बनाना है। कोई फर्क नहीं पड़ता कि परीक्षण कितना छोटा है, एक बार आपके पास एक ग्रीन टेस्ट सूट है जिसे आप सैद्धांतिक रूप से तैनात करने के लिए ठीक हैं। "निरंतर उत्पादन" और "सतत बीटा" भी देखें।
आपको इस मानसिकता के होने के लिए "पहले परीक्षण" करने की आवश्यकता नहीं है, लेकिन यह आमतौर पर वहां पहुंचने का सबसे कुशल तरीका है। जब आप टीडीडी करते हैं, तो आप अपने आप को दो से तीन मिनट के रेड ग्रीन रिफ्लेक्टर चक्र में बंद कर लेते हैं। किसी भी बिंदु पर आप रुकने और छोड़ने में सक्षम नहीं हैं और आपके हाथों पर पूरी तरह से गड़बड़ है जो कि डिबग करने में एक घंटा लगेगा और वापस एक साथ रख देगा।
इसके अतिरिक्त, आपकी इकाई परीक्षण विफलता का एक और बिंदु है ...
एक सफल परीक्षण वह है जो सिस्टम में विफलता को प्रदर्शित करता है। एक असफल परीक्षा आपको परीक्षण के तर्क में त्रुटि या आपके सिस्टम के तर्क में सतर्क कर देगी। आपके परीक्षणों का लक्ष्य आपके कोड को तोड़ना या एक परिदृश्य कार्य को सिद्ध करना है।
यदि आप कोड के बाद परीक्षण लिख रहे हैं , तो आप एक परीक्षण लिखने का जोखिम चलाते हैं जो "बुरा" है क्योंकि यह देखने के लिए कि आपका परीक्षण वास्तव में काम करता है, आपको इसे टूटे और काम करने दोनों को देखने की आवश्यकता है। जब आप कोड के बाद परीक्षण लिख रहे हैं, तो इसका मतलब है कि आपको "ट्रैप को स्प्रिंग" करना होगा और परीक्षण को विफल देखने के लिए कोड में बग को प्रस्तुत करना होगा। अधिकांश डेवलपर्स न केवल इस बारे में असहज हैं, बल्कि तर्क देंगे कि यह समय की बर्बादी है।
हम यहाँ क्या हासिल करते हैं?
इस तरह से चीजें करने का एक फायदा जरूर है। माइकल फेयर्स "लीगेसी कोड" को "अनटाइटेड कोड" के रूप में परिभाषित करता है। जब आप यह तरीका अपनाते हैं, तो आप अपने कोडबेस में किए गए हर बदलाव को वैध कर देते हैं। यह परीक्षणों का उपयोग न करने की तुलना में अधिक कठोर है, लेकिन जब बड़े कोडबेस को बनाए रखने की बात आती है, तो यह अपने लिए भुगतान करता है।
पंखों की बात करते हुए, दो महान संसाधन हैं जिन्हें आपको इस संबंध में जांचना चाहिए:
ये दोनों समझाते हैं कि इस प्रकार की प्रथाओं और विषयों को उन परियोजनाओं में कैसे काम किया जाए जो "ग्रीनफील्ड" नहीं हैं। वे कसकर युग्मित घटकों, हार्ड वायर्ड निर्भरता, और उन चीजों के आसपास परीक्षण लिखने की तकनीक प्रदान करते हैं, जिन पर आपका नियंत्रण जरूरी नहीं है। यह "सीम" खोजने और उन लोगों के चारों ओर परीक्षण करने के बारे में है।
[I] f छूट की कीमत गलत है, परीक्षण टीम अभी भी इस मुद्दे को खोजेगी, यूनिट परीक्षण ने किसी भी काम को कैसे बचाया?
इन जैसी आदतें निवेश की तरह हैं। रिटर्न तत्काल नहीं हैं; वे समय के साथ निर्माण करते हैं। परीक्षण नहीं करने का विकल्प अनिवार्य रूप से ऋणों को पकड़ने में सक्षम नहीं होने पर ले रहा है, एकीकरण त्रुटियों के डर के बिना कोड परिचय, या डिजाइन निर्णय को ड्राइव करता है। सौंदर्य आप अपने कोडबेस में पेश किए गए हर बदलाव को वैधता देते हैं।
मुझे यहां क्या समझ नहीं आ रहा है? कृपया मुझे TDD से प्यार करना सिखाएं, क्योंकि मुझे अब तक इसे उपयोगी मानने में मुश्किल समय आ रहा है। मैं भी चाहता हूं, क्योंकि मैं प्रगतिशील रहना चाहता हूं, लेकिन यह सिर्फ मेरे लिए मायने नहीं रखता है।
मैं इसे एक पेशेवर जिम्मेदारी के रूप में देखता हूं। यह प्रयास करने के लिए एक आदर्श है। लेकिन इसका पालन करना बहुत कठिन है और थकाऊ है। यदि आप इसकी परवाह करते हैं, और महसूस करते हैं कि आपको ऐसे कोड का उत्पादन नहीं करना चाहिए जिसका परीक्षण नहीं किया गया है, तो आप अच्छे परीक्षण की आदतों को सीखने की इच्छा शक्ति पा सकेंगे। एक चीज जो अब मैं बहुत कुछ करता हूं (जैसा कि अन्य करते हैं) अपने आप को एक घंटे के लिए बिना किसी परीक्षण के कोड लिखने के लिए एक घंटे का समय देता है, फिर इसे फेंकने का अनुशासन है। यह बेकार लग सकता है, लेकिन यह वास्तव में नहीं है। ऐसा नहीं है कि व्यायाम के लिए कंपनी की भौतिक सामग्रियों का खर्च आता है। इसने मुझे समस्या को समझने और कोड को इस तरह से लिखने में मदद की कि यह उच्च गुणवत्ता और परीक्षण योग्य दोनों है।
मेरी सलाह अंत में यह होगी कि यदि आप वास्तव में इस पर अच्छा बनने की इच्छा नहीं रखते हैं, तो ऐसा बिल्कुल न करें। खराब परीक्षण जो बनाए नहीं रखे जाते हैं, अच्छा प्रदर्शन नहीं करते हैं, आदि किसी भी परीक्षण के नहीं होने से भी बदतर हो सकते हैं। अपने दम पर सीखना मुश्किल है, और आप शायद इसे पसंद नहीं करेंगे, लेकिन यह सीखना असंभव है, अगर आपको इसे करने की इच्छा नहीं है, या इसमें पर्याप्त मूल्य नहीं देख सकते हैं समय निवेश का वारंट।
एक युगल लोग उल्लेख करते हैं कि परीक्षण कल्पना को लागू करने में मदद करता है। यह मेरा अनुभव रहा है कि कल्पना गलत भी रही है, अधिक बार नहीं ...
एक डेवलपर का कीबोर्ड वह जगह है जहां रबर सड़क से मिलता है। यदि युक्ति गलत है और आप उस पर ध्वज नहीं बढ़ाते हैं, तो इसकी अत्यधिक संभावना है कि आपको इसके लिए दोषी ठहराया जाएगा। या कम से कम आपका कोड होगा। परीक्षण में शामिल अनुशासन और कठोरता का पालन करना मुश्किल है। यह बिल्कुल आसान नहीं है। इसमें अभ्यास, बहुत कुछ सीखने और बहुत सारी गलतियाँ होती हैं। लेकिन अंत में यह भुगतान करता है। जल्दी-जल्दी बदलने वाली परियोजना पर, यह एकमात्र तरीका है जिससे आप रात को सो सकते हैं, भले ही यह आपको धीमा कर दे।
यहाँ सोचने वाली एक और बात यह है कि तकनीकें जो मौलिक रूप से एक जैसी हैं, परीक्षण अतीत में काम करने के लिए सिद्ध हुई हैं: "साफ कमरा" और "अनुबंध द्वारा डिजाइन" दोनों एक ही प्रकार के "मेटा" -कोड का निर्माण करते हैं। परीक्षण करते हैं, और अलग-अलग बिंदुओं पर लागू करते हैं। इन तकनीकों में से कोई भी चांदी की गोलियां नहीं हैं, और कठोरता आपको उन विशेषताओं के दायरे में खर्च करने जा रही है जो आप समय-समय पर बाजार में पहुंचा सकते हैं। लेकिन इसके बारे में ऐसा नहीं है। यह आप जो करते हैं उसे बनाए रखने में सक्षम होने के बारे में है। और यह अधिकांश परियोजनाओं के लिए बहुत महत्वपूर्ण है।