Asial Blog

Recruit! Asialで一緒に働きませんか?

xdebugを使ったコードカバレッジ集計

カテゴリ :
バックエンド(プログラミング)
タグ :
Tech
PHP
こんにちは、牧野です。久々のブログになりました。。

私事ですが、昨年末、鎌倉に引っ越しました。
今は毎日、鎌倉から1時間半くらいかけて会社に通っています。
前の自転車通勤と比べて片道1時間くらい余計にかかるのですが、通勤電車は混んでおらず(大体11時出社)、席に座って好きなことをして過ごせるので、かえって楽になりました。
会社が始まるのが遅ければ、鎌倉暮らしはおすすめです。

さて、今回はPHPのコードカバレッジについてです。
コードカバレッジとは、プログラムコードのうちどれくらいの割合実行されたのかを表すものです。
例えば、システムのテストをした結果、コードカバレッジが100%になっていれば、全てのプログラムを一通りテストできた、ということが言えます。

今回やりたかったのは、ウェブアクセスして動作確認を進めていく中で、全体のうちどれくらいの割合テストできたのか、どの部分がまだテストできていないかを把握することです。

PHPではxdebugを使うとコードカバレッジを調べることができます。
いいツールがなかなか見つけられなかったので、xdebugを使ってコードカバレッジ結果を累計するプログラムを作りました。
システムにアクセス時に自動実行するプログラムファイルを指定し、この中でカバレッジ集計を開始し、register_shutdown_functionを使ってカバレッジ集計停止、データベース(MySQL)に結果登録をしています。

コードカバレッジプログラム
集計結果表示プログラム
ファイル表示プログラム
プログラムはあまり綺麗ではないので、参考程度に。。使用は自己責任でお願いしますm(_ _)m

■使い方
1.確認対象システムと同じサーバーにプログラムを設置する。
2.カバレッジ集計用のデータベース(MySQL)を用意して、コードカバレッジプログラム先頭の方にあるDB接続設定を変更する。
3.カバレッジデータベース初期化プログラムを用意して実行。initializeの引数に調査対象システムのパスを渡すと、デフォルトではphpファイルだけ登録されます。
  1. <?php
  2. require_once('my_code_coverage.php');
  3. $cc = new MyCodeCoverage();
  4. $cc->initialize('/data/asialblog');
4.確認対象システムにauto_prepend_file を設定し、コードカバレッジ集計できるようにする。
対象ウェブシステムの.htaccessにauto_prepend_fileを設定。
.htaccess
  1. php_value auto_prepend_file /path/prepend.php

prepend.php
  1. <?php
  2. require_once('my_code_coverage.php');
  3. $cc = new MyCodeCoverage();
  4. function my_xdebug_shutdown() {
  5.   global $cc;
  6.   $cc->stopAndRecord();
  7. }
  8. register_shutdown_function('my_xdebug_shutdown');
  9. $cc->start();

あとは、表示用プログラム(stat.php)にアクセスすれば結果を確認できます。
アシアルブログのプログラムを開発環境に設置して、試してみました。

集計結果画面


ファイルの詳細


ウェブアクセスして動作確認を繰り返すだけで、まだ確認できていない部分がどこか簡単にわかり、結構おもしろいです。