क्या आप प्रासंगिक कार्यों के यूनिट परीक्षणों को पेश कर सकते हैं, जो सैद्धांतिक रूप से-अनुपयोगी कोड पथों पर सीधे हमला करके जीसीओवी को बंद करने के लिए मौजूद हैं? चूंकि वे यूनिट परीक्षण हैं, इसलिए वे शायद परिस्थितियों की "असंभवता" को अनदेखा कर सकते हैं। वे उन कार्यों को कॉल कर सकते हैं जिन्हें कभी नहीं कहा जाता है, डिफ़ॉल्ट शाखाओं को पकड़ने के लिए अमान्य एनम मान पास करते हैं।
फिर या तो उन परीक्षणों को केवल एनडीईबीयूजी के साथ संकलित आपके कोड के संस्करण पर चलाएं, या फिर उन्हें दोहन में चलाएं कि जोर ट्रिगर किया गया है - जो भी आपका परीक्षण ढांचा समर्थन करता है।
मुझे यह थोड़ा अजीब लगता है कि यह कहने के लिए कि कोड पर कार्यशील आवश्यकताओं वाले स्पेक के बजाय कोड होना चाहिए। विशेष रूप से, इसका मतलब है कि आपके परीक्षण उन आवश्यकताओं का परीक्षण नहीं कर रहे हैं, जो कि किसी भी आवश्यकता को कार्यात्मक रखने के लिए एक अच्छा कारण है। निजी तौर पर मैं यह कहने के लिए spec को संशोधित करना चाहता हूं, "अगर अमान्य enum मान के साथ बुलाया जाता है, तो फ़ंक्शन assert
विफल हो जाएगा। कॉलर्स रिलीज़ मोड में अमान्य एनम मान के साथ फ़ंक्शन को कॉल नहीं करेंगे"। या कुछ ऐसे।
संभवतः यह वर्तमान में क्या कहता है, "सभी स्विच स्टेटमेंट्स के पास एक डिफ़ॉल्ट मामला होना चाहिए" के आधार पर है। लेकिन इसका मतलब है कि कोडिंग मानकों को मृत कोड पेश करके अवलोकन योग्य व्यवहार (कम से कम, gcov के तहत देखने योग्य) में हस्तक्षेप कर रहे हैं। कोडिंग मानकों को ऐसा नहीं करना चाहिए, इसलिए यदि संभव हो तो कार्यात्मक स्पेक को कोडिंग मानकों का विवरण लेना चाहिए।
विफल होने पर, आप #if !GCOV_BUILD
में अस्थिर कोड को लपेट सकते हैं, और जीसीओवी के लाभ के लिए एक अलग निर्माण कर सकते हैं। यह बिल्ड कुछ आवश्यकताओं को विफल कर देगा, लेकिन कोड के आपके विश्लेषण पर सशर्त सही है, यह आपको विश्वास दिलाता है कि परीक्षण सूट अन्य सभी का परीक्षण करता है।
संपादित करें: आप कहते हैं कि आप एक डोडी कोड जनरेटर का उपयोग कर रहे हैं, लेकिन आप स्रोत कोड को एनोटेट करके समाधान मांग रहे हैं। यदि आप स्रोत बदल रहे हैं, तो क्या आप कई मामलों में मृत कोड को हटा सकते हैं? ऐसा नहीं है कि उत्पन्न स्रोत बदलना आदर्श है, लेकिन जरूरतों को जरूरी है ...
स्रोत
2010-08-24 13:23:53
क्या आप इतना यकीन है कि लाइनों unhittable हैं बनाता है? यदि ऐसा इसलिए है क्योंकि आप उन्हें मारने में सक्षम नहीं हैं, वैसे ही आप कोड कवरेज के साथ पता लगाने की कोशिश कर रहे हैं। – doron
@ deus-ex-machina399: नहीं, ऐसा इसलिए नहीं है क्योंकि मैं उन्हें मारने में सक्षम नहीं हूं। यह कोड की समझ और विश्लेषण के कारण है। बेशक, मैं गलत हो सकता हूं, लेकिन मैं स्रोत कोड की मेरी समझ को सत्यापित करने के लिए कोड कवरेज विश्लेषण का उपयोग नहीं कर रहा हूं। मैं अपने परीक्षण सूट की गुणवत्ता को सत्यापित करने के लिए कोड कवरेज विश्लेषण का उपयोग कर रहा हूं। – jchl
@ डोरन, कोड का एक उदाहरण जो अचूक होना चाहिए, आपके परीक्षण आधारभूत संरचना में विफलता-पथ है। बेशक, आप शायद ऐसे पथों के बिना कर सकते हैं, लेकिन मेरे पास है। –