एक कंपनी में इकाई परीक्षण लागू करना जो ऐसा नहीं करता है


19

मेरी कंपनी के सॉफ्टवेयर विकास के प्रमुख ने "इस्तीफा दे दिया" (यानी निकाल दिया) और अब हम अपनी कंपनी में विकास प्रथाओं में सुधार कर रहे हैं। हम यहां से बनाए गए सभी सॉफ़्टवेयर में इकाई परीक्षण को लागू करना चाहते हैं।

डेवलपर्स से प्रतिक्रिया यह है:

  • हम जानते हैं कि परीक्षण मूल्यवान है
  • लेकिन, आप हमेशा ऐनक बदल रहे हैं इसलिए यह समय की बर्बादी होगी
  • और, आपकी समय सीमा इतनी कड़ी है कि हमारे पास वैसे भी परीक्षण के लिए पर्याप्त समय नहीं है

सीईओ से प्रतिक्रिया यह है:

  • मैं चाहूंगा कि हमारी कंपनी स्वचालित परीक्षण करे, लेकिन मुझे नहीं पता कि यह कैसे होता है
  • हमारे पास बड़े विनिर्देशन दस्तावेज़ लिखने का समय नहीं है

अब डेवलपर्स को चश्मा कैसे मिलता है? वर्ड ऑफ़ माउथ या पॉवरपॉइंट स्लाइड। जाहिर है, यह एक बड़ी समस्या है। मेरा सुझाव यह है:

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

ठीक है, अगर आप कभी ऐसी कंपनी में रहे हैं जो इस स्थिति में थी, तो आपने समस्या का समाधान कैसे किया? क्या यह दृष्टिकोण उचित लगता है?


1
मेरे लिए एक खो कारण की तरह लगता है। यूनिट परीक्षण आपको कल्पना के अनुरूप साबित करते हैं, लेकिन यह देवों के अनुसार लगातार बदल रहा है (इसलिए यह वास्तव में एक कल्पना नहीं है, लेकिन एक इच्छा-सूची का अधिक है) और आपका सीईओ है।
जेम्स

@ नाम - व्यवसाय में परिवर्तन की आवश्यकता है, इसलिए जितना कुछ भी सॉफ्टवेयर इंजीनियरिंग है वह परिवर्तन को प्रबंधित करने के बारे में है। मेरे लिए, सीईओ ने जो कहा वह पूरी तरह से उचित है।
मार्क बूथ

@MarkBooth परिवर्तन है और प्रवाह की एक निरंतर स्थिति है। प्रश्न को फिर से पढ़ें। यह कंपनी इसे ऊपर जाने के साथ बना रही है।
जेम्स

@James आप किसी भी वास्तविक आधार के बिना एक मूल्य निर्णय कर रहे हैं। सिर्फ इसलिए कि डेवलपर्स शिकायत का मतलब यह नहीं है कि व्यवसाय है बना रहा है क्योंकि यह साथ जाता है । हम में से कुछ अच्छे से आसानी से निर्दिष्ट, अनुसूचित वातावरण में काम नहीं करते हैं। मेरे पास हर सप्ताह नए उपयोगकर्ता हैं , जिनमें से सभी पिछले उपयोगकर्ताओं के लिए कुछ अलग करना चाहते हैं। वे अक्सर अपने आवंटित समय के माध्यम से आधे रास्ते की खोज करते हैं, कि सॉफ्टवेयर वह नहीं करता है जो उसे इसकी आवश्यकता है। हो सकता है कि मुझे शनिवार को किसी ऐसी चीज को लागू करने के लिए बुलाया न जाए, जिसे वे कभी नहीं जानते थे कि उनकी जरूरत है, लेकिन यह अक्सर चुस्त जगह में काम करने का हिस्सा है।
मार्क बूथ

जवाबों:


17

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

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

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

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

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


1
और पतन का कारण है ...?
पेरेट टॉरक

1
+1 "अधिक चुस्त दृष्टिकोण की ओर बढ़ने" के लिए, यह मुझे याद दिलाता है कि "पानी पर चलना और एक विनिर्देशन से सॉफ्टवेयर विकसित करना आसान है अगर दोनों जमे हुए हैं।" - एडवर्ड वी बेरार्ड
मार्क बूथ

@Peter Torok धन्यवाद ... क्या आपको प्रासंगिक स्वीकृति परीक्षण जानकारी के लिए कोई लिंक मिला है?
पीट सपोर्टमोनिका

@ ध्यान दें, आपकी परियोजनाओं के बारे में अधिक जानकारी के बिना अधिक विशिष्ट होना कठिन है, अनुप्रयोगों के प्रकार आदि। त्वरित googling कुछ आशाजनक लिंक दिखाता है।
Péter Török

8

संक्रमण बनाने के साथ मेरा अनुभव

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

हाल ही में मुझे टेस्ट ड्रिवेन डेवलपमेंट का उपयोग करने के लिए प्रोत्साहित किया गया है और मैंने पाया है कि यह एक पूर्ण रहस्योद्घाटन है। मुझे अब दृढ़ता से विश्वास हो गया है कि मेरे पास इकाई-परीक्षण लिखने का समय नहीं है

मेरे अनुभव में, आप क्लीनर इंटरफेस, अधिक फोकस्ड क्लास और मॉड्यूल और आम तौर पर अधिक ठोस , परीक्षण योग्य कोड के साथ समाप्त होने वाले परीक्षण को ध्यान में रखते हुए विकसित करते हैं ।

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

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

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

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

मेरी सलाह

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

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

इसके बजाय मैं छोटे स्काउट नियम का उपयोग करके छोटे से शुरू करने की सलाह दूंगा :

कैंपग्राउंड क्लीनर को हमेशा छोड़ दें, जितना आपने पाया।

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

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

आप जो बचना चाहते हैं वह डेवलपर प्रयास लेखन परीक्षणों का एक पूरा भार बर्बाद कर रहा है जो कभी भी आवश्यक नहीं होने वाले हैं ( YAGNI परीक्षण कोड के साथ-साथ उत्पादन कोड * 8 'के लिए भी काम करता है), कभी भी फिर से उपयोग नहीं किया जाएगा और लोगों को अवमूल्यन करना होगा। यह सोचकर कि परीक्षण आखिर बेकार हैं।

सारांश

छोटे से शुरू करें, वृद्धिशील रूप से परीक्षणों में विश्वास पैदा करें और जब वे आपकी टीम को सबसे अधिक फायदा पहुंचाते हैं, तो विकासशील परीक्षणों से व्यावसायिक मूल्य प्राप्त करें।


2

पहली बात यह है कि परीक्षण पर ध्यान केंद्रित नहीं है, लेकिन समग्र प्रक्रिया सही होने पर। कोई बात नहीं परीक्षण अगर आप पूरी तरह से समझ में नहीं आता है कि यह क्या करना है!

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

संभावना है, कि तुम सब वास्तव में जरूरत है। आप इकाई परीक्षण को आंतरिक रूप से जोड़ सकते हैं और प्रबंधन को यह कभी नहीं पता होना चाहिए कि डेवलपर्स इकाई परीक्षण कर रहे हैं। एक तरह से, यह तरीका होना चाहिए।

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

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


1

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

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

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