2009-07-10 15 views
8

मैंने हाल ही में एक फीचर लेखन एकीकरण परीक्षण कोडिंग के बारे में 70% खर्च किया। एक बिंदु पर, मैं सोच रहा था "अरे, यह सब कड़ी मेहनत यह परीक्षण कर रही है, मुझे पता है कि मेरे पास यहां कीड़े नहीं हैं, मैं इस पर इतना कठिन क्यों काम करता हूं? चलो बस परीक्षणों पर स्कीम करें और इसे पहले से खत्म करें ... "कितना परीक्षण पर्याप्त है?

पांच मिनट बाद एक परीक्षण विफल हो जाता है। विस्तृत निरीक्षण से पता चलता है कि यह एक तृतीय पक्ष लाइब्रेरी में एक महत्वपूर्ण, अज्ञात बग है जिसका हम उपयोग कर रहे हैं।

तो ... आप विश्वास पर क्या लेना चाहते हैं इस पर परीक्षण करने के लिए अपनी लाइन कहां आकर्षित करते हैं? क्या आप सबकुछ परीक्षण करते हैं, या कोड जहां आप अधिकांश बग की अपेक्षा करते हैं?

उत्तर

0

मैं सबकुछ परीक्षण करता हूं। मुझे इससे नफरत है, लेकिन यह मेरे काम का एक महत्वपूर्ण हिस्सा है।

+2

यदि आप पिछले काल में 'मैं परीक्षण करने के लिए प्रयुक्त होता था' लिखना चाहता था, या वर्तमान काल में 'मैं सबकुछ परीक्षण करता हूं' लिखना चाहता हूं। – ripper234

+0

मेरी अंग्रेजी के लिए खेद है। मैं कहना चाहता था "मैं सबकुछ परीक्षण करता हूं ", लेकिन जैसा कि लार्स ए ब्रेककेन ने यहां भी कहा, प्राथमिकता देना बहुत महत्वपूर्ण है। – Jonathan

15

मेरी राय में, परीक्षण के समय व्यावहारिक होना महत्वपूर्ण है। उन चीजों पर अपने परीक्षण प्रयासों को प्राथमिकता दें जो असफल होने की संभावना रखते हैं, और/या चीजें जो सबसे महत्वपूर्ण हैं जो विफल नहीं होती हैं (यानी संभावना और परिणाम को ध्यान में रखना)।

सोचें, कोड कवरेज जैसे एक मीट्रिक का अंधाधुंध अनुसरण करने के बजाय सोचें।

जब आप परीक्षण सूट और कोड के साथ सहज महसूस करते हैं तो रोकें। वापस जाएं और अधिक परीक्षण जोड़ें जब (अगर?) चीजें विफल होने लगती हैं।

+1

+1 ** जोखिमग्रस्त टेस्टिंग ** के लिए ** (चीजें जो कि सबसे महत्वपूर्ण है जो असफल नहीं होती) – k3b

1

यदि आप या आपकी टीम मेट्रिक्स को ट्रैक कर रही है, तो आप देख सकते हैं कि प्रत्येक परीक्षण के लिए सॉफ़्टवेयर जीवन चक्र प्रगति के रूप में कितनी बग पाई जाती है। यदि आपने एक स्वीकार्य दहलीज परिभाषित की है जहां परीक्षण में बिताए गए समय में बग की संख्या को उचित नहीं ठहराया जाता है, तो वह बिंदु है जिस पर आपको रोकना चाहिए।

आपको शायद अपनी 100% बग कभी नहीं मिलेगी।

+2

आपको" शायद "" कभी नहीं " –

+0

आप कभी भी यह नहीं कह सकते कि सॉफ्टवेयर का एक टुकड़ा दोष मुक्त है। सबूत की अनुपस्थिति अनुपस्थिति का सबूत नहीं है। – StuperUser

+0

सार्वजनिक स्थैतिक शून्य मुख्य (स्ट्रिंग [] तर्क) { System.out.print ("हैलो वर्ल्ड!"); } यह सरल कार्यक्रमों की तरह गूंगा चीजों के लिए है जो मैं probabl रखता हूँ वहाँ में वाई। अभी भी शामिल नहीं है। – AlbertoPL

0

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

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

3

अच्छा सवाल!

सबसे पहले - यह लग रहा है की तरह अपने व्यापक एकीकरण परीक्षण मेरे निजी अनुभव से

बंद :) भुगतान किया:

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

कितना पर्याप्त है? कठिन सवाल - मुझे नहीं लगता कि कभी भी पर्याप्त हो सकता है!

+3

मुझे लगता है कि वास्तविक सवाल यह है कि "परीक्षण कब अच्छा व्यापारिक समझ नहीं आता है?", प्रोग्रामर के रूप में हम निश्चित रूप से सोच सकते हैं कि "पर्याप्त कवरेज कभी नहीं हो सकता" (और मैं कुछ हद तक सहमत हूं), लेकिन निश्चित रूप से मेरे मालिक & ग्राहक अलग होना चाहता है। –

+1

सहमत - हमेशा एक अच्छी शेष राशि। गैर-डेवलपर हितधारकों को व्यापक परीक्षण कवरेज के मूल्य को कम करना एक चुनौती है। किसी को भी यह कैसे करना है पर अच्छा विचार है? –

3

"बहुत कुछ सब कुछ पर्याप्त है।"

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

मैं एक क्षेत्र में सख्त हूं: यदि कोई बग मिलती है, तो मैं पहले एक परीक्षा लिखता हूं जो बग का उपयोग करता है और विफल रहता है, कोड बदलता है, और सत्यापित करता है कि परीक्षण पास हो जाता है।

+2

+1 बग को ठीक करने से पहले एक परीक्षण लिखने पर +1। – ripper234

0

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

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

4

जब आप अपने कोड में बड़े बदलावों के माध्यम से मध्यम बनाने के लिए डरते नहीं हैं, तो संभावना है कि आपके पास पर्याप्त परीक्षण हैं।

0

मैंने डेवलपर बनने से 1.5 साल पहले क्यूए में काम किया था।

आप कभी भी सब कुछ परीक्षण नहीं कर सकते (मुझे बताया गया था कि एक पाठ बॉक्स के सभी क्रमपरिवर्तनों को प्रशिक्षित करते समय ज्ञात ब्रह्मांड से अधिक समय लगेगा)।

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

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

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

+1

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

+0

मुझे नहीं लगता कि मैं अपने मतलब के साथ पर्याप्त स्पष्ट हूं। यह निश्चित रूप से डेवलपर की ज़िम्मेदारी है कि वे अपने काम में गुणवत्ता सुनिश्चित करें और उत्पाद बनाया जा रहा है, अगर उनकी जिम्मेदारी नहीं है तो उन्हें विशेषताओं की प्राथमिकताओं पर कॉल करना है। – StuperUser

0

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

मेरी कक्षाएं अधिक समेकित, पढ़ने में आसान हैं, और अधिक लचीली हैं क्योंकि उन्हें कार्यात्मक और परीक्षण योग्य होने के लिए डिज़ाइन किया गया है।

यह कहा गया कि, मैं जूनिट और कोबर्टुरा (जावा के लिए) का उपयोग करके 90% (रेखा और शाखा) की डिफ़ॉल्ट इकाई परीक्षण कवरेज आवश्यकताओं को करता हूं। जब मुझे लगता है कि एक विशिष्ट वर्ग (या कोबर्टूरा में कीड़े) की प्रकृति के कारण इन आवश्यकताओं को पूरा नहीं किया जा सकता है तो मैं अपवाद करता हूं।

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

0

This article उपयोगकर्ताओं की विभिन्न संख्या के साथ उपयोगकर्ता परीक्षण की प्रभावशीलता पर कुछ बहुत ही दिलचस्प अंतर्दृष्टि देता है। यह सुझाव देता है कि आप अपनी त्रुटियों में से लगभग दो तिहाई पा सकते हैं, जिसमें केवल तीन उपयोगकर्ता एप्लिकेशन का परीक्षण कर रहे हैं, और केवल पांच उपयोगकर्ताओं के साथ आपकी 85% त्रुटियां हैं।

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

2

गेराल्ड वेनबर्ग की क्लासिक किताब "The Psychology of Computer Programming" परीक्षण के बारे में अच्छा जुड़ी बातें है। एक मैं विशेष रूप से पसंद है अध्याय 4 में है" Programming as a Social Activity "" बिल "एक सह कार्यकर्ता अपने कोड की समीक्षा करने के लिए कहता है और वे सिर्फ तेरह बयान में सत्रह कीड़े मिल जाए । कोड समीक्षा अतिरिक्त आँखों प्रदान करने में मदद करने के लिए कीड़े मिल जाए, अधिक आंखों आप क्या तुमने कभी-तो-सूक्ष्म कीड़े पाने की है बेहतर मौका का उपयोग करें। जैसा लीनुस ने कहा, "यह देखते हुए पर्याप्त आंखों, सभी बग उथले हैं" अपने परीक्षण मूल रूप से रोबोट आँखें हैं जो दिन या रात के किसी भी घंटे आप जितनी बार चाहें उतनी बार देखेंगे और आपको पता चलेगा कि सबकुछ अभी भी है।

कितने परीक्षण पर्याप्त हैं इस पर निर्भर करता है कि आप खरोंच से या विकास को बनाए रखते हैं या नहीं मौजूदा तंत्र।

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

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

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

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

संबंधित मुद्दे