web-dev-qa-db-ja.com

Sonarqubeの全体的なカバレッジがjacocoレポートのカバレッジと一致しません

マルチモジュールAndroidプロジェクトがあり、jacocoが報告するカバレッジとSonarqubeが報告するカバレッジの間に不一致が見られます。このプロジェクトは、さまざまな種類を生成するマルチフレーバープロジェクトでもあります。バリアント。私は このプラグイン を使用して、すべてのタスクを生成します。タスクは、バリアントごとに個別のレポートを生成します。

Jacocoレポートを実行すると、次のように表示されます。

jacoco report

ソナースキャナーを実行すると、次のように表示されます: sonar coverage report

プロジェクトにいくつかの除外がありますが、それらがなくてもカバレッジ%sは一致しません。

この質問: で示唆されているのと同じバイトコードを提供していないように感じます

これが私の関連情報です:Sonarバージョン5.6。

Gradleランナー

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"
    }
}

ソナー構成(app/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 on(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
}
17
Nelson Ramirez

私が見る限り、ブランチカバレッジは同じです。どちらの場合も40%、15がカバーされていません。

また、「指示」(JaCoCoレポートのスクリーンショットに表示)と他のものとの比較は、リンゴとオレンジの比較のようなものです。これらは同じことを表すものではありません。 JaCoCoが提供するカウンターについては、 http://www.eclemma.org/jacoco/trunk/doc/counters.html を参照してください。そして http://docs.sonarqube.org/display/SONAR/Metric+Definitions SonarQubeが示すものについて。手順の範囲はJaCoCoでのみ表示されます。

「lines」(SonarQubeのスクリーンショットに示されている「27.1%」)は「instructions」と同じではありません。通常、1行のコードには多くのバイトコード命令が含まれています。したがって、たとえば、合計で10行に100の命令があり、1行を20の命令でカバーしている場合、命令を80%見逃しましたが、行を90%見逃しました。

したがって、全体として、不一致はないか、少なくともスクリーンショットには表示されません。

15
Godin