Initial commit
This commit is contained in:
359
commands/kb-review.md
Normal file
359
commands/kb-review.md
Normal file
@@ -0,0 +1,359 @@
|
||||
---
|
||||
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 或結束
|
||||
```
|
||||
|
||||
準備好下一輪了嗎? 🚀
|
||||
Reference in New Issue
Block a user