6.4 KiB
6.4 KiB
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 或結束
準備好下一輪了嗎? 🚀