Cobertura

Cobertura とは、オープンソースで開発されているコードカバレッジ測定ツールである。Coberturaはコマンドラインから実行するほか、Apache Antのタスクとして実行することもできる。測定した結果は、HTML形式などの視覚的なレポートとして出力される。

Coberturaとは

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カバレッジ(命令網羅)

C0カバレッジ(命令網羅) とは、テストによってプログラムの各行が1回以上実行されれば100%とする測定方法である。

上記のJavaコードの例では、以下のテストケースがあればカバレッジが100%となる。

条件や処理の組み合わせに関わらず、処理1~4がすべて実行されればよい

C1カバレッジ(分岐網羅)

C1カバレッジ(分岐網羅) とは、全ての分岐の組み合わせが実行されれば100%とする測定方法である。

上記のJavaコードの例では、以下のテストケースがあればカバレッジが100%となる。

C2カバレッジ(条件網羅)

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>

Eclipse

CoberturaはEclipseプラグインとしても利用できる。

Jenkins

JenkinsからCoberturaを利用できるプラグインが用意されている。Jenkins Cobertura Pluginをインストールすると、テスト結果をもとにカバレッジレポートが出力される。

JaCoCo

Javaコードカバレッジツールとして、CoberturaのほかにJaCoCoがある。