テスト駆動開発
出典: フリー百科事典『ウィキペディア(Wikipedia)』
テスト駆動開発 (test-driven development; TDD) とは、プログラム開発手法の一種で、プログラム本体よりも先にテストケースを書くスタイルである。このスタイルをテストファーストともいう。多くのアジャイルソフトウェア開発手法、例えばエクストリーム・プログラミングにおいて強く推奨されている。
テスト駆動開発では、概ね次のようなサイクルで開発が行われる。
- テストケースを記述する
- そのテストケースにパスするようにプログラム本体を記述する
- テストを実施し、パスするまで必要な修正を行う
- 実装を変更した場合は、仕様を変更していないことを確認するためにテストを実施する
- 仕様を変更した場合は、その変更をテストケースに反映させる
したがって、テスト駆動開発を実施するには、テストを自動的に実行できる環境が必要である。そのような環境としては、JUnitやNUnitといったもの(総称してxUnitとされる)が挙げられる。
現実には難しいが、仕様のすべてがテストケースに網羅されていることが望ましい。その場合、すべてのバグはテストの失敗という形で発現することになり、開発したプログラムを動作させた結果発見されるバグと比べて除去がきわめて容易になる。
目次 |
[編集] 利点
先にテストケースを書くという性質上、テストケースを書き終わった段階ではこれから書こうとするプログラムの仕様が明確にプログラマが意識できるようになる。そのため、最適な実装を開発の初期段階から行うことができるという利点がある。
実装を変更するたびにテストを実施するため、仕様を変更せずに実装を変えたつもりが不注意で動作を壊した場合に発見が容易になる。これは反復を重視するアジャイルソフトウェア開発 (エクストリーム・プログラミングなど) の主義とも合致する利点である。
なお、テストケースは仕様書の代用としても機能する。自然言語で書かれた仕様書ではプログラム言語ほどの厳密性は望めないうえ、プログラムがその仕様を満たしているという保証もないが、テストケースにはプログラムの期待する動作が正確に記述されているうえ、それをパスすれば仕様を満たしていることも保証される。
[編集] 適用の限界
テスト駆動開発は、あらゆるプログラム開発に適用できるわけではない。例えば次のようなプログラムにおいては、自動テストの実施が困難であるため、テスト駆動開発には適さない。
- グラフィカルユーザインターフェース (GUI) を扱うもの
- 暗号解読など、1つの動作に多大なコンピュータのリソース (計算量) を消費するもの
- 複数のプログラムが通信するもの
しかし、これらはテスト駆動開発の限界というよりも、既存の自動テストツールの限界といったほうが正確である。自動テストツールの進化により、これらの限界が克服される可能性がある。
[編集] 関連項目
[編集] 外部リンク
- 特集「テスト駆動開発」はプログラマのストレスを軽減するか?(@IT): テスト・ファーストとテスト駆動開発との違い、テスト駆動開発の具体的な手法について書かれている。