テスト駆動開発が嫌いだ

テスト駆動開発が嫌いだ。
ただし、ここでの「テスト駆動開発」は日本で今TDDと呼ばれてる多義的なものじゃなく、「テスト駆動開発入門」にかかれている「テスト駆動開発」。
もっと正確にいうと「テスト駆動開発入門」がミスリーディングをわざと誘ってて有害で嫌い。


テストは、プログラムが正しく動くことは検証できるけど、プログラムが正しいことは検証できない。そのようなテストに設計を依存してしまうと、正しく動くプログラムは作れるけど正しいプログラムは作れない。


設計も含めてテストによって駆動しましょうという「テスト駆動開発入門」のやり方では正しいプログラムが作れない。プログラムの正しさを別のやり方で担保しつつ、そちらを中心に開発を駆動して、あくまでも開発作業だけをテストで駆動するという考え方のほうが、正しいプログラムに近づける。


そして、TDDをいまがんばってる人たちも、それは当たり前にわかってると思うので、TDDという言葉に、「テスト駆動開発入門」のやり方以上の意味をもたせている。
その結果、TDDという言葉は「テスト駆動開発入門」のやり方とは乖離して、人それぞれさまざまな意味をもつ、コンテキストによって意味を把握しないといけない多義的な言葉になってしまっている。
人によっては、それは単にテストファーストであったり、後か先かかかわらずすべてテストを書きましょうということだったり、「テスト駆動開発入門」のとおり設計までやりましょうだったりする。


結果、「テスト駆動開発」という用語は、技術用語としてコミュニケーションに使うのが難しい言葉になっている。
そういう意味でも、「テスト駆動開発」が嫌いだ。