बीच में यूनिट टेस्ट लिखना


14

क्या यूनिट 100% परीक्षण कर रही है या सभी तरह के सौदे नहीं कर रही है?

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

क्या मुझे पिछली सभी कक्षाओं के लिए इकाई परीक्षण लिखने की आवश्यकता है और बिल्कुल भी परेशान नहीं करना है, या क्या मैं जो नया पाठ्यक्रम जोड़ रहा हूं उसके लिए केवल इकाई परीक्षण लिखना ठीक है?

जवाबों:


14

कोई भी इकाई परीक्षण किसी से बेहतर नहीं है। तो यह एक अखिल या कुछ भी नहीं सौदा है।

आपके मामले में, चूंकि टेस्ट ड्रिवेन डेवलपमेंट आदर्श नहीं रहा है - आप आश्चर्यचकित होंगे कि परीक्षण किसी काम के कैसे हैं।

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

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

एम्मा जैसे कोड कवरेज टूल में जोड़ा गया - और आप समग्र परीक्षण कवरेज में सुधार की लगातार निगरानी कर सकते हैं।


3

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

सभी नए कोड में यूनिट टेस्ट होना चाहिए।

सभी परिवर्तित कोड में यूनिट परीक्षण शामिल होना चाहिए।

जिस तरह से हमने पुराने कोड को सुरक्षित रूप से तोड़ने के बिना परीक्षणों को जोड़ा, मुख्य रूप से निम्नलिखित मूल दृष्टिकोण का उपयोग करना है:

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

  1. कोड को घेरने के लिए सिस्टम स्तर एकीकरण परीक्षण बनाने का प्रयास करें। इस स्तर पर परीक्षण की संयुक्त जटिलता के कारण, ये परीक्षण केवल बड़ी गलतियों को लेने के लिए "धूम्रपान" परीक्षण का निर्माण करेंगे।
  2. आपके द्वारा परिवर्तित किए जा रहे कोड का परीक्षण करने में सक्षम होने के लिए आवश्यक इंटरफेस का परिचय दें। बहुत छोटे परिवर्तनों के अनुक्रमों से युक्त रिफैक्टरिंग तकनीकों का उपयोग करें, जिनके बारे में आपको विश्वास है कि वे सही हैं। जहां संभव हो, टूल सपोर्ट का उपयोग करने का प्रयास करें। आप ऐसा कर सकते हैं, उदाहरण के लिए, जिस विधि को आप अपनी वस्तु पर बदल रहे हैं उसे आगे बढ़ाना / निकालना। अपने परिवर्तनों को नियमित रूप से जांचें ताकि आप वापस लौट सकें। नियमित रूप से सहकर्मी-समीक्षा करें कि आपने संशोधन नियंत्रण इतिहास के माध्यम से परिवर्तन कैसे किया।

    परीक्षणों को जोड़ने से रोकने वाली निर्भरता को तोड़ने के लिए आवश्यक परिवर्तनों के बारे में न्यूनतम करने का प्रयास करें।

  3. जहाँ तक संभव हो उस कोड की कार्यक्षमता को कवर करने के लिए परीक्षण लिखें, जिसे आप बदलने जा रहे हैं। नियमित रूप से जांचें और सहकर्मी सभी परिवर्तनों की समीक्षा करें।
  4. नई कार्यक्षमता / कार्यक्षमता परिवर्तन के लिए परीक्षण लिखें।
  5. कार्यक्षमता को लागू करें (यह आपका सामान्य TDD चक्र है)
  6. परीक्षण (लाल-हरा-परावर्तक) द्वारा आपके द्वारा कवर किए गए क्षेत्रों को फिर से भरना सुनिश्चित करें।

हमने पाया कि जितना हमने यह किया है, उतना ही आसान हो गया है। जब भी आप कोड बेस पर वापस जाते हैं, यह थोड़ा बेहतर होता है।

हमने अपने क्यूए परीक्षकों के माध्यम से हो रही बगों की संख्या में भारी गिरावट देखी है। कार्यक्षमता प्रतिगमन के साथ अब लगभग अनसुना है, इसलिए मुझे लगता है कि यह हमारे लिए प्रयास के लायक था।


2

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


2

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


+1 "नए भागों में कीड़े होने की सबसे अधिक संभावना है"
MIA

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

1

आप अपने वर्तमान कोड को कवर करना शुरू कर सकते हैं और, यदि आपके पास खर्च करने के लिए कुछ समय है, तो पुराने कोड की मुख्य कार्यक्षमता को कवर करना शुरू करें। इसके अलावा आप अपने पीएम से कुछ अतिरिक्त समय के लिए पूछ सकते हैं =)


0

क्या यूनिट 100% परीक्षण कर रही है या सभी तरह के सौदे नहीं कर रही है?

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

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