動作仕様と境界値分析に基づいて、実行可能なテストケース一覧を生成します。タスク分割経由時はテストケース、単独実行時はテストケース一覧を出力します。
Generates executable test cases in Given/When/Then format from specifications and boundary value analysis.
/plugin marketplace add mozuq-lab/origami-lite/plugin install origami@origami-lite動作仕様一覧と境界値分析表に基づいて、Given/When/Then形式の実行可能なテストケース一覧を生成します。 信号機システム(🟢🟡🔴)により、各テストケースの確信度を可視化し、レビュー優先度を明確にします。
実行コンテキストに応じたファイル出力:
04_テストケース一覧.md に出力(後方互換)--target 指定): 単一機能のテストケースを 04_テストケース.md に出力出力先ディレクトリの決定 🔵
--output 引数が指定されている場合はそのディレクトリを使用docs/origami/{仕様書名}/ecommerce-spec.md → docs/origami/ecommerce-spec/前工程出力の確認
{出力先}/02_動作仕様一覧.md が存在する場合は読み込み{出力先}/03_境界値分析表.md が存在する場合は読み込み{出力先}/01_機能一覧.md が存在する場合は読み込み(補助情報)追加ルールの読み込み
docs/rule ディレクトリが存在する場合は読み込みdocs/rule/origami ディレクトリが存在する場合は読み込み出力ディレクトリの作成
| 引数 | 説明 | 必須 | 例 |
|---|---|---|---|
| 仕様書 | 入力ファイルまたはURL | △ | docs/requirements.md |
| --output | 出力先ディレクトリ(機能ディレクトリを含む) | △ | --output docs/origami/my-spec/F-001_ログイン/ |
| --target | 対象機能ID(タスク分割経由時) | △ | --target F-001 |
引数の組み合わせによる動作:
| --target | --output | 出力ファイル名 | 用途 |
|---|---|---|---|
| なし | なし | 04_テストケース一覧.md | 単独実行(全機能生成) |
| なし | あり | 04_テストケース一覧.md | 単独実行(出力先指定) |
| あり | あり | 04_テストケース.md | タスク分割経由(単一機能) |
| 優先度 | 入力 | 説明 |
|---|---|---|
| 1 | {出力先}/02_動作仕様一覧.md + {出力先}/03_境界値分析表.md | 前工程の出力(推奨) |
| 2 | {出力先}/02_動作仕様一覧.md | 動作仕様のみから生成 |
| 3 | {出力先}/03_境界値分析表.md | 境界値分析のみから生成 |
| 4 | {出力先}/01_機能一覧.md | 機能一覧から直接生成 |
| 5 | 仕様書(.md/.txt) | 単独実行時の直接入力 |
| 6 | URL | Web上のページ |
--target オプション指定時は、以下のルールに従います:
{出力先ディレクトリ}/01_機能詳細.md{出力先ディレクトリ}/02_動作仕様.md{出力先ディレクトリ}/03_境界値分析.mdPhase 4(generate-cases)の入力制限:
| 実行モード | 入力 | 備考 |
|---|---|---|
| タスク分割経由時 | 01_機能詳細.md + 02_動作仕様.md + 03_境界値分析.md | 仕様書・他機能フォルダは参照禁止 |
| 単独実行時 | 全ドキュメント | 後方互換 |
コンテキスト分離のポイント:
01, 02, 03 の3ファイルを参照(仕様書は参照しない)タスク分割経由時(--target 指定時):
{機能ディレクトリ}/01_機能詳細.md{機能ディレクトリ}/02_動作仕様.md{機能ディレクトリ}/03_境界値分析.mdエラー: 入力ファイルが見つかりません: {パス}/{ファイル名}
先に該当フェーズを実行してください:
/origami:run-task {タスクID} --phase {N}
Phase 4はフェーズ間入力制限の最終段階です:
Phase 4(generate-cases)はフェーズ間入力制限の最終段階です:
| フェーズ | 入力 | 出力 |
|---|---|---|
| Phase 1 | 仕様書(対象機能部分) | 01_機能詳細.md |
| Phase 2 | 01_機能詳細.md のみ | 02_動作仕様.md |
| Phase 3 | 02_動作仕様.md のみ | 03_境界値分析.md |
| Phase 4 | 01 + 02 + 03 | 04_テストケース.md |
# 単独実行(出力先自動決定)
/origami:generate-cases docs/ecommerce-spec.md
# → docs/origami/ecommerce-spec/04_テストケース一覧.md に出力
# 出力先を明示的に指定
/origami:generate-cases --output docs/origami/my-project/
# → docs/origami/my-project/ の前工程出力を読み込み、04_テストケース一覧.md に出力
# タスク分割経由(run-taskから呼び出し)
/origami:generate-cases --output docs/origami/ecommerce-spec/F-001_ログイン/ --target F-001
# → docs/origami/ecommerce-spec/F-001_ログイン/04_テストケース.md に出力
# ※ 入力は同ディレクトリの 01_機能詳細.md、02_動作仕様.md、03_境界値分析.md のみ
入力の読み込み
正常系テストケースの生成
異常系テストケースの生成
境界値テストケースの生成
Given/When/Then形式化 各テストケースを以下の形式で記述:
テストケースIDの付与
信号機判定
優先度判定 以下の基準で優先度を判定:
| 優先度 | 判定基準 |
|---|---|
| High | 正常系主要フロー、セキュリティ関連、🟢項目からの生成 |
| Medium | 境界値テスト、補助機能、🟡項目からの生成 |
| Low | エッジケース、🔴項目(確認後に再設定) |
サマリー生成
出力ファイル名の決定 🔵
実行コンテキストに応じて出力ファイル名を切り替え:
IF --target オプションが指定されている THEN
出力ファイル名 = "04_テストケース.md"
ELSE
出力ファイル名 = "04_テストケース一覧.md"
END IF
| 条件 | 出力ファイル名 | 出力形式 |
|---|---|---|
| 単独実行(--targetなし) | 04_テストケース一覧.md | 複数機能を一覧形式で記載 |
| タスク分割経由(--targetあり) | 04_テストケース.md | 単一機能のテストケースを記載 |
| 信号 | 判定条件 | 例 |
|---|---|---|
| 🟢 青信号 | 仕様書に明示された要件からの直接的なテスト | Must「ログインできる」→ 正常ログインテスト |
| 🟢 青信号 | 明示された制約からの境界値テスト | 「8文字以上」→ 8文字入力テスト |
| 🟡 黄信号 | 業界標準・テスト技法から導出されたテスト | セキュリティ観点追加のNever項目 |
| 🟡 黄信号 | 一般的な慣例に基づく境界値推測からのテスト | メールアドレス254文字テスト |
| 🔴 赤信号 | 推測された要件からのテスト | 🔴境界値からのテスト |
| 🔴 赤信号 | 期待結果が不明確なテスト | 「要確認」とマークされた項目 |
出力先: {出力先ディレクトリ}/04_テストケース一覧.md または 04_テストケース.md 🔵
{出力先}/04_テストケース一覧.md(複数機能を一覧形式で出力){出力先}/04_テストケース.md(単一機能のテストケースを出力)# テストケース一覧
## 生成情報
- 生成日時: {YYYY-MM-DD HH:mm}
- 入力ソース: {動作仕様一覧.md, 境界値分析表.md / 仕様書}
- 総テストケース数: X件(正常系: X件 / 異常系: X件 / 境界値: X件)
- 信号分布: 🟢 X件 / 🟡 X件 / 🔴 X件
---
## F-001: {機能名}
### 正常系テストケース
#### TC-001-01: {テストケース名}
| 項目 | 内容 |
|------|------|
| テストID | TC-001-01 |
| 対象機能 | F-001: {機能名} |
| テスト種別 | 正常系 |
| 優先度 | High / Medium / Low |
| 信号 | 🟢 / 🟡 / 🔴 |
| 元項目 | M-001-01 |
**Given(前提条件):**
- {前提条件1}
- {前提条件2}
**When(実行条件):**
1. {手順1}
2. {手順2}
3. {手順3}
**Then(期待結果):**
- [ ] {期待結果1}
- [ ] {期待結果2}
- [ ] {期待結果3}
**根拠:** {このテストケースの根拠(元となった仕様の記述など)}
---
### 異常系テストケース
#### TC-001-XX: {テストケース名}
| 項目 | 内容 |
|------|------|
| テストID | TC-001-XX |
| 対象機能 | F-001: {機能名} |
| テスト種別 | 異常系 |
| 優先度 | High / Medium / Low |
| 信号 | 🟢 / 🟡 / 🔴 |
| 元項目 | N-001-XX |
**Given(前提条件):**
- {前提条件}
**When(実行条件):**
1. {不正な操作や入力}
**Then(期待結果):**
- [ ] {エラーメッセージが表示される}
- [ ] {不正な操作が拒否される}
- [ ] {システム状態が保持される}
**根拠:** {このテストケースの根拠}
---
### 境界値テストケース
#### TC-001-XX: {テストケース名}
| 項目 | 内容 |
|------|------|
| テストID | TC-001-XX |
| 対象機能 | F-001: {機能名} |
| テスト種別 | 境界値 |
| 優先度 | Medium |
| 信号 | 🟢 / 🟡 / 🔴 |
| 元項目 | BV-001-XX |
**Given(前提条件):**
- {パラメータ名}の境界値テスト
**When(実行条件):**
1. {境界値}を入力する
**Then(期待結果):**
- [ ] {正常値の場合: 処理が成功する}
- [ ] {異常値の場合: エラーが表示される}
**根拠:** {境界値の根拠(仕様書の記述または推測理由)}
---
## F-002: {機能名}
{同様の形式で記載}
---
## サマリー
### テスト種別サマリー
| 機能 | 正常系 | 異常系 | 境界値 | 合計 |
|------|-------|-------|-------|------|
| F-001: {機能名} | X | X | X | X |
| F-002: {機能名} | X | X | X | X |
| **合計** | **X** | **X** | **X** | **X** |
### 信号別サマリー
| 機能 | 🟢 | 🟡 | 🔴 | 合計 |
|------|-----|-----|-----|------|
| F-001: {機能名} | X | X | X | X |
| F-002: {機能名} | X | X | X | X |
| **合計** | **X** | **X** | **X** | **X** |
### 優先度別サマリー
| 優先度 | 件数 | 対象 |
|--------|-----|------|
| High | X | 正常系主要フロー、セキュリティ |
| Medium | X | 境界値、補助機能 |
| Low | X | エッジケース、要確認項目 |
---
## テストケース × 信号機 マトリクス
| 信号 | 件数 | 対応方針 |
|------|-----|---------|
| 🟢 | X | そのまま実行可能。レビューは確認程度 |
| 🟡 | X | 期待結果の妥当性を確認後に実行 |
| 🔴 | X | ステークホルダー確認後に期待結果を確定 |
---
## 要確認テストケース一覧(🔴項目)
| # | テストID | 機能 | 確認内容 | 推奨対応 |
|---|---------|------|---------|---------|
| 1 | TC-XXX-XX | {機能名} | {確認内容} | {推奨対応} |
| 2 | TC-XXX-XX | {機能名} | {確認内容} | {推奨対応} |
---
## テスト実行チェックリスト
テスト実行前に以下を確認してください:
- [ ] 🔴項目についてステークホルダーの確認が完了している
- [ ] テスト環境が準備されている
- [ ] テストデータが用意されている
- [ ] テスト実行者がアサインされている
---
## 次のステップ
1. 🔴項目についてステークホルダーに確認
2. 確認結果をテストケースに反映
3. テスト環境の準備
4. テスト実行へ進む
--target オプション指定時は、単一機能のテストケース形式で出力:
# テストケース: F-001 {機能名}
## 生成情報
- 生成日時: {YYYY-MM-DD HH:mm}
- 入力ソース: 01_機能詳細.md, 02_動作仕様.md, 03_境界値分析.md
- 対象機能: F-001 {機能名}
- 総テストケース数: X件(正常系: X件 / 異常系: X件 / 境界値: X件)
- 信号分布: 🟢 X件 / 🟡 X件 / 🔴 X件
---
## 正常系テストケース
### TC-001-01: {テストケース名}
| 項目 | 内容 |
|------|------|
| テストID | TC-001-01 |
| 対象機能 | F-001: {機能名} |
| テスト種別 | 正常系 |
| 優先度 | High / Medium / Low |
| 信号 | 🟢 / 🟡 / 🔴 |
| 元項目 | M-001-01 |
**Given(前提条件):**
- {前提条件1}
- {前提条件2}
**When(実行条件):**
1. {手順1}
2. {手順2}
3. {手順3}
**Then(期待結果):**
- [ ] {期待結果1}
- [ ] {期待結果2}
- [ ] {期待結果3}
**根拠:** {このテストケースの根拠(元となった仕様の記述など)}
---
## 異常系テストケース
### TC-001-XX: {テストケース名}
{同様の形式で記載}
---
## 境界値テストケース
### TC-001-XX: {テストケース名}
{同様の形式で記載}
---
## サマリー
### テスト種別サマリー
| テスト種別 | 件数 |
|-----------|------|
| 正常系 | X |
| 異常系 | X |
| 境界値 | X |
| **合計** | **X** |
### 信号別サマリー
| 信号 | 件数 | 対応方針 |
|------|-----|---------|
| 🟢 | X | そのまま実行可能。レビューは確認程度 |
| 🟡 | X | 期待結果の妥当性を確認後に実行 |
| 🔴 | X | ステークホルダー確認後に期待結果を確定 |
---
## 要確認テストケース一覧(🔴項目)
| # | テストID | 確認内容 | 推奨対応 |
|---|---------|---------|---------|
| 1 | TC-001-XX | {確認内容} | {推奨対応} |
| 2 | TC-001-XX | {確認内容} | {推奨対応} |
---
## 次のステップ
1. 🔴項目についてステークホルダーに確認
2. 確認結果をテストケースに反映
3. テスト環境の準備
4. テスト実行へ進む
{出力先}/04_テストケース一覧.md{出力先}/04_テストケース.md📋 テストケース一覧を作成しました
📊 生成結果サマリー:
- 総テストケース数: X件
- 正常系: X件
- 異常系: X件
- 境界値: X件
🚦 信号分布:
- 🟢 高確信度: X件(そのまま実行可能)
- 🟡 中確信度: X件(期待結果を確認後に実行)
- 🔴 要確認: X件(ステークホルダー確認が必要)
📁 出力ファイル: {出力先}/04_テストケース一覧.md
⚠️ 🔴項目が X件 あります。テスト実行前にステークホルダーに確認してください。
✅ テストドキュメント生成が完了しました!
生成されたファイル:
- {出力先}/01_機能一覧.md
- {出力先}/02_動作仕様一覧.md
- {出力先}/03_境界値分析表.md
- {出力先}/04_テストケース一覧.md
📋 テストケースを作成しました
📊 生成結果サマリー(F-001 {機能名}):
- 総テストケース数: X件
- 正常系: X件
- 異常系: X件
- 境界値: X件
🚦 信号分布:
- 🟢 高確信度: X件(そのまま実行可能)
- 🟡 中確信度: X件(期待結果を確認後に実行)
- 🔴 要確認: X件(ステークホルダー確認が必要)
📁 出力ファイル: {出力先}/04_テストケース.md
⚠️ 🔴項目が X件 あります。テスト実行前にステークホルダーに確認してください。
✅ 機能 F-001 のテストドキュメント生成が完了しました!
生成されたファイル:
- {出力先}/01_機能詳細.md
- {出力先}/02_動作仕様.md
- {出力先}/03_境界値分析.md
- {出力先}/04_テストケース.md
| エラーケース | メッセージ |
|---|---|
| 入力ファイル未存在 | 「指定されたファイルが見つかりません: {ファイルパス}」 |
| 入力形式不正 | 「サポートされていない入力形式です。動作仕様一覧、境界値分析表、仕様書、またはURLを指定してください」 |
| 前工程出力フォーマット不正 | 「{ファイル名}のフォーマットが正しくありません。Origamiコマンドで生成されたファイルを使用してください」 |
| 入力ファイル空 | 「入力ファイルが空です」 |
| テスト対象なし | 「テストケースを生成する対象が見つかりませんでした。入力内容を確認してください」 |
Given(前提条件)
When(実行条件)
Then(期待結果)
v3.1.0 以降、タスク分割経由時(--target オプション指定時)は入力が厳密に制限されます:
| バージョン | 入力 | コンテキストサイズ |
|---|---|---|
| v3.0.x以前 | 仕様書 + 前工程出力すべて | 増加する |
| v3.1.0以降 | 01 + 02 + 03 の3ファイルのみ | 一定 |
移行時の注意:
--target なし)の動作は変更ありません