一人前エンジニア道場

テストと品質 / 約20分

TDDのサイクルとリファクタリング: Red-Green-Refactor

なぜこれを学ぶか

TDD(テスト駆動開発)の本質は「先にテストを書いて失敗させ(Red)、最小限の実装でパスさせ(Green)、コードを整理する(Refactor)」サイクルです。このリズムに乗ると、設計が自然に改善されていきます。

Red-Green-Refactor サイクル: ①まず失敗するテストを書く(Red)→ ②テストを通す最小限の実装を書く(Green)→ ③テストを壊さずにコードを整理する(Refactor)→ ①に戻る。

TDDのポイントは「一度に1つのことだけ考える」ことです。Redでは「何をすべきか」だけ考える。Greenでは「どうやって通すか」だけ考える。Refactorでは「どうすれば読みやすいか」だけ考える。

リファクタリング は「外から見た動作を変えずに内部構造を改善する」ことです。テストがあれば「変わっていないこと」が自動で保証されるため、安心してリファクタリングできます。

テストの「粒度」も重要です。1テスト=1アサーション(1つのことだけ確認)を目指すと、テストが失敗した時に「何が壊れたか」がすぐわかります。

モック(Mock) は外部依存(DBアクセス・API通信・時刻取得など)を偽物に置き換える技術です。テストが外部状態に依存しなくなり、高速かつ安定したテストが書けます。この道場のコーディング演習でmockFetchを渡す形式もモックの一種です。

重要ポイント

  • Red→Green→Refactor を小さく高速に回す
  • リファクタリングはテストがあって初めて安全にできる
  • モックで外部依存を切り離し、テストを安定させる

理解度チェック

選ぶと即座に解説が表示されます。

TDDのRefactorフェーズで守るべき絶対のルールは?

ヒントを見る

リファクタリングの定義は「外から見た動作を変えずに内部を整理する」です。これを保証する仕組みは何ですか?

コーディング演習実際に書く

リファクタリング演習です。以下の「動くが汚いコード」と同じテストを全てパスする、より読みやすい実装を書いてください。入力: 数値の配列。出力: { sum: 合計, avg: 平均(小数点2位まで), max: 最大値, min: 最小値 }。空配列の場合は { sum: 0, avg: 0, max: null, min: null }。

function analyzeNumbers(nums)

スキルセルフチェック

このレッスンの内容をどの程度理解できましたか?