2008-10-12 8 views
165

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

उत्तर

144

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

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

हमारी टीम Magellan का उपयोग करती है - कोड कवरेज टूल का एक इन-हाउस सेट। यदि आप नेट की दुकान हैं, तो वीएस ने कोड कवरेज एकत्र करने के लिए एकीकृत टूल हैं। आप this article वर्णन जैसे कुछ कस्टम टूल भी रोल कर सकते हैं।

यदि आप सी ++ दुकान हैं, तो इंटेल के पास tools है जो विंडोज और लिनक्स के लिए चलता है, हालांकि मैंने उनका उपयोग नहीं किया है। मैंने यह भी सुना है कि जीसीसी के लिए gcov उपकरण है, लेकिन मुझे इसके बारे में कुछ भी पता नहीं है और आपको एक लिंक नहीं दे सकता है।

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

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

+12

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

+0

आप [टेस्टवेल सीटीसी ++] (http://www.verifysoft.com/en_ctcpp.html) का भी उपयोग कर सकते हैं, यह सी, सी ++, सी # और जावा –

+0

@ ट्राउपर्स उत्परिवर्तन परीक्षणों का एक और पूरा कोड कवरेज टूल है आपके परीक्षण कितने व्यापक हैं। – Vincent

5

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

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

104

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

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

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

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

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

41

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

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

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

+1

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

+6

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

+0

क्या आप इस स्थिति में देख सकते हैं जब यूनिट परीक्षण के मामले सभी विधियों के लिए नहीं लिखे गए हैं। क्या कोड कवरेज अभी भी 100% होगा। http://stackoverflow.com/questions/43395968/code-coverage-percentage-in-unit-testing?noredirect = 1 # comment73853629_43395968 –

12

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

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

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

    हम

    1. लिए इन उपकरणों का उपयोग। समीक्षा करें कि डेवलपर्स ने अच्छा यूनिट परीक्षण
    2. लिखा है। सुनिश्चित करें कि सभी कोड ब्लैक बॉक्स परीक्षण
4

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

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

24

ऊपर दिए गए कई उत्तरों को कुछ बिंदुओं की सराहना करते हैं।

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

ऊपर जवाब में उल्लेख किया है, वहाँ विभिन्न कवरेज मापदंड, शामिल किए जाने वाले रास्तों, शर्तों, काम करता है, बयानों, आदि लेकिन अतिरिक्त मापदंड की तरह कर रहे हैं

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

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

+0

अन्य उत्तरों के लिए अच्छा जोड़ा – HDave

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