Devel::Cover

http://search.cpan.org/dist/Devel-Cover/

id:tokuhiromがDevel::Cover期とのことで、Perlカバレッジ率はかるモジュールDevel::Coverを知った。Javaの案件だとカバレッジ率気にするのに、Perlだとあまり気にしていなかったなーとか自分への自戒をこめて、Devel::Coverの読み方メモ。

cover

perl Makefile.PL
make test

する代わりに、

perl Makefile.PL
HARNESS_PERL_SWITCHES=-MDevel::Cover=+ignore,inc make test
cover

か、

perl Makefile.PL
cover -test -ignore_re "^inc/"

これで、モジュールのコードとt/以下のテスト内容を調べてカバレッジ率を出してくれる。

incをよけてるのはModule::Installのカバレッジを取っても仕方ないため。

coverage.html

結果のサマリが出力されるけど、cover_db/coverage.htmlというHTMLが以下みたいにカラフルでわかりやすい。クリックしてソースのどこが減点となったかわかるし

読み方

  • stmt: Statement coverage 命令網羅率 (C0) … テストに通していない文があったら減点
  • bran: Branch coverage 分岐網羅率 (C1) … if/else文とかで分岐するところで、テストが両方みていないと減点
  • cond: Condition coverage 条件網羅率 (C2) … $a and $b and $c みたいなところで、それぞれの全パターン網羅してないと減点
  • sub: Subroutine coverage サブルーチン網羅率 (独自) … テストで使ってないサブルーチンあると減点。_で始まるサブルーチンは内部関数とみなして減点にならないので、privateな関数は_つけたほうがよさげ
  • pod: POD coverge ドキュメント網羅率 (独自) … サブルーチンでPODにかかれてないものがあると減点(Pod::Coverage)