動作する綺麗なコードがTDDのゴール。

TDDでは以下のシンプルなルールしかない。

  • 自動化されたテストが失敗した時のみ、新しいコードを書く。
  • 重複を除去する

2つのルールは、以下の作業の順序を導く

  1. レッド: 失敗するテストを一つ書く
  2. グリーン: 1のテストを迅速に動作させる。このステップでは罪を犯してもいい。
  3. リファクタリング: テストを通すために発生した重複を全て除去する

レッド、グリーン、リファクタリング。それがTDDのマントラである。

テスト駆動のリズム

作業はテスト駆動のリズムに従う。

  1. まずはテストを一つ書く。
  2. 全てのテストを走らせ、新しいテストの失敗を確認する
  3. 小さな変更を行う
  4. 全てのテストを走らせて、全て成功することを確認する
  5. リファクタリングを行なって重複を除去する。

実装を進める上で重要なのは、仮実装モードと明白な実装を使い分けること。

  • 仮実装とは: まずベタがきの値を使い、実装を進めるに従って、徐々に変数に置き換えていく。
  • 明白な実装: すぐに頭の中の実装をコードに落とす。

仮実装の場合のTDDフローは以下になる。

  1. まずはテストを一つ書く

  2. 全てのテストを走らせ、新しいテストの失敗を確認する

  3. 最も単純な方法(通常はハードコーディング)でテストを通す

  4. 全てのテストを走らせて、全て成功することを確認する

  5. リファクタリングを行い、徐々に仮実装を本物のコードに置き換える

  6. 重複を除去する

明白な実装の場合は以下。

  1. まずはテストを一つ書く
  2. 全てのテストを走らせ、新しいテストの失敗を確認する
  3. 実装が明白な場合は、直接「本物の」解決策を実装する
  4. 全てのテストを走らせて、全て成功することを確認する
  5. 必要に応じてリファクタリングを行う

三角測量の場合は以下になる。

  1. まずはテストを一つ書く
  2. 全てのテストを走らせ、新しいテストの失敗を確認する
  3. 最も単純な方法でテストを通す
  4. 別の具体例を示す2つ目のテストを追加する
  5. 両方のテストを通すために、より一般的な実装に変更する
  6. 全てのテストを走らせて、全て成功することを確認する
  7. リファクタリングを行って重複を除去する

これらの使い分けのガイドラインは、以下になる。

  • 問題が複雑で解決策が不明確な場合は仮実装 を使用
  • 解決策が明白で自信がある場合は 明白な実装 を使用
  • より厳密な一般化が必要な場合は 三角測量 を使用