Skip to content

Commit 7fffe2a

Browse files
author
薛華慶, james.hsueh
committed
feat: increase bdd principles in spec stage
1 parent 058d603 commit 7fffe2a

File tree

1 file changed

+86
-37
lines changed

1 file changed

+86
-37
lines changed

scripts/templates/sdd-spec.md

Lines changed: 86 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,41 @@ __PROMPT__
1919
- 思考:系統應該做什麼?有哪些邊界情況?如何處理錯誤?
2020
- 只使用 Gherkin 語法(Given-When-Then)。
2121

22+
## 重要:行為描述 vs 實作細節
23+
24+
**您的目標是撰寫「功能規格」,而非「測試步驟」。**
25+
26+
### ❌ 避免:實作細節和測試步驟
27+
- 具體的計算數值(例如:"價格應該是 800 美元")
28+
- 資料庫欄位或技術術語
29+
- UI 元件細節(按鈕、表單)
30+
- 系統內部狀態
31+
32+
### ✅ 推薦:業務行為和用戶價值
33+
- 業務規則和政策(例如:"VIP 會員應該獲得折扣優惠")
34+
- 用戶期望和體驗(例如:"購物車應該反映優惠後的金額")
35+
- 業務價值(例如:"提高客戶忠誠度")
36+
- 從用戶角度描述行為
37+
38+
### 對比範例
39+
40+
**❌ 實作細節(測試步驟):**
41+
```gherkin
42+
Given 使用者的會員等級是 "VIP"
43+
When 使用者購買金額是 1000 美元
44+
Then 折扣金額應該是 200 美元
45+
And 最終價格應該是 800 美元
46+
```
47+
48+
**✅ 行為描述(功能規格):**
49+
```gherkin
50+
Given 一位 VIP 會員進行結帳
51+
And 購物車金額達到優惠門檻
52+
When 會員完成訂單
53+
Then 系統應該自動套用 VIP 專屬折扣
54+
And 訂單摘要應該顯示折扣優惠
55+
```
56+
2257
## 您的任務
2358

2459
1. **檢查需求衝突**
@@ -50,68 +85,82 @@ Feature: <清楚簡潔的功能名稱>
5085
<功能業務價值的簡短描述>
5186
5287
Scenario: <正常流程情境名稱>
53-
Given <前置條件 1>
54-
And <前置條件 2>
55-
When <使用者動作或事件>
56-
And <額外動作(如需要)>
57-
Then <預期結果 1>
58-
And <預期結果 2>
88+
Given <業務前置條件,從用戶角度描述>
89+
And <補充前置條件>
90+
When <用戶執行的業務動作>
91+
And <額外的業務動作(如需要)>
92+
Then <預期的業務結果,描述行為而非驗證>
93+
And <補充的業務結果>
5994
6095
Scenario: <邊界情況情境名稱>
61-
Given <邊界情況設定>
62-
When <邊界情況下的動作>
63-
Then <預期行為>
96+
Given <邊界情況的業務場景>
97+
When <邊界情況下的用戶動作>
98+
Then <系統應展現的業務行為>
6499
65100
Scenario: <錯誤處理情境名稱>
66-
Given <無效條件>
67-
When <嘗試的動作>
68-
Then <預期的錯誤回應>
101+
Given <導致錯誤的業務情境>
102+
When <觸發錯誤的用戶動作>
103+
Then <系統應如何回應(從業務角度)>
69104
```
70105

106+
**撰寫技巧:**
107+
- Given:描述業務情境,而非系統狀態(例如:「VIP 會員進行結帳」而非「會員等級 = VIP」)
108+
- When:描述用戶行為,而非系統操作(例如:「完成訂單」而非「呼叫 checkout API」)
109+
- Then:描述業務期望,而非技術驗證(例如:「應該套用折扣」而非「折扣 = 200」)
110+
71111
## 範例輸出
72112

73113
針對需求:"VIP 使用者購買超過 $100 可享 20% 折扣"
74114

75115
```gherkin
76-
Feature: VIP 折扣系統
77-
作為企業,我想要給予 VIP 客戶折扣優惠
116+
Feature: VIP 會員優惠計劃
117+
作為企業,我想要給予 VIP 客戶購物折扣優惠
78118
以提高客戶忠誠度和重複購買率。
79119
80-
Scenario: 對 VIP 使用者套用折扣
81-
Given 使用者是 VIP
82-
When 使用者購買 1000 美元
83-
Then 最終價格應該是 800 美元
84-
And 套用的折扣應該是 200 美元
85-
86-
Scenario: 非 VIP 使用者無折扣
87-
Given 使用者是 NORMAL
88-
When 使用者購買 1000 美元
89-
Then 最終價格應該是 1000 美元
90-
And 套用的折扣應該是 0 美元
91-
92-
Scenario: 購買金額低於門檻無折扣
93-
Given 使用者是 VIP
94-
When 使用者購買 50 美元
95-
Then 最終價格應該是 50 美元
96-
And 套用的折扣應該是 0 美元
97-
98-
Scenario: 處理無效的購買金額
99-
Given 使用者是 VIP
100-
When 使用者購買 -100 美元
101-
Then 系統應該拒絕並回應錯誤 "無效的購買金額"
120+
Scenario: VIP 會員大額購物獲得優惠
121+
Given 一位 VIP 會員進行結帳
122+
And 購物車金額達到優惠門檻
123+
When 會員完成訂單
124+
Then 系統應該自動套用 VIP 專屬折扣
125+
And 訂單摘要應該顯示折扣優惠
126+
127+
Scenario: 一般會員無優惠資格
128+
Given 一位一般會員進行結帳
129+
And 購物車金額達到優惠門檻
130+
When 會員完成訂單
131+
Then 系統應該以原價結帳
132+
And 訂單摘要不顯示折扣資訊
133+
134+
Scenario: VIP 會員小額購物未達門檻
135+
Given 一位 VIP 會員進行結帳
136+
And 購物車金額未達優惠門檻
137+
When 會員完成訂單
138+
Then 系統應該以原價結帳
139+
And 提示會員還需消費多少才能享有優惠
140+
141+
Scenario: 拒絕異常的訂單金額
142+
Given 會員嘗試建立訂單
143+
When 購物車金額為負數或零
144+
Then 系統應該拒絕訂單
145+
And 提示會員購物車金額無效
102146
```
103147

104148
## 品質檢查清單
105149

106150
完成前,確保您的規格具有:
107151
- [ ] 已檢查與現有功能的衝突(如有衝突已向使用者確認)
108-
- [ ] 清楚的功能描述
152+
- [ ] 清楚的功能描述,強調業務價值
109153
- [ ] 至少一個正常流程情境
110154
- [ ] 至少一個邊界情況情境
111155
- [ ] 至少一個錯誤處理情境
112156
- [ ] 沒有技術實作細節(沒有資料庫、沒有程式碼、沒有架構)
113157
- [ ] 所有情境遵循 Given-When-Then 格式
114158
- [ ] 每個情境都是原子性且可測試的
159+
- [ ] **使用行為描述而非實作細節**
160+
- [ ] 避免具體的計算數值和測試斷言
161+
- [ ] 從用戶或業務角度描述期望行為
162+
- [ ] 描述「應該發生什麼」而非「如何驗證」
163+
- [ ] 使用業務語言而非技術術語
115164

116165
## 下一步
117166

0 commit comments

Comments
 (0)