コベルチュラの紹介
1. 概要
この記事では、generating code coverage reports using Coberturaのいくつかの側面を示します。
簡単に言えば、Coberturaはコードベースのテストカバレッジ、つまりJavaプロジェクトの単体テストによってアクセスされるブランチ/ラインの割合を計算するレポートツールです。
2. Mavenプラグイン
2.1. Mavenの構成
Javaプロジェクトでコードカバレッジの計算を開始するには、レポートセクションでdeclare the Cobertura Maven plugin in your pom.xml fileを実行する必要があります。
org.codehaus.mojo
cobertura-maven-plugin
2.7
プラグインの最新バージョンは、Maven central repositoryでいつでも確認できます。
完了したら、先に進み、cobertura:coberturaを目標として指定してMavenを実行します。
これにより、コードインストルメンテーションによって収集されたコードカバレッジ統計を示す詳細なHTMLスタイルレポートが作成されます。
ユニットテストのThe line coverage metric shows how many statements are executedが実行され、the branch coverage metric focuses on how many branches are covered by those testsが実行されます。
条件ごとに2つのブランチがあるため、基本的には、条件の2倍のブランチがあります。
The complexity factor reflects the complexity of the code —コード内のブランチの数が増えると上昇します。
理論的には、ブランチが多いほど、ブランチカバレッジスコアを上げるために実装する必要があるテストが増えます。
2.2. コードカバレッジの計算とチェックの構成
ignoreタグとexcludeタグを使用して、特定のクラスのセットをコードインストルメンテーションから無視/除外できます。
org.codehaus.mojo
cobertura-maven-plugin
2.7
com/example/algorithms/dijkstra/*
com/example/algorithms/dijkstra/*
コードカバレッジを計算した後、checkフェーズが始まります。 The check phase ensures that a certain level of code coverage is reached。
checkフェーズを構成する方法の基本的な例を次に示します。
true
75
85
75
85
75
85
com.example.algorithms.dijkstra.*
60
50
haltOnFailureフラグを使用する場合、指定されたチェックの1つが失敗すると、Coberturaはビルドを失敗させます。
branchRate/lineRateタグは、コードインストルメンテーション後に必要な最小許容ブランチ/ラインカバレッジスコアを指定します。 これらのチェックは、packageLineRate/packageBranchRateタグを使用してパッケージレベルに拡張できます。
regexタグを使用して、特定のパターンに従った名前を持つクラスの特定のルールチェックを宣言することもできます。 上記の例では、com.example.algorithms.dijkstraパッケージ以下のクラスで特定のライン/ブランチカバレッジスコアに到達する必要があることを確認しています。
3. Eclipseプラグイン
3.1. インストール
Coberturaは、eCoberturaと呼ばれるEclipseプラグインとしても利用できます。 Eclipse用にeCoberturaをインストールするには、以下の手順に従って、Eclipseバージョン3.5以降をインストールする必要があります。
Step 1: Eclipseメニューから、Help→Install New Softwareを選択します。 次に、フィールドのwork withにhttp://ecobertura.johoop.de/update/と入力します。
Step 2:eCobertura Code Coverageを選択し、[次へ]をクリックして、インストールウィザードの手順に従います。
eCoberturaがインストールされたので、Eclipseを再起動し、Windows → Show View → Other → Coberturaの下にカバレッジセッションビューを表示します。
3.2. EclipseKepler以降の使用
新しいバージョンのEclipse(Kepler、Lunaなど)の場合、eCoberturaをインストールすると、JUnitに関連する問題が発生する可能性があります—the newer version of JUnit packaged with Eclipse is not fully compatible with eCobertura‘s dependencies checker:
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プラグインフォルダーに配置できます。
これは、%ECLIPSE_HOME%/pluginsからフォルダーorg.junit.***を削除し、eCoberturaと互換性のある古いEclipseインストールから同じフォルダーをコピーすることで実行できます。
完了すると、対応する更新サイトを使用してrestart your Eclipse IDE and re-install the pluginが実行されます。
3.3. Eclipseのコードカバレッジレポート
単体テストでコードカバレッジを計算するには、プロジェクト/テストを右クリックしてコンテキストメニューを開き、オプションCover As → JUnit Testを選択します。
Coverage Sessionビューで、クラスごとのライン/ブランチカバレッジレポートを確認できます。
Java 8ユーザーは、コードカバレッジを計算するときに一般的なエラーが発生する可能性があります。
java.lang.VerifyError: Expecting a stackmap frame at branch target ...
この場合、Javaは、新しいバージョンのJavaで導入されたより厳密なバイトコード検証機能により、適切なスタックマップを持たないメソッドについて不満を言っています。
この問題は、Java仮想マシンで検証を無効にすることで解決できます。
これを行うには、プロジェクトを右クリックしてコンテキストメニューを開き、Cover Asを選択してから、Coverage Configurationsビューを開きます。 [引数]タブで、VM引数として-noverifyフラグを追加します。 最後に、coverageボタンをクリックして、カバレッジ計算を開始します。
フラグ-XX:-UseSplitVerifierを使用することもできますが、分割ベリファイアはJava 8でサポートされなくなったため、これはJava6および7でのみ機能します。
4. 結論
この記事では、Coberturaを使用してJavaプロジェクトのコードカバレッジを計算する方法を簡単に示しました。 また、Eclipse環境にeCoberturaをインストールするために必要な手順についても説明しました。
Coberturaは、優れたシンプルなコードカバレッジツールですが、現在、JaCoCoなどのより新しく、より強力なツールよりも優れているため、積極的に保守されていません。
最後に、この記事で提供されている例をGitHub projectで確認できます。