---
name: forward-derivation
scope: partial
description: |
  從已批准的 SDD 規格推演 BDD 場景和 TDD 測試骨架。
  ATDD 驗收測試表為可選輸出，用於特殊需求。
  使用時機：規格已批准、開始 BDD/TDD 實作、生成測試結構。
  關鍵字：forward derivation, spec to test, BDD generation, TDD skeleton, test derivation, 正向推演, 規格轉測試, 測試生成。
source: ../../../../../skills/claude-code/forward-derivation/SKILL.md
source_version: 2.0.0
translation_version: 2.0.0
last_synced: 2026-01-25
status: current
---

# 正向推演指南

> **語言**: [English](../../../../../skills/claude-code/forward-derivation/SKILL.md) | 繁體中文

**版本**: 2.0.0
**最後更新**: 2026-01-25
**適用範圍**: Claude Code Skills

> **核心規範**：此技能實作[正向推演標準](../../../core/forward-derivation-standards.md)。任何 AI 工具皆可參考核心規範取得完整方法論文件。

---

## 目的

此技能引導您從已批准的 SDD 規格推演 BDD 場景和 TDD 測試骨架，並嚴格遵循反幻覺標準。

> **注意**: ATDD 測試表為可選項，可透過 `/derive-atdd` 取得。BDD 場景本身已作為可執行驗收測試，使 ATDD 表對大多數用例變得多餘。

正向推演是[反向工程](../reverse-engineer/SKILL.md)的對稱對應：
- **反向工程**：程式碼 → 規格
- **正向推演**：規格 → 測試

## 快速參考

### 正向推演工作流程

```
┌─────────────────────────────────────────────────────────────────┐
│                      正向推演工作流程                             │
├─────────────────────────────────────────────────────────────────┤
│                                                                 │
│  1️⃣  SPEC 解析（AI 自動化）                                    │
│      ├─ 讀取已批准的規格                                        │
│      ├─ 提取驗收條件（GWT 或條列式）                            │
│      └─ 驗證 SPEC 結構和完整性                                  │
│                                                                 │
│  2️⃣  推演（AI 自動化）                                         │
│      ├─ AC → BDD Gherkin 場景                                  │
│      ├─ AC → TDD 測試骨架（帶 TODO）                           │
│      └─ AC → ATDD 驗收測試表格                                 │
│                                                                 │
│  3️⃣  人類審查（必要）                                          │
│      ├─ 驗證生成的場景符合 AC 意圖                              │
│      ├─ 填寫 [TODO] 區塊                                       │
│      └─ 如需要精煉步驟定義                                      │
│                                                                 │
└─────────────────────────────────────────────────────────────────┘
```

### 命令概覽

| 命令 | 輸入 | 輸出 | 目的 |
|------|------|------|------|
| `/derive-bdd` | SPEC-XXX.md | .feature | AC → Gherkin 場景 |
| `/derive-tdd` | SPEC-XXX.md | .test.ts | AC → 測試骨架 |
| `/derive-atdd` | SPEC-XXX.md | acceptance.md | AC → 驗收測試表格 |
| `/derive-all` | SPEC-XXX.md | 以上全部 | 完整推演管道 |

## 核心原則

### 1. 規格限定生成

**關鍵**：只推演規格中存在的內容。不添加 AC 未明確定義的場景、測試或功能。

```
# 反幻覺規則
輸入：SPEC 有 N 個驗收條件
輸出：恰好 N 個場景（BDD）
      恰好 N 個測試群組（TDD）
      恰好 N 個驗收測試（ATDD）

若任何輸出數量 ≠ 輸入數量 → 違規
```

### 2. 來源標註

每個生成項目必須包含可追溯性：

```gherkin
# Generated from: specs/SPEC-001.md
# AC: AC-1

@SPEC-001 @AC-1
Scenario: 使用者以有效憑證登入
```

### 3. 確定性標籤

| 標籤 | 使用時機 | 範例 |
|------|----------|------|
| `[來源]` | 直接來自 SPEC 的內容 | 功能標題、AC 文字 |
| `[推演]` | 從 SPEC 內容轉換 | 從條列 AC 推演的 GWT |
| `[生成]` | AI 生成的結構 | 測試骨架 |
| `[TODO]` | 需要人類實作 | 斷言、步驟定義 |

## 工作流程階段

### 階段 1：SPEC 解析

**輸入**：已批准的規格檔案
**輸出**：結構化的驗收條件列表

**動作**：
1. 讀取規格檔案
2. 識別驗收條件區塊
3. 解析 AC 格式（Given-When-Then 或條列式）
4. 驗證 AC 完整性

**驗證清單**：
- [ ] SPEC 狀態為「已批准」或「就緒」
- [ ] 驗收條件區塊存在
- [ ] 每個 AC 有唯一識別碼（AC-1、AC-2 等）
- [ ] AC 格式可解析（GWT 或條列式）

### 階段 2：BDD 推演

**輸入**：已解析的驗收條件
**輸出**：Gherkin .feature 檔案

**轉換規則**：

| AC 格式 | 轉換 |
|---------|------|
| Given-When-Then | 直接對應到 Gherkin |
| 條列式 | 使用 GWT 模式匹配轉換 |
| 勾選清單 | 條件 → Given、動作 → When、結果 → Then |

### 階段 3：TDD 推演

**輸入**：已解析的驗收條件
**輸出**：測試骨架檔案

**參數**：
| 參數 | 選項 | 預設值 |
|------|------|--------|
| `--lang` | typescript, javascript, python, java, go | typescript |
| `--framework` | vitest, jest, pytest, junit, go-test | vitest |

### 階段 4：ATDD 推演

**輸入**：已解析的驗收條件
**輸出**：驗收測試表格文件

### 階段 5：人類審查

**輸入**：生成的檔案
**輸出**：審查和精煉的檔案

**審查清單**：
- [ ] 生成的場景符合 AC 意圖
- [ ] 沒有超出 AC 數量的額外場景
- [ ] 來源標註正確
- [ ] [TODO] 區塊已識別供實作
- [ ] 步驟語言為業務層級（非技術層級）

## 輸出格式

### BDD Feature 檔案

```gherkin
# Generated from: specs/SPEC-001.md
# Generator: /derive-bdd v1.0.0
# Generated at: 2026-01-19T10:00:00Z

@SPEC-001
Feature: 使用者認證
  [來源] 來自 SPEC-001 摘要

  @AC-1 @happy-path
  Scenario: 使用者以有效憑證登入
    # [來源] 來自 SPEC-001 AC-1
    Given 已註冊的使用者有有效憑證
    When 使用者提交登入表單
    Then 使用者被導向儀表板

  @AC-2 @error-handling
  Scenario: 無效憑證登入失敗
    # [來源] 來自 SPEC-001 AC-2
    Given 使用者有無效憑證
    When 使用者提交登入表單
    Then 顯示錯誤訊息
```

### TDD 測試骨架

```typescript
/**
 * Tests for SPEC-001: 使用者認證
 * Generated from: specs/SPEC-001.md
 * Generated at: 2026-01-19T10:00:00Z
 * AC Coverage: AC-1, AC-2
 */

describe('SPEC-001: 使用者認證', () => {
  describe('AC-1: 使用者以有效憑證登入', () => {
    it('should redirect to dashboard on successful login', async () => {
      // Arrange
      // [TODO] 設定已註冊使用者和有效憑證

      // Act
      // [TODO] 提交登入表單

      // Assert
      // [TODO] 驗證導向儀表板
      expect(true).toBe(true); // Placeholder
    });
  });
});
```

### ATDD 驗收測試表格

```markdown
# SPEC-001 驗收測試

**規格**: SPEC-001
**生成時間**: 2026-01-19
**狀態**: 待審查

## AT-001: 使用者以有效憑證登入
**來源**: AC-1

| 步驟 | 動作 | 預期結果 | 通過/失敗 |
|------|------|----------|-----------|
| 1 | 導航到登入頁面 | 顯示登入表單 | [ ] |
| 2 | 輸入有效憑證 | 欄位接受輸入 | [ ] |
| 3 | 點擊登入 | 表單已提交 | [ ] |
| 4 | 驗證導向 | 顯示儀表板 | [ ] |

**測試人員**: _______________
**日期**: _______________
**結果**: [ ] 通過 / [ ] 失敗
```

## 與其他技能的整合

### 與 /spec（規格驅動開發）

1. 使用 `/spec` 工作流程完成 SPEC
2. 透過審查獲得 SPEC 批准
3. 執行 `/derive-all` 生成測試結構
4. 在 BDD/TDD 工作流程中使用生成的輸出

### 與 /bdd（行為驅動開發）

1. 使用 `/derive-bdd` 生成 BDD 場景
2. 與利害關係人審查和精煉場景
3. 使用 `/bdd` 繼續 BDD 制定
4. 實作步驟定義

### 與 /tdd（測試驅動開發）

1. 使用 `/derive-tdd` 生成 TDD 骨架
2. 填寫 [TODO] 區塊的實際斷言
3. 以生成的測試結構進入 TDD 紅燈階段
4. 實作程式碼使測試通過

### 與整合流程

正向推演適合整合流程方法論：

```
spec-review (已批准) → forward-derivation → discovery (BDD)
                              │
                              ├─→ .feature 檔案供 BDD
                              ├─→ .test.ts 骨架供 TDD
                              └─→ acceptance.md 供 ATDD
```

## 完整推演管道

```
┌─────────────────────────────────────────────────────────────────────────┐
│                         完整正向推演管道                                   │
├─────────────────────────────────────────────────────────────────────────┤
│                                                                         │
│   已批准 SPEC                                                            │
│        │                                                                │
│        ▼                                                                │
│   /derive-all specs/SPEC-XXX.md                                        │
│        │                                                                │
│        ├─→ /derive-bdd                                                  │
│        │    └─→ features/SPEC-XXX.feature                              │
│        │                                                                │
│        ├─→ /derive-tdd                                                  │
│        │    └─→ tests/SPEC-XXX.test.ts                                 │
│        │                                                                │
│        └─→ /derive-atdd                                                 │
│             └─→ acceptance/SPEC-XXX-acceptance.md                      │
│                                                                         │
│   人類審查                                                               │
│        │                                                                │
│        ├─→ 驗證 1:1 AC 對應                                             │
│        ├─→ 填寫 [TODO] 區塊                                             │
│        └─→ 精煉步驟定義                                                  │
│                                                                         │
└─────────────────────────────────────────────────────────────────────────┘
```

### 使用範例

```bash
# 生成 BDD 場景
/derive-bdd specs/SPEC-001.md

# 使用 Python/pytest 生成 TDD 骨架
/derive-tdd specs/SPEC-001.md --lang python --framework pytest

# 生成所有測試結構
/derive-all specs/SPEC-001.md

# 預覽不建立檔案
/derive-all specs/SPEC-001.md --dry-run

# 指定輸出目錄
/derive-all specs/SPEC-001.md --output-dir ./generated
```

## 應避免的反模式

### ❌ 不要這樣做

1. **添加額外場景**
   - 錯誤：SPEC 有 3 個 AC，生成 5 個場景
   - 正確：SPEC 有 3 個 AC，恰好生成 3 個場景

2. **從草稿 SPEC 推演**
   - 錯誤：對未批准的規格執行 `/derive-all`
   - 正確：只從已批准的規格推演

3. **跳過來源標註**
   - 錯誤：沒有 @SPEC-XXX 標籤的場景
   - 正確：每個場景標記來源 SPEC 和 AC

4. **過度指定技術細節**
   - 錯誤：`Given 使用 PostgreSQL 驅動程式建立資料庫連線`
   - 正確：`Given 系統中存在使用者資料`

5. **將骨架視為完整**
   - 錯誤：不填寫 [TODO] 就使用生成的測試
   - 正確：執行測試前填寫所有 [TODO] 區塊

## 最佳實踐

### 應該做的

- ✅ 只從已批准的規格推演
- ✅ 維持嚴格的 1:1 AC 到輸出對應
- ✅ 在所有輸出中包含來源標註
- ✅ 使用 [TODO] 標記實作區塊
- ✅ 與利害關係人審查生成的輸出
- ✅ 保持步驟語言在業務層級

### 不應該做的

- ❌ 添加 AC 未定義的場景
- ❌ 從草稿或未批准的規格推演
- ❌ 跳過對生成輸出的人類審查
- ❌ 將生成的骨架視為完整測試
- ❌ 移除來源標註註解
- ❌ 過度指定實作細節

---

## 設定偵測

此技能會自動偵測專案設定：

1. 檢查現有的 `specs/` 目錄結構
2. 從 package.json/pyproject.toml 偵測測試框架
3. 識別偏好的輸出目錄
4. 設定語言特定範本

---

## 相關規範

- [正向推演標準](../../../core/forward-derivation-standards.md) - **核心方法論規範（主要參考）**
- [反向工程標準](../../../core/reverse-engineering-standards.md) - 對稱對應
- [規格驅動開發](../../../core/spec-driven-development.md) - 輸入規格格式
- [行為驅動開發](../../../core/behavior-driven-development.md) - BDD 輸出格式
- [測試驅動開發](../../../core/test-driven-development.md) - TDD 輸出用法
- [反幻覺指南](../../../core/anti-hallucination.md) - 生成合規

---

## 版本歷史

| 版本 | 日期 | 變更 |
|------|------|------|
| 2.0.0 | 2026-01-25 | ATDD 從必需改為可選輸出；/derive-all 現在只輸出 BDD + TDD |
| 1.1.0 | 2026-01-25 | 新增：統一標籤系統參考 |
| 1.0.0 | 2026-01-19 | 初始發布 |

---

## 授權

此技能採用 [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) 授權。

**來源**: [universal-dev-standards](https://github.com/AsiaOstrich/universal-dev-standards)
