2016-10-24 26 views
11

मेरे पास एक बहु-मॉड्यूल एंड्रॉइड प्रोजेक्ट है और मुझे कवरेज के बीच एक विसंगति दिखाई दे रही है जो जैकोको रिपोर्ट करता है और सोनारक्वे की रिपोर्ट क्या है। परियोजना भी एक बहु स्वाद परियोजना है जो कई अलग-अलग प्रकार उत्पन्न करती है। मैं सभी कार्यों को उत्पन्न करने में मदद के लिए this plugin का उपयोग कर रहा हूं। कार्य प्रत्येक संस्करण के लिए एक व्यक्तिगत रिपोर्ट उत्पन्न करते हैं।सोनारक्वे समग्र कवरेज जैकोको रिपोर्ट कवरेज से मेल नहीं खाता

जब मैं अपने jacoco रिपोर्टें चला मैं इस देखें:

jacoco report

जब मैं सोनार स्कैनर मैं यह देखने चलाएँ: sonar coverage report

मैं अपने प्रोजेक्ट पर कुछ बहिष्करण, लेकिन फिर भी बिना उन्हें कवरेज% s मेल नहीं खाते हैं। सोनार संस्करण 5.6:

मैं के रूप में this question:

यहाँ मेरी प्रासंगिक जानकारी है में संकेत दिया है कि मैं एक ही बाईटकोड प्रदान नहीं किया जा सकता है।

Gradle धावक

plugins { id "org.sonarqube" version "2.0.1" } 

सोनार config: (पर रूट build.gradle)

sonarqube { 
    properties { 
     property "sonar.projectKey", "com.xxx.myApp" 
     property "sonar.projectName", "Android My App" 
     property "sonar.projectVersion", "3.0" 
     property "sonar.java.binaries", "build/classes" 
     property "sonar.coveragePlugin", "jacoco" 
     property "sonar.jacoco.reportMissing.force.zero", "false" 
    } 
} 

सोनार config (एप्लिकेशन/build.gradle पर)

sonarqube { 
    properties { 
     property "sonar.sources", "src/main/java" 
     property "sonar.tests", "src/test/java" 
     property "sonar.java.tests", "src/test/java" 
     property "sonar.junit.reportsPath", "build/test-results/myAppGoogleMobileDebug" 
     property "sonar.java.binaries", "build/intermediates/classes/myAppGoogleMobile/debug" 
     property "sonar.jacoco.reportPath", "build/jacoco/testMyAppGoogleMobileDebugUnitTest.exec" 
     property "sonar.coverage.exclusions", coverageExclusions 

    } 
} 

Jacoco config पर (ऐप/build.gradle)

def coverageExclusions = ['**/AEWatchApp.*', '**/**_Factory.*', 
          '**/QaSettingsActivity.*', 
          'com/aetn/android/tveapps/activities/**', 
          'com/aetn/android/tveapps/test/**', 
          'com/aetn/android/tveapps/app/injection/modules/**', 
          'com/aetn/android/tveapps/app/injection/components/**', 
          'com.aetn.android.tveapps.mock/**', 
          'com/aetn/android/tveapps/databinding/**'] 


jacocoAndroidUnitTestReport { 
    csv.enabled false 
    html.enabled true 
    xml.enabled true 
    excludes += coverageExclusions 
} 

उत्तर

10

जहां तक ​​मैं शाखा कवरेज देख सकता हूं वही है: दोनों मामलों में 40%, 15 अनदेखा।

और कुछ भी के साथ "निर्देश" (जैकोको रिपोर्ट के स्क्रीनशॉट में दिखाया गया) की तुलना सेब और संतरे की तुलना की तरह है - वे एक ही चीज़ का प्रतिनिधित्व नहीं करते हैं। JaCoCo प्रदान करता है कि काउंटर के बारे में http://www.eclemma.org/jacoco/trunk/doc/counters.html देखें। और http://docs.sonarqube.org/display/SONAR/Metric+Definitions सोनारक्यूब के बारे में क्या दिखाता है। निर्देश कवरेज केवल जैकोओ में प्रस्तुत किया जाता है।

"लाइनें" ("27.1%" सोनारक्यूब के स्क्रीनशॉट में दिखाया गया है) "निर्देश" जैसा नहीं है: कोड की सिंगल लाइन में आमतौर पर कई बाइटकोड निर्देश होते हैं। तो उदाहरण के लिए यदि कुल मिलाकर आपके पास 10 लाइनों में 100 निर्देश हैं और 20 निर्देशों के साथ 1 पंक्ति को कवर करते हैं, तो 80% चूक गए हैं, लेकिन 90% याद आती है।

तो सब कुछ में, कोई विसंगति नहीं है या कम से कम यह आपके स्क्रीनशॉट पर नहीं दिखाया गया है।

+0

आपके उत्तर के लिए धन्यवाद। क्या आप स्पष्ट कर सकते हैं? सोनार का 28% कवरेज क्या है? सोनार रिपोर्ट पर 28.8% "कवरेज" पर ध्यान दें। मैं समझ में नहीं आता कि यह क्या दर्शाता है और यह जैकोको रिपोर्ट से कैसे संबंधित है। क्या शाखा कवरेज है जिसके बारे में मुझे चिंतित होना चाहिए और याद नहीं किया गया निर्देश? –

+2

"28.8%" - लाइन कवरेज और शाखा कवरेज का मिश्रण है, पेज http://docs.sonarqube.org/display/SONAR/Metric+ परिभाषित करें कि इसकी गणना कैसे की जाती है, JaCoCo इसकी गणना नहीं करता है। "27.1%" - लाइन कवरेज है, जिसे JaCoCo रिपोर्ट में प्रस्तुत किया जाना चाहिए, लेकिन आपके स्क्रीनशॉट पर नहीं दिखाया गया है (उदाहरण के लिए http://www.eclemma.org/jacoco/trunk/coverage पर 5 कॉलम "मिस्ड/लाइन" देखें) । "चिंतित"? आपका मतलब क्या है?प्रारंभिक प्रश्न विसंगति के बारे में है और कोड कवरेज मीट्रिक का उपयोग कैसे करें एक अलग कहानी है। सोनारक्यूब एक ही समय में दोनों की निगरानी को सरल बनाने के लिए शाखा और रेखाओं का एकत्रीकरण प्रदान करता है। – Godin

+0

ने मीट्रिक परिभाषाओं को इंगित करने के लिए – Godin

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