アジャイル,Trac,オープンソースなどの話。認定スクラムマスター。Twitterは@ryuzee
タイトルに深い意味は無いんだけど、CakePHPのSimpleTestでコードカバレージを真面目に取得してみたので、そのメモとか。
XAMPP1.7.0
PHP5.2.8
MySQL 5.1.30
Apache 2.2.10
このバージョンのXAMPPに含まれているXdebug2.0.3ではカバレージが取得できず、Apacheごと死んでしまう問題があるので、Xdebug2.0.0を利用する。
http://www.xdebug.org/download.phpにアクセスして、環境にあったモジュールを取得する。
僕の環境の場合は、XAMPPのPHP5.2.8だから、図の赤枠で囲んだリンクをクリックしてファイルを保存する。
php_xdebug-2.0.0-5.2.2.dllをphp_xdebug.dllにリネームしてphp\ext\の中に上書き保存する。
php.iniの設定を変更してXdebugを有効にする必要がある。なお、Xdebugを利用する場合はZendDebuggerは同時利用できない。
設定が終わったらApacheを再起動しておく。
CakePHP側では特に細かい設定はいらないのだが、当たり前ながら事前にSimpleTestが導入されていて、ユニットテストが書かれている必要がある。またユニットテストを実行するためにはdebugレベルを1以上にしなければならない。
まずはテストのトップページにアクセスする。下図のような画面が表示される。
ここで左メニューのAppの中のTest casesを選択しよう。そうすると作成済みのテストの一覧が表示されるはずだ。
※ちと開発中のものの画面をキャプチャしたので具体的なモジュール名はマスキング。
上図のモジュール名をクリックするとテストが実行される。結果は以下のように表示される。
※テストの結果が失敗するようであればカバレージ確認の前に失敗している箇所を確認して修正しておく。
この画面の最下部に「Analyze Code Coverage」というリンクがあるので、これをクリックすると再テストとカバレージの測定が開始される。実行が完了すると、以下のように表示される。

この結果では、カバレージは83.33%であり、ユニットテストが全ソースコードの分岐を網羅していないことが分かる。
またカバレージが100%でない場合は、画面に、カバーできていない範囲が表示される。下図を例にすると、84行目のピンクでハイライトされている箇所が未テストの箇所になる。
必ずしも全ての場合でカバレージを100%にしなければならないわけでは無いが、ビジネスロジック等の重要箇所のカバレージが取れていない場合は後々不具合が出たりする可能性もあるので、テストを追加しておくにこしたことは無い。
CakePHPでSimpleTestによるユニットテストをしているのであれば、使って損は無い。これは間違いない。
毎回毎回カバレージを見る必要は無いが、開発イテレーションの中で定期的に確認して、自動テスト範囲を増やしておくことで、後々のイテレーションでの開発が楽になってくるだろう。
前回の記事でも書いたが、ユニットテストをするのならPHPでもMVCの分離はちゃんと考えること。FatControllerではなくFatModelへ。Web経由のテストに頼るとカバレージが測定しにくくなる。
著者/訳者:安藤 祐介 新原 雅司 堂園 俊郎
出版社:毎日コミュニケーションズ( 2009-06-27 )
定価:¥ 3,360
単行本(ソフトカバー) ( 400 ページ )
ISBN-10 : 4839932468
ISBN-13 : 9784839932466
著者/訳者:安藤 祐介 岸田 健一郎 新原 雅司
出版社:毎日コミュニケーションズ( 2009-04-08 )
定価:¥ 3,150
Amazon価格:¥ 3,150
単行本(ソフトカバー) ( 264 ページ )
ISBN-10 : 4839930651
ISBN-13 : 9784839930653
CakePHP ポケットリファレンス (Pocket Reference)
著者/訳者:株式会社ブルーオーシャン 岡田 佳典
出版社:技術評論社( 2008-06-18 )
定価:¥ 2,604
Amazon価格:¥ 2,604
単行本(ソフトカバー) ( 448 ページ )
ISBN-10 : 4774135038
ISBN-13 : 9784774135038
コメントはありません。是非コメントしてください。