あれは 2006 年のことでした。私は Ruby に挑戦してみることにしました (PHP の本なのにこんな書き出しでいいんでしょうか……。 でも、すべての始まりはここだったのです!)。 その当時、xUnit によるテスト駆動開発 (TDD) とは別の考え方が注目を集め始めていました。 RSpec フレームワークをインストールした私は、そこで振舞駆動開発 (BDD) の概念を知ったのです。これは TDD を進化させた (あるいは再構成した) ものです。その主な目的は、新たな言語を作成することによって、 伝統的な TDD の語彙をよりテストに適したものに置き換えることです。
驚いたことに、BDD はかなり魅力的なものでした。 BDD は、TDD がやろうとしていることを よりわかりやすく行うことができます。 そのおかげで、TDD による開発よりもかなり生産性があがりました。 うまく説明できないのですが、BDD は TDD より簡単で、より楽しいものなのです。 私の場合、コーディングをするのは業務時間外のことなので、 できることならより楽しく行いたいものです。
さて、時は進んで 2007 年。なんだかんだ言ってもやっぱり PHP は捨てられません。 Ruby もすばらしい言語ではあるのですが、 やっぱり長年親しんだ言語のほうがやりたいことを簡単に行えるものです。 私にとっては PHP のほうが生産性が高いし、PHP コミュニティも大好きだし、 Java っぽい構文にも愛着があったのです。 そこでふと気づきました。PHP には RSpec のようなフレームワークがないじゃないか! Ruby コミュニティには少々困った習性があります。 やつらは、新たなやり方やツールなどをすばやく取り込んでしまうのです。 PHP のコミュニティは、残念ながらそのスピードにはかないません。
結局 PHP に戻ってきた私ですが、PHP には BDD をサポートする仕組みがありません。 SimpleTest を駆使してそれっぽいことをやろうとしてみたのですが、 求める水準の半分くらいにしか達しませんでした。 私は RSpec みたいなツールがほしかったのです。 ZenTest Autotest と Snarl や KDE Notify ポップアップを組み合わせた環境なんか、最高でした。 xUnit フレームワークに迎合してしまうのは気に入りません。 ……などと文句を言っているだけでは何も始まらないので、 Travis Swicegood らと相談して自分たちで PHP 用のツールを作り始めることにしたのです。 それが 2007 年 10 月のことでした。
PHPSpec はその成果として生まれたものです。 これは、PHP5 で振舞駆動開発 (BDD) を行うためのフレームワークです。
本書はテスト駆動開発や振舞駆動開発に興味のある人たちに向けて書かれています。 テスト駆動開発と振舞駆動開発の目指すところはどちらも同じです。 そもそも BDD の主な目的は、TDD の品質をより向上させることにあります。 本書を読むには、PHP5 (あるいはそれと同等のオブジェクト指向言語) の機能や構文、使い方を身に着けている必要があります。 ユニットテストや TDD、BDD などの経験は不要です。 振舞駆動開発の概念については第 1 章で説明します。
本書のすべての章やサンプルは、クリエイティブ・コモンズ 表示 3.0 ライセンス (Creative Commons Attribution 3.0 License) のもとで公開するものとします。