テストのカバレッジを出す

xaicron
2011-12-15

はじめに

最近腰痛と肩こりで寝るのも辛い xaicron です。凝り固まった体と心を優しくときほぐしてくれる。そんな人間を皆さんには目指して欲しい。

さて、今日はテストのカバレッジを取る方法についてちょろっと書こうと思います。

カバレッジというと原理主義てきな人たちにはご褒美であり、僕らのような lazy な人間にはちょっとめんどくさいなって感じますね。
要件的議所とかにカバレッジ率 100% を目指せ!みたいなことが書いてあったりして、それが目的になっちゃったりすることもあるかと思います。

でもまぁ、カバレッジを上げることが本当の目的ではないので、あくまでも目安として使うぐらいでいいでしょう。だってカバレッジ上げるとかめんd(ry

カバレッジを取る

perl でカバレッジを取る方法といえば Devel::Cover ですね。他にもいろいろありますが。

とりあえず、テストしたいプロジェクトにいって

$ perl Makefile.PL
$ cover -test

ってするだけでテストカバレッジが取れます!すごい!!

ちなみに以下は、拙作の DBIx::QueryLog でカバレッジを取った結果です。

---------------------------- ------ ------ ------ ------ ------ ------ ------
File                           stmt   bran   cond    sub    pod   time  total
---------------------------- ------ ------ ------ ------ ------ ------ ------
blib/lib/DBIx/QueryLog.pm      99.5   82.4   82.1  100.0    0.0  100.0   90.7
Total                          99.5   82.4   82.1  100.0    0.0  100.0   90.7
---------------------------- ------ ------ ------ ------ ------ ------ ------

ぶっちゃけ 60% ぐらいかと思ってましたが、結構ちゃんとテスト書いてあったみたいです!安心ですね。
これは一個しかモジュール無いのであれですが、複数あるばあいもちゃんと OK です。

pod が 0% なのはこのモジュールの特性上致し方なし。

読み方は、それぞれ

word 意味
stmt 命令網羅率。いわゆるひとつのステートメント
barn 分岐網羅率。if とか else とか
cond 条件網羅率。or とか and とか
sub サブルーチンの網羅率。そのまま
pod ドキュメント網羅率。実装しているサブルーチンを書くべし
time なんじゃらほい

barn と cond を 100% にするのは結構たいへんなので sub と stmt ぐらいをある程度上げとけばいいのかなって思います。

ちなみに、これの詳細な結果は cover_db/coverage.html をみるとわかります。

開くと以下のような感じになっています。

cond とかをクリックすると以下のようになっててとってもわかりやすいですね。

これを見ながらいろいろと修正してカバレッジを上げて行きましょう!!

やり終えたら

$ cover -delete

とかすれば、cover_db が消えてすっきりですね。

まとめ

超絶簡単にカバレッジを取得できるので、「あれ、わたしのカバレッジ低すぎ?」と思ったらこっそり上げて行きましょう!
まぁ何事も程々にですけど。