2015-06-14 7 views
18

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

मैं gcovr उपयोग कर रहा हूँ एक एक्सएमएल जाता है कि तो सोनार द्वारा पार्स उत्पन्न करने के लिए:

gcovr -x -b -r . --object-directory=debug/test > coverage_report.xml 

मैं GCDA और gcno फ़ाइलों के तीन सेट है, लेकिन मैं नहीं जानता कि कैसे की एक वैश्विक रिपोर्ट जनरेट करने उन्हें।

क्या ऐसा करने का कोई तरीका है?

+0

एलसीओवी यह करता है। तो एलसीओवी परियोजना से कोई भी मदद कर सकता है। – k0n3ru

+0

@ k0n3ru, lcov कुछ मध्यवर्ती प्रारूप में डेटा मर्ज करें। – Gluttton

+0

एलसीओवी के साथ समस्या यह है कि मेरे पास अब XML कोबर्टूरा प्रारूप नहीं है। –

उत्तर

1

मानते हैं कि "विभिन्न विकल्पों के साथ संकलित" से आपका मतलब है कि आप इस तरह संकलित करते हैं कि आप एलसीओवी (जैसा कि k0n3ru द्वारा उल्लिखित) की मदद से पूर्व प्रसंस्करण के बाद अलग-अलग आउटपुट प्राप्त करते हैं, मैं इसे करने में सक्षम था। जो foo कॉल करता है और परिणाम प्रिंट

#include "sut.h" 
#include <limits.h> 

int foo(int a) { 
#if defined(ADD) 
    a += 42; 
#endif 
#if defined(SUB) 
    a -= 42; 
#endif 
    return a; 
} 

sut.h केवल foo की घोषणा प्रदान करने के साथ, और test.c में एक साधारण मुख्य,: यहाँ फ़ाइल sut.c में नमूना कोड है। फिर, आदेशों की इस क्रम के साथ मैं sut.c के लिए 100% कवरेज के साथ एक total.info फ़ाइल बनाने के लिए कर रहा था:

> g++ --coverage -DADD test.c sut.c -o add.out 
> ./add.out 
> lcov -c -d . -o add.info # save data from .gdda/.gcno into add.info 
> g++ --coverage -DSUB test.c sut.c -o sub.out 
> ./sub.out 
> lcov -c -d . -o sub.info # save again, this time into sub.info 
> lcov -a add.info -a sub.info -o total.info # combine them into total.info 
> genhtml total.info 

कौन सा तो sut.c के लिए निम्न परिणाम दिखाता है:

enter image description here

संपादित करें (इस भाग को जोड़ने के लिए मुझे याद दिलाने के लिए ग्लुटटन के लिए धन्यवाद): कोबर्टुरा एक्सएमएल आउटपुट में lcov प्रारूप में total.info फ़ाइल से जाकर "lcov से cobertura XML कनवर्टर" की सहायता से यहां संभव होना चाहिए (हालांकि मैंने कोशिश नहीं की है): https://github.com/eriwen/lcov-to-cobertura-xml

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

ऐसा इसलिए है क्योंकि डेवलपर्स के परिदृश्यों के बारे में जानने के लिए संभावनाएं कम नहीं की जाएंगी: सशर्त संकलन का उपयोग करके कोड की नियंत्रण संरचना और डेटा प्रवाह प्रीप्रोसेसर आउटपुट के बीच काफी भिन्न हो सकता है - कवरेज जानकारी जो ओवरलेइंग से होती है 'विभिन्न प्रीप्रोसेसर आउटपुट के लिए टेस्ट रन से परिणाम नतीजों की सार्थक व्याख्या को असंभव बना सकते हैं।

+0

लेकिन रिपोर्ट को 'html' से' xml' (कोबर्टुरा) प्रारूप में कैसे परिवर्तित करें? – Gluttton

+0

आप बजाय lcov के .info प्रारूप को सीधे cobertura में परिवर्तित करना चाहते हैं। एक Google खोज ने मुझे यहां लाया: https: // github।com/eriwen/lcov-to-cobertura-xml –

+0

धन्यवाद। मैंने अभी कोशिश की है और यह वास्तव में gcov डेटा विलय करने के लिए काम करता है, लेकिन मुझे lcov डेटा को cobertura में परिवर्तित करने का एक अच्छा तरीका नहीं मिला है। मैंने उल्लिखित टूल्स की कोशिश की लेकिन यह बहुत सारी सूचनाओं को फेंक देता है, जेनरेटेड एक्सएमएल में कोई शाखा जानकारी नहीं है। –

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