Cobertura とは、オープンソースで開発されているコードカバレッジ測定ツールである。Coberturaはコマンドラインから実行するほか、Apache Antのタスクとして実行することもできる。測定した結果は、HTML形式などの視覚的なレポートとして出力される。
Coberturaは、測定対象となるプログラムのクラスファイルの内容を書き換え、カバレッジを取得するためのコードを埋め込む。そして、JUnitのテストケースを実行して、クラスファイルに埋め込まれた測定コードから各処理がそれぞれ何回実行されたかという情報を記録して、その内容をserファイルという形式で出力する。
テストの実行が完了すると、Coberturaはserファイルを読み込み、レポートとしてまとめてHTML形式やXML形式で出力する。
コードカバレッジとは「プログラム全体がテストコードによってどの程度テストされているか」を示す割合のことである。つまり、どれだけ十分にテストしたかを表す指標となる。ただし、何を基準に100%とするか測定方法がいくつかある。
以下に示すJavaコードを例に、代表的な3種類の測定方法を示す。
public void doSample() {
if (条件1) {
// 処理1
} else {
// 処理2
}
if (条件2 || 条件3) {
// 処理3
} else {
// 処理4
}
}
C0カバレッジ(命令網羅) とは、テストによってプログラムの各行が1回以上実行されれば100%とする測定方法である。
上記のJavaコードの例では、以下のテストケースがあればカバレッジが100%となる。
条件や処理の組み合わせに関わらず、処理1~4がすべて実行されればよい
C1カバレッジ(分岐網羅) とは、全ての分岐の組み合わせが実行されれば100%とする測定方法である。
上記のJavaコードの例では、以下のテストケースがあればカバレッジが100%となる。
C2カバレッジ(条件網羅) とは、条件分岐の全ての組み合わせが実行されれば100%とする測定方法である。
上記のJavaコードの例では、以下のテストケースがあればカバレッジが100%となる。
このように、C0カバレッジが100%となるテストに比べて、C1カバレッジやC2カバレッジが100%となるテストのほうが厳密なテストになる。ただし、その分テストケースが増えることになる。
Coberturaは全体のコードに対してテストがどれくらい完了したかを示すカバレッジ・レポートを出力できる。
Mavenプロジェクトのpom.xmlに以下の設定を追加する。
<project>
<reporting>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>2.7</version>
</plugin>
</plugins>
</reporting>
</project>
CoberturaはEclipseプラグインとしても利用できる。
JenkinsからCoberturaを利用できるプラグインが用意されている。Jenkins Cobertura Pluginをインストールすると、テスト結果をもとにカバレッジレポートが出力される。
Javaコードカバレッジツールとして、CoberturaのほかにJaCoCoがある。