आपकी इकाई के परीक्षण कितने गहरे हैं?


88

टीडीडी के बारे में मैंने जो पाया है वह यह है कि आपके परीक्षणों को स्थापित करने में स्वाभाविक रूप से समय लगता है और स्वाभाविक रूप से आलसी होने के कारण मैं हमेशा जितना संभव हो उतना कम कोड लिखना चाहता हूं। पहली बात जो मुझे लगती है वह यह है कि मेरे निर्माता ने सभी गुणों को निर्धारित किया है लेकिन क्या यह ओवरकिल है?

मेरा सवाल यह है कि आप किस स्तर की ग्रैन्युलैरिटी पर आपको यूनिट टेस्ट लिखते हैं?

..और क्या बहुत ज्यादा परीक्षण का मामला है?

जवाबों:


221

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

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


40
दुनिया यह नहीं सोचती कि केंट बेक ऐसा कहेगा! डेवलपर्स की विधिवत रूप से 100% कवरेज का पीछा कर रहे हैं क्योंकि उन्हें लगता है कि यह केंट बेक क्या करेगा! मैंने कई बातें बताई हैं, जो आपने अपनी XP पुस्तक में कही है, कि आप हमेशा धार्मिक रूप से टेस्ट फर्स्ट का पालन नहीं करते हैं। लेकिन मैं भी हैरान हूं।
चार्ली फूल

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

2
मुझे कवरेज में कोई दिलचस्पी नहीं है। मुझे इस बात में बहुत दिलचस्पी है कि कितनी बार श्री बेक एक बार एक असफल परीक्षण के जवाब में कोड नहीं लिखता है।
शेल्डन

1
@RicardoRodrigues, आप कोड को कवर करने के लिए परीक्षण नहीं लिख सकते हैं जो अन्य लोग बाद में लिखेंगे। यही उनकी जिम्मेदारी है।
कीफ

2
ऐसा मैंने नहीं लिखा, ध्यान से पढ़ा; मैंने लिखा है कि यदि आप केवल अपने हिस्से को कवर करने के लिए परीक्षण लिखते हैं, तो उन हिस्सों को छोड़ दें जहां "आप जानते हैं कि आप गलतियाँ नहीं करते हैं" और वे हिस्से बदल जाते हैं और उचित परीक्षण नहीं करते हैं, तो आपको वहीं समस्या होती है, और वह टीडीडी बिल्कुल भी नहीं है।
रिकार्डो रोड्रिग्स

20

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

  1. बग तय हो गया है;
  2. बग फिर से प्रकट नहीं होगा।

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


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

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

@j_random_hacker हां, निश्चित रूप से पठनीयता महत्वपूर्ण है। परीक्षण प्रलेखन का एक रूप है और उत्पादन कोड के रूप में महत्वपूर्ण हैं। मैं इस बात से सहमत हूं कि प्रमुख परिवर्तनों के लिए परिमार्जन परीक्षण एक अच्छी बात है (टीएम) और यह परीक्षण इंटरफ़ेस स्तर पर किया जाना चाहिए।
जॉननो नोलन

19

सब कुछ जितना संभव हो उतना सरल बनाया जाना चाहिए, लेकिन सरल नहीं। - ए। आइंस्टीन

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


हाँ, यह इसका अस्पष्ट है ... इसका मतलब यह है कि एक निर्माता के रूप में यह व्यवहार नहीं है कि हमें इसका परीक्षण नहीं करना चाहिए। लेकिन मुझे MyClass.DoSomething () का परीक्षण करना चाहिए?
जॉनी नोलन

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

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

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

15

उन लोगों के लिए जो "सब कुछ" परीक्षण का प्रस्ताव देते हैं: महसूस करते हैं कि "पूरी तरह से परीक्षण" जैसी विधिint square(int x) लिए सामान्य भाषाओं और विशिष्ट वातावरण में लगभग 4 बिलियन परीक्षण मामलों आवश्यकता होती है।

वास्तव में, यह उससे भी बदतर है: एक विधि void setX(int newX)भी आभारी है नहीं के अतिरिक्त कोई अन्य सदस्यों के मूल्यों को बदलने के लिए x- आपको लगता है कि परीक्षण कर रहे हैं obj.y, obj.zआदि सभी बुला के बाद अपरिवर्तित ही रहेंगे obj.setX(42);?

"सब कुछ" के सबसेट का परीक्षण करना केवल व्यावहारिक है। एक बार जब आप इसे स्वीकार करते हैं, तो अविश्वसनीय रूप से बुनियादी व्यवहार का परीक्षण नहीं करने पर विचार करने के लिए यह अधिक स्वादिष्ट हो जाता है। प्रत्येक प्रोग्रामर के पास बग स्थानों की संभावना वितरण है; स्मार्ट दृष्टिकोण यह है कि आप परीक्षण क्षेत्रों पर अपनी ऊर्जा को केंद्रित करें जहां आप बग संभावना को अधिक होने का अनुमान लगाते हैं।


9

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

अगर आपका कंस्ट्रक्टर नहीं की स्थापना गुण बाद में त्रुटियों के लिए ले जा सकता है, तो परीक्षण वे कर रहे हैं कि सेट overkill नहीं है।


हाँ और यह एक वर्ग के लिए कई गुणों और कई consturctors के साथ एक बाध्य है।
जॉननो नोलन

जितनी अधिक तुच्छ समस्या है (जैसे किसी सदस्य को शून्य में भूल जाना), उसे डिबग करने में जितना अधिक समय लगेगा।
लेव

5

मैं उन कक्षाओं की मान्यताओं को कवर करने के लिए परीक्षण लिखता हूं जो मैं लिखूंगा। परीक्षण आवश्यकताओं को लागू करते हैं। अनिवार्य रूप से, यदि x कभी 3 नहीं हो सकता है, उदाहरण के लिए, मैं यह सुनिश्चित करने जा रहा हूं कि एक परीक्षण है जो उस आवश्यकता को कवर करता है।

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


5

सरल परीक्षणों को छोड़ देने के साथ समस्या का एक हिस्सा यह है कि भविष्य में रिफैक्टरिंग बहुत सारे तर्क के साथ उस सरल संपत्ति को बहुत जटिल बना सकती है। मुझे लगता है कि सबसे अच्छा विचार यह है कि आप मॉड्यूल के लिए आवश्यकताओं को सत्यापित करने के लिए टेस्ट का उपयोग कर सकते हैं। यदि आप एक्स पास करते हैं तो आपको वाई वापस मिलनी चाहिए, तो यही आप परीक्षण करना चाहते हैं। फिर जब आप बाद में कोड बदलते हैं, तो आप सत्यापित कर सकते हैं कि X आपको Y देता है, और आप A के लिए एक परीक्षण जोड़ सकते हैं जो आपको B देता है, जब बाद में उस आवश्यकता को जोड़ा जाता है।

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


4

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

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

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

तो, नहीं - मैं कहूंगा कि केवल सामान्य व्यक्तियों के लिए "बहुत अधिक" परीक्षण के रूप में ऐसी कोई चीज नहीं है।


3

टेस्ट ड्रिवेन डेवलपमेंट का मतलब है कि जब आपके सारे टेस्ट पास हो जाएंगे तो आप कोडिंग बंद कर देंगे।

यदि आपके पास संपत्ति के लिए कोई परीक्षण नहीं है, तो आपको इसे क्यों लागू करना चाहिए? यदि आप "अवैध" असाइनमेंट के मामले में अपेक्षित व्यवहार का परीक्षण / परिभाषित नहीं करते हैं, तो संपत्ति क्या करना चाहिए?

इसलिए मैं पूरी तरह से हर व्यवहार का परीक्षण करने के लिए एक कक्षा का प्रदर्शन करना चाहिए। जिसमें "आदिम" गुण शामिल हैं।

इस परीक्षण को आसान बनाने के लिए, मैंने एक सरल NUnit बनाया, TestFixtureजो मान प्राप्त करने / प्राप्त करने के लिए विस्तार बिंदु प्रदान करता है और मान्य और अमान्य मानों की सूची लेता है और यह जाँचने के लिए एकल परीक्षण करता है कि संपत्ति सही काम करती है या नहीं। एक एकल संपत्ति का परीक्षण इस तरह दिख सकता है:

[TestFixture]
public class Test_MyObject_SomeProperty : PropertyTest<int>
{

    private MyObject obj = null;

    public override void SetUp() { obj = new MyObject(); }
    public override void TearDown() { obj = null; }

    public override int Get() { return obj.SomeProperty; }
    public override Set(int value) { obj.SomeProperty = value; }

    public override IEnumerable<int> SomeValidValues() { return new List() { 1,3,5,7 }; }
    public override IEnumerable<int> SomeInvalidValues() { return new List() { 2,4,6 }; }

}

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

पुनश्च: संभवत: प्रॉपर्टीस्ट के पास यह जांचने का एक तरीका होना चाहिए कि ऑब्जेक्ट पर अन्य गुण नहीं बदले। हम्म .. ड्राइंग बोर्ड पर वापस।


मैं mbUnit पर एक प्रस्तुति के लिए गया था। ये बहुत अच्छा दिखता है।
जॉननो नोलन

लेकिन डेविड, मुझे आपसे पूछना चाहिए: क्या आप ऊपर केंट बेक की प्रतिक्रिया से आश्चर्यचकित थे? क्या उसका जवाब आपको आश्चर्यचकित करता है अगर आपको अपने दृष्टिकोण पर दोबारा विचार करना चाहिए? इसलिए नहीं कि किसी के पास "उच्च से उत्तर" है, ज़ाहिर है। लेकिन केंट को पहले टेस्ट के मुख्य प्रस्तावकों में से एक माना जाता है। आपके विचारों पर थोड़ा ध्यान!
चार्ली फूल

@ चेतावनी: केंट की प्रतिक्रिया बहुत व्यावहारिक है। मैं एक ऐसे प्रोजेक्ट पर "बस" काम कर रहा हूं, जहां मैं विभिन्न स्रोतों से कोड को एकीकृत करूंगा और मैं बहुत उच्च स्तर का विश्वास प्रदान करना चाहूंगा ।
डेविड श्मिट

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

1

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

लेखन परीक्षण अंधा करने के लिए समाप्त होने के बाद, मैं आमतौर पर प्रत्येक बग को पुन: पेश करने वाला एक परीक्षण मामला लिखता हूं

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


1

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

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


0

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

क्या आप बहुत अधिक परीक्षण कर सकते हैं? शायद, लेकिन यह शायद सामान्य तौर पर सावधानी बरतने के लिए बेहतर है, हालांकि यह इस बात पर निर्भर करेगा कि आपका आवेदन कितना महत्वपूर्ण है।


0

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


0

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

इसका बहुत काम है, लेकिन मुझे लगता है कि यह इसके लायक है। मैं एक डिबगर में कोड के माध्यम से चरण के बजाय कोड (यहां तक ​​कि परीक्षण कोड) लिखूंगा। मुझे लगता है कि कोड-बिल्ड-डिप्लॉयमेंट-डिबग चक्र बहुत समय लेने वाला है और जितनी अधिक यूनिट परीक्षण मैंने अपने बिल्ड में एकीकृत किया है, उतना कम समय मैं उस कोड-बिल्ड-तैनाती-डिबग चक्र के माध्यम से खर्च करता हूं।

आपने यह नहीं बताया कि आर्किटेक्चर आप कोडिंग भी क्यों कर रहे हैं। लेकिन Java के लिए मैं Maven 2 , JUnit , DbUnit , Cobertura , और EasyMock का उपयोग करता हूं


मैंने यह नहीं कहा कि यह एक काफी भाषा-अज्ञेय प्रश्न है।
जॉन्को नोलन

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

0

जितना अधिक मैं इसके बारे में पढ़ता हूं, मुझे लगता है कि कुछ यूनिट परीक्षण कुछ पैटर्न की तरह हैं: अपर्याप्त भाषाओं की गंध।

जब आपको यह जांचने की आवश्यकता होती है कि क्या आपका तुच्छ गटर वास्तव में सही मूल्य देता है, तो इसका कारण यह है कि आप गेटर का नाम और सदस्य चर नाम को इंटरमिक्स कर सकते हैं। माणिक का 'अटर_रीडर: नाम' दर्ज करें, और यह किसी भी अधिक नहीं हो सकता है। सिर्फ जावा में संभव नहीं है।

यदि आपका गेट्टर कभी भी नॉटिवर हो जाता है तो आप इसके लिए फिर भी एक टेस्ट जोड़ सकते हैं।


मैं मानता हूं कि एक गेटवे का परीक्षण तुच्छ है। हालांकि मैं एक निर्माता के भीतर इसे स्थापित करने के लिए भूल जाने के लिए काफी बेवकूफ हो सकता हूं। इसलिए एक परीक्षण की जरूरत है। प्रश्न पूछने के बाद से मेरे विचार बदल गए हैं। मेरा उत्तर देखें stackoverflow.com/questions/153234/how-deep-are-your-unit-tests/...
Johnno नोलन

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

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

0

स्रोत कोड का परीक्षण करें जो आपको इसके बारे में चिंतित करता है।

कोड के कुछ हिस्सों का परीक्षण करना उपयोगी नहीं है जिसमें आप बहुत आश्वस्त हैं, जब तक आप इसमें गलतियाँ नहीं करते हैं।

बगफिक्स का परीक्षण करें, ताकि यह पहली और आखिरी बार आपके बग को ठीक कर सके।

अस्पष्ट कोड भागों का विश्वास पाने के लिए परीक्षण करें, ताकि आप ज्ञान का निर्माण करें।

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


0

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

  1. अपनी पद्धति का साइक्लोमैटिक जटिलता मूल्य निर्धारित करें जिसे आप इकाई परीक्षण करना चाहते हैं (उदाहरण के लिए Visual Studio 2010 अल्टीमेट एनालिसिस टूल के साथ यह आपके लिए गणना कर सकता है; अन्यथा, आप इसे फ्लोग्राफ विधि - http://users.csc द्वारा हाथ से गणना कर सकते हैं । calpoly.edu/~jdalbey/206/Lectures/BasisPathTutorial/index.html )
  2. स्वतंत्र तरीकों के आधार सेट को सूचीबद्ध करें जो आपकी विधि के माध्यम से प्रवाह करते हैं - फ्लोग्राफ उदाहरण के लिए ऊपर लिंक देखें
  3. चरण 2 में निर्धारित प्रत्येक स्वतंत्र आधार पथ के लिए इकाई परीक्षण तैयार करें

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