📌 30 秒摘要(Layer 3)

TDD 把順序倒過來:先寫一個會失敗的測試,再寫剛好讓它通過的程式,然後重構——紅、綠、重構,小步循環。它不只是測試手段,更是一種設計方法:被測試逼著寫的程式碼,天然是低耦合、可測、介面清楚的。核心心法:永遠讓程式碼在「可運作」與「乾淨」兩個狀態間小步移動,隨時都有綠燈保護。

🗺 心智圖(Canvas)

測試驅動開發

測試驅動開發

Test-Driven Development — Kent Beck

🔁 紅 → 綠 → 重構

🎯 什麼情境該想到我

當你想實作一個功能、又想讓它天然可測、乾淨、不易出錯時。

⚙️ 怎麼用(小步循環)

  1. 🔴 紅:先寫一個描述「你要的行為」的測試 —— 它現在會失敗(因為還沒實作)。
  2. 🟢 綠:用最快、最簡單的方式讓測試通過(可以先寫死、先醜,重點是綠燈)。
  3. ♻️ 重構:在綠燈保護下,去除重複、整理結構(見 工具-提煉函式)——每步都保持綠。
  4. 回到步驟 1,加下一個測試。步子小到幾乎不可能出錯;出錯就把步子切更小。

🧪 我實際套用的紀錄

  • 2026-07-15:(待填)

⚠️ 注意

  • 別跳過重構那步(只紅綠不重構=債越積越多);也別在紅燈時做重構。

🔗 相關工具

🔴 紅 先寫一個描述「要什麼行為」的測試,它現在會失敗

🟢 綠 用最快、最簡單的方式讓它通過(可以先醜、先寫死)

♻️ 重構 在綠燈保護下去除重複、整理結構,每步都保持綠

👣 小步前進

每步小到「幾乎不可能出錯」 隨時都有綠燈保護,出錯範圍極小

不確定就把步子切更小 步伐大小是可調節的旋鈕,不是固定值

「先讓它動,再讓它對,最後讓它快。」 程式碼在「可運作」與「乾淨」兩態間小步移動

🟩 讓測試變綠的策略

假實作 Fake It 先直接寫死回傳值讓燈變綠,再逐步一般化

三角測量 Triangulation 加第二、第三個例子,逼出真正的通用解

顯明實作 Obvious Implementation 答案很明顯時就直接寫對,別繞路

🎨 TDD 是設計工具

🎯 什麼情境該想到我

當你的程式「很難寫測試」(依賴一堆、要 mock 一大票),或想讓設計更清楚時。難測,往往是設計不良的訊號。

⚙️ 怎麼用

  1. 先寫測試 = 先從「使用者角度」設計介面:你被迫先想「這東西怎麼被呼叫最順」,介面自然變好用。
  2. 難測就是設計警報:如果要測某段得建構一堆相依 → 代表耦合太緊,該解耦(見 工具-打破依賴以便測試工具-針對介面編程)。
  3. 讓測試逼出低耦合:依賴用注入、對介面編程,程式自然可測、可替換。
  4. 測試即活文件:讀測試就知道這段程式該有什麼行為。

🧪 我實際套用的紀錄

  • 2026-07-15:(待填)

⚠️ 注意

  • 目標是「設計驅動」,不是「為了 100% 覆蓋率而測」;測試是設計的副產品與保護網。

🔗 相關工具

先寫測試=從使用端設計介面 被迫先想「這東西怎麼被呼叫最順」

難測就是設計警報 要 mock 一大票 → 耦合太緊,該解耦

測試即規格與活文件 讀測試就知道這段程式該有什麼行為

Link to original

🧰 這本書給我的工具

✨ 關鍵重點(Layer 1–2)

  • 紅 → 綠 → 重構:先讓測試失敗(紅)、用最快方式讓它通過(綠)、再重構去除重複(保持綠)。
  • 小步前進:每步小到「幾乎不可能出錯」;不確定就把步子再切小。
  • 測試即規格:測試先寫,等於先想清楚「要什麼行為」。
  • TDD 是設計工具:難測的程式通常是設計不良的訊號 → 逼你解耦。
  • 兩種讓綠燈的策略:假實作(先寫死)、三角測量(多個例子逼出通用解)。

💬 金句原文(Layer 0)

  • 「先讓它動,再讓它對,最後讓它快。」

🔗 相關