nDiki : Devel::Cover

Devel::Cover

Perlプログラム用コードカバレッジ解析モジュール。

使い方

Perl モジュールパッケージのカバレッジをチェックする

 perl Makefile.PL
 make
 cover -delete
 HARNESS_PERL_SWITCHES=-MDevel::Cover make test
 cover

Perl モジュールパッケージのカバレッジをチェックする (Windows の場合)

 perl Makefile.PL
 nmake
 cover -delete
 nmake HARNESS_PERL_SWITCHES=-MDevel::Cover test
 cover

スポンサード リンク

2004年6月3日 (木)

Perlプログラムのコードカバレッジ解析

真実32 充分テストをしたとプログラマが自信を持つソフトウェアでも、全パスの50〜60%程度しか網羅していない。 パス・カバレージ・アナライザのような自動化ツールを使うと、網羅率が85〜90%に上がる。しかし、100%のパスを網羅するのは不可能だ。

真実34 ツールを使わないと、不良除去はうまくいかない。デバッガはみんな使うが、カバレージ・アナライザは、ほとんど使わない。

ソフトウエア開発 55の真実と10のウソより。

ということで、Perl 用のカバレッジ分析ツールを探してみる。 CPAN にある Devel::Cover が良さそげ。

Debian BOX にインストール

 apt-get install libtest-differences-perl \
                 libpod-coverage-perl \
                 libtemplate-perl

してから Devel::Coverインストール

 dh-make-perl --cpan Devel::Cover --build
 dpkg --install libdevel-cover-perl_0.45-1_i386.deb

WiKickerコードカバレッジをチェックしてみる。

WiKickerExtUtils::MakeMaker を使ってパッケージ化しており、テストは t/*.t を使用するようになっているので、そのまま分析をする事ができる。

 perl Makefile.PL
 make
 cover -delete
 HARNESS_PERL_SWITCHES=-MDevel::Cover make test
 cover

出力はこんな感じ

 Reading database from /path/WiKicker/source/cover_db


 ---------------------------- ------ ------ ------ ------ ------ ------ ------
 File                           stmt branch   cond    sub    pod   time  total
 ---------------------------- ------ ------ ------ ------ ------ ------ ------
 blib/lib/WiKicker.pm          100.0    n/a    n/a  100.0    n/a    0.0  100.0
 ...cker/App/Configuration.pm   44.1    0.0    n/a   62.5    n/a    0.0   41.7
 ...icker/App/MarkUpAsHtml.pm   38.1    0.0    0.0   66.7    n/a    0.0   34.8
 ...CGI/AbstractController.pm   24.8    0.0    n/a   47.4    n/a    0.0   23.6
 [snip]
 ...ageHtmlFragmentVisitor.pm  100.0    n/a    n/a  100.0    n/a    0.0  100.0
 ...icker/WikiPage/WriNode.pm   96.4   83.3    n/a   88.9    n/a    0.9   93.0
 .../tDiaryFragmentVisitor.pm   32.3    0.0    n/a   33.3    n/a    0.0   29.8
 Total                          59.2   41.3   31.4   67.5  100.0  100.0   56.7
 ---------------------------- ------ ------ ------ ------ ------ ------ ------


 Writing HTML output to /path/WiKicker/source/cover_db/coverage.html ...
 done.

cover_db/coverage.html に各モジュール毎のコードカバレッジが表示される。 また、各モジュールファイル毎のレポートもHTMLで作成され、プログラムの各行毎のカバレッジがプログラムとともに表示される。

なかなかいい感じ。さすがにパスカバレッジはサポートしていない。

コードカバレッジを上げてもバグ0にはなるとは全然言えないのは承知しているが、テスト漏れを減らすための情報として結構使えそうだ。

スポンサード リンク
[ 6月3日全て ]

2004年6月4日 (金)

Devel::CoverAutoLoader

[ Perl ]

コードカバレッジをチェックするDevel::Coverであるが、AutoSplit / AutoLoader を使っていると分割されたサブルーチンが対象にならない。WiKicker では AutoLoader を多用しているので、ここがチェックされないと意味がない。

ということで Devel::Cover下でテストする時は AutoLoader を使わないようしてみる。

 perl Makefile.PL WIKICKER_NO_AUTOLOAD=1

とした時はExtUtils::MakeMaker::WriteMakefile に PM_FILTER として

 q($(PERL) -e "while (<>) {s!^\\\\s*use\\\\s+AutoLoader.*!!g; s!^__END__!!g; print} print qq(\\n1;\\n); ")

を渡すように Makefile.PL を修正。これで

 perl Makefile.PL WIKICKER_NO_AUTOLOAD=1
 make
 cover -delete
 HARNESS_PERL_SWITCHES=-MDevel::Cover make test
 cover

とすると AutoLoader を使わないバージョンでチェックができる。

[ 6月4日全て ]

2004年6月12日 (土)

[ DiKicker ] Term DB の改良

改良とういか実装DiKicker の Term DB (記事のインデックスファイル)はまだ不完全で、記事・単語の削除機能が一部未実装のところがある。 まとまった時間がとれたので、がりがりコードを書く。

Devel::Coverを使って、テストケースで各コードが使われているかを確認。 Perl だとメソッド名の typo など実際に実行されるまで気がつかないバグがあるので、コードを通過しているかどうかだけでもチェックできると結構便利。

WiKicker の部分とあわせて、Log::Log4perl によるロギングも随時整理。

[ 6月12日全て ]

2013年8月7日 (水)

今日のさえずり: 30行計画とかまた懐かしいワードが

2013年08月07日

[ 8月7日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィでマネージャー・プロダクトオーナーをしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

follow us in feedly

※内容は個人的見解であり所属組織とは関係ありません。

月別インデックス
Process Time: 0.051813s / load averages: 0.50, 0.54, 0.49
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker