Files
2025-11-29 18:03:43 +08:00

6.4 KiB
Raw Permalink Blame History

description
description
回顧這一輪 TDD決定下一步。遵循 Kent Beck 的持續演進理念。

TDD Review - 回顧與規劃下一步

完成一輪 Red-Green-Refactor 後,停下來思考。

【功能名】{{feature_name}}

Kent Beck 的回顧理念

"每完成一個測試,都要問自己:我學到了什麼?" "下一個測試不是計劃出來的,而是從經驗中浮現的。"

回顧步驟

1. 回顧這一輪

在 journey.md 中更新:

### 第 N 輪完成 - {日期時間}

#### 💭 回顧與學習

**這一輪做了什麼**
{簡述這輪的測試和實作}

**學到了什麼**
- {發現 1}
- {發現 2}
- {驚喜或意外}

**設計如何演進**
{設計有什麼改變?}

**目前的進度感覺**
{覺得進度如何?順利還是卡住?}

2. 回顧問題清單

Kent Beck 建議問自己:

關於測試

  • 這個測試真的需要嗎?
  • 測試太大了嗎?
  • 測試太小了嗎?
  • 測試名稱清楚嗎?

關於實作

  • 實作還是假的嗎?
  • 需要三角測量嗎?
  • 有沒有過度設計?
  • 程式碼清楚嗎?

關於重構

  • 還有重複嗎?
  • 命名恰當嗎?
  • 結構清晰嗎?
  • 需要更多重構嗎?

關於節奏

  • 步伐太大還是太小?
  • 速度合適嗎?
  • 感覺順暢嗎?

3. 決定下一步

Kent Beck有三個選擇

選項 1繼續測試最常見

何時選擇

  • 還有明顯的功能未實作
  • 想到下一個測試案例
  • 設計還在演進中

下一步

/kb-red

在 journey.md 記錄

#### 🎯 下一步計劃

**下一個測試想法**
{為什麼要寫這個測試?}

**預期會發生什麼**
{這個測試會逼出什麼實作?}

執行 /kb-red

選項 2暫停休息

何時選擇

  • 累了
  • 卡住了
  • 需要思考

暫停建議

  • 寫下目前的想法
  • 記錄卡住的地方
  • 休息一下再回來

在 journey.md 記錄

#### ⏸️ 暫停點

**目前狀態**
{進行到哪裡了}

**下次回來要做什麼**
{下一步的提示}

**卡住的問題**(如果有)
{什麼地方不確定}

選項 3結束這個會話

何時選擇

  • 目前的目標達成了
  • 找到自然的停止點
  • 功能暫時夠用了

在 journey.md 記錄

#### 🎉 會話結束

**達成的成果**
{列出完成的功能}

**目前的狀態**
- 測試數量:{數量}
- 測試通過率100%
- 程式碼品質:{評估}

**未來可能的方向**
- {可能的擴展 1}
- {可能的擴展 2}

心理 To-Do List

Kent Beck 建議維護一個簡單的 To-Do List

在 journey.md 中

## 心理 To-Do List

### 已完成
- [x] 基本乘法運算
- [x] 處理負數

### 下一步可能的測試
- [ ] 加法運算
- [ ] 相等性比較
- [ ] 不同幣別

### 設計想法
- [ ] 考慮提取 Money 父類別
- [ ] 可能需要 Currency 概念

特點

  • 非正式的
  • 隨時可以改
  • 不是承諾
  • 只是提醒

調整步伐

如果進度太慢

Kent Beck加大步伐

  • 寫更大的測試
  • 用 Obvious Implementation
  • 跳過明顯的步驟

如果感到不安

Kent Beck縮小步伐

  • 寫更小的測試
  • 用 Fake It
  • 三角測量
  • 更頻繁測試

範例反思記錄

順利的情況

### 第 3 輪完成 - 2025-10-15 22:00

#### 💭 回顧與學習

**這一輪做了什麼**
測試了負數乘法,確認 Dollar(-5).times(2) 得到 -10。

**學到了什麼**
- 現有實作自動支援負數
- 不需要特殊處理
- 乘法的數學性質自然延伸

**設計如何演進**
沒有改變,驗證了設計的穩健性。

**目前的進度感覺**
很順利!基本的乘法功能已經穩定。

#### 🎯 下一步計劃

**下一個測試想法**
測試加法Dollar(5).plus(Dollar(3)) 應該等於 Dollar(8)

**預期會發生什麼**
需要新增 plus 方法,可能會很直接。

執行 /kb-red

卡住的情況

### 第 5 輪完成 - 2025-10-15 22:30

#### 💭 回顧與學習

**這一輪做了什麼**
嘗試實作不同幣別的比較。

**學到了什麼**
- 設計變複雜了
- 不確定該怎麼處理幣別
- 可能需要重新思考

**設計如何演進**
引入了 Currency 概念,但感覺有點勉強。

**目前的進度感覺**
有點卡住。可能步伐太大了。

#### ⏸️ 暫停點

**目前狀態**
Dollar 和 Franc 可以獨立運作,但比較功能還不清楚。

**下次回來要做什麼**
考慮回退到更簡單的設計,或者寫更小的測試。

**卡住的問題**
- 幣別應該是字串還是物件?
- 需要匯率轉換嗎?
- 設計是否過度複雜?

可能需要回到更小的步伐,寫一個更簡單的測試。

長期視角

Kent Beck 的"完成"定義

TDD 沒有真正的完成:

  • 軟體是演進的
  • 永遠可以加新測試
  • 永遠可以改善設計
  • 永遠可以學到新東西

知道何時停止

可以暫時停止的信號

  • 目前的需求滿足了
  • 設計達到一個穩定點
  • 沒有明顯的下一步
  • 想要轉向其他功能

不是因為

  • "測試寫夠了"
  • "覆蓋率達標了"
  • "文件說的都做完了"

節奏意識

Kent Beck 強調 TDD 的節奏:

🔴 Red      → 緊張(寫測試)
🟢 Green    → 放鬆(通過了!)
🔵 Refactor → 改善(重構)
💭 Review   → 回顧(現在)

好的節奏

  • 快速循環(幾分鐘)
  • 頻繁的綠燈
  • 定期的反思

不好的節奏

  • 卡在紅燈太久
  • 測試寫太大
  • 實作太複雜
  • 忘記重構
  • 沒有回顧

下一步選擇

繼續前進

/kb-red

查看旅程記錄

cat docs/tdd/{feature_name}/journey.md

執行所有測試

npm test

記住 Kent Beck 的話

"TDD 不是一個目的地,而是一個旅程。" "每個測試都教會你一些東西。" "下一步不是計劃出來的,而是從經驗中浮現的。" "當你不知道下一步時,寫一個你知道答案的測試。" "信任這個過程,設計會自然演進。"


完整循環

你已經完成一輪完整的 TDD 循環!

/kb-start    ← 從這裡開始
    ↓
/kb-red      ← 寫測試 (Red)
    ↓
/kb-green    ← 實作 (Green)
    ↓
/kb-refactor ← 重構 (Refactor)
    ↓
/kb-review   ← 回顧(你在這裡)
    ↓
循環回 /kb-red 或結束

準備好下一輪了嗎? 🚀