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