テスト駆動開発とは何か?テストを軸としたソフトウェア開発手法を解説

テスト駆動開発の概要

テスト駆動開発とはテストコードを先に書いて、テストコードに通る実装を後から書いていくというソフトウェア開発手法のひとつです。
この考え方を「テストファースト」と呼びます。
テスト駆動開発は“Test-driven development”という英語名から、「TDD」と略されて呼ばれることもあります。

テスト駆動開発の大まかな手順は以下のとおりです[1]What is Test Driven Development (TDD)? | Agile Alliance

  1. テストの内容を考える
  2. テストに合格するまでプログラムを実装する
  3. プログラムのリファクタリングを行う
  4. テストの項目を追加する(2~4を完成まで繰り返す)

テスト駆動開発では、この一連の流れを繰り返すことで、プロダクトを開発していきます。
そしてテスト駆動開発のこの一連の工程は「レッド・グリーン・リファクタリング」と呼ばれることがあります。
この名前の由来は、テストツールを使った時に、エラーが発生していることを示す「赤」と、正常にプログラムが動作していることを示す「緑」のメッセージが、開発の過程で交互に表示されるからです。
こうしてレッド・グリーン・リファクタリングのサイクルを繰り返しながら開発を進めていきます。

テスト駆動開発では多くのテストを実施していきますが、何をテストして何をテストしないかについては、TODOリストを作るのが有効です。
TODOリストを作成することで、頭の中も整理され、効率的なテストが行えます。
開発途中で思いついたテスト項目などもTODOリストに追加しておけば、テストの手を止めることはなく、忘れ去られることもないでしょう。

なぜテスト駆動開発が必要なのか

一般的に、テストというとソフトウェアの開発を行って、その品質を担保するために行われます。
最初に要求分析を行って、設計、実装、テストといった従来の方法の場合、テスト工程で多くのバグが発見される可能性があります。
その結果、設計工程まで大きく手戻りを行わなければならない致命的なバグが発見されることもあります。

こうした従来の開発手法の問題点を改善するためにテスト駆動開発は用いられます。
テスト駆動開発の場合は、テストに合格するための必要最低限のコードを書くことが求められます。
そしてコードを書いた上できれいにリファクタリングしていくため、スピード感があり生産性が高くなります。
実装ありきなので致命的なバグを早めに発見することもできるでしょう。

どういうときにテスト駆動開発が使われるのか

テスト駆動開発は多くのテストをこなしていくことになるため、規模の小さなプロジェクトで実践するのがよいと考えられます。
一方で、規模の大きなプロジェクトでは、テストに時間をかけすぎてしまうため、開発手法としては適さない場合もあります。

単体テストの知識を身に付けておく

システム開発のテストには、単体テスト結合テスト総合テストなど、いくつか種類があります。
今回紹介したテスト駆動開発で使われるテストは、その中でも「単体テスト」と呼ばれるものです。
単体テストを知れば、テスト駆動開発の理解を深めることができます。
単体テストについては下記の記事で紹介していますので、こちらもご参照ください。