Emmaを利用したブラックボックステストのカバレージ計測
ブラックボックスのテストを実行した結果、ソースをどのくらい網羅することができているかしれると良いなとか思っていたら、結構簡単にできたので紹介します。
そもそもなんでこういうことを思ったかというと、外部仕様が内部構造(内部仕様とココで使っていいのか?)を満たすものになっているかを考えるためのひとつの指標になるのではないかと思ったためです。
コレが出来ていればバッチリだね!という類というよりどちらかというと
これは出来てなきゃまずいよね、という類のものですね。
今回はEmmaというツールを利用しました。
EMMA a free Java code coverage tool
http://emma.sourceforge.net/
Emma.えんま?エマ?読み方としてはどちらがいいのだろう。後者かなぁという感じ
EmmaにはOn The Fly モードと Offlineモードというのがあるようですが、
今回はOfflineモードを利用して行いました。
この方法で行うとアプリケーションサーバーをそのまま動作させて計測することができるので、より実際の環境に近い検証を行えたり、自動テストツールがAPサーバーに依存してしまっていたりした場合にも対応できそうです。WASやWebLogicでも利用可みたいです。
今回は、日本語のサイトでOfflineモードでAPサーバーを利用して計測レポートを出力するという方法があんまり見つからなかったので、その方法についてまとめておきたいと思います。
それ以外のもう少し基本的な情報については
こちらのサイト様で簡単な利用方法が載っていますので、こちらを参考にするとよいと思います。
EMMA - 気の向くままに・・・ - livedoor Wiki(ウィキ)
http://wiki.livedoor.jp/syo1976/d/EMMA
jarファイルにEmmaの測定用コードを埋め込む
このあたりは上記のサイトに詳しくのっているので、こんな感じ。
java.exe -cp emma.jar emma instr -m overwrite -cp hogehoge.jar
この時点でCoverage.em というファイルが生成されるので確認しておいてください。
APサーバーのjre/lib/extフォルダにEmma.jarを配置する
だいたいのサーバーは
%AP_SERVER_PATH%\java\jre\lib\ext
とかになるのかな?こちらにEmma.jarを配置します。
サーブレットを停止する
本当は途中でも吐き出せるコマンドがあるらしいのですが、上手く行きませんでした。
今回はサーブレットを停止しています。
サーブレットを停止すると、coverage.ec というファイルが
APサーバーのディレクトリのどこかに生成されます。
一般的には「Javaの作業ディレクトリー」などと総称されるようなところに出力されるようです。
coverage.em とcoverage.ec を集めてレポート出力
java.exe -Xmx128m -cp emma.jar emma report -r html -sp ./src -in coverage.em,coverage.ec
という風にやっていくとうまくレポート出力することができました。
Antでやればもう少し毎回の作業を簡略化できそう(?)なのだけど
今回Antに対する予備知識が少なすぎて一旦保留。
後はこれをどうやって実用化・運用にのせるかなんだけど。