अगर मेरे पास कोई कोड है जिसमें 80% परीक्षण कवरेज (सभी परीक्षण पास) हैं, तो क्या यह कहना उचित है कि यह किसी भी परीक्षण कवरेज के साथ कोड की तुलना में उच्च गुणवत्ता का है?
या यह कहना उचित है कि यह अधिक बनाए रखने योग्य है?
अगर मेरे पास कोई कोड है जिसमें 80% परीक्षण कवरेज (सभी परीक्षण पास) हैं, तो क्या यह कहना उचित है कि यह किसी भी परीक्षण कवरेज के साथ कोड की तुलना में उच्च गुणवत्ता का है?
या यह कहना उचित है कि यह अधिक बनाए रखने योग्य है?
जवाबों:
सख्त अर्थों में, परीक्षण सूट की गुणवत्ता स्थापित होने तक कोई भी दावा करना उचित नहीं है। यदि परीक्षणों में से अधिकांश एक-दूसरे के साथ तुच्छ या दोहराव वाले हों, तो शत-प्रतिशत परीक्षण पास करना सार्थक नहीं है।
सवाल यह है: परियोजना के इतिहास में, उन परीक्षणों में से किसी ने बग को उजागर किया? एक परीक्षण का लक्ष्य बग ढूंढना है। और अगर वे नहीं करते थे, तो वे परीक्षण के रूप में विफल रहे। कोड की गुणवत्ता में सुधार के बजाय, वे केवल आपको सुरक्षा की झूठी भावना दे सकते हैं।
परीक्षण डिज़ाइनों को बेहतर बनाने के लिए, आप (1) व्हाइटबॉक्स तकनीकों, (2) ब्लैकबॉक्स तकनीकों और (3) उत्परिवर्तन परीक्षण का उपयोग कर सकते हैं।
(1) आपके परीक्षण डिजाइनों पर लागू करने के लिए कुछ अच्छी व्हाइटबॉक्स तकनीकें यहां दी गई हैं। एक व्हाइटबॉक्स परीक्षण का निर्माण विशिष्ट स्रोत कोड को ध्यान में रखकर किया जाता है। व्हाइटबॉक्स परीक्षण का एक महत्वपूर्ण पहलू कोड कवरेज है:
if
या while
) के लिए, क्या आपके पास एक परीक्षण है जो इसे सच होने के लिए मजबूर करता है, और अन्य जो इसे गलत होने के लिए मजबूर करते हैं? [निर्णय कवरेज]&&
) या अव्यवस्था (उपयोग करता है ||
) है, क्या प्रत्येक उपप्रकार का एक परीक्षण होता है जहां यह सच है या गलत है? [स्थिति कवरेज]break
लूप से कवर किया गया है?(2) आवश्यकताएं उपलब्ध होने पर ब्लैकबॉक्स तकनीकों का उपयोग किया जाता है, लेकिन कोड स्वयं नहीं है। ये उच्च-गुणवत्ता परीक्षण कर सकते हैं:
(3) अंत में, मान लीजिए कि आपके पास पहले से ही व्हाइटबॉक्स कवरेज के लिए बहुत सारे अच्छे परीक्षण हैं, और लागू ब्लैकबॉक्स तकनीकें हैं। आप और क्या कर सकते हैं? यह आपके टेस्ट का परीक्षण करने का समय है । एक तकनीक जिसे आप उपयोग कर सकते हैं वह है म्यूटेशन टेस्टिंग।
बग के निर्माण की उम्मीद में, म्यूटेशन टेस्टिंग के तहत, आप अपने प्रोग्राम में (प्रति की) एक संशोधन करते हैं। एक उत्परिवर्तन हो सकता है:
एक चर के संदर्भ को दूसरे चर में बदलें; एब्स डालें () फ़ंक्शन; कम-से-अधिक से अधिक-से बदलें; एक बयान को हटा दें; एक स्थिर के साथ एक चर बदलें; ओवरराइडिंग विधि को हटा दें; एक सुपर विधि का संदर्भ हटाएं; तर्क क्रम बदलें
अपने कार्यक्रम में विभिन्न स्थानों पर कई दर्जन म्यूटेंट बनाएं [कार्यक्रम को परीक्षण करने के लिए अभी भी संकलन करने की आवश्यकता होगी]। यदि आपके परीक्षणों में ये बग नहीं पाए जाते हैं, तो अब आपको एक परीक्षण लिखने की आवश्यकता है जो आपके प्रोग्राम के उत्परिवर्तित संस्करण में बग को ढूंढ सकता है। एक बार बग का परीक्षण करने के बाद, आपने उत्परिवर्ती को मार दिया है और दूसरा प्रयास कर सकते हैं।
परिशिष्ट : मैं इस प्रभाव का उल्लेख करना भूल गया था: कीड़े क्लस्टर करते हैं । इसका मतलब यह है कि एक मॉड्यूल में जितने अधिक कीड़े हैं, उतनी ही अधिक संभावना है कि आपको अधिक बग मिलेंगे। इसलिए, यदि आपके पास एक परीक्षण है जो विफल रहता है (जो कहना है, परीक्षण सफल है, क्योंकि लक्ष्य बग ढूंढना है), न केवल आपको बग को ठीक करना चाहिए, बल्कि आपको मॉड्यूल के लिए और अधिक परीक्षण भी लिखना चाहिए, तकनीकें ऊपर।
जब तक आप एक स्थिर दर पर कीड़े पा रहे हैं, परीक्षण के प्रयास जारी रखने चाहिए। केवल तभी जब नए कीड़ों की दर में गिरावट देखी गई है, आपको विश्वास होना चाहिए कि आपने विकास के उस चरण के लिए अच्छे परीक्षण प्रयास किए हैं।
एक परिभाषा के अनुसार यह अधिक सुव्यवस्थित है, क्योंकि किसी भी परिवर्तन को परीक्षणों द्वारा पकड़े जाने की अधिक संभावना है।
हालांकि, तथ्य यह है कि कोड यूनिट परीक्षणों को पास करता है इसका मतलब यह नहीं है कि यह आंतरिक रूप से उच्च गुणवत्ता का है। कोड अभी भी अप्रासंगिक टिप्पणियों और अनुचित डेटा संरचनाओं के साथ बुरी तरह से स्वरूपित हो सकता है, लेकिन यह अभी भी परीक्षणों को पारित कर सकता है।
मुझे पता है कि मैं किस कोड को बनाए रखना और बढ़ाना पसंद करूंगा।
बिना किसी परीक्षण के कोड अत्यंत उच्च गुणवत्ता, पठनीय, सुंदर और कुशल (या कुल कबाड़) हो सकता है, इसलिए नहीं, यह कहना उचित नहीं है कि 80% परीक्षण कवरेज वाला कोड बिना परीक्षण कवरेज वाले कोड की तुलना में उच्च गुणवत्ता वाला है।
यह कहना है कि कोड 80% के साथ कवर उचित हो सकता है अच्छा परीक्षण है शायद स्वीकार्य गुणवत्ता के हैं, और शायद अपेक्षाकृत पोषणीय। लेकिन यह वास्तव में बहुत कम गारंटी देता है।
मैं इसे और अधिक परिष्कृत कहूंगा। यदि कोड बहुत सारे परीक्षणों से आच्छादित है, तो रिफैक्टिंग करना बहुत आसान हो जाता है।
इसे और अधिक रख-रखाव कहना उचित होगा।
मैं बनाए रखने योग्य भाग के बारे में सहमत हूँ। माइकल फेयर्स ने हाल ही में " द टेस्ट और टेस्टी डिज़ाइन के बीच गहरा तालमेल " नामक एक उत्कृष्ट बातचीत का एक वीडियो पोस्ट किया जिसमें उन्होंने इस विषय पर चर्चा की। बातों-बातों में वह कहता है कि संबंध एक तरह से है, अर्थात्, जो कोड अच्छी तरह से डिज़ाइन किया गया है वह परीक्षण करने योग्य है, लेकिन परीक्षण योग्य कोड आवश्यक रूप से डिज़ाइन नहीं किया गया है।
यह ध्यान देने योग्य है कि वीडियो स्ट्रीमिंग वीडियो में महान नहीं है, इसलिए यदि आप पूर्ण रूप से देखना चाहते हैं तो यह डाउनलोड करने के लायक हो सकता है।
मैं "हालत कवरेज" के संबंध में पिछले कुछ समय से खुद से यह सवाल पूछ रहा हूं। तो इस पेज के बारे में atollic.com से "कोड कोड विश्लेषण क्यों?"
अधिक तकनीकी रूप से, कोड कवरेज विश्लेषण आपके प्रोग्राम में ऐसे क्षेत्रों को ढूंढता है जो आपके परीक्षण मामलों से आच्छादित नहीं होते हैं, जिससे आप अतिरिक्त परीक्षण बना सकते हैं जो आपके प्रोग्राम के अनछुए भागों को कवर करते हैं। इस प्रकार यह समझना महत्वपूर्ण है कि कोड कवरेज आपको अपनी परीक्षण प्रक्रियाओं की गुणवत्ता को समझने में मदद करता है, न कि कोड की गुणवत्ता के बारे में ।
यह यहां काफी प्रासंगिक लगता है। यदि आपके पास एक परीक्षण केस सेट है जो एक निश्चित स्तर (कोड या अन्यथा) कवरेज प्राप्त करने का प्रबंधन करता है, तो आप इनपुट मानों के बजाय संपूर्ण सेट के साथ परीक्षण के तहत कोड को लागू करने की काफी संभावना है! यह आपको परीक्षण के तहत कोड के बारे में बहुत कुछ नहीं बताएगा (जब तक कि कोड दोष नहीं देता है या पता लगाने योग्य दोष उत्पन्न नहीं करता है) लेकिन आपको अपने परीक्षण मामले के सेट पर विश्वास दिलाता है ।
एक दिलचस्प नेकर क्यूब परिवर्तन-दृष्टि में, परीक्षण कोड अब परीक्षण के तहत कोड द्वारा परीक्षण किया जा रहा है!
यह गारंटी देने के कई तरीके हैं कि एक कार्यक्रम वह करता है जो आप चाहते हैं, और यह सुनिश्चित करने के लिए कि संशोधनों में कोई प्रभाव नहीं होगा।
परीक्षण एक है। डेटा के उत्परिवर्तन से बचना एक और है। तो एक प्रकार की प्रणाली है। या औपचारिक सत्यापन।
इसलिए, जब मैं मानता हूं कि परीक्षण आम तौर पर एक अच्छी बात है, तो दिए गए परीक्षण का प्रतिशत बहुत अधिक नहीं हो सकता है। मैं नहीं बल्कि अच्छी तरह से परीक्षण की गई PHP लाइब्रेरी पर परीक्षण के बिना हास्केल में लिखी गई चीज़ पर भरोसा करना चाहिए