SonarQubeスキャナー(バージョン3.1.0.1141)でJavaコードを分析しようとしています。
sonar-project.propertiesにこれらのプロパティを入力しました:
# Sonar sources and metadata
sonar.language=java
sonar.sources=src/main
sonar.java.source=1.8
sonar.sourceEncoding=UTF-8
sonar.java.binaries=target/classes
sonar.java.libraries=target/lib
sonar.tests=src/test
sonar.java.coveragePlugin=jacoco
sonar.junit.reportsPath=target/surefire-reports
sonar.surefire.reportsPath=target/surefire-reports
jacocoレポートは1つのクラスに対してこの結果を私に与えますが:
SonarQubeは測定値を表示します。
ソナーメトリック定義ページによると、条件カバレッジのソナーキーはbranch_coverageなので、条件とブランチカバレッジは同じものだと思いました。
異なる結果を説明する方法は?
あなたがいくつかの構成を持っていると仮定して
if(a == 1 && b == 2) {
//do this
} else {
//do that
}
あなたは2つのブランチを持っています
そして二つの条件
2つのテストケースがある場合
(cond1 && cond2)の組み合わせ条件がfalseまたはtrueであるため、両方のブランチをカバーしています。
しかし、cond1を完全にカバーし、cond2の半分のみをカバーします。つまり、条件カバー率は75%です。
完全な状態のカバレッジを取得するには、追加のテストが必要です
どちらのツールも、ラインごとのブランチ情報を使用してカバレッジを計算します。一部のコードでテストを実行し、「カバーする条件」(Sonarqube)の数は、Jacocoレポートの「ブランチ」の総数と一致しますが、jacocoおよびSonarqube / sonar-javaの最新バージョンを使用しました。そのため、名前は別として、メジャーは同じである/同じである必要があります。
しかし、あなたが提供する数を考えると、あなたの分析一般には何か奇妙なようです。異なるのはパーセント値だけではなく、絶対値でもあります(Jacocoでカバーされていない9つのブランチとSonarqubeでカバーされていない15のブランチ)。
だから私はあなたが使っているバージョンをチェックしました-jacoco 0.8.0とjacoco 0.7.9を使うsonar-javaプラグインv4.11.0.11033。
レポートの作成中に、コンパイラによって生成されたさまざまなアーティファクトが除外されます。カバレッジが部分的または欠落しないようにするために、不必要な、時には不可能なトリックが必要になります。
- メソッドvalueOfおよび列挙型の値(GitHub#491)。
- 引数なしのプライベートな空のコンストラクター(GitHub#529)。
- Lombok> = 1.16.14との統合を改善するために@ lombok.Generatedで注釈が付けられたメソッド。Rüdigerzu Dohna(@ t1)(GitHub#513)による初期の分析と貢献。
- @ groovy.transform.Generatedでアノテーションが付けられたメソッドは、Groovy> = 2.5.0との統合を改善します。アノテーションをGroovy(GitHub#610)に追加してくれたAndres Almiray(@aalmiray)に感謝します。
- 同期ブロックのバイトコードの一部(GitHub#501)。
- try-with-resourcesステートメントのバイトコードの一部(GitHub#500)。
- finallyブロックのバイトコードの一部(GitHub#604)。
- java.lang.String値のスイッチステートメントのバイトコードの一部(GitHub>#596)。
したがって、ここでの私の最良の推測は、Jacoco 0.8.0によって生成されたレポートが、前述の生成されたアーティファクトの一部をフィルターで除去して、ブランチの総数に効果的に減少したことです。ただし、Sonar-JavaはJacoco 0.7.9を使用します。これは生成されたアーティファクトをフィルターで除外しないため、数値は高くなります(カバレッジは低くなります)。
たぶん、jacocoバージョンを0.7.9にダウングレードするか、sonar-javaプラグインをアップグレードする必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加