テスト駆動開発の基本

テスト駆動開発(Test Driven Development:TDD)とは

テストファーストによって開発を進める開発手法。

TDDのゴール

『動作するきれいなコード』

TDDが指す『テスト』の意味

TDDが指す『テスト』とは、開発者(プログラマ)が自分自身の開発を先に進めるため(開発を促進するため)に、自分自身で書いて行うテスト。

テストが原動力となって開発が進められるため、TDDと呼ばれる。

TDDの目的

TDDは開発手法であり、プログラミングを支援することを目的としている。具体的には次のものがある。

  • 素早いフィードバックの確保

    自身の作業が達成できていることをすぐにテストで確認できる。また、コード追加時にはテストをRedからGreenにすることで、実装が問題なく達成できることを確認しながら作業できる。

    リファクタリング(コード変更)時には、テスト結果がALL Greenを維持するようにすることで、意図しないバグ、副作用の混入を防止に貢献する。

  • 設計改善効果

    TDDでは、フィードバック以外にも、製品コード設計を改善する効果もある。

TDDの基本サイクル

TDDでは、Red, Green, Refactor の3つの作業サイクルを細かく繰り返してプログラミングを進める。

image.png

  1. Red

    失敗するテストを書く

  2. Green

    テストを成功させる最低限のコード書く

  3. Refactor

    コードをリファクタリング(外部から見た振る舞いを変えないままで、コード内部の設計をより良くすること)して綺麗にする

上記の手順1, 2 のサイクル(テストファーストによる追加・変更)を数十秒〜数十分の超短期間で実行していく。

手順3のリファクタリングは、テストファーストでプログラミングする中でソースコードが汚くなってきたら綺麗にする。リファクタリング時は、既存のテストケースが回帰テストとなり、ソフトウェアの機能品質を維持できる。

TDDのスキル

TDDを進めていく際には、次のことを意識する。

  • 問題を小さく分割する
  • 歩幅を状況に応じて調整する
    • テスト ⇨ 仮実装(とりあえず通す実装) ⇨ 三角測量(複数のパターンでテスト)⇨ 実装
    • テスト ⇨ 仮実装 ⇨ 実装
    • テスト ⇨ 明白な実装
  • テストの構造化とリファクタリング

参考