PHPのテスティングフレームワークとBDD(ビヘイビア駆動開発)について調べた。
2011/04/03
2月に北海道は定山渓温泉で行われた1泊2日のLTハッカソンLOCAL DEVELOPER DAY ’11 /Winter(以下LDD11Winter)に参加してきて気力も体力もすっかり充実してきた@remoreです。
LT大会楽しかったな。高橋さん(高橋メソッドのお方)とこいわさんのプレゼンを生で見れたのが特に勉強になりました。LOCALの皆さん、期間中は大変お世話になりありがとうございました。
充実してきているPHPのテスティングフレームワーク
で、今日の記事を書こうと思ったきっかけがLDD11Winterでこんな話を小耳に挟んだことだったのでした。
”Rubyではテスト駆動開発(TDD)の環境が充実していて、テストのことを学びたい人も集まってきているよ”
帰って調べてみると、確かにRubyはテスト関係の議論が活発な印象。
RSpecっていうビヘイビア駆動開発(BDD)のフレームワークがあったりするし。
でももっと調べていくと、PHPでもテスティングフレームワークって結構あるみたい。
しかもbehatやPHPSpecっていうBDDのツールまであるらしい。。ところで、BDDって何?←
という流れで、先日転職をしてWEB開発にどっぷり浸かることになってきているので、この機会にPHPのテスティングフレームワークとBDDについて調べた内容を整理しておきます。
PHPのテスティングフレームワーク
調べた中だと、id:p4lifeさんのこの記事が一番まとまってて見やすかったです。代表的なテストフレームワークとして、phpt, PHPUnit, SimpleTest, lime, DocTest, PHPSpecの6ツールがサンプルコードとともに紹介されています。
この記事、2008年の記事なので最新の状況について少し補足させていただくと、
- PHPUnitはVersion 3.xが最新
- PHPSpecは開発が止まっている
- CakePHPは2.0からSimpleTestではなくてPHPUnitを使うことになる(@hiromi2424さんの翻訳記事参照)
みたいです。(2011年3月末現在)
基本はPHPUnitか
今のところ、PHPでテスト駆動開発を行う環境としてはPHPUnitが理想的です。
Zend Framework, Yii, CakePHP2.0やSymfony2等多くのフレームワークがPHPUnitをサポートしている/する予定のためユーザが多いですし、例えばXAMPPのPEARの中にもデフォルトでインストールされていたりもするくらいです。ユーザが多いので、Webで見つけることができる情報も充実しています。リファレンスマニュアルも日本語訳済み、しかもPHP Manualの翻訳をされているあの高木さんの翻訳です。
テストファーストな環境作りのために何から始めればよいか決めていない人は、まずはPHPUnitから始めると良さそうです。
ついでにJenkins CIでテストの状況を可視化
PHP用テスティングフレームワークを使う時に「あったらいいな」なツールがJenkins CI (旧:Hudson CI)です。
PHPUnitが出力するxUnit形式のレポートを入力すると、テスト件数やテストカバレッジをグラフにしてくれます。テストファーストな環境で開発するならぜひ導入しておきたいですね。状況が可視化されることで、CI(継続的インテグレーション)の効果が高まりそう。
使い方も簡単。jenkins.jarをダウンロードしてきて、javaがインストールされているマシン上でコマンドラインから"java -jar jenkins.jar"を実行するだけで、http://localhost:8080/上に動作するJenkinsとご対面が可能です。こんな簡単に始められるならやらない理由探す方が難しいかも。
もっと知りたい方には、Hudsonプロジェクトの川口耕介さんが書かれたgihyoの記事とかじっくり読み込むのが良いでしょう。
特集:Hudsonを使ったアジャイルな開発入門|gihyo.jp … 技術評論社 | Ryuzee.com
BDD(ビヘイビア駆動開発)について
wikipediaに詳しいです(サンプルコードも載ってます)。テスト駆動開発から派生した物なんですね。
読み易い、自然言語に近い形でテストコードを書けるので、主に受け入れテストでの利用が考えられているようです。お客さんや開発者ではない方が開発に関係するタイミングで利用できないか、検討する価値がありそうですね。
PHPではPHPSpecかbehatを使ってBDD環境を構築できるみたいです。もうちょっと突っ込んで知りたい人には@ryuzeeさんの以下の記事がオススメ。
[PHP]PHPでBDD(Behavior Driven Development)する方法 | Ryuzee.com
[PHP]BehatとSeleniumを組み合わせ受け入れテストを自動化する | Ryuzee.com
あとがき:PHPでもテストファーストが当たり前の文化に
PHPを使ったテストファーストでの開発環境は、5年くらい前に調べものをした状況と比べて大きく進歩しているように感じました。そして、これからアジャイル開発が普及し成熟していくにつれて、テストファーストで開発ができる開発者が今以上に求められるだろうし、できて当たり前の文化にさえなるかもしれません。
始めるのに遅すぎるということもないし、何よりPHPUnit+Jenkins CIを使ったテストファースト環境は簡単に構築できます。初めは遊びのつもりで、出来心でうっかり手を出しても損はしない分野だと思います!どんどん使っていきたいですね。
Related Posts
about me
@remore is a software engineer, weekend contrabassist, and occasional public speaker. Read more