テスト駆動開発 (Test-Driven Development)
プロダクションコードを実装する前に自動テストコードを作成し、極めて短いサイクルの反復を通じてソフトウェアの構築と設計を進めるアジャイル開発プラクティスである。失敗するテストを書く「Red」、最小限の実装でテストを成功させる「Green」、重複を除去し構造を整える「Refactor」の3段階を繰り返す。
継続的なフィードバックの獲得、高いテスト容易性の担保、リグレッション防止を目的とする。ドメインから組み上げるインサイドアウト(シカゴ派)や、外部境界からモックを活用して進めるアウトサイドイン(ロンドン派)などの流派が存在する。
テスト駆動開発(TDD)は、エクストリーム・プログラミング(XP)によって提唱された中核プラクティスであり、ソフトウェア開発における品質向上と設計の改善を目的とする。
- 短サイクルの反復: Red-Green-Refactorの微小なサイクルを回し続けることで、動くきれいなコードと高いテスト容易性を同時に実現する。
- フィードバックループの高速化: 変更のたびにテストを実行することで、設計の歪みやリグレッションに関する即時フィードバックを得ることができる。
- 実践スタイルの分化: 内側のビジネスロジックから構築するインサイドアウト(シカゴ派)と、UIやAPIなどの外部インターフェースからテストダブル(モック等)を用いて掘り下げるアウトサイドイン(ロンドン派、ダブルループTDD)がある。
- 導入の障壁と課題: 開発初期の工数増や学習曲線の高さ、規律維持の難しさが指摘されている。また、不適切なテストコードは「テスト臭(Test Smells)」を生み出し、長期的な保守性低下を招くリスクがある。
- 他手法との連携: ビヘイビアドリブン開発(BDD)や受け入れテスト駆動開発(ATDD)、ドメイン駆動設計(DDD)と組み合わせて実践されることが多い[1]。
- 所属タグ: TDD XP Agile Practices Testing
- カテゴリー: Related Fields
-
Exploring the Connection between the TDD Practice and Test Smells: A Systematic Literature Review — 「テスト駆動開発(TDD)は、プロダクションコードの前にテストコードを書くアジャイルの実践手法であり、Red(レッド)、Green(グリーン)、Refactor(リファクタリング)の3つのステージに従います。」(訳)(ライセンス: CC BY 4.0) ↩