Initial commit

This commit is contained in:
Zhongwei Li
2025-11-29 18:03:43 +08:00
commit 2d7bed1e9d
8 changed files with 1725 additions and 0 deletions

359
commands/kb-review.md Normal file
View 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 或結束
```
準備好下一輪了嗎? 🚀