एक "रिलीज जल्दी रिलीज" पर्यावरण में यूनिट परीक्षण की प्रासंगिकता क्या है?


10

पिछले एक साल में, मैंने अपनी टीम को रिलीज़-अर्ली-रिलीज़-अक्‍सर मोड ऑफ डेवलपमेंट (AKA: Rapid Application Development, फुर्तीली नहीं) की ओर प्रेरित किया है। जिस तरीके से हम बिल्ड को बंद करते हैं, उसके बारे में अधिक जानकारी के लिए, मेरा जवाब यहां देखें: आरएडी पर्यावरण में रिलीज की गुणवत्ता में सुधार के लिए एक सरल तरीके

जब हमने आरएडी को अपनाया, लोग काफी स्वतंत्र थे और वे पहले इकाई परीक्षण कर रहे थे; एकीकृत परीक्षण प्रक्रिया में बहुत बाद में हुआ। यह बहुत औपचारिक प्रवर्तन के बिना उनके लिए एक प्राकृतिक प्रक्रिया थी। अब स्थिति बिलकुल अलग है:

  1. पूरे मंच को अच्छी तरह से स्थापित बिल्ड / रिलीज के साथ एकीकृत किया गया है जो किसी भी हॉट स्पॉट के बिना काम कर रहे क्लाइंट-साइड।

  2. नई कार्यक्षमता आवश्यकताएं आती रहती हैं और जैसे-जैसे हम आगे बढ़ते हैं, हम उन्हें बढ़ाते जाते हैं।

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

  4. सिस्टम के कई हिस्सों में नए एल्गोरिदम और अनुसंधान इनपुट शामिल हैं इसलिए चुनौतियां (और परीक्षण के लिए तंत्र) हमेशा सही ढंग से पूर्वाभास नहीं होती हैं, जैसे कि अच्छी तरह से परिभाषित सॉफ्टवेयर में सुविधा परीक्षण।

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

क्या इकाई परीक्षण अपेक्षाकृत परिपक्व प्रणाली में उपयोगी हैं? क्या हमें इकाइयों की परिपक्वता के आधार पर कम से कम परीक्षण गुंजाइश तौलना चाहिए? क्या यूनिट टेस्टिंग से विकास की गति धीमी हो जाएगी? क्या एक अलग तरीके से इकाई परीक्षण का मूल्यांकन करने की आवश्यकता है?

रिलीज-अर्ली-रिलीज-अक्सर-माहौल में एक परिपक्व मंच के लिए परीक्षण की सर्वोत्तम प्रथाएं क्या हैं?


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

जवाबों:


15

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

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

एक और बात यह है कि जब कोई प्रणाली बढ़ती है, तो अतिरिक्त एकीकरण परीक्षणों की अधिक से अधिक आवश्यकता होगी - लेकिन इसका मतलब यह नहीं है कि आपको कम इकाई परीक्षणों की आवश्यकता होगी।

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

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


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

@ स्लीपरस्मिथ: हाँ, और इस तरह की सरल इकाई परीक्षणों को लिखना संभव बनाने के लिए, डीआई और आईएसपी को लागू करना एक अच्छा विचार हो सकता है - ठीक यही मैंने ऊपर लिखा है। क्षमा करें यदि मैं उस पर पर्याप्त स्पष्ट नहीं था।
डॉक्टर ब्राउन

4

आपको परीक्षण संचालित विकास पर विचार करना चाहिए, जहां परीक्षणों को पहले डिज़ाइन किया गया है और यह वर्णन किया गया है कि लिखित होने पर नया कोड कैसे काम करेगा। फिर आप टेस्ट पास करते हैं।

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

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


3

जैसा कि डॉक्टर ब्राउन और थोरबजर्न रेवन एंडरसन ने सुझाव दिया है , एक रिलीज़ अर्ली रिलीज़ अक्सर पर्यावरण को अच्छी इकाई परीक्षण और लंबी अवधि के चक्र के साथ एक से अधिक संचालित विकास का परीक्षण करने से भी अधिक लाभ हो सकता है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.