テスト駆動開発(Test Driven Development:TDD)とは
テストファーストによって開発を進める開発手法。
TDDのゴール
『動作するきれいなコード』
TDDが指す『テスト』の意味
TDDが指す『テスト』とは、開発者(プログラマ)が自分自身の開発を先に進めるため(開発を促進するため)に、自分自身で書いて行うテスト。
テストが原動力となって開発が進められるため、TDDと呼ばれる。
TDDの目的
TDDは開発手法であり、プログラミングを支援することを目的としている。具体的には次のものがある。
素早いフィードバックの確保
自身の作業が達成できていることをすぐにテストで確認できる。また、コード追加時にはテストをRedからGreenにすることで、実装が問題なく達成できることを確認しながら作業できる。
リファクタリング(コード変更)時には、テスト結果がALL Greenを維持するようにすることで、意図しないバグ、副作用の混入を防止に貢献する。
設計改善効果
TDDでは、フィードバック以外にも、製品コード設計を改善する効果もある。
TDDの基本サイクル
TDDでは、Red, Green, Refactor の3つの作業サイクルを細かく繰り返してプログラミングを進める。
Red
失敗するテストを書く
Green
テストを成功させる最低限のコード書く
Refactor
コードをリファクタリング(外部から見た振る舞いを変えないままで、コード内部の設計をより良くすること)して綺麗にする
上記の手順1, 2 のサイクル(テストファーストによる追加・変更)を数十秒〜数十分の超短期間で実行していく。
手順3のリファクタリングは、テストファーストでプログラミングする中でソースコードが汚くなってきたら綺麗にする。リファクタリング時は、既存のテストケースが回帰テストとなり、ソフトウェアの機能品質を維持できる。
TDDのスキル
TDDを進めていく際には、次のことを意識する。
- 問題を小さく分割する
- 歩幅を状況に応じて調整する
- テスト ⇨ 仮実装(とりあえず通す実装) ⇨ 三角測量(複数のパターンでテスト)⇨ 実装
- テスト ⇨ 仮実装 ⇨ 実装
- テスト ⇨ 明白な実装
- テストの構造化とリファクタリング