最近腰痛と肩こりで寝るのも辛い 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 が消えてすっきりですね。
超絶簡単にカバレッジを取得できるので、「あれ、わたしのカバレッジ低すぎ?」と思ったらこっそり上げて行きましょう!
まぁ何事も程々にですけど。