2016-10-24 8 views
11

私はマルチモジュールのAndroidプロジェクトを持っており、ジャココレポートとSonarqubeが報告するカバレッジの間に相違があります。 プロジェクトは、さまざまなバリエーションを多数生成するマルチフレーバプロジェクトです。私はすべてのタスクを生成するためにthis pluginを使用しています。タスクは、各バリアントについて個別のレポートを生成します。Sonarqube全体のカバレッジがjacocoレポートカバレッジと一致しません

私はjacocoレポートを実行すると、私はこれを参照してください。

jacoco report

私はこれを見るソナースキャナを実行すると: sonar coverage report

を、私は私のプロジェクトのいくつかの除外を持っていますが、でもなしにそれらのカバレッジ%sは一致しません。 ソナーバージョン5.6:

ここthis question:

にほのめかしたと私は同じバイトコードを提供することはできませんように私は感じる私の関連情報です。

の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の設定に(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でのみ表示されます。

"lines"(SonarQubeのスクリーンショットに表示される「27.1%」)は、「命令」と同じではありません。通常、1行のコードには多くのバイトコード命令が含まれています。たとえば、合計で10の行に100の命令があり、20の命令で1つの行をカバーした場合、命令は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列の「missed/lines」を参照) 。 "心配している"?どういう意味ですか?最初の質問は、不一致に関するもので、コードカバレッジメトリックの使用方法は別の話です。 SonarQubeは、ブランチとラインの集約を提供し、同時に両方のモニタリングを簡素化します。 – Godin

+0

それに応じて私の答えを更新 – Godin

関連する問題