テストは有害である(Testing considered harmful)

ケント・ベックは、テスト駆動開発はテスト技法ではなく、ソフトウェア開発のすべてのアクティビティを構造化する手法である、と言っていて、構造化というキーワードが気になりました。構造化プログラミングってのは、サブルーチンを使えとかgoto文は駄目だとかいうあれですか、程度の知識しかなかったので、wikipediaを読んでみました。

ダイクストラは、大規模化したプログラムを効率よく記述しプログラム設計上のミスが起こりづらいようにするための方法論を検討した。その結果、ベームとヤコピーニによって1966年に証明されていた構造化定理をもとに、構造化プログラミングを提唱した。

構造化プログラミング - Wikipedia

おお、そうですか。さらにダイクストラの項を開くと、

当時の一般的手法は、とりあえずプログラムを書いてから問題ないことを検証するというものであった。ダイクストラはこれに対して、検証に時間がかかって面倒であるし、プログラムの開発手法に何ら洞察を与えない点が問題であるとした。

エドガー・ダイクストラ - Wikipedia

おおお。まるで今現在について語られているかのようです。後から検証することを従来の意味でテストと呼ぶとして、問題あるプログラムを書いてしまうことが看過されてしまう理由がテストの存在だとしたら、テストは有害である、と言えるかもしれません。そして、その問題へのひとつの解答として、実行可能なサンプルによって仕様を明示し、それへの適合を確認しながらプログラミングを進める、そしてそこから設計あるいは仕様へのフィードバックを得ていく、そんな手法を今僕達は知っていますよ!

(なんて、まあテストが有害とは言い過ぎだと自分でも思いますが、それはgoto文でも同じ。これはそういう提言からどんな洞察を得るかという話だと思いますので、ちょっと書いてみました。)