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