俺達のTDDの戦いはこれからだ!〜テスト駆動開発をやめて、なお残すべき習慣とは(1)

巷ではTDDは死んだと言われているが、そうではない。「死してなおも輝く」のだ!!

--

http://dic.nicovideo.jp/oekaki/351821.pngを改変

はじめに

DHHの”TDD is Dead. Long live testing”の記事で、「モックを使った短時間でのユニットテストはフィードバックが早く常に良いことだ、ユニットテストから導かれる設計は常に良いことだ」というドグマ的な態度は、Railsアプリのコンテキストでは、過度に複雑な構造を入れ、費用対効果が低く修正に弱い脆いテストを大量に作ってしまう。それよりも「UIからDBまで含めて機能性を担保しつづけているかを確認できるテストに比重を置くべき」と過激に指摘したのは有名です。

TDDをネットで調べてみるとTDDやユニットテストについて否定的な見解が幾つか出てくるようになっています。

“TDDを諦める”の最後では、スタートアップ初期段階では市場フィットしたプロダクトが作れているかの評価データの収集を目的を優先し、技術的負債を抱えることがあると、Israel Fermin Montilla氏は触れています。どんなに初期段階できれいなコードを書いても、プロダクトが市場にフィットしない間違った方向に進んでいるのであれば、プロジェクトは頓挫し、コードは死んでしまいます。

James O. Coplienは ユニットテストやTDDや導かれる設計の効果に否定的な見解の持ち主です。彼は、細々したユニットテストに重きを置くことよりも、システムテスト、契約による設計やDCIアーキテクチャの設計を重視しています。

さて、ユニットテストやTDDは全くの役立たずなのでしょうか? 筆者はそうは考えていません。TDDが死してもなお残すべき価値ある習慣があります。効能を無視したドグマ的な態度は私も否定的ですが、TDDから多くのことを学びました。手間のかかる反復の手動&目視を自動に置き換えること、All Greenを保ちづづけながら修正し続けること、テストを使って何つくれば完成なのかを明らかにすること、試行錯誤で動作するきれいなコードを探索すること、役立たずのモックは捨てる役立つモックは利用する etc…

数回に分けてTDDが死んでもなお残すべき価値ある習慣について記載していきます。俺達のTDDの戦いはこれからだ!(つづく)

--

--