# 模組 0：規格驅動思維 — 將想法轉為指令的藝術

## 💎 AI 時代的核心洞察

> **AI 工具會不斷演進，但有一件事永遠不變：**  
> **只有人，才能決定「做什麼」**

### 📊 工具演進 vs 人的價值

```
工具演進（會改變）          人的價值（不變）
─────────────────────      ─────────────────────
2023: ChatGPT 生成程式碼    → 你定義「要做什麼」
2024: Cursor AI 輔助開發    → 你判斷「做得對嗎」
2025: Lovable 全自動部署    → 你決定「為什麼做」
2026+: AI Agent 自主開發    → 你創造「真價值」
```

### 🎯 本模組教你的核心能力

這個模組教你的，正是 **AI 無法取代的能力**：

- 🎯 **需求分析**：理解真正的問題是什麼
- 📝 **規格撰寫**：清楚表達要做什麼
- ✅ **驗收標準**：定義什麼是「好」
- 💡 **價值判斷**：為什麼這個功能重要

**實際案例：**
```
❌ 沒有規格能力：
「ChatGPT，幫我做一個 App」
→ AI 不知道要做什麼，產出一堆無用程式碼

✅ 有規格能力：
「我需要一個風格分析工具，分析文字的熱情度...」
→ AI 精準生成符合需求的程式碼
```

---

## 🎯 核心目標
克服「不知如何開規格」的障礙，學會將腦中模糊的想法，翻譯成 AI 和工程師都能精準理解的結構化語言。

## 📖 理論基礎

### 什麼是規格驅動開發？
規格驅動開發 (SDD) 是一種將**需求規格**置於開發流程核心的方法論。與傳統「先寫程式，再想需求」的方式不同，SDD 強調：

1. **規格先行**：在寫任何程式碼前，先清楚定義「要做什麼」
2. **規格即文件**：規格本身就是最準確的文件
3. **規格可測試**：規格應該能轉換為自動化測試
4. **規格是溝通工具**：團隊、AI、未來的自己都能理解

### 為什麼需要規格？

| 沒有規格 | 有規格 |
|---------|--------|
| ❌ 開發方向不明確 | ✅ 明確知道要做什麼 |
| ❌ 容易遺漏邊界情況 | ✅ 涵蓋各種場景 |
| ❌ 難以與他人協作 | ✅ 標準化的溝通語言 |
| ❌ AI 產出品質不佳 | ✅ AI 能精準生成程式碼 |
| ❌ 修改需求時容易出錯 | ✅ 修改規格即更新文件 |

---

## 🛠️ 學習路徑與實戰範例

### 📝 第一步：用「故事」捕捉價值 (User Story)

#### 理論說明
User Story（使用者故事）是敏捷開發中最重要的需求描述工具。它使用簡單的三段式結構：

```
身為 <角色 Who>，我想要 <功能 What>，以便於 <價值 Why>
```

**三個要素解析：**
- **角色 (Who)**：誰需要這個功能？（線上教師、學生、工作室成員等）
- **功能 (What)**：具體要做什麼？（建立課程、提交作業、追蹤時間等）
- **價值 (Why)**：為什麼需要？帶來什麼好處？

#### 實戰範例 1：線上教師課程預約系統

**US-001: 教師設定可預約時段**
```
身為一個線上教師，
我想要設定我每週可以授課的時段，
以便於學生知道什麼時候可以預約我的課程。
```
**商業價值：** 提升課程預約效率，減少溝通成本  
**優先級：** 🔴 高

**US-002: 學生預約課程**
```
身為一個想學習的學生，
我想要在線上看到教師的可用時段並直接預約，
以便於不需要透過訊息往返就能確定上課時間。
```

#### 實戰範例 2：小型工作室時間追蹤

**US-003: 記錄工作時間**
```
身為一個自由工作者，
我想要快速記錄我在每個專案上花費的時間，
以便於準確計算專案成本並向客戶報價。
```

**US-004: 產生工作時數報表**
```
身為一個工作室負責人，
我想要看到團隊成員在各專案的工作時數統計，
以便於評估專案進度和人力分配。
```

#### 實戰範例 3：個人數位筆記本

**US-005: 快速記錄想法**
```
身為一個知識工作者，
我想要用最快的方式記下突然冒出的想法，
以便於不讓靈感流失。
```

**US-006: 標籤分類管理**
```
身為一個大量筆記的使用者，
我想要用標籤來組織我的筆記，
以便於快速找到相關內容。
```

---

### 🎬 第二步：用「場景」定義成敗 (Acceptance Criteria)

#### Gherkin 三段式語法
- **Given（假設）**：初始狀態、前置條件
- **When（當）**：執行的動作、觸發的事件  
- **Then（那麼）**：預期的結果、系統的反應

#### 完整範例：線上課程預約

**場景一：學生成功預約課程**
```gherkin
Given 我是一位已登入的學生
  And 教師 "Mary" 在 "2024-12-20 14:00" 有可預約時段
  And 該時段課程類型是 "一對一英文會話"，價格 "800 元"
When 我在課程列表中選擇該時段
  And 我填寫學習目標 "想加強商業英文簡報能力"
  And 我確認預約並完成付款
Then 系統應該顯示 "預約成功！"
  And 我應該收到確認信件，包含課程連結
  And 該時段應該從可預約列表中移除
  And 教師應該收到新預約通知
```

**場景二：時段已被預約**
```gherkin
Given 學生 A 已經預約了 "2024-12-20 14:00" 的課程
  And 我是另一位學生 B
When 我嘗試預約相同的時段
Then 系統應該顯示 "該時段已被預約"
  And 建議我選擇其他可用時段
```

**場景三：課前 24 小時取消**
```gherkin
Given 我已經預約了明天的課程
  And 距離課程開始還有 28 小時
When 我點擊「取消預約」並確認
Then 系統應該顯示 "預約已取消，將全額退款"
  And 該時段重新變為「可預約」狀態
  And 我應該在 3 個工作天內收到退款
```

---

### 🤖 第三步：用 AI 精煉規格

#### AI 規格審查 Prompt 範本

```
你是資深產品經理，請審查以下規格：

【審查重點】
1. 完整性：是否遺漏重要場景？
2. 明確性：描述是否清楚？
3. 可測試性：能否轉為自動化測試？
4. 業務邏輯：是否合理？

【規格內容】
[貼上你的規格]

請列出發現的問題和改善建議。
```

#### AI 可能提出的建議

**常見補充場景：**
- 🔴 付款流程和失敗處理
- 🔴 時區處理（跨國教學）
- 🟡 教師臨時請假如何處理
- 🟡 學生遲到或缺席的規則
- 🟢 課程延長的計費方式
- 🟢 課後評價機制

---

## 🔍 模組 0 總結

### 核心關鍵字

| 術語 | 說明 | 何時使用 |
|------|------|---------|
| **User Story** | 描述功能需求的標準格式 | 定義「要做什麼」 |
| **Acceptance Criteria** | 判斷功能完成的標準 | 定義「如何驗收」 |
| **Gherkin** | Given/When/Then 語法 | 撰寫測試場景 |
| **Happy Path** | 正常流程 | 優先實作的場景 |
| **Edge Cases** | 邊界情況 | 確保系統穩健性 |

### 三步驟流程

1. ✍️ **撰寫 User Story** - 捕捉價值
2. 📋 **定義 Acceptance Criteria** - 場景驗收
3. 🤖 **AI 審查優化** - 查漏補缺

### ✍️ 實戰練習

**練習 1：撰寫 User Story**
選擇以下一個場景，撰寫 3-5 個 User Story：
- 線上教師的「作業批改系統」
- 小型工作室的「客戶管理系統」
- 個人的「每日習慣追蹤 App」

**練習 2：撰寫場景**
為你選擇的功能撰寫至少 5 個 Gherkin 場景：
- 至少 2 個成功場景
- 至少 2 個失敗場景
- 至少 1 個邊界情況

**練習 3：AI 審查**
將你的規格提交給 AI 審查，根據反饋改進。

---

### 📚 延伸學習

**推薦閱讀：**
- 📖 《User Story Mapping》by Jeff Patton
- 🔗 [Atlassian User Stories Guide](https://www.atlassian.com/agile/project-management/user-stories)
- 🔗 [Cucumber Gherkin Reference](https://cucumber.io/docs/gherkin/reference/)

**AI 學習 Prompts：**
```
💡 給我 10 個線上教育平台的 User Story 範例
💡 如何寫出可測試的 Acceptance Criteria？
💡 Gherkin 語法完整教學，附範例
💡 分析這個 User Story 有什麼問題：[你的 Story]
```

---

## ✅ 檢核清單

完成模組 0 後，你應該能夠：
- [ ] 理解 SDD 的核心概念
- [ ] 撰寫清晰的 User Story（Who/What/Why）
- [ ] 使用 Gherkin 語法撰寫驗收條件
- [ ] 識別並補充邊界情況和錯誤處理
- [ ] 使用 AI 協助審查和優化規格
- [ ] 完成至少一個完整功能的規格文件

**🎯 下一步：** 進入模組 1，學習開發者工具包的設定與使用。

