टटलकिंगवालनट पूछता है:
यूनिट परीक्षण के मूल्य की टीम पर संदेह करने वाले डेवलपर्स को समझाने के लिए कुछ अच्छे तरीके क्या हैं?
यहां हर कोई नीले कारणों से ढेरों कारणों से ढेर हो रहा है, क्यों यूनिट परीक्षण अच्छा है। हालाँकि, मुझे लगता है कि अक्सर किसी को किसी बात को समझाने का सबसे अच्छा तरीका है कि उसके तर्क को सुने और बिंदु से उसे संबोधित करें। यदि आप उनकी चिंताओं को सुनते हैं और उनकी मदद करते हैं, तो आप हर एक को संबोधित कर सकते हैं और शायद उन्हें अपने दृष्टिकोण में बदल सकते हैं (या बहुत कम से कम, उन्हें बिना पैर के खड़े रहने के लिए छोड़ दें)। कौन जाने? शायद वे आपको समझाएंगे कि यूनिट परीक्षण आपकी स्थिति के लिए उपयुक्त क्यों नहीं हैं। संभावना नहीं है, लेकिन संभव है। शायद अगर आप इकाई परीक्षणों के खिलाफ अपने तर्क देते हैं, तो हम प्रतिवादों को पहचानने में मदद कर सकते हैं।
तर्क के दोनों पक्षों को सुनना और समझना महत्वपूर्ण है। यदि आप लोगों के सरोकारों की परवाह किए बिना बहुत उत्सुकता से इकाई परीक्षणों को अपनाने की कोशिश करते हैं, तो आप एक धार्मिक युद्ध (और शायद वास्तव में बेकार इकाई) को समाप्त कर देंगे। यदि आप इसे धीरे-धीरे अपनाते हैं और इसे लागू करने से शुरू करते हैं, जहां आपको कम से कम लागत के लिए सबसे अधिक लाभ दिखाई देगा, तो आप यूनिट परीक्षणों के मूल्य को प्रदर्शित करने में सक्षम हो सकते हैं और लोगों को समझाने का एक बेहतर मौका हो सकता है। मुझे लगता है कि यह उतना आसान नहीं है जितना कि यह लगता है - यह आमतौर पर एक ठोस तर्क को तैयार करने के लिए कुछ समय और सावधानीपूर्वक मैट्रिक्स की आवश्यकता होती है।
यूनिट परीक्षण एक उपकरण है, किसी भी अन्य की तरह, और इसे इस तरह से लागू किया जाना चाहिए कि लाभ (कीड़े को पकड़ना) लागतों को पछाड़ दें (उन्हें लिखने का प्रयास)। यदि उनका उपयोग नहीं किया जाता है, तो उन्हें समझ में नहीं आता है और याद रखें कि वे आपके शस्त्रागार का केवल एक हिस्सा हैं (जैसे निरीक्षण, अभिकथन, कोड विश्लेषक, औपचारिक तरीके, आदि)। मैं अपने डेवलपर्स को यह बताता हूं:
वे एक विधि के लिए एक परीक्षण लिखना छोड़ सकते हैं यदि उनके पास एक अच्छा तर्क है कि यह क्यों आवश्यक नहीं है (जैसे कि इसके लायक होना बहुत आसान है या इसके लायक होने के लिए बहुत कठिन है) और कैसे विधि अन्यथा सत्यापित होगी (उदाहरण निरीक्षण, अभिकथन) , औपचारिक तरीके, इंटरैक्टिव / एकीकरण परीक्षण)। उन्हें यह विचार करने की आवश्यकता है कि निरीक्षण और औपचारिक साक्ष्य जैसे कुछ सत्यापन समय में एक बिंदु पर किए जाते हैं और फिर हर बार उत्पादन कोड में बदलाव की आवश्यकता होती है, जबकि इकाई परीक्षण और अभिकथनों का उपयोग प्रतिगमन परीक्षण के रूप में किया जा सकता है (एक बार लिखा और उसके बाद बार-बार निष्पादित किया जाता है) )। कभी-कभी मैं उनसे सहमत होता हूं, लेकिन अधिक बार मैं इस बारे में बहस करूंगा कि क्या एक विधि वास्तव में बहुत सरल है या इकाई परीक्षण के लिए बहुत मुश्किल है।
यदि कोई डेवलपर यह तर्क देता है कि एक विधि विफल होना बहुत आसान है, तो क्या इसके लिए एक सरल 5-लाइन यूनिट टेस्ट लिखने के लिए आवश्यक 60 सेकंड लेने लायक नहीं है? कोड की ये 5 लाइनें हर रात (आप रात का निर्माण, सही?) अगले साल या उससे अधिक के लिए चलाएंगे और प्रयास के लायक होगा यदि एक बार भी यह एक समस्या को पकड़ने के लिए होता है जिसमें 15 मिनट या अधिक समय लग सकता है और डीबग करें। इसके अलावा, आसान यूनिट टेस्ट लिखने से यूनिट टेस्ट की गिनती बढ़ जाती है, जिससे डेवलपर अच्छा दिखता है।
दूसरी ओर, यदि कोई डेवलपर यह तर्क देता है कि एक विधि इकाई परीक्षण के लिए बहुत मुश्किल है (महत्वपूर्ण प्रयास के लायक नहीं है), तो शायद यह एक अच्छा संकेत है कि विधि को आसान भागों का परीक्षण करने के लिए विभाजित या फिर से विभाजित करने की आवश्यकता है। आमतौर पर, ये ऐसी विधियाँ हैं जो एकल परिणाम, वर्तमान समय या बाहरी संसाधनों जैसे डेटाबेस परिणाम सेट जैसे असामान्य संसाधनों पर निर्भर करती हैं। इन विधियों को आम तौर पर संसाधन प्राप्त करने वाली विधि में बदला जाना चाहिए (जैसे कॉल गेटटाइम) () और एक विधि जो संसाधन को तर्क के रूप में लेती है (उदाहरण के लिए टाइमस्टैम्प को पैरामीटर के रूप में लेती है)। मैंने उन्हें उस विधि का परीक्षण करना छोड़ दिया जो संसाधन को पुनः प्राप्त करता है और वे उस विधि के लिए एक इकाई परीक्षण लिखते हैं जो अब संसाधन को तर्क के रूप में लेता है। आमतौर पर, यह इकाई परीक्षण को बहुत सरल बनाता है और इसलिए लिखने के लिए सार्थक है।
डेवलपर को "रेत में एक रेखा" खींचने की आवश्यकता है कि उनकी इकाई परीक्षण कितने व्यापक होने चाहिए। बाद में विकास में, जब भी हमें कोई बग मिलता है, तो उन्हें यह निर्धारित करना चाहिए कि क्या अधिक व्यापक इकाई परीक्षणों ने समस्या को पकड़ा होगा। यदि ऐसा है और अगर इस तरह के कीड़े बार-बार फसल लेते हैं, तो उन्हें भविष्य में और अधिक व्यापक इकाई परीक्षण लिखने (वर्तमान बग के लिए इकाई परीक्षण जोड़ने या विस्तार करने के साथ शुरू) की ओर "लाइन" स्थानांतरित करने की आवश्यकता है। उन्हें सही संतुलन खोजने की जरूरत है।
इसकी महत्वपूर्ण इकाई परीक्षण का एहसास करने के लिए एक चांदी की गोली नहीं कर रहे हैं और वहाँ है बहुत ज्यादा इकाई परीक्षण के रूप में ऐसी बात। मेरे कार्यस्थल पर, जब भी हम सीखे गए पाठों को करते हैं, तो मैं अनिवार्य रूप से "हमें और अधिक यूनिट परीक्षण लिखने की जरूरत है" सुना है। प्रबंधन समझौते में सिर हिलाता है क्योंकि इसके सिर में धमाका हुआ है कि "यूनिट परीक्षण" == "अच्छा"।
हालांकि, हमें "अधिक इकाई परीक्षणों" के प्रभाव को समझने की आवश्यकता है। एक डेवलपर एक सप्ताह में केवल कोड की ~ एन लाइनें लिख सकता है और आपको यह पता लगाने की आवश्यकता है कि उत्पादन कोड बनाम उत्पादन कोड में उस कोड का कितना प्रतिशत होना चाहिए। एक लैक्स वर्कप्लेस में यूनिट परीक्षणों के रूप में कोड का 10% और उत्पादन कोड के रूप में 90% कोड हो सकता है, जिसके परिणामस्वरूप बहुत सारे (बहुत छोटी गाड़ी) सुविधाओं के साथ उत्पाद (एमएस वर्ड लगता है)। दूसरी ओर, 90% इकाई परीक्षणों और 10% उत्पादन कोड के साथ एक सख्त दुकान में बहुत कम सुविधाओं के साथ एक रॉक ठोस उत्पाद होगा (सोचें "vi")। आप बाद वाले उत्पाद के दुर्घटनाग्रस्त होने के बारे में रिपोर्ट कभी नहीं सुन सकते हैं, लेकिन यह संभव है कि उत्पाद के साथ बहुत अधिक बिक्री न हो और कोड की गुणवत्ता के साथ ऐसा करना पड़े।
इससे भी बदतर, शायद सॉफ्टवेयर विकास में एकमात्र निश्चितता यह है कि "परिवर्तन अपरिहार्य है"। मान लें कि सख्त दुकान (90% इकाई परीक्षण / 10% उत्पादन कोड) एक ऐसा उत्पाद बनाती है जिसमें ठीक 2 विशेषताएं हैं (उत्पादन कोड == 1 सुविधा का 5% मानकर)। यदि ग्राहक साथ आता है और 1 सुविधाएँ बदलता है, तो वह 50% कोड (45% इकाई परीक्षण और 5% उत्पादन कोड) को बदल देता है। लैक्स शॉप (10% यूनिट टेस्ट / 90% प्रोडक्शन कोड) में 18 विशेषताओं वाला एक उत्पाद है, जिसमें से कोई भी काम बहुत अच्छा नहीं है। उनका ग्राहक उनकी विशेषताओं में से 4 के लिए आवश्यकताओं को पूरी तरह से बदल देता है। भले ही परिवर्तन 4 गुना बड़ा हो, कोड आधार का केवल आधा हिस्सा ट्रैश हो जाता है (~ 25% = ~ 4.4% यूनिट परीक्षण + 20% उत्पादन कोड)।
मेरा कहना है कि आपको यह संवाद करना होगा कि आप समझें कि बहुत कम और बहुत अधिक इकाई परीक्षण के बीच संतुलन - अनिवार्य रूप से आपने इस मुद्दे के दोनों पक्षों के माध्यम से सोचा है। यदि आप अपने साथियों और / या अपने प्रबंधन को मना सकते हैं, तो आप विश्वसनीयता हासिल करते हैं और शायद उन्हें जीतने का बेहतर मौका है।