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

360 lines
6.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
description: 回顧這一輪 TDD決定下一步。遵循 Kent Beck 的持續演進理念。
---
# TDD Review - 回顧與規劃下一步
完成一輪 Red-Green-Refactor 後,停下來思考。
**【功能名】**{{feature_name}}
## Kent Beck 的回顧理念
> "每完成一個測試,都要問自己:我學到了什麼?"
> "下一個測試不是計劃出來的,而是從經驗中浮現的。"
## 回顧步驟
### 1. 回顧這一輪
在 journey.md 中更新:
```markdown
### 第 N 輪完成 - {日期時間}
#### 💭 回顧與學習
**這一輪做了什麼**
{簡述這輪的測試和實作}
**學到了什麼**
- {發現 1}
- {發現 2}
- {驚喜或意外}
**設計如何演進**
{設計有什麼改變?}
**目前的進度感覺**
{覺得進度如何?順利還是卡住?}
```
### 2. 回顧問題清單
Kent Beck 建議問自己:
#### 關於測試
- ✅ 這個測試真的需要嗎?
- ✅ 測試太大了嗎?
- ✅ 測試太小了嗎?
- ✅ 測試名稱清楚嗎?
#### 關於實作
- ✅ 實作還是假的嗎?
- ✅ 需要三角測量嗎?
- ✅ 有沒有過度設計?
- ✅ 程式碼清楚嗎?
#### 關於重構
- ✅ 還有重複嗎?
- ✅ 命名恰當嗎?
- ✅ 結構清晰嗎?
- ✅ 需要更多重構嗎?
#### 關於節奏
- ✅ 步伐太大還是太小?
- ✅ 速度合適嗎?
- ✅ 感覺順暢嗎?
### 3. 決定下一步
Kent Beck有三個選擇
#### 選項 1繼續測試最常見
**何時選擇**
- 還有明顯的功能未實作
- 想到下一個測試案例
- 設計還在演進中
**下一步**
```
/kb-red
```
**在 journey.md 記錄**
```markdown
#### 🎯 下一步計劃
**下一個測試想法**
{為什麼要寫這個測試?}
**預期會發生什麼**
{這個測試會逼出什麼實作?}
執行 /kb-red
```
#### 選項 2暫停休息
**何時選擇**
- 累了
- 卡住了
- 需要思考
**暫停建議**
- 寫下目前的想法
- 記錄卡住的地方
- 休息一下再回來
**在 journey.md 記錄**
```markdown
#### ⏸️ 暫停點
**目前狀態**
{進行到哪裡了}
**下次回來要做什麼**
{下一步的提示}
**卡住的問題**(如果有)
{什麼地方不確定}
```
#### 選項 3結束這個會話
**何時選擇**
- 目前的目標達成了
- 找到自然的停止點
- 功能暫時夠用了
**在 journey.md 記錄**
```markdown
#### 🎉 會話結束
**達成的成果**
{列出完成的功能}
**目前的狀態**
- 測試數量:{數量}
- 測試通過率100%
- 程式碼品質:{評估}
**未來可能的方向**
- {可能的擴展 1}
- {可能的擴展 2}
```
## 心理 To-Do List
Kent Beck 建議維護一個簡單的 To-Do List
### 在 journey.md 中
```markdown
## 心理 To-Do List
### 已完成
- [x] 基本乘法運算
- [x] 處理負數
### 下一步可能的測試
- [ ] 加法運算
- [ ] 相等性比較
- [ ] 不同幣別
### 設計想法
- [ ] 考慮提取 Money 父類別
- [ ] 可能需要 Currency 概念
```
**特點**
- 非正式的
- 隨時可以改
- 不是承諾
- 只是提醒
## 調整步伐
### 如果進度太慢
Kent Beck**加大步伐**
- 寫更大的測試
- 用 Obvious Implementation
- 跳過明顯的步驟
### 如果感到不安
Kent Beck**縮小步伐**
- 寫更小的測試
- 用 Fake It
- 三角測量
- 更頻繁測試
## 範例反思記錄
### 順利的情況
```markdown
### 第 3 輪完成 - 2025-10-15 22:00
#### 💭 回顧與學習
**這一輪做了什麼**
測試了負數乘法,確認 Dollar(-5).times(2) 得到 -10。
**學到了什麼**
- 現有實作自動支援負數
- 不需要特殊處理
- 乘法的數學性質自然延伸
**設計如何演進**
沒有改變,驗證了設計的穩健性。
**目前的進度感覺**
很順利!基本的乘法功能已經穩定。
#### 🎯 下一步計劃
**下一個測試想法**
測試加法Dollar(5).plus(Dollar(3)) 應該等於 Dollar(8)
**預期會發生什麼**
需要新增 plus 方法,可能會很直接。
執行 /kb-red
```
### 卡住的情況
```markdown
### 第 5 輪完成 - 2025-10-15 22:30
#### 💭 回顧與學習
**這一輪做了什麼**
嘗試實作不同幣別的比較。
**學到了什麼**
- 設計變複雜了
- 不確定該怎麼處理幣別
- 可能需要重新思考
**設計如何演進**
引入了 Currency 概念,但感覺有點勉強。
**目前的進度感覺**
有點卡住。可能步伐太大了。
#### ⏸️ 暫停點
**目前狀態**
Dollar 和 Franc 可以獨立運作,但比較功能還不清楚。
**下次回來要做什麼**
考慮回退到更簡單的設計,或者寫更小的測試。
**卡住的問題**
- 幣別應該是字串還是物件?
- 需要匯率轉換嗎?
- 設計是否過度複雜?
可能需要回到更小的步伐,寫一個更簡單的測試。
```
## 長期視角
### Kent Beck 的"完成"定義
TDD **沒有**真正的完成:
- 軟體是演進的
- 永遠可以加新測試
- 永遠可以改善設計
- 永遠可以學到新東西
### 知道何時停止
**可以暫時停止的信號**
- 目前的需求滿足了
- 設計達到一個穩定點
- 沒有明顯的下一步
- 想要轉向其他功能
**不是因為**
- "測試寫夠了"
- "覆蓋率達標了"
- "文件說的都做完了"
## 節奏意識
Kent Beck 強調 TDD 的節奏:
```
🔴 Red → 緊張(寫測試)
🟢 Green → 放鬆(通過了!)
🔵 Refactor → 改善(重構)
💭 Review → 回顧(現在)
```
**好的節奏**
- 快速循環(幾分鐘)
- 頻繁的綠燈
- 定期的反思
**不好的節奏**
- 卡在紅燈太久
- 測試寫太大
- 實作太複雜
- 忘記重構
- 沒有回顧
## 下一步選擇
### 繼續前進
```bash
/kb-red
```
### 查看旅程記錄
```bash
cat docs/tdd/{feature_name}/journey.md
```
### 執行所有測試
```bash
npm test
```
## 記住 Kent Beck 的話
> "TDD 不是一個目的地,而是一個旅程。"
> "每個測試都教會你一些東西。"
> "下一步不是計劃出來的,而是從經驗中浮現的。"
> "當你不知道下一步時,寫一個你知道答案的測試。"
> "信任這個過程,設計會自然演進。"
---
## 完整循環
你已經完成一輪完整的 TDD 循環!
```
/kb-start ← 從這裡開始
/kb-red ← 寫測試 (Red)
/kb-green ← 實作 (Green)
/kb-refactor ← 重構 (Refactor)
/kb-review ← 回顧(你在這裡)
循環回 /kb-red 或結束
```
準備好下一輪了嗎? 🚀