Erlang でコードカバレッジを取得する方法
Erlang でコードカバレッジでを取得する方法は大きく分けて 2 つある。どちらの場合も cover モジュールを利用している。
方法1 Common Test を使う
Erlang Common Test を利用してテストを書き、カバレッジをオプションを有効にしてテストを実行すれば良い。
以下のような coverspec ファイルを用意する。incl_mods のところにカバレッジをとりたいモジュールを指定。
{level, details}. {incl_mods, [xxx_sup, xxx_app]}.
run_test スクリプトの引数に -cover [coverspecファイル] オプションをつけて実行すると、カバレッジ結果が html で出力される。
方法2 cover モジュールを直接使う
Common Test を使う方法は Common Test 経由でのテストでしか使えないので柔軟性に欠ける。例えばアプリケーションを立ち上げて外部ツールなどで負荷をかけ、その際のカバレッジを見たい場合などに困る。
このような場合 cover モジュールを直接使えば良い。やるべき事は以下の通り。
cover モジュールを使う方法のメリット
面白い事に cover:compile、cover:start などを動的に呼び出しても良い。つまり起動中の(分散)ノードのカバッレジを動的に ON/OFF できるのだ。
サーバー系のノードでこれができるのはとてもうれしい。
注意
cover:analyze の前に cover:stop を呼ぶと code:analyze の戻り値が {error,{not_cover_compiled,Module}}. となりはまるので注意。