テスト駆動開発(TDD)とは?Red→Green→Refactorのサイクル

公開: 更新: カテゴリ: マネジメント系

30秒で結論

テスト駆動開発(TDD)とは(全体像)

テスト駆動開発(Test-Driven Development=TDD)は、テストを先に書くことで開発を進める手法。

ふつうの開発では、まず本体のコードを書き、あとからテストすることが多い。TDDはこの順番を逆にする。

「先にゴール(テスト)を決めてから、それを満たすように作る」イメージ。「TDD=コードを書いてからテストする」と思うのは誤り。テストが先、が一番のポイント。


詳しく:Red→Green→Refactorのサイクル

ここが心臓部。TDDの3ステップを表で押さえる。

TDDの3ステップ(Red→Green→Refactor)

ステップ何をする状態
Red(失敗)まずテストを書く(実装がないので失敗する)テストが赤(失敗)
Green(成功)テストが通る最小限のコードを書くテストが緑(成功)
Refactor(改善)テストが通る状態のまま、コードを整理・改善するきれいなコードに

TDDは、この「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の基本)

📝 オリジナル問題 1 TDDの基本

テスト駆動開発(TDD)に関する次の記述のうち、正しいものはどれか。

  1. TDDはテストをいっさい書かずに、本体のコードだけを作っていく開発手法とされているものだ
  2. TDDは本体のコードを書いたあとで、最後にまとめてテストを書く開発手法とされているものである
  3. TDDはテスト(動作確認のコード)を実装より先に書く開発手法で、テストが先になるのである
  4. TDDは紙の書類だけで業務を行う方式のことで、ソフト開発とは無関係なものとされているものだ
テクキング
テクキング 解答・解説

解答は 3 だ、わが子よ。

TDDは、テスト(動作確認のコード)を実装より先に書く開発手法で、テストが先になる。ふつうの「コードを書いてからテスト」とは逆ぞ。

選択肢1は「テストを書かない」が誤り、選択肢2は「コードを書いてからテスト」が逆で誤り、選択肢4は「紙の書類だけ」が誤りである。

選択肢判定理由
1✗TDDはテストを先に書く手法
2✗テストを先に書くので順番が逆
3✓テストを実装より先に書きテストが先で正しい
4✗紙の書類だけの方式ではない

オリジナル問題2(サイクル)

📝 オリジナル問題 2 Red→Green→Refactor

TDDのサイクルに関する次の記述のうち、正しいものはどれか。

  1. TDDはRed(テストで失敗)→Green(成功)→Refactor(改善)の流れをくり返すものだ
  2. TDDはコードを一度書いたら、二度と直さずそのままにしておくことをくり返す手法とされている
  3. TDDのサイクルにはテストがいっさい登場せず、ただ書類を整理するだけのものとされているものだ
  4. TDDはGreen(成功)から始めて、わざとテストを失敗させて終わるという順でくり返すものとされる
テクキング
テクキング 解答・解説

解答は 1 だ。

TDDは、Red(テストを書いて失敗)→Green(通すコードで成功)→Refactor(改善)を短いサイクルでくり返す。Refactor(改善)まで含めて1サイクルぞ、わが子よ。

選択肢2は「二度と直さない」が誤り、選択肢3は「テストが登場しない」が誤り、選択肢4はサイクルの順が誤りである。

選択肢判定理由
1✓Red→Green→Refactorをくり返し正しい
2✗Refactorで整理・改善する
3✗テストが中心の手法
4✗Red(失敗)から始まる順序が正しい

オリジナル問題3(ねらい)

📝 オリジナル問題 3 TDDのねらい

TDDのねらいに関する次の記述のうち、正しいものはどれか。

  1. TDDはわざと品質を下げ、直しにくいコードを作ることを目的とする手法とされているものである
  2. TDDはサイクルをくり返すことで、コードの品質と保守性(直しやすさ)を高めることをねらう
  3. TDDはパソコンの電源を冷やす空調設備のことで、コードの品質とは無関係なものとされている
  4. TDDは社員の出社時刻を記録する勤怠管理のしくみのことを指すものとされているものである
テクキング
テクキング 解答・解説

解答は 2 だ、わが子よ。

TDDは、Red→Green→Refactorのサイクルをくり返すことで、コードの品質と保守性(直しやすさ)を高めることをねらう手法ぞ。

選択肢1は「品質を下げる」が誤り、選択肢3は「空調設備」が誤り、選択肢4は「勤怠管理」が誤りである。

選択肢判定理由
1✗品質と保守性を高めるのがねらい
2✓くり返して品質と保守性を高め正しい
3✗空調設備ではない
4✗勤怠管理のしくみではない

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る