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