2016-10-24 501 views
11

我有一個多模塊Android項目,我看到jacoco報告和Sonarqube報告的覆蓋率之間存在差異。 該項目也是一個多口味的項目,產生了很多不同的變種。我正在使用this plugin來幫助我生成所有任務。這些任務爲每個變體生成單獨的報告。Sonarqube整體覆蓋率與jacoco報告覆蓋率不匹配

當我跑我的jacoco報道我看到這一點:

jacoco report

當我運行聲納掃描儀我看到這一點: sonar coverage report

我有我的項目的一些例外,但即使沒有他們的覆蓋率%s不匹配。

我覺得我可能無法提供相同的字節碼在this question:

這裏是我的相關信息暗示: 聲納5.6版。

搖籃轉輪

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

聲納配置:(上根的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" 
    } 
} 

聲納配置(在應用程序/的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配置上(app/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報告的截圖中顯示)與其他任何事物的比較就像蘋果和橘子的比較 - 它們不代表同樣的事情。有關JaCoCo提供的計數器,請參閱http://www.eclemma.org/jacoco/trunk/doc/counters.html。關於SonarQube顯示的http://docs.sonarqube.org/display/SONAR/Metric+Definitions。說明覆蓋範圍僅在JaCoCo中提供。

「行數」(SonarQube屏幕截圖中顯示的「27.1%」)與「指令」不同:單行代碼通常包含許多字節碼指令。例如,如果總共有10條指令中包含100條指令,並且包含1條包含20條指令的指令,則錯過指令80%,但錯過90%。

所以總而言之,沒有任何差異,或至少它沒有顯示在您的屏幕截圖上。

+0

感謝您的回答。你能澄清一下嗎? 聲納顯示的28%覆蓋範圍是什麼? 注意聲納報告中28.8%的「覆蓋率」。我不太明白代表什麼以及它與雅可比報告的關係。 分支機構的覆蓋範圍是我應該關注的而不是遺漏的指示? –

+2

「28.8%」 - 是線路覆蓋和分支覆蓋的組合,請參閱頁面http://docs.sonarqube.org/display/SONAR/Metric+Definitions關於計算方法,JaCoCo不計算此值。 「27.1%」 - 是線路覆蓋率,應在JaCoCo報告中呈現,但未在屏幕截圖中顯示(例如,請參閱http://www.eclemma.org/jacoco/trunk/coverage中的5欄「錯過/行數」)。 。 「關心」?你什麼意思?最初的問題是關於差異,以及如何使用代碼覆蓋率度量標準是一個不同的故事。 SonarQube提供分支和線路的彙總,以同時簡化兩者的監控。 – Godin

+0

相應地更新了我的答案 – Godin