FE EXAM

TDD(テスト駆動開発)

テストを先に書いてからコードを実装する開発手法。

INTERACTIVE VISUALIZATION
Red
Green
Refactor
フェーズ
idle
テスト結果
なし
サイクル
Red→Green→Refactor
シナリオ
ステップ1 / 6
STEP 1/6TDDを始める前これから「2つの数を足す add 関数」を作ります。TDDでは、いきなり関数を書きません。まず「こう動いてほしい」というテストを先に書きます。テスト=プログラムが正しく動くかを自動で確かめる小さなチェックのことです。
Redテスト失敗Green実装で成功Refactor整理するテスト
CODE VIEW — まだ何も書いていない
// これから add(2, 3) === 5 になる
// 関数を作っていく
解説

📌
TDDとは

① テストを書く② コードを書くテストが先、実装はあと

TDD(テスト駆動開発)とは、テストを先に書いてからコードを実装する開発手法です。テスト=プログラムが期待どおり動くかを自動で確かめる小さなチェックのことです。ふつうは「作ってからテスト」ですが、TDDはその順番を逆にします。

身近な例で考えると、料理の完成形(味の合格ライン)を先に決めてから調理するようなものです。「塩は何g・甘さはこのくらい」というゴールを先に紙に書き、それに合うように作っていきます。先にゴールがあるので、作りすぎや作り足りないを防げます。

上のツールで▶ボタンを押すと、失敗するテストから始めて、実装で通し、最後に整理するというTDDの流れを順番に確認できます。

🔁
Red-Green-Refactor

RedGreenRefactorくり返す

TDDは「Red → Green → Refactor」という3つの段階を小さくくり返します。1サイクルはほんの数分で終わるくらい小さくするのがコツです。


Red(赤):これから作る機能のテストを先に書く。まだ実装がないのでテストは失敗(赤)する
Green(緑):テストを通すための最小限のコードを書く。テストが成功(緑)に変わる
Refactor(リファクタリング):テストが通ったまま、コードを読みやすく整理する

信号機にたとえると分かりやすいです。赤で止まり(失敗を確認)、緑で進み(通す)、そのあと身だしなみを整える(整理)。Refactorのあともう一度テストを走らせ、緑のままなら壊れていない証拠です。上のツールの中央の信号で、赤→緑の変化を確認できます。

利点

テストという安全網壊れたらすぐ赤で気づける安心して直せる

TDDには、開発を進めやすくするいくつかの利点があります。


安全に修正できる:常にテストがあるので、直したあとに「壊れていないか」をすぐ確認できる。これが安全網になる
仕様がはっきりする:テストが「こう動くべき」という仕様の見本になり、考えを整理できる
バグを早く見つけられる:作りながら毎回テストするので、不具合が小さいうちに気づける
作りすぎを防げる:テストを通すのに必要なコードだけを書くので、ムダな機能を作りにくい

自転車にたとえると、テストは補助輪のような存在です。補助輪があれば思い切ってこげるのと同じで、テストがあると安心して大胆にコードを書き直せます。上のツールのRefactor後にもう一度テストが通る様子が、まさにこの安全網の働きです。

📌
なぜテストを先に書くのか

普通の開発実装するあとでテスト仕様のズレに後から気づくTDDテスト先に書く通す実装ズレは最初に発見できるゴールを先に決めるから、作りすぎを防げる

なぜテストを先に書くのか。それは、テストを先に書くことで「何を作るべきか(仕様)」をあいまいにしないためです。

ふつうの開発では「まず作る → あとでテスト」という順番です。この場合、作り終えてからゴールとのズレに気づくことがあります。大きく作り込んだ後で「動作が仕様と違う」と分かると、直すのが大変になります。

TDDではテストを先に書くことで、こうなります。
ゴール(合格条件)を先に定義する:「この入力を渡したらこの出力が返ること」と最初に明確にする
ゴールに必要な分だけ作る:テストを通すことだけを目標にするため、余計な機能を作らずに済む
ズレをすぐ発見できる:テストが赤のままなら「まだゴールに届いていない」と一目で分かる

引越しに例えると、「新居に置きたい家具の配置図(テスト)を先に書いてから荷造りする(実装)」イメージです。先に配置を決めておくと、不要なものを持ち込まずに済みます。

📌
TDDと従来開発の比較

従来の開発TDD(テスト駆動開発)
テストを書くタイミング実装のあと(後付け)実装の前(先に書く)
ゴールの明確さ作りながら決まることもテストで最初に定義する
バグに気づくタイミング作り込んだ後になりがちすぐに赤で分かる
安全に修正できるか不安になることがあるテストが安全網になる
作りすぎのリスク余分な機能を作りやすいテストを通す分だけ作る

表のとおり、TDDは従来の開発と順番が逆です。この「テストを先に・実装をあとに」という順番の違いが、さまざまな利点につながっています。ただし、TDDはすべての状況で必ずしも最適というわけではありません。小さな修正や試作段階ではテストを先に書きにくいこともあります。TDDは「テストを大切にする文化」の一形態として理解しておきましょう。

練習問題

🎯
基本情報技術者 練習問題

Q1.TDD(テスト駆動開発)の進め方として最も適切なものはどれか。
A.コードを実装してから、最後にまとめてテストを書く
B.テストを先に書き、それを通すようにコードを実装する
C.テストは書かず、目視で動作を確認する
D.設計書を完成させてから一括で実装とテストを行う
Q2.TDDの「Red → Green → Refactor」サイクルの順序として正しいものはどれか。
A.まず実装し(Green)、次に整理し(Refactor)、最後にテスト(Red)
B.まず失敗するテスト(Red)、次に通す実装(Green)、最後に整理(Refactor)
C.まず整理(Refactor)、次にテスト(Red)、最後に実装(Green)
D.まずテスト成功(Green)、次に失敗(Red)、最後に整理(Refactor)
Q3.TDDの利点として最も適切なものはどれか。
A.テストがないため開発が速くなる
B.テストが安全網になり、安心してコードを修正できる
C.ドキュメントを書かなくてよくなる
D.本番環境への自動デプロイができる

関連コンテンツ

TDD(テスト駆動開発) | Vizigo