TDD,つまり「テスト駆動開発」って名称はちょっと個人的には微妙.
先行して仕様の「検証コード」を書くって言うのと実装の「テストコード」を書くって言うのは違うと思うんだけど.
「検証駆動(Verification-Driven,VD)」,あるいはより正確には
「詳細設計検証駆動(Detailed Design Verification-Driven,DDVD)」って言うのが良い.
あくまでも詳細設計の「仕様」を検証するコードを先行して書くのであって,
テストコードって言うのはそれで全てじゃない.
そして,テストコードを全て先に書くって言うのは非現実的だって思う.
つまり,「検証コード」は先行して作るけど,実装をしてから更に「テストコード」を作るって言う感じ.
そもそも「検証」と「テスト」は目的が異なっているんだけどね.
そして,「検証コード」は「テストコード」の一部でしかない.
「検証コード」を先行して書いて,実際に実装をしてからmockオブジェクトとかを使ってテストコードを作るっていうのが,TDDといわれていることの現実じゃないかな.
となるとVDDあるいはDDVDDって言うのが良いと思うんだけどね.
これだと,モデル駆動で仕様記述をすると「検証コード」の自動生成とかって言うのも出来そうだし.
もちろん,その場合でも「テストコード」は別途作成が必要ってことで.