沼津暮らし

沼津で暮らしているウェブエンジニアが雑多に書くブログ

OSS版のCloverでテストカバレッジとコードのメトリクスを可視化

テストカバレッジやコードの統計情報はいろいろなツールがありますよね。

僕は Java の開発ではCloverでテストカバレッジを取る事が多いです。

これまではライセンスが必要だったのですが、最近OSSになったので気軽に利用できるようになりました。

これはテストカバレッジだけじゃなくてコードの複雑度とかも測ってくれるので結構参考になります。

Maven プラグイン

導入は簡単 pom.xml に以下を記載するだけ。

  <build>
    <plugins>
      <plugin>
        <groupId>org.openclover</groupId>
        <artifactId>clover-maven-plugin</artifactId>
        <version>4.2.0</version>
      </plugin>
    </plugins>
  </build>

その後以下のコマンドでレポートを出力。

[localhost] $ mvn clean verify clover:instrument clover:aggregate clover:clover

そうすると「target/site/clover」というディレクトリができて、HTMLでレポートが作成される。

f:id:koijima_proto:20171207224326p:plain

今回は以前作成したサンプルコードに導入してみました。

GitHub - koijima/schema_lib_example: スキーマライブラリの使用例

これでテストのカバレッジとコードの統計情報が見えるようになりました。

まぁこのサンプルではテストコードも書いてなければコードも少しなのであまり面白くありません。

OSSで公開されているソースコードでやってみた

GitHub上で公開されているOSSでCloverを使って可視化をしてみました。

カバレッジやコードのメトリクスは以下のような感じです。

f:id:koijima_proto:20171207222853p:plain

またグラフなどで分かりやすくなっています。

f:id:koijima_proto:20171207223051p:plain

コードメトリクス

コードの行数とかもうれしいのですが、個人的にうれしいのは複雑度のメトリクスが出ていることがいいです。

Total complexity

合計の複雑度。単純には言えないですが少ないほうが分かりやすいコードの目安です。

このOSSでは合計で5235の複雑度があります。

Average method complexity

1メソッドの平均的な複雑度です。

このOSSでは1メソッド平均2.03となります。

日本語で言うと循環的複雑度なのですが、以下を参照してもらえればと思います。

循環的複雑度 - Wikipedia

ちなみにプログラムは10以下でバグの混入率は25%以下と良い状態といえるみたいです。

(この表現良く見るのですがクラスなのかメソッドなのかいまいち分かってないです)

75以上となると95%とほとんどバグが混入している状態となるようです。

もし、メソッドだとしたらFactoryとかのswitch文以外では見るのが嫌になりそうですね・・・

ちなみに「Complexity density」がいまいち良く分かってないです。何気に知りたいです。

Test-NGを使った場合の結果

例で利用したテストコードの無いリポジトリにTest-NGを使ったテストケースを追加してみます。

https://github.com/koijima/schema_lib_example/blob/master/src/test/java/sandbox/koijima/schema_lib/TestCsvToJson.java

(何もテストしてねーじゃんっていうのはおいて置いて、これでカバレッジは出るはずである。)

f:id:koijima_proto:20171215214459p:plain

Test-NGにも対応しているみたいなので対応しているテストツールはJUnitだけではなさそうです。

まとめ

Cloverは簡単にテストカバレッジとコードのメトリクスを可視化できます。

Jenkinsなどでも対応しているので良かったら試してみてください。