PHPテクニカルセミナー「設計ツールとしてのテスト駆動開発」に行ってきました
1週間ほど前の話になりますが、新宿でPHPに関するセミナー(6月29日(金)、「PHPテクニカルセミナー」開催 - PHPプロ!ニュース)があったので参加いたしました。
6月12日頃、inoueからセミナーの存在を教えてもらい、すぐに参加申込をしました。
セミナーはプレゼンと、poderosa(ターミナルエミュレータ)の画面を見ながら、PHP+ユニットテストツールを使ってモジュールの設計が変化していく様子を見させてもらい、たまに正規表現とかデザインパターン、BNF(バッカス・ナウア記法)の話題が出てきたりで、楽しかったです。
実はセミナーに参加する前に、PHPUnit(このセミナーで使われたツールです)自体は触ったことがありまして、ユニット・テストを使用して、あらゆるレベルで PHP コードをチェックするを見て触りだけは理解できていたつもりでしたが、実践しようと思うと、ドキュメントをあさって覚えるだけではなかなか難しいな、と思いました。
ユニットテストをコンパイラに例えて(ボツネタですが公開)
ユニットテストツールは論理エラーを検出するためのコンパイラみたいなものだぁー!と書こうと思いましたが(実際書いた)、調べてみると、テスト駆動開発の目的は論理エラーを検出することではないようです。
テスト駆動開発の主目的はテストではない
最近、テスト駆動開発入門(ピアソン・エデュケーション)を読みながら、PHP+PHPUnitで書いてみるということを家での勉強でやっています。テスト→仮実装→リファクタリングという作業を繰り返していると、これってテストをやっているんだっけ?と思ってしまいます。
確かにユニットテストのスクリプトは残り、いつでも何度でも自動テストを走らせることが出来ます。しかしテスト駆動開発の中では一旦本実装したメソッドやテストコードを頻繁に書き換えます。
そういうわけで、テストすることが目的なのではなく、ダイナミックに設計するためのツールとしてユニットテストが用いられている、という感覚になっていきます。参考資料を見ていただくとわかりますが、テスト駆動開発の目的はテストではないようです。
参考資料
- [PDF]「Test」という言葉についてtwada 2005年7月23日@J2EE勉強会 第10回 - この資料を見て、なるほど、と思いました。テスト駆動開発は品質保証技術ではなく、開発促進技術と。あと、チームで一丸となって取り組まなくても個人のプラクティスで取り組めるそうです。
- BDDIntro - 生きてま2 改 - Trac
- テスト駆動開発のテストは、テストか?-TDD から BDD へ - Test driven Development ではなく Behavior Driven Developmentと表現すればいいという案
- テスト駆動開発(TDD)が分かると従来の設計手法の問題が見えてくる(前編) ITPro - 歴史的観点からの洞察BDDIntro - 生きてま2 改 - Trac
- テスト駆動開発(TDD)が分かると従来の設計手法の問題が見えてくる(後編) ITPro - テスト駆動開発入門をトレースしていて思いましたが、確かにオブジェクト指向との組み合わせはすごく良さそうです。