Coberturaの紹介

1概要

この記事では、http://cobertura.github.io/cobertura/ を使用してコードカバレッジレポートを生成する いくつかの側面について説明します。

簡単に言うと、Coberturaはコードベースのテストカバレッジ、つまりJavaプロジェクト内のユニットテストによってアクセスされるブランチ/ラインの割合を計算するレポート作成ツールです。

2 Mavenプラグイン

2.1. Mavenの設定

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

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

最新版のプラグインはいつでも確認できます。 -maven-plugin%22[Mavenの中央レポジトリ]。

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

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

リンク:/uploads/cob-e1485730773190-300x128.png%20300w[]

  • 行カバレッジメトリックは、ユニットテストで実行されたステートメントの数を示します。** ブランチカバレッジメトリックは、これらのテストでカバーされたブランチの数に焦点を合わせます。

各条件式には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 フェーズが来ます。 check フェーズは、一定レベルのコードカバレッジが達成されることを保証します

以下は 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 フラグを使用するとき、Coberturaは指定されたチェックの1つが失敗するとビルドを失敗させます。

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

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

3 Eclipseプラグイン

3.1. インストール

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

  • ステップ1:** Eclipseのメニューから、[ヘルプ]→[新しいソフトウェアのインストール]の順に選択します。

次に、[ with with]フィールドに http://ecobertura.johoop.de/update/__と入力します。

リンク:/uploads/cob3-e1485814235220-300x200.png%20300w[]

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

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

リンク:/uploads/cob3-e1485814235220-1.png[]

3.2. Eclipse Kepler以降を使う

Eclipseの新しいバージョン(Kepler、Lunaなど)では、 eCobertura をインストールするとJUnitに関連した問題が発生する可能性があります。

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のpluginsフォルダに置くことができます。

これは__%ECLIPSE__HOME%/plugins__からフォルダー__org.junit。** ** **  __を削除してから、__eCobertura__と互換性のある古いEclipseインストールから同じフォルダーをコピーすることで実行できます。

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

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

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

__Coverage Session__ビューでは、クラスごとに回線/支店カバレッジレポートを確認できます。

リンク:/uploads/Sans-titre-e1487178259898-300x265.png%20300w[]

Java 8ユーザーはコードカバレッジを計算するときによくあるエラーに遭遇するかもしれません:

[source,text,gutter:,true]

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

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

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

これを行うには、プロジェクトを右クリックしてコンテキストメニューを開き、[__名前を付けてカバー__]を選択して、[カバー構成]ビューを開きます。引数タブで、VM引数として__-noverify__フラグを追加します。最後に、__coverage__ボタンをクリックしてカバレッジ計算を開始します。

フラグ__-XXを使用することもできます。

===  **  4結論**

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

Coberturaはすばらしいが単純なコードカバレッジツールですが、link:/jacoco[JaCoCo]のようなより新しくより強力なツールには現在のところ優れているので積極的にメンテナンスされていません。

最後に、この記事で提供されている例をhttps://github.com/eugenp/tutorials/tree/master/algorithms-miscellaneous-2[** GitHub project ** ]で確認できます。