右脳系エンジニアのブログ

エンジニアとしての生き方のプロトタイピング、新しい社会のプロトタイプづくりをしています。

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

    • -Xmx COMPANYのレポートを取ろうと思うと大きなアプリケーションだとOutOfmemoryErrorがでるので適宜調整してやってください。
    • -r レポートの形式。あとxmlとかが出来るらしい
    • -sp レポートを作成する際に参考にするソースファイル。これを指定してやることでレポート中でjavaソースのどの箇所を通ったのかについても参照することが可能になります。

という風にやっていくとうまくレポート出力することができました。
Antでやればもう少し毎回の作業を簡略化できそう(?)なのだけど
今回Antに対する予備知識が少なすぎて一旦保留。

後はこれをどうやって実用化・運用にのせるかなんだけど。