मैंने यूनिट परीक्षणों को कोड बेस के लिए पेश किया है जो पहले नहीं था। आखिरी बड़ी परियोजना जिसमें मैं शामिल था, जहां मैंने ऐसा किया था, जब मैं टीम में आया तो उत्पाद पहले से ही शून्य इकाई परीक्षणों के साथ उत्पादन में था। जब मैंने छोड़ा - 2 साल बाद - हमारे पास 4500+ या तो परीक्षण थे जो 230 बेस + प्रोडक्शन एलओसी (रियल टाइम फाइनेंशियल विन-फॉर्म एप्लीकेशन) के साथ कोड बेस में 33% कोड कवरेज के लिए उपज थे। यह कम लग सकता है, लेकिन परिणाम कोड गुणवत्ता और दोष दर में एक महत्वपूर्ण सुधार था - साथ ही मनोबल और लाभप्रदता में सुधार हुआ।
यह तब किया जा सकता है जब आपके पास शामिल दलों से सटीक समझ और प्रतिबद्धता दोनों होती है।
सबसे पहले, यह समझना महत्वपूर्ण है कि इकाई परीक्षण अपने आप में एक कौशल है। आप "पारंपरिक" मानकों द्वारा एक बहुत ही उत्पादक प्रोग्रामर हो सकते हैं और फिर भी एक बड़े प्रोजेक्ट में एक तरह से यूनिट टेस्ट लिखने के लिए संघर्ष कर सकते हैं।
इसके अलावा, और विशेष रूप से आपकी स्थिति के लिए, एक मौजूदा कोड आधार पर इकाई परीक्षण जोड़ना जो कोई परीक्षण नहीं है, यह भी अपने आप में एक विशेष कौशल है। जब तक आप या आपकी टीम में किसी को मौजूदा कोड आधार पर यूनिट परीक्षण शुरू करने का सफल अनुभव नहीं है, मैं कहूंगा कि पंख की किताब पढ़ना एक आवश्यकता है (वैकल्पिक या दृढ़ता से अनुशंसित नहीं)।
यूनिट कोड के परीक्षण में परिवर्तन करना, लोगों और कौशलों में उतना ही निवेश है जितना कि कोड बेस की गुणवत्ता में। इसे समझना मानसिकता और प्रबंधन की उम्मीदों के लिहाज से बहुत महत्वपूर्ण है।
अब, अपनी टिप्पणियों और सवालों के लिए:
हालाँकि, मुझे चिंता है कि मैं बड़ी तस्वीर को गायब कर दूंगा और लापता मौलिक परीक्षणों को समाप्त कर दूंगा, अगर मुझे इसमें शामिल होने से टीडीडी का उपयोग करना होता।
संक्षिप्त उत्तर: हां, आप परीक्षण से चूक जाएंगे और हाँ वे शुरू में यह नहीं देख सकते हैं कि उनके पास हरे क्षेत्र की स्थिति में क्या होगा।
गहरा स्तर का उत्तर यह है: इससे कोई फर्क नहीं पड़ता। आप बिना किसी परीक्षण के शुरू करते हैं। जैसे ही आप जाएं, परीक्षण और रिफ्लेक्टर जोड़ना शुरू करें। जैसे-जैसे कौशल स्तर बेहतर होता है, अपने प्रोजेक्ट में जोड़े गए सभी नए लिखित कोड के लिए बार उठाना शुरू करें। सुधार करते रहें आदि ...
अब, यहाँ की पंक्तियों के बीच में पढ़ने से मुझे यह आभास होता है कि यह "कार्रवाई न करने के बहाने के रूप में पूर्णता" की मानसिकता से आ रही है। एक बेहतर मानसिकता आत्म विश्वास पर ध्यान केंद्रित करना है। तो जैसा कि आप जानते हैं कि यह कैसे करना है, यह अभी तक पता नहीं चलेगा कि आप कैसे जाते हैं और रिक्त स्थान को भरते हैं। इसलिए, चिंता करने का कोई कारण नहीं है।
फिर से, एक कौशल। आप शून्य परीक्षणों से टीडीडी-पूर्णता में एक "प्रक्रिया" या "कदम से कदम" एक रैखिक फैशन में पुस्तक दृष्टिकोण को नहीं जा सकते। यह एक प्रक्रिया होगी। आपकी अपेक्षाएँ क्रमिक और वृद्धिशील प्रगति और सुधार करने के लिए होनी चाहिए। कोई जादू की गोली नहीं है।
अच्छी खबर यह है कि जैसे-जैसे महीने (और यहां तक कि साल) बीतते हैं, आपका कोड धीरे-धीरे "उचित" अच्छी तरह से फैक्टरेड और अच्छी तरह से जांचा जाने वाला कोड बनने लगेगा।
अलग नोट के रूप में। आप पाएंगे कि एक पुराने कोड बेस में यूनिट टेस्ट शुरू करने की प्राथमिक बाधा सामंजस्य और अत्यधिक निर्भरता का अभाव है। इसलिए आपको संभवतः पता चलेगा कि सबसे महत्वपूर्ण कौशल यह बन जाएगा कि वास्तविक यूनिट टेस्ट लिखने के बजाय मौजूदा निर्भरता और डिकॉप्लिंग कोड को कैसे तोड़ना है।
क्या ऐसी कोई प्रक्रिया / कदम हैं जिनका पालन किया जाना चाहिए ताकि यह सुनिश्चित किया जा सके कि एक मौजूदा समाधान ठीक से परीक्षण की गई इकाई है या नहीं?
जब तक आपके पास पहले से ही है, एक बिल्ड सर्वर सेट करें और एक निरंतर एकीकरण बिल्ड सेट करें जो कोड कवरेज के साथ सभी यूनिट परीक्षणों सहित हर चेकइन पर चलता है।
अपने लोगों को प्रशिक्षित करें।
कहीं से शुरू करें और ग्राहक के दृष्टिकोण से प्रगति करते हुए परीक्षण जोड़ना शुरू करें (नीचे देखें)।
कोड कवरेज का उपयोग इस बात के मार्गदर्शक संदर्भ के रूप में करें कि आपके उत्पादन कोड का कितना आधार परीक्षण के तहत है।
बिल्ड टाइम हमेशा फास्ट होना चाहिए। यदि आपका निर्माण समय धीमा है, तो आपकी इकाई परीक्षण कौशल पिछड़ रहे हैं। धीमे परीक्षणों का पता लगाएं और उन्हें सुधारें (उत्पादन कोड को अलग करें और अलगाव में परीक्षण करें)। अच्छी तरह से लिखा है, आपको आसानी से कई हजारों यूनिट परीक्षण करने में सक्षम होना चाहिए और अभी भी 10 मिनट (~ 1-कुछ एमएस / टेस्ट) के तहत एक निर्माण पूरा करना एक अच्छा लेकिन बहुत ही कठिन दिशानिर्देश है, कुछ अपवादों को प्रतिबिंब आदि का उपयोग करके कोड की तरह लागू किया जा सकता है। )।
निरीक्षण और अनुकूलन।
मैं यह कैसे सुनिश्चित कर सकता हूं कि परीक्षण एक अच्छी गुणवत्ता के हैं और किसी भी परीक्षा का सिर्फ एक मामला नहीं परीक्षणों से बेहतर है।
आपका अपना निर्णय वास्तविकता का आपका प्राथमिक स्रोत होना चाहिए। कोई मीट्रिक नहीं है जो कौशल को बदल सकती है।
यदि आपके पास वह अनुभव या निर्णय नहीं है, तो किसी ऐसे व्यक्ति को अनुबंधित करने पर विचार करें।
दो मोटे माध्यमिक संकेतक कुल कोड कवरेज और बिल्ड गति हैं।
क्या यह एक मौजूदा समाधान के लिए प्रयास के लायक है जो उत्पादन में है?
हाँ। कस्टम निर्मित प्रणाली या समाधान पर खर्च किए गए धन का अधिकांश हिस्सा उत्पादन में लगाने के बाद खर्च किया जाता है। और गुणवत्ता, लोगों और कौशल में निवेश कभी भी शैली से बाहर नहीं होना चाहिए।
क्या इस परियोजना के लिए परीक्षण को अनदेखा करना और इसे भविष्य के संभावित पुन: लिखना में जोड़ना बेहतर होगा?
आपको न केवल लोगों और कौशल में निवेश, बल्कि सबसे महत्वपूर्ण स्वामित्व की कुल लागत और सिस्टम के अपेक्षित जीवन समय को ध्यान में रखना होगा।
मेरा व्यक्तिगत जवाब अधिकांश मामलों में "हां हां" होगा, क्योंकि मुझे पता है कि यह सिर्फ इतना बेहतर है, लेकिन मैं मानता हूं कि कुछ अपवाद हो सकते हैं।
क्या अधिक लाभकारी होगा; कुछ हफ़्ते जोड़ने परीक्षण या कुछ हफ़्ते जोड़ने कार्यक्षमता खर्च कर रहे हैं?
न तो। आपका दृष्टिकोण आपके कोड आधार पर परीक्षण जोड़ने का होना चाहिए जब आप कार्यक्षमता के मामले में प्रगति कर रहे हों।
फिर से, यह लोगों, कौशलों और कोड आधार की गुणवत्ता में निवेश है और इस तरह इसे समय की आवश्यकता होगी। टीम के सदस्यों को निर्भरता को तोड़ने, इकाई परीक्षण लिखने, नए आवास सीखने, अनुशासन और गुणवत्ता जागरूकता में सुधार करने, बेहतर डिज़ाइन सॉफ़्टवेयर के बारे में जानने आदि की आवश्यकता है, यह समझना महत्वपूर्ण है कि जब आप परीक्षण जोड़ना शुरू करते हैं तो आपकी टीम के सदस्यों की संभावना नहीं होती है। इन कौशलों का उस स्तर पर अभी तक सफल होने के लिए उस दृष्टिकोण के लिए होना आवश्यक है, इसलिए बहुत सारे परीक्षणों को जोड़ने के लिए हर समय खर्च करने के लिए प्रगति को रोकना बस काम नहीं करेगा।
इसके अलावा, किसी भी बड़े प्रोजेक्ट आकार के मौजूदा कोड बेस में यूनिट टेस्ट जोड़ना एक बड़ा उपक्रम है जिसमें प्रतिबद्धता और दृढ़ता की आवश्यकता होती है। आप कुछ मौलिक नहीं बदल सकते हैं, रास्ते में बहुत कुछ सीखने की उम्मीद करते हैं और अपने प्रायोजक से व्यावसायिक मूल्य के प्रवाह को रोककर किसी भी आरओआई की उम्मीद नहीं करने के लिए कहते हैं। यह उड़ नहीं जाएगा, और स्पष्ट रूप से यह नहीं होना चाहिए।
तीसरा, आप अपनी टीम में ध्वनि व्यवसाय फोकस मूल्यों को स्थापित करना चाहते हैं। गुणवत्ता कभी भी ग्राहक के खर्च पर नहीं आती है और आप गुणवत्ता के बिना तेजी से नहीं जा सकते। इसके अलावा, ग्राहक एक बदलती दुनिया में रह रहा है, और आपका काम उसके लिए अनुकूल बनाना आसान है। ग्राहक संरेखण को गुणवत्ता और व्यावसायिक मूल्य के प्रवाह दोनों की आवश्यकता होती है।
आप जो कर रहे हैं वह तकनीकी ऋण का भुगतान कर रहा है। और आप ऐसा कर रहे हैं, जबकि अभी भी अपने ग्राहकों की ज़रूरतों को पूरा करने की सेवा दे रहे हैं। धीरे-धीरे जैसे-जैसे कर्ज चुकता होता है, स्थिति में सुधार होता है, और ग्राहक की बेहतर सेवा करना और अधिक मूल्य पहुंचाना आसान हो जाता है। आदि। यह सकारात्मक गति वह है जिसे आपको लक्ष्य करना चाहिए क्योंकि यह स्थायी गति के सिद्धांतों को रेखांकित करता है और आपकी विकास टीम, आपके ग्राहक और आपके हितधारकों - दोनों के लिए नैतिकता को बनाए रखेगा और बेहतर बनाएगा।
उम्मीद है की वो मदद करदे