言葉重要 - テストということについて
DocTestのお披露目がひとまず完了しましたが、そもそも「テスト」という言葉はプログラマーの嫌いな言葉の一つではないかと思ってます。
ひとしきり思考をめぐらせて、テクニックを駆使した後にくる面倒な時間・・・というイメージがどうしてもあるんではないかと。
「テスト」という言葉の呪縛は、「いや実はそうでなくて、もっと効率を上げるために不可欠なものなんですよー」っていっても一度ついたイメージはなかなか払拭できない。
ということで「テスト」と呼ぶのをやめてみたらってので、TDD(Test Driven Development、テスト駆動開発)ではなくて、BDD(Behavior Driven Development、ビヘイビア駆動開発)としようというするものが実はだーいぶ前からあるんですよね。えらそうに書いてますが、今googleさんに聞いてみたら、2005年の平鍋さんの記事が見つかった。うーむ、相当遅れてるよ、私・・・
http://blogs.itmedia.co.jp/hiranabe/2005/10/tdd__bdd__731d.html
そもそもTDDでやろうとしているものは後工程でやっているテストではなくて、設計なのだと。確かにそれは回帰テストとしての役割もあるのでテストと呼んでもよいのだが、意識を変えるためにビヘイビア=振る舞いを先に決定しているのだと考えようと。呼称を変えることによって意識をかえる、これ重要ってことです。(最近はなににつけても、「名づけ重要」だなぁと思ってます。このあたりの話はまた別にします)
平鍋さん、和田さん、角谷さんといった方々は既にもう数年前にそこにいて、それを踏まえていろいろやってらっしゃるわけですから、がんばって走らないとおいつけないっすね。
ちなみに、BDD用のツールというのはJavaのjBehaveや、RubyのRSpecとかがあって、IBM dwの記事や、角谷さんが解説されているるびまのRSpecの記事は大いに参考になると思います。
http://www.ibm.com/developerworks/jp/java/library/j-cq09187/index.html
http://jp.rubyist.net/magazine/?0021-Rspec
角谷さんの記事にある、振る舞いは日本語で書こうというのもなかなかおもしろいなぁと。DocTestもMaple4本体はそうしないけど、現場レベルの開発ではテスト名は日本語でつけていけば失敗したときに「ああ、あそこか・・・」と直感的にわかっていいんではないかと。日本語でテスト名をつけようというのは、DocTestの説明のところに書いた和田さんのムービーやWEB+DBの記事でも紹介されてますね。
ちなみにPHPにもPHPSpecってのがあります。恐ろしく速いスピードでいろいろ翻訳されている高木さんによる日本語訳マニュアルもあります。(本家側からいけるものにリンクをはってもいいんだけど、高木さんの功績をたたえて、そちらにリンク)
http://www.m-takagi.org/docs/php/phpspec/
また、日本語でテストしてみる?ってのは、Seasar.PHPのkloveさんがちらっと試されてますね。これもなかなか興味深い。
http://cgi39.plala.or.jp/klove/w/k.cgi?page=Diary%2F2007%2D11%2D20
あと、Piece Frameworkのテストツール Stagehand_TestRunner の最新版 2.0.0 ではPHPSpecへの対応が盛り込まれていて、Piece自体をチラッと覗いてみると、ぐいぐいPHPSpecでのテストへ移行してる感じですね。さすが久保さん、目のつけどころとスピードは相変わらずすごい。
http://piece-framework.com/2008/01/stagehand_testrunner_200_stabl_1.html
まだ「テスト」と聞くと・・・という方は、処理を書く前にそのメソッドの振る舞いをきめる設計をしてるんだと思ってやってみませんか? DocTestだとそれが目の前のクラスに対して直接記述をするわけで、「こいつがこう動いてくれればなぁ」と言いながらできるんではないかと思います。(最後はプロダクトの宣伝かよ > 自分)