テスト駆動開発
この段階では、テストをパスさせるためにどんなことをしても良い(定数を返す、コピー&ペースト、コードの重複等)。具体的には、次の3つの方法が挙げられる。 実装が自明な場合(1分程度で書ける場合)はそれを記述する(Obvious Implementation)。 テストに要求される値そのものをハードコーディングする(Fake It;仮実装)。 Fake Itの後に、次の段階(リファクタリング)へ進めず漠然としている場合は、さらに別のデータを用いたテストを追加し、その2つのテストの共通点を見出して助けとする(Triangulate;三角測量)。
テストが通ることを確保しつつ、コードそれ自体やコードとテストの間にある明示的・暗黙的な重複を取り除く(リファクタリング)。通常、リファクタリングとは、コードの意味を変えずにコードを再構築することをいう。なお、この「コードの意味」とは、テストが通ることを言う。また、ここで取り除く重複には、形式的な重複だけでなく、意味的な重複も含まれる。例えば、Fake Itでハードコーディングしたものは、おおよそ実際にはどこからか得られるはずのパラメータを、別の値を用いて算出したものであるため、これを重複と見なす。そして、重複を取り除くことで、ロジックが抽出される。
実装した項目をリストから削除する。このとき、作業中にテストする必要性があるとわかった項目に、実質的に振り変わるかもしれない。
テストコードは、最初から自明であるとは限らない。むしろ、コード本体と同様、最初は具象的なテスト(例えば、単なるフラグの確認)を行ない、これによって知見を得た後に、テストを書き直したほうがよい。