Initial commit
This commit is contained in:
187
commands/tf-green.md
Normal file
187
commands/tf-green.md
Normal file
@@ -0,0 +1,187 @@
|
||||
---
|
||||
description: 執行TDD的Green階段。實作功能讓失敗的測試通過。
|
||||
---
|
||||
|
||||
# TDD Green階段(實作功能)
|
||||
|
||||
執行TDD的Green階段,實作最小功能讓測試通過。
|
||||
|
||||
**【功能名】**:{{feature_name}}
|
||||
|
||||
## 事前準備
|
||||
|
||||
請確認:
|
||||
- Red 階段的測試已建立
|
||||
- 測試執行後會失敗
|
||||
- memo.md 已記錄 Red 階段進度
|
||||
|
||||
## Green 階段目標
|
||||
|
||||
**實作最小功能讓測試通過。**
|
||||
|
||||
**重要原則:**
|
||||
- 只要能讓測試通過就好
|
||||
- 程式碼簡潔優先,不用考慮完美
|
||||
- 複雜的最佳化留到 Refactor 階段
|
||||
- 先求能動,再求完美
|
||||
|
||||
## 實作原則
|
||||
|
||||
### 1. 最小實作優先
|
||||
```javascript
|
||||
// ❌ 不要一開始就寫複雜的實作
|
||||
function calculate(a, b) {
|
||||
// 複雜的驗證和錯誤處理
|
||||
// 效能最佳化
|
||||
// 各種邊界條件處理
|
||||
...
|
||||
}
|
||||
|
||||
// ✅ 先寫最簡單能通過測試的程式碼
|
||||
function calculate(a, b) {
|
||||
return a + b;
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 階段性實作
|
||||
- 先讓一個測試通過
|
||||
- 再讓下一個測試通過
|
||||
- 逐步增加功能
|
||||
|
||||
### 3. 容許暫時的解決方案
|
||||
- 可以使用硬編碼
|
||||
- 可以先忽略邊界條件
|
||||
- 重構階段再改善
|
||||
|
||||
## 實作程式碼註解要求
|
||||
|
||||
### 函式層級註解
|
||||
```javascript
|
||||
/**
|
||||
* 【功能說明】:此函式的功能
|
||||
* 【實作方針】:為什麼這樣實作
|
||||
* 【對應測試】:為了通過哪個測試
|
||||
*
|
||||
* @param {type} paramName - 參數說明
|
||||
* @returns {type} - 回傳值說明
|
||||
*/
|
||||
function functionName(paramName) {
|
||||
// 實作內容
|
||||
}
|
||||
```
|
||||
|
||||
### 處理區塊註解
|
||||
```javascript
|
||||
function processData(input) {
|
||||
// 【輸入驗證】:檢查輸入是否有效
|
||||
if (!input) {
|
||||
throw new Error('輸入不可為空');
|
||||
}
|
||||
|
||||
// 【主要處理】:核心功能實作
|
||||
const result = doSomething(input);
|
||||
|
||||
// 【回傳結果】:回傳處理結果
|
||||
return result;
|
||||
}
|
||||
```
|
||||
|
||||
### 變數註解
|
||||
```javascript
|
||||
// 【初始化】:設定初始值
|
||||
const initialValue = 0;
|
||||
|
||||
// 【計數器】:追蹤處理數量
|
||||
let count = 0;
|
||||
```
|
||||
|
||||
## 實作步驟
|
||||
|
||||
1. **執行測試確認失敗**:
|
||||
```bash
|
||||
npm test
|
||||
```
|
||||
|
||||
2. **實作最小功能**:
|
||||
- 只實作讓測試通過所需的程式碼
|
||||
- 加入繁體中文註解
|
||||
- 保持程式碼簡單
|
||||
|
||||
3. **再次執行測試**:
|
||||
- 確認測試通過
|
||||
- 如果失敗,修正後重試
|
||||
|
||||
4. **更新 memo.md**:
|
||||
- 記錄實作內容
|
||||
- 標註下一步改善項目
|
||||
|
||||
## memo.md 更新格式
|
||||
|
||||
在 memo.md 中加入 Green 階段記錄:
|
||||
|
||||
```markdown
|
||||
## Green 階段(實作功能)
|
||||
|
||||
### 日期
|
||||
{當前日期時間}
|
||||
|
||||
### 實作內容
|
||||
{簡述實作了什麼功能}
|
||||
|
||||
### 實作檔案位置
|
||||
{實作檔案路徑}
|
||||
|
||||
### 測試結果
|
||||
- ✅ 測試 1:通過
|
||||
- ✅ 測試 2:通過
|
||||
...
|
||||
|
||||
### 待改善項目
|
||||
{列出應該在 Refactor 階段改善的地方}
|
||||
|
||||
### 下一步
|
||||
進入 Refactor 階段,改善程式碼品質。
|
||||
```
|
||||
|
||||
## 常見的最小實作策略
|
||||
|
||||
### 策略 1:硬編碼
|
||||
```javascript
|
||||
// 先用固定值通過測試
|
||||
function getGreeting() {
|
||||
return "Hello, World!";
|
||||
}
|
||||
```
|
||||
|
||||
### 策略 2:假實作
|
||||
```javascript
|
||||
// 先回傳符合格式的假資料
|
||||
function fetchData() {
|
||||
return { status: 'success', data: [] };
|
||||
}
|
||||
```
|
||||
|
||||
### 策略 3:簡單邏輯
|
||||
```javascript
|
||||
// 用最簡單的邏輯實作
|
||||
function isEven(num) {
|
||||
return num % 2 === 0;
|
||||
}
|
||||
```
|
||||
|
||||
## 品質檢查
|
||||
|
||||
完成後請確認:
|
||||
- ✅ 所有測試都通過
|
||||
- ✅ 實作程式碼有繁體中文註解
|
||||
- ✅ 程式碼簡單易懂
|
||||
- ✅ 已記錄到 memo.md
|
||||
- ✅ 已標註待改善項目
|
||||
|
||||
## 下一步
|
||||
|
||||
Green 階段完成後,執行:
|
||||
```
|
||||
/tf-refactor
|
||||
```
|
||||
開始改善程式碼品質(Refactor 階段)。
|
||||
Reference in New Issue
Block a user