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