TDDの前方依存と後方依存
『注意』
この記事には間違っているかもしれないことが含まれています。
また個人の意見なので鵜呑みにしないようにしてください。
あと疑問符がついている部分の答えはここには書いてません。
TDD自体は簡単な概念と思う
TDDそれ自体は簡単な概念だ。
Red、Green、Refactor…実にシンプルである。
だがしかし、TDDは難しいという話はことあるごとに聞く(ような気がする)
「では何が難しいのだろう?」というわけで脳内で妄想を膨らませてみる。
[追記]前方依存、後方依存という言葉をだしているが、勝手に考えた造語なので項目ごとに定義も追加しておきます。
技術的な前方依存
『TDDを始める前と終TDDを実際やるために必要な技術』
- 最低限対象言語でコードがかけるようになって
- 最低限テスティングフレームワークを使えるようになって
- リファクタリングをしっかり学んで
- 対象言語でのきれいなコード、設計とは何かを知って
- テストファーストを知って
こうしておそらくスタートライン。
技術的な後方依存
『TDDを学んだ後にでてくる現実問題』
外部依存のないプロダクト(お題)でTDDのサイクルを回せるようになったら
- テストはどこまで書けばいいの?
- privateなメソッドのテストをしたいのだけど…
- 変更のたびにテストが全部落ちる…もっと変更に耐えるようなテストにしたい
- というか言語の特性にあわせて気持ちよくテストも書きたいっす
- どうすればスローテストを解決できる?
- 外部依存部分もテストしたいけど…TDDの段階では外部に依存したくないなぁ
- 並列系の機能は?
- Viewは?
という形で疑問が積みあがっていくのかな、と。
ストーリー的な前方依存
『TDDを始める前までの開発プロセスで依存しそうなストーリー』
- 要求分析して
- テスト戦略たてて
- テスト設計を行い
- 詳細設計して
- タスク分割して
- TODOリストを書きだして
ようやくTDD。
ストーリー的な後方依存
『TDD後に依存しそうなストーリー』
はい、書きましたよっというところで
- 他人のコードと結合した時に、TDDのテストで結合後も動作をある程度保証できるようにするためにはどんなテストコードにすればいい?
と、書き出してみたところで
TDDとそれ以外のものの依存関係がほんとにこんな感じなのかは議論の残るところであるが、ちょっと考えただけでこれだけでてくるわけだ。
そして、これらが複雑にからみあっているとなると、TDDが難しいと感じてしまうのも仕方がないのではないでしょーか。
という話を本当にそうなのかどうか4月5月で突き詰めたいところである。
というわけで突っ込み大募集中です*1。
*1:マサカリを投げられるために書いた…でもMではない