Jacocoでコードカバレッジを測ってみた。

  • Jacocoが出力してくれるhtmlでのレポート

  • Jacocoレポート形式をCoberturaの形式に変換して出力

経緯とか

今の現場ではEmmaを使用してコードカバレッジを測っていたようですが、EmmaはJava7対応していないらしくしばらくカバレッジが測定できていませんでした。
そのままじゃマズイよね。って事で解消するために調べた結果、今はJacocoが定番っぽいので試してみました。

ちょっと前まではカバレッジ測定のツールCoberturaとかEmmaが定番だったようですが、共にJava7に対応していないようです。
が、全て終わってからCoberturaを調べたら数年ぶりに更新されて対応されている??

Jacocoとは

Eclipseプラグインである「EclEmma」の開発チームが開発が2005年で止まっている「Emma」の代わりに開発したカバレッジ測定ツール。

Eclipseでの実行

Eclipseでもプラグインを入れることでカバレッジの測定が可能。

Mavenの設定方法

  • pom.xmlを編集
    • JUnit実行する「maven-surefire-plugin」の引数に「${jacocoArgs}」を設定
    • 「project/build/plugins/plugin」に「org.jacoco」、「jacoco-maven-plugin」を追加
    • 「project/reporting/plugins/plugin」に「org.jacoco」、「jacoco-maven-plugin」を追加
    • 参考
<build>
	<pluginManagement>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<argLine>${jacocoArgs} -Xmx256m -XX:MaxPermSize=256m</argLine>
				</configuration>
			</plugin>
		</plugins>
	</pluginManagement>
<!-- 中略 -->
	<plugins>
		<plugin>
			<groupId>org.jacoco</groupId>
			<artifactId>jacoco-maven-plugin</artifactId>
			<version>0.7.1.201405082137</version>
			<executions>
				<execution>
					<id>prepare-agent</id>
					<phase>test-compile</phase>
					<goals>
						<goal>prepare-agent</goal>
					</goals>
					<configuration>
						<propertyName>jacocoArgs</propertyName>
						<includes>
							<include>*</include>
						</includes>
					</configuration>
				</execution>
				<execution>
					<id>report</id>
					<phase>prepare-package</phase>
					<goals>
						<goal>report</goal>
					</goals>
				</execution>
			</executions>
		</plugin>
<!-- 中略 -->
	</plugins>
</build>
<!-- 中略 -->
<reporting>
	<plugins>
<!-- 中略 -->
		<plugin>
			<groupId>org.jacoco</groupId>
			<artifactId>jacoco-maven-plugin</artifactId>
		</plugin>
	</plugins>
</reporting>
  • 実行
    • コマンド
mvn clean jacoco:prepare-agent test jacoco:report
  • 結果
    • ↓に出力されます。
target/site/jacoco/index.html
    • ↓にバイナリ形式でも出力されているようです。
target/jacoco.exec

Jenkinsでの実行

    • 成果物の保存で↓を指定しておくといい感じ。
**/site/jacoco/**
  • HTMLで出力された結果もいい感じに見れるのでオススメ。(というかこちらの方が見やすい?)
    • 出力PATH
target/site/jacoco/index.html
  • Jacocoが出力してくれるhtmlでのレポート

Jacoco形式のレポートからCobertura形式に変換

これらは社内で試した内容なのですが、Jacoco形式は見難いという話が出たのでCobertura形式に変換してみました。

  • Jacocoのレポートが出力される
  • ↓を使用してCobertura形式に変換。
https://github.com/rix0rrr/cover2cover
  • Coberturaプラグインで変換した結果をまとめて集計。
    • が、Jenkinsで複数のGitリポジトリをビルドする方法がわからなかったので結局リポジトリに入れてしまった次第です。(参考blogはみつけたんですが。。。)
  • Jacocoレポート形式をCoberturaの形式に変換して出力

Emmaからの乗換える場合

Jacocoの設定をしてEmmaの設定を除去すればそれでOK