कोड कवरेज क्या है और आप इसे कैसे मापते हैं?


275

कोड कवरेज क्या है और आप इसे कैसे मापते हैं?

मुझे यह सवाल हमारे स्वचालित परीक्षण कोड कवरेज से संबंधित पूछा गया था। ऐसा लगता है कि, स्वचालित उपकरणों के बाहर, यह विज्ञान की तुलना में अधिक कला है। क्या कोई वास्तविक दुनिया के उदाहरण हैं कि कैसे कोड कवरेज का उपयोग किया जाए?

जवाबों:


242

कोड कवरेज एक माप है कि आपके कोड की कितनी लाइनें / ब्लॉक / आर्क्स निष्पादित किए जाते हैं जबकि स्वचालित परीक्षण चल रहे हैं।

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

हमारी टीम मैगेलन का उपयोग करती है - कोड कवरेज टूल का इन-हाउस सेट। यदि आप एक .NET शॉप हैं, तो विजुअल स्टूडियो में कोड कवरेज इकट्ठा करने के लिए एकीकृत उपकरण हैं। आप इस लेख की तरह कुछ कस्टम टूल भी रोल कर सकते हैं वर्णन करता है।

यदि आप C ++ की दुकान हैं, तो Intel के पास कुछ उपकरण हैं जो Windows और Linux के लिए चलते हैं, हालांकि मैंने उनका उपयोग नहीं किया है। मैंने यह भी सुना है कि GCC के लिए gcov टूल है, लेकिन मैं इसके बारे में कुछ नहीं जानता और आपको लिंक नहीं दे सकता।

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

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


40
"गुणवत्ता सुनिश्चित करने के लिए कोड कवरेज के साथ-साथ अन्य मैट्रिक्स भी होने चाहिए।" क्या आप कह सकते हैं कि ये अन्य मैट्रिक्स क्या हैं?
ट्रोपर्स

आप टेस्टवेल CTC ++ का भी उपयोग कर सकते हैं , यह C, C ++, C # और Java के लिए एक पूर्ण कोड कवरेज उपकरण है
B_PRIEUR

1
@ अब्दुल जब आप कोड कवरेज को मापते हैं, तो आपको दोनों तरह के परीक्षण चलाने चाहिए, और उनके लिए अलग से कोड कवरेज को मापना चाहिए। "कोड के कोड" के लिए - वे कोड निष्पादन शाखाएं हैं, जैसे कि / फिर।
फ्रैंकी पेनोव

1
जब वे कोड कवरेज की बात करते हैं तो @Maverick अधिकांश लोग इकाई परीक्षण को मानते हैं, हालाँकि Microsoft में हम इकाई परीक्षण और एकीकरण परीक्षण दोनों से कोड कवरेज को माप रहे थे।
फ्रैंकी पेनोव

1
आम तौर पर @darth_coder कुछ भी नहीं। एप्लिकेशन को स्वचालित रूप से भी इंस्ट्रूमेंट नहीं किया जाएगा, और अगर इंस्ट्रूमेंटेशन डेटा एकत्र करने वाला कुछ भी नहीं है, तो नए ऐप की उपस्थिति अप्रासंगिक है। एकमात्र मामला जहां यह चीजों को प्रभावित कर सकता है, अगर ऐप उसी समय चलता है जब स्वचालित परीक्षण चल रहे हों और इंस्ट्रूमेंट ओएस कोड को परीक्षण स्वचालन के समान प्रक्रिया के भीतर चलाने का कारण बन रहा हो, तो संभवतः कुछ ओएस कोड को चलाने के रूप में दिखा रहा है। परीक्षणों द्वारा नहीं छुआ गया।
फ्रैंकी पेनोव

189

कोड कवरेज मूल रूप से परीक्षण करता है कि आपका कितना कोड परीक्षण के तहत कवर किया गया है। इसलिए, यदि आपके पास 90% कोड कवरेज है, तो इसका मतलब है कि 10% कोड है जो परीक्षणों के तहत कवर नहीं है। मुझे पता है कि आप सोच रहे होंगे कि ९ ०% कोड कवर किया गया है, लेकिन आपको एक अलग कोण से देखना होगा। 100% कोड कवरेज प्राप्त करने के लिए आपको क्या रोक रहा है?

एक अच्छा उदाहरण यह होगा:

if(customer.IsOldCustomer()) 
{
}
else 
{
}

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

कोड कवरेज को मापने के लिए NCover एक अच्छा साधन है।


5
सबसे अच्छा जवाब, लगभग 10 साल पहले! अरे नहीं! :)
निकोस

4
सरल और सार्थक उत्तर :)
परवीन

हाँ। केवल एक है कि समझ में आया। हालांकि मैं भी नीचे स्क्रॉल करने के लिए जारी रखने के लिए परेशान नहीं किया। यहीं मैं रुक गया। बुकमार्क।
TheRealChx101

64

बस याद रखें, "100% कोड-कवरेज" होने का मतलब यह नहीं है कि सब कुछ पूरी तरह से परीक्षण किया गया है - जबकि इसका मतलब है कि कोड की प्रत्येक पंक्ति का परीक्षण किया गया है, इसका मतलब यह नहीं है कि वे हर (सामान्य) स्थिति के तहत परीक्षण किए जाते हैं।

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

मूल रूप से, 100% कोड-कवरेज का मतलब यह नहीं है कि आपका कोड एकदम सही है। अधिक व्यापक (इकाई-) परीक्षणों को लिखने के लिए एक गाइड के रूप में इसका उपयोग करें।


1
- "100% कोड-कवरेज" का मतलब यह नहीं है कि सब कुछ पूरी तरह से परीक्षण किया गया है - जबकि इसका मतलब है कि कोड की हर पंक्ति का परीक्षण किया गया है, इसका मतलब यह नहीं है कि वे हर (सामान्य) स्थिति के तहत परीक्षण किए जाते हैं ..- "हर (आम) के तहत स्थिति "यह डेटा इनपुट और मापदंडों के संबंध में है? मुझे यह समझने में कठिनाई हो रही है कि यदि सब कुछ परीक्षण किया जाता है, तो यह पूरी तरह से परीक्षण किए जाने के बराबर नहीं है।
अब्दुल

20
सिर्फ इसलिए कि आपके कोड की हर लाइन आपके परीक्षणों में किसी बिंदु पर चलाई जाती है, इसका मतलब यह नहीं है कि आपने हर संभावित परिदृश्य का परीक्षण किया है जो कोड के तहत चलाया जा सकता है। यदि आपके पास बस एक फ़ंक्शन था जो ले गया xऔर वापस आ गया x/xऔर आपने my_func (2) का उपयोग करके परीक्षण चलाया तो आपके पास 100% कवरेज होगा (जैसा कि फ़ंक्शन का कोड चलाया जाएगा), लेकिन 0 के पैरामीटर होने पर आपको एक बड़ा मुद्दा याद आ गया है। यानी आपने 100% कवरेज के साथ सभी आवश्यक परिदृश्यों का परीक्षण नहीं किया है।
चरण

क्या आप इस स्थिति को देख सकते हैं जब सभी तरीकों के लिए यूनिट परीक्षण के मामले नहीं लिखे गए हैं। क्या कोड कवरेज अभी भी 100% होगा। stackoverflow.com/questions/43395968/…
सचिन कुमार

52

पिछले उत्तरों में से कई के लिए कुछ बिंदुओं को लागू करना:

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

जैसा कि ऊपर दिए गए जवाबों में बताया गया है, विभिन्न कवरेज मानदंड हैं, जैसे पथ, स्थितियां, कार्य, कथन आदि, लेकिन कवर किए जाने वाले अतिरिक्त मानदंड।

  1. स्थिति कवरेज: सच्चे और झूठे के लिए सभी बूलियन अभिव्यक्तियों का मूल्यांकन किया जाना है।
  2. निर्णय कवरेज: सच्चे और झूठे के लिए एक बार मूल्यांकन करने के लिए न केवल बूलियन अभिव्यक्ति, बल्कि सभी बाद के इफिस-अन्य शरीर को कवर करने के लिए।
  3. लूप कवरेज: का अर्थ है, हर संभव लूप को एक बार, एक से अधिक बार और शून्य समय पर निष्पादित किया गया है। इसके अलावा, यदि हमारे पास अधिकतम सीमा पर धारणा है, तो, यदि संभव हो, तो अधिकतम सीमा बार और अधिकतम सीमा से अधिक बार परीक्षण करें।
  4. प्रवेश और निकास कवरेज: सभी संभावित कॉल और उसके वापसी मूल्य के लिए परीक्षण करें।
  5. पैरामीटर मान कवरेज (पीवीसी)। यह जांचने के लिए कि क्या पैरामीटर के लिए सभी संभावित मानों का परीक्षण किया गया है। उदाहरण के लिए, एक स्ट्रिंग आमतौर पर इनमें से कोई भी हो सकती है: ए) शून्य, बी) खाली, सी) व्हाट्सएप (अंतरिक्ष, टैब, नई लाइन), डी) वैध स्ट्रिंग, ई) अमान्य स्ट्रिंग, एफ) सिंगल-बाइट स्ट्रिंग, जी ) डबल बाइट स्ट्रिंग। प्रत्येक संभावित पैरामीटर मान का परीक्षण करने में विफलता एक बग छोड़ सकती है। इनमें से केवल एक परीक्षण के परिणामस्वरूप 100% कोड कवरेज हो सकता है क्योंकि प्रत्येक पंक्ति को कवर किया गया है, लेकिन जैसा कि सात विकल्पों में से केवल एक का परीक्षण किया जाता है, मतलब है, पैरामीटर मान का केवल 14.2% कवरेज।
  6. इनहेरिटेंस कवरेज: ऑब्जेक्ट ओरिएंटेड सोर्स के मामले में, बेस क्लास द्वारा संदर्भित एक व्युत्पन्न ऑब्जेक्ट को वापस करते समय, मूल्यांकन करने के लिए कवरेज, यदि सिबलिंग ऑब्जेक्ट वापस किया जाता है, तो परीक्षण किया जाना चाहिए।

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


2
अन्य जवाबों के लिए यहाँ अच्छा है
HDave

14

पिछले उत्तर में कोड कवरेज को अच्छी तरह से समझाया गया है। तो यह सवाल के दूसरे भाग का उत्तर है।

कोड कवरेज निर्धारित करने के लिए हमने तीन टूल का उपयोग किया है।

  1. JTest - JUnit के ऊपर निर्मित एक मालिकाना उपकरण। (यह इकाई परीक्षण भी उत्पन्न करता है।)
  2. कोबर्तुरा - एक खुला स्रोत कोड कवरेज टूल जिसे रिपोर्ट बनाने के लिए आसानी से JUnit परीक्षणों के साथ जोड़ा जा सकता है।
  3. एम्मा - एक और - यह एक जिसे हमने यूनिट परीक्षण से थोड़ा अलग उद्देश्य के लिए उपयोग किया है। इसका उपयोग कवरेज रिपोर्ट उत्पन्न करने के लिए किया जाता है जब वेब एप्लिकेशन को एंड-यूजर्स द्वारा एक्सेस किया जाता है। यह वेब परीक्षण उपकरण (उदाहरण: Canoo) के साथ मिलकर आपको बहुत उपयोगी कवरेज रिपोर्ट दे सकता है जो आपको बताता है कि विशिष्ट अंतिम उपयोग के दौरान कितना कोड कवर किया गया है।

हम इन उपकरणों का उपयोग करते हैं

  • समीक्षा करें कि डेवलपर्स ने अच्छी इकाई परीक्षण लिखे हैं
  • सुनिश्चित करें कि ब्लैक-बॉक्स परीक्षण के दौरान सभी कोड का पता लगाया गया है

6

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

जहाँ तक मैं अपनी परियोजनाओं पर ट्रैकिंग इकाई परीक्षण कवरेज के बारे में बताता हूं, मैं ट्रैक रखने के लिए स्थैतिक कोड विश्लेषण टूल का उपयोग करता हूं।


5

पर्ल के लिए उत्कृष्ट देवल :: कवर है मॉड्यूल है जो मैं नियमित रूप से अपने मॉड्यूल पर उपयोग करता हूं।

यदि बिल्ड और इंस्टॉलेशन का प्रबंधन मॉड्यूल द्वारा किया जाता है :: बिल्ड आप ./Build testcoverएक अच्छा HTML साइट प्राप्त करने के लिए बस चला सकते हैं जो आपको प्रति उप-रेखा, रेखा और स्थिति के बारे में कवरेज बताता है, जिसमें अच्छे रंग यह देखना आसान बनाते हैं कि कौन सा कोड पथ कवर नहीं किया गया है।


1

पिछले उत्तरों में कोड कवरेज को अच्छी तरह से समझाया गया है। मैं सिर्फ उपकरणों से संबंधित कुछ ज्ञान जोड़ रहा हूं यदि आपके काम कर रहे हैं iOSऔरOSX प्लेटफार्मों, Xcode परीक्षण और मॉनिटर कोड कवरेज की सुविधा प्रदान करता है।

संदर्भ लिंक:

https://developer.apple.com/library/archive/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/07-code_coverage.html

https://medium.com/zendesk-engineering/code-coverage-and-xcode-6b2fb8756a51

दोनों Xcode के साथ कोड कवरेज सीखने और तलाशने के लिए सहायक लिंक हैं।


0

PHP के लिए आपको सेबस्टियन बर्गमैन से जीथब पर एक नज़र डालना चाहिए

PHP कोड कवरेज की जानकारी के लिए संग्रह, प्रसंस्करण और कार्यक्षमता प्रदान करता है।

https://github.com/sebastianbergmann/php-code-coverage

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