[Java][Eclipse]EclEmmaのJaCoCoが気になる
EclEmmaに関連して書いたJaCoCoについて、少し分かってきたのでメモ的なまとめ。
使い方などは公式ドキュメントが詳しいのでいいとして、このエントリはどちらかというと自分なりの解釈込みの周辺情報です。
# 間違ってたらコメントいただけると助かります。
JaCoCo -Java Code Coverage Library
http://www.eclemma.org/jacoco/trunk/index.html
■JaCoCoってどんなの?
JaCoCoはEclEmmaの開発チームが、EMMAを置き換えるためのカバレッジライブラリとして
開発を進めてきたものです。
今までも単体で利用できましたが、EclEmma2.0で晴れて組み込まれました。
ドキュメントをつらつら読んでみたのですが。
既存のカバレッジライブラリは拡張性が乏しく、すでにメンテされていないEMMAを使い続けるよりは
自分たちで拡張や統合が容易な物を作っちゃお、という事になったようです。
JaCoCoは、Antタスクでの実行、Mavenプラグインなどのフレキシブルな運用を可能にし、
バックエンド技術として、もちろんEclipseプラグインとしてEclEmmaで使うことも目的としています。
■個人的に抜粋した特徴
サイクロマチック数は実装者への戒めでしょうか…
■計測方法(JaCoCoだけで)
EMMA同様、クラスファイルに計測用のコードを埋め込んで実行という形をとるようですが、
javaagentを利用したon-the-fly方式を採用することで、バイナリに直接埋め込むのではなく、メモリ上にクラスをロードする際に前処理を挟んでいるようです。(Pleiadesと同じ感じ。)
EclEmma1.5以前まで存在していた、In-place計測もなくなっていました。
実行データの出力は、リモートへの出力などいろいろな形式があるようですが
よくわからないので、今回は単純にローカルファイルに書き出します。
・実行方法
引数に-javaagentを指定する形です。
こちらからjacocoagent.jarを入手して下さい、zipを解凍すると入っています。
・実行例
するとJVM終了と同時に以下のファイルが出てきます。
jacoco.exec
これが結果みたいです(EMMAでいうecもしくはesファイルかな)
でも中身は理解できる形のものではありません。
■レポート出力(JaCoCoだけではむりっぽい)
そこでレポート出力ですが、JaCoCo単体では出力が難しいみたいです。
Antタスクで出すか、EclEmmaに上記結果をインポートして出力するのが無難っぽいです。
一応、JaCoCoのソースも見てみましたがJaCoCo単体でレポートを出す方法はみつからず。
でもAPI Usage Examplesに、サンプルとしてこんな物がありました。
http://www.eclemma.org/jacoco/trunk/doc/examples/java/ReportGenerator.java
検証してないけど使えそう。
execファイルをプロジェクト直下にもってくる必要はありそうですね。
以上、とりあえず今回は概要と計測、レポートの出力について書きましたが
別エントリーでもう少し書いていきます。
☆余談
全然関係ないけど、最近きゃりーぱみゅぱみゅが気になってしょうがないです。
ぽーんぽーんうぇいうぇいうぇい♪ぽんぽんうぇいぽんうぇいぽんぽんっ♪
使い方などは公式ドキュメントが詳しいのでいいとして、このエントリはどちらかというと自分なりの解釈込みの周辺情報です。
# 間違ってたらコメントいただけると助かります。
JaCoCo -Java Code Coverage Library
http://www.eclemma.org/jacoco/trunk/index.html
■JaCoCoってどんなの?
JaCoCoはEclEmmaの開発チームが、EMMAを置き換えるためのカバレッジライブラリとして
開発を進めてきたものです。
今までも単体で利用できましたが、EclEmma2.0で晴れて組み込まれました。
ドキュメントをつらつら読んでみたのですが。
既存のカバレッジライブラリは拡張性が乏しく、すでにメンテされていないEMMAを使い続けるよりは
自分たちで拡張や統合が容易な物を作っちゃお、という事になったようです。
JaCoCoは、Antタスクでの実行、Mavenプラグインなどのフレキシブルな運用を可能にし、
バックエンド技術として、もちろんEclipseプラグインとしてEclEmmaで使うことも目的としています。
■個人的に抜粋した特徴
- C0に加えてC1(ブランチカバレッジ)の計測が可能
- Javaバイトコードに対して計測(別エントリでもう少し詳しく)
- サイクロマチック数の計測
- HTML,XML,CSVでのレポート出力
- Antタスクとしての実行
- EPL(…これはいいか)
サイクロマチック数は実装者への戒めでしょうか…
■計測方法(JaCoCoだけで)
EMMA同様、クラスファイルに計測用のコードを埋め込んで実行という形をとるようですが、
javaagentを利用したon-the-fly方式を採用することで、バイナリに直接埋め込むのではなく、メモリ上にクラスをロードする際に前処理を挟んでいるようです。(Pleiadesと同じ感じ。)
EclEmma1.5以前まで存在していた、In-place計測もなくなっていました。
実行データの出力は、リモートへの出力などいろいろな形式があるようですが
よくわからないので、今回は単純にローカルファイルに書き出します。
・実行方法
引数に-javaagentを指定する形です。
こちらからjacocoagent.jarを入手して下さい、zipを解凍すると入っています。
・実行例
引数はとりあえずナシで…^^java -javaagent:jacocoagent.jar %あとは実行クラスやらクラスパスやら%
するとJVM終了と同時に以下のファイルが出てきます。
jacoco.exec
これが結果みたいです(EMMAでいうecもしくはesファイルかな)
でも中身は理解できる形のものではありません。
■レポート出力(JaCoCoだけではむりっぽい)
そこでレポート出力ですが、JaCoCo単体では出力が難しいみたいです。
Antタスクで出すか、EclEmmaに上記結果をインポートして出力するのが無難っぽいです。
一応、JaCoCoのソースも見てみましたがJaCoCo単体でレポートを出す方法はみつからず。
でもAPI Usage Examplesに、サンプルとしてこんな物がありました。
http://www.eclemma.org/jacoco/trunk/doc/examples/java/ReportGenerator.java
検証してないけど使えそう。
execファイルをプロジェクト直下にもってくる必要はありそうですね。
以上、とりあえず今回は概要と計測、レポートの出力について書きましたが
別エントリーでもう少し書いていきます。
☆余談
全然関係ないけど、最近きゃりーぱみゅぱみゅが気になってしょうがないです。
ぽーんぽーんうぇいうぇいうぇい♪ぽんぽんうぇいぽんうぇいぽんぽんっ♪