テスト駆動開発(TDD)とは(全体像)
テスト駆動開発(Test-Driven Development=TDD)は、テストを先に書くことで開発を進める手法。
ふつうの開発では、まず本体のコードを書き、あとからテストすることが多い。TDDはこの順番を逆にする。
- ふつう … コードを書く → テストする。
- TDD … テストを先に書く → そのテストを通すコードを書く。
「先にゴール(テスト)を決めてから、それを満たすように作る」イメージ。「TDD=コードを書いてからテストする」と思うのは誤り。テストが先、が一番のポイント。
詳しく:Red→Green→Refactorのサイクル
ここが心臓部。TDDの3ステップを表で押さえる。
TDDの3ステップ(Red→Green→Refactor)
| ステップ | 何をする | 状態 |
|---|---|---|
| Red(失敗) | まずテストを書く(実装がないので失敗する) | テストが赤(失敗) |
| Green(成功) | テストが通る最小限のコードを書く | テストが緑(成功) |
| Refactor(改善) | テストが通る状態のまま、コードを整理・改善する | きれいなコードに |
TDDは、この「Red→Green→Refactor」を短いサイクルでくり返す。
- Red … 先にテストを書く。まだ本体のコードがないので、テストは失敗(赤)する。
- Green … そのテストが通る最小限のコードを書く。テストが成功(緑)する。
- Refactor … テストが通る状態を保ったまま、コードを整理・改善して、きれいで読みやすくする。
ここで大事なのが、最後のRefactor(改善)まで含めて3ステップだということ。「Red→Greenで終わり」ではなく、改善まで行って1サイクル。これをくり返すことで、品質と保守性(直しやすさ)が高まる。
わかりやすく言い換えると
要するに、TDDは「先に“合格ライン(テスト)”を作ってから、それに通るように本体を作る」進め方だとイメージするとラク。
つまり、ふつうは「作ってから検査」だが、TDDは「検査の基準を先に作って、それに合わせて作る」。だから作ったものが基準を満たしているか、その場で分かる。
そして覚えどころは、Red(テストを書いて失敗)→Green(通すコードを書いて成功)→Refactor(整理・改善)の3ステップをくり返すこと。Refactor(改善)まで含めて1サイクル、というわけ。
試験のツボ
🔴 一番出る:TDDはテストを先に書く
①テスト(動作確認のコード)を、実装より先に書く
②「コードを書いてからテスト」とは逆。テストが先
🔴 次に出る:Red→Green→Refactorのサイクル
①Red(テストを書いて失敗)→Green(通すコードを書いて成功)→Refactor(整理・改善)
②Refactor(改善)まで含めて1サイクル。これをくり返す
🟡 押さえると安定:ねらい
くり返すことで、品質と保守性(直しやすさ)を高める。
よくある間違い
①「TDDは、コードを書いてからテストを書く手法だ」→ ✗ TDDはテストを先に書く。順番が逆。
②「TDDはRedとGreenだけで、Refactor(改善)は含まない」→ ✗ Red→Green→Refactorの3つの手順からなり、改善まで含めて1サイクル。
③「TDDはテストをいっさい書かずに開発する手法だ」→ ✗ TDDはむしろテストを先に書く。テストが中心の手法。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(TDDの基本)
テスト駆動開発(TDD)に関する次の記述のうち、正しいものはどれか。
- TDDはテストをいっさい書かずに、本体のコードだけを作っていく開発手法とされているものだ
- TDDは本体のコードを書いたあとで、最後にまとめてテストを書く開発手法とされているものである
- TDDはテスト(動作確認のコード)を実装より先に書く開発手法で、テストが先になるのである
- TDDは紙の書類だけで業務を行う方式のことで、ソフト開発とは無関係なものとされているものだ
解答は 3 だ、わが子よ。
TDDは、テスト(動作確認のコード)を実装より先に書く開発手法で、テストが先になる。ふつうの「コードを書いてからテスト」とは逆ぞ。
選択肢1は「テストを書かない」が誤り、選択肢2は「コードを書いてからテスト」が逆で誤り、選択肢4は「紙の書類だけ」が誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | TDDはテストを先に書く手法 |
| 2 | ✗ | テストを先に書くので順番が逆 |
| 3 | ✓ | テストを実装より先に書きテストが先で正しい |
| 4 | ✗ | 紙の書類だけの方式ではない |
オリジナル問題2(サイクル)
TDDのサイクルに関する次の記述のうち、正しいものはどれか。
- TDDはRed(テストで失敗)→Green(成功)→Refactor(改善)の流れをくり返すものだ
- TDDはコードを一度書いたら、二度と直さずそのままにしておくことをくり返す手法とされている
- TDDのサイクルにはテストがいっさい登場せず、ただ書類を整理するだけのものとされているものだ
- TDDはGreen(成功)から始めて、わざとテストを失敗させて終わるという順でくり返すものとされる
解答は 1 だ。
TDDは、Red(テストを書いて失敗)→Green(通すコードで成功)→Refactor(改善)を短いサイクルでくり返す。Refactor(改善)まで含めて1サイクルぞ、わが子よ。
選択肢2は「二度と直さない」が誤り、選択肢3は「テストが登場しない」が誤り、選択肢4はサイクルの順が誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | Red→Green→Refactorをくり返し正しい |
| 2 | ✗ | Refactorで整理・改善する |
| 3 | ✗ | テストが中心の手法 |
| 4 | ✗ | Red(失敗)から始まる順序が正しい |
オリジナル問題3(ねらい)
TDDのねらいに関する次の記述のうち、正しいものはどれか。
- TDDはわざと品質を下げ、直しにくいコードを作ることを目的とする手法とされているものである
- TDDはサイクルをくり返すことで、コードの品質と保守性(直しやすさ)を高めることをねらう
- TDDはパソコンの電源を冷やす空調設備のことで、コードの品質とは無関係なものとされている
- TDDは社員の出社時刻を記録する勤怠管理のしくみのことを指すものとされているものである
解答は 2 だ、わが子よ。
TDDは、Red→Green→Refactorのサイクルをくり返すことで、コードの品質と保守性(直しやすさ)を高めることをねらう手法ぞ。
選択肢1は「品質を下げる」が誤り、選択肢3は「空調設備」が誤り、選択肢4は「勤怠管理」が誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 品質と保守性を高めるのがねらい |
| 2 | ✓ | くり返して品質と保守性を高め正しい |
| 3 | ✗ | 空調設備ではない |
| 4 | ✗ | 勤怠管理のしくみではない |
まとめ
押さえどころ
- 🔴 TDDはテストを先に書く … テスト(動作確認のコード)を実装より先に書く。「コードを書いてからテスト」とは逆。
- 🔴 Red→Green→Refactorのサイクル … Red(テストを書いて失敗)→Green(通すコードで成功)→Refactor(整理・改善)。改善まで含めて1サイクルをくり返す。
- 🟡 ねらい … くり返すことで品質と保守性(直しやすさ)を高める。
次に学ぶ
- アジャイル開発 ── 少しずつ作る開発手法。TDDのようにテストを重視する進め方とも相性がよい。
- DevOps ── 自動でテスト・リリースする流れ(CI/CD)。TDDで書いたテストが自動化を支える。
執筆: SikakuQuest編集部