TDDをゆるふわに定義する

という話をしてから、そういえば、自分のTDDについて語っていなかったなーと思ったので。

他人の例も含めて、色々見たい場合は [twitter:@kyon_mm] 氏の TDDを明確に定義するをご参照ください。

自分にとってのTDDの定義は「メソッドの実装と一緒にテストが済み、テストの自動化ができていること」

いきなり本題ですが、自分のTDDの定義は表題のとおりです。
メソッドとテストが一緒に行われていること。なお、テストの自動化はオプションです。
テストファーストとか関係なく、メソッドの実装とテストが一緒にできていれば良いんじゃないかなぁと。

本当はテストの自動化、テストの自動実行までするべきだとは思っていますが、場合によっては難しい、コストに見合うリターンがない場合もあるので、オプションです。

なぜこのような定義にしたのか

単純に、自分がしたいこと、してほしいことがこのような形だからです。
細かい手法抜きで、本当に自分がやりたいこととしては、実装とテストを同時並行に行いたい。
テストが先か実装が先かというのはどちらでも良いと思っています。

この定義の場合の「テスト駆動開発入門」の位置づけ

個人的には、オブジェクト指向プログラミングにおけるオブジェクト指向エクササイズと同じような位置づけです。
あえてきつい制限をかけることでテスト駆動開発を体に染み付ける。
テスト駆動開発入門で以下の二つが身につくと思っています。

  • 実装と一緒にテストを書く習慣
  • テストをしやすい設計

これらが身についていればテストファーストに拘る必要って無いのかなーと思っています。

こんなかんじです。
良い感じにゆるふわで。

テスト駆動開発入門

テスト駆動開発入門