おおむらです
まず、誤解なきようにおことわりしておきますが、
わたくしめはテストファーストがすきですし、
その楽しさ、生産性の高さ、よく知っております。
でも、ときどき思うのです。
テストでいいのかな? と。
つまり、ダイクストラが言っているように、テストは
バグの存在を示すことはできても、プログラムが正しい
ことは証明できない。ではありませんか。
このいいまわしは、テストラストの文脈での表現だから、
テストファーストだとちょっと違うかもしれません。
つまり、テストファーストでコードを作ると、テストに
あわせてコードが作られるので、テストがバグの存在を
示すために作られるわけではないですから。
でももっと重要なことは、テストが常に特定の値に関する
主張しかしていなくて、そのため、仕様というか、作ろう
としているプログラムの論理的な構造が、テストファースト
で作られたコードによって必ずしも実現されているとは
いえない点です。
テストにすべての仕様を盛り込むことは不可能だからです。
テストファーストでやることはいいでしょう。でも、
ユニットテストを常に100%パスするというのは、本当に
すごいことなんでしょうか?
100%と言われると、なにか完璧にできているかのように
思いますが、実際には、有限個の要求を満たすコードが
できているだけです。
それは勿論不完全であり、100%正しいコードだという
意味ではないのです。
XPのうまいところは、こういうあいまいで不完全なものを
100%という幻想で包み込んで、上手にプログラマーの
やる気をひきだしているところなのでしょうね。
でもこんな幻覚剤にだまされていていいのだろうかと、
思ったりするわけです。