1. 概要

この記事では、Coberturaを使用してコードカバレッジレポートを生成するのいくつかの側面を示します。

簡単に言えば、Coberturaは、コードベースのテストカバレッジ(Javaプロジェクトの単体テストによってアクセスされるブランチ/ラインのパーセンテージ)を計算するレポートツールです。

2. Mavenプラグイン

2.1. Maven構成

Javaプロジェクトでコードカバレッジの計算を開始するには、レポートセクションのpom.xmlファイルでCoberturaMavenプラグインを宣言する必要があります。

<reporting>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>cobertura-maven-plugin</artifactId>
            <version>2.7</version>
        </plugin>
    </plugins>
</reporting>

プラグインの最新バージョンは、Maven中央リポジトリでいつでも確認できます。

完了したら、 cobertura:coberturaを目標として指定してMavenを実行します。

これにより、コードインストルメンテーションを介して収集されたコードカバレッジ統計を示す詳細なHTMLスタイルのレポートが作成されます。

ラインカバレッジメトリックは、単体テストの実行で実行されるステートメントの数を示し、ブランチカバレッジメトリックは、それらのテストでカバーされるブランチの数に焦点を当てます

条件ごとに2つのブランチがあるため、基本的には、条件の2倍のブランチを持つことになります。

複雑さの係数はコードの複雑さを反映します—コードの分岐数が増えると高くなります。

理論的には、ブランチが多いほど、ブランチカバレッジスコアを上げるために実装する必要のあるテストが多くなります。

2.2. コードカバレッジの計算とチェックの構成

ignoreおよびexcludeタグを使用して、コードインストルメンテーションから特定のクラスのセットを無視/除外できます。

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>cobertura-maven-plugin</artifactId>
    <version>2.7</version>
    <configuration>
        <instrumentation>
            <ignores>
                <ignore>com/baeldung/algorithms/dijkstra/*</ignore>
            </ignores>
            <excludes>
                <exclude>com/baeldung/algorithms/dijkstra/*</exclude>
            </excludes>
        </instrumentation>
    </configuration>
</plugin>

コードカバレッジを計算した後、チェックフェーズが始まります。 チェックフェーズでは、特定のレベルのコードカバレッジに到達していることを確認します

checkフェーズを構成する方法の基本的な例を次に示します。

<configuration>
    <check>
        <haltOnFailure>true</haltOnFailure>
        <branchRate>75</branchRate>
        <lineRate>85</lineRate>
        <totalBranchRate>75</totalBranchRate>
        <totalLineRate>85</totalLineRate>
        <packageLineRate>75</packageLineRate>
        <packageBranchRate>85</packageBranchRate>
        <regexes>
            <regex>
                <pattern>com.baeldung.algorithms.dijkstra.*</pattern>
                <branchRate>60</branchRate>
                <lineRate>50</lineRate>
             </regex>
        </regexes>
    </check>
</configuration>

haltOnFailure フラグを使用する場合、指定されたチェックの1つが失敗すると、Coberturaによってビルドが失敗します。

branchRate / lineRate タグは、コードインストルメンテーション後に必要な最小許容ブランチ/ラインカバレッジスコアを指定します。 これらのチェックは、 packageLineRate /packageBranchRateタグを使用してパッケージレベルに拡張できます。

regex タグを使用して、特定のパターンに従った名前のクラスに対して特定のルールチェックを宣言することもできます。 上記の例では、 com.baeldung.algorithms.dijkstra パッケージ以下のクラスについて、特定のライン/ブランチカバレッジスコアに到達する必要があることを確認しています。

3. Eclipseプラグイン

3.1. インストール

Coberturaは、eCoberturaと呼ばれるEclipseプラグインとしても利用できます。 Eclipse用のeCoberturaをインストールするには、以下の手順に従って、Eclipseバージョン3.5以降をインストールする必要があります。

ステップ1: Eclipseメニューから、ヘルプ新しいソフトウェアのインストールを選択します。 次に、作業フィールドで、http://ecobertura.johoop.de/update/と入力します。

ステップ2: eCoberturaコードカバレッジを選択し、[次へ]をクリックして、インストールウィザードの手順に従います。

eCobertura がインストールされたので、Eclipseを再起動し、Windows→ShowView→Other→Coberturaの下にカバレッジセッションビューを表示します。

3.2. EclipseKepler以降を使用する

新しいバージョンのEclipse(Kepler、Lunaなど)の場合、 eCobertura をインストールすると、JUnitに関連する問題が発生する可能性があります— Eclipseにパッケージ化された新しいバージョンのJUnitは、eCoberturaと完全に互換性がありません。依存関係チェッカー:

Cannot complete the install because one or more required items could not be found.
  Software being installed: eCobertura 0.9.8.201007202152 (ecobertura.feature.group
     0.9.8.201007202152)
  Missing requirement: eCobertura UI 0.9.8.201007202152 (ecobertura.ui 
     0.9.8.201007202152) requires 'bundle org.junit4 0.0.0' but it could not be found
  Cannot satisfy dependency:
    From: eCobertura 0.9.8.201007202152 
    (ecobertura.feature.group 0.9.8.201007202152)
    To: ecobertura.ui [0.9.8.201007202152]

回避策として、古いバージョンのJUnitをダウンロードして、Eclipseプラグインフォルダーに配置できます。

これを行うには、 %E CLIPSE_HOME % / pluginsからフォルダーorg.junit。***を削除し、同じフォルダーを古いEclipseインストールからコピーします。 eCoberturaと互換性があります。

完了したら、 Eclipse IDEを再起動し、対応する更新サイトを使用してプラグインを再インストールします。

3.3. Eclipseのコードカバレッジレポート

単体テストでコードカバレッジを計算するには、プロジェクト/テストを右クリックしてコンテキストメニューを開き、[対象範囲]→[JUnitテスト]オプションを選択します。

カバレッジセッションビューで、クラスごとのライン/ブランチカバレッジレポートを確認できます。

Java 8ユーザーは、コードカバレッジを計算するときに一般的なエラーが発生する可能性があります。

java.lang.VerifyError: Expecting a stackmap frame at branch target ...

この場合、Javaは、新しいバージョンのJavaで導入されたより厳密なバイトコードベリファイアのために、適切なスタックマップを持たないいくつかのメソッドについて不平を言っています。

この問題は、Java仮想マシンで検証を無効にすることで解決できます。

これを行うには、プロジェクトを右クリックしてコンテキストメニューを開き、 Cover As を選択してから、 CoverageConfigurationsビューを開きます。 [引数]タブで、VM引数として-noverifyフラグを追加します。 最後に、 Coverage ボタンをクリックして、カバレッジ計算を開始します。

フラグ-XX:-UseSplitVerifier を使用することもできますが、分割ベリファイアはJava 8でサポートされなくなったため、これはJava6および7でのみ機能します。

4. 結論

この記事では、Coberturaを使用してJavaプロジェクトのコードカバレッジを計算する方法を簡単に説明しました。 また、Eclipse環境にeCoberturaをインストールするために必要な手順についても説明しました。

Coberturaは、優れたシンプルなコードカバレッジツールですが、現在 JaCoCo などのより新しく、より強力なツールよりも優れているため、積極的に保守されていません。

最後に、この記事で提供されている例をGitHubプロジェクトで確認できます。