Agent skill

qa-nightmare

QAベテランが嫌がる悪夢テストケースを生成し、e2e-browserで自動実行する。9カテゴリ90+パターンの網羅的チェックリストから対象機能に適用可能なケースを抽出・ランク付け。

Stars 0
Forks 0

Install this agent skill to your Project

npx add-skill https://github.com/TakumiOkayasu/dotfile-work/tree/main/claude/skills/qa-nightmare

SKILL.md

QA Nightmare Test Generator

対象: $ARGUMENTS

トリガー条件

以下のいずれかに該当する場合に発動する:

条件
/qa-nightmare <機能名> が入力された /qa-nightmare ユーザー登録画面
「悪夢テスト」「QAナイトメア」「網羅テスト生成」と指示された 「ログイン機能の悪夢テストを生成して」
本番障害リスクの高い機能のテストケース生成を求められた 「決済処理の見落としがちなテストを洗い出して」
リリース前の網羅的品質チェックを求められた 「リリース前に全パターンを確認したい」

発動しない場合:

  • 単体の軽微なバグ修正確認 → 通常のテスト作成で対応
  • ユニットテストのみの依頼 → TDDスキルを使用
  • $ARGUMENTS が空の場合 → 対象機能と画面URLをユーザーに確認してから開始

前提条件

項目 内容
チェックリスト ~/.claude/skills/qa-nightmare/checklists/*.md が存在すること
e2e-browser Phase 5 実行時は e2e-browser スキルが利用可能であること
対象情報 対象機能名・画面URL または機能概要が提供されていること
権限 Docker が実行可能であること(e2e 実行時)

禁止事項・制約

禁止 理由
明白に対策済みのパターンのスキップを省略なく一覧出力すること スキップ理由を明示しないと漏れの原因になる
Phase 4 のユーザー確認をスキップして自動実行すること 意図しないテスト実行・データ破壊を防ぐ
$E2E_WORK 以外のパスへのテストコード生成 マウント外パスへの出力は消失する
チェックリスト未読でのパターン抽出 漏れの原因になる。必ず全ファイルを読む
嫌度ランク S のケースをユーザー判断なしに除外すること S ランクは必ず実施対象

概要

QAベテランが「これを見落とすと本番障害になる」と考える悪夢テストケースを、 網羅的チェックリストから対象機能に当てはめて生成し、e2e-browser スキルで自動実行する。

チェックリスト一覧

以下の9カテゴリ・90+パターンを対象機能に適用する。 各チェックリストは ~/.claude/skills/qa-nightmare/checklists/ に格納。

カテゴリ ファイル パターン数 内容
サイレントデータ破損 silent-corruption.md 10 UI正常だがDB破損
状態遷移の穴 state-transition.md 8 異常な遷移パスで破綻
境界値の闇 boundary-hell.md 11 型の限界・仕様の隙間
権限の抜け穴 auth-bypass.md 10 認証認可の隙間
タイミング地獄 timing-chaos.md 10 競合・二重実行・非同期
データ入出力 data-io.md 10 CSV/Excelインポート・エクスポート
障害復旧 error-recovery.md 10 障害発生後の復帰・リカバリ
ドメイン固有 domain-specific.md 10 業務ドメイン特有のロジック(汎用)
UI表示破壊 ui-destruction.md 10 レイアウト崩壊・表示異常
UI操作系 ui-operation.md 10 操作パターンの穴
UI状態管理 ui-state.md 10 画面状態の不整合

Phase 1: 機能分析

対象機能について以下を把握する。ユーザーに確認するか、コードを読んで推測する。

ステップ

  1. $ARGUMENTS から対象機能名・画面URLを読み取る
  2. 情報が不足している場合はユーザーに確認する(以下の「把握すべき情報」を参照)
  3. 把握した情報を箇条書きでまとめてから次フェーズに進む

把握すべき情報

  1. 画面構成: URL一覧、画面遷移図(一覧 → 詳細 → 編集 等)
  2. CRUD操作: どのテーブルに対してどの操作があるか
  3. 入力フィールド: 各フィールドの型・制約・必須/任意
  4. 状態遷移: ステータス値とその遷移パス(下書き→承認→完了等)
  5. 権限モデル: どのロールがどの操作を実行可能か
  6. 外部連携: 他テーブル・API・バッチとの依存
  7. ビジネスルール: 計算ロジック、バリデーションルール

Phase 2: チェックリスト適用

ステップ

  1. 全チェックリストファイルを読み込む:
bash
ls ~/.claude/skills/qa-nightmare/checklists/*.md
  1. 各カテゴリのファイルを順番に読む
  2. 各パターンを対象機能に当てはめ、該当するパターンのみを抽出する
  3. スキップしたパターンはスキップ理由を記録する

適用判定基準

判定 基準
✅ 適用 そのパターンの「攻撃」が対象機能で実行可能 かつ ビジネスインパクトがある
⏭️ スキップ 機能として存在しない操作(例: ファイルアップロードがない機能に BH-11)
⏭️ スキップ 対策済みであることがコードから明白(例: DB制約でNULL不可が保証済み)

該当しないパターンの例

  • ファイルアップロードがない機能に BH-11(ファイルアップロード境界)
  • 状態遷移がないマスタCRUDに ST-01(逆方向遷移)
  • シングルテナントに AB-08(マルチテナントのデータ分離)

Phase 3: ランク付け

ステップ

  1. 抽出したテストケースを「嫌度」で評価する
  2. 各ケースに S / A / B / C ランクを付与する
  3. 下記フォーマットで一覧を作成する

嫌度 = 発見困難度 × 被害度

ランク 嫌度 意味
S ★★★★★ 本番で発覚、データ復旧不可、業務停止
A ★★★★☆ 本番で発覚しうる、データ不整合、影響範囲大
B ★★★☆☆ テスト環境で見つかる、UI不具合、影響範囲限定
C ★★☆☆☆ 軽微、操作性の問題

出力フォーマット

## 悪夢テストケース一覧: <対象機能>

### S ランク(必ず実施)
| ID | カテゴリ | シナリオ | 攻撃手法 | 壊れ方 |
|----|---------|---------|---------|--------|
| TC-001 | SC-07 | カスケード削除漏れ | 親レコード削除→子テーブル確認 | 孤児レコード残存 |

### A ランク(強く推奨)
...

### B ランク(推奨)
...

### C ランク(余裕があれば)
...

合計: XX ケース (S: X, A: X, B: X, C: X)

Phase 4: ユーザー確認

⚠️ このフェーズは必須。スキップ禁止。

テストケース一覧をユーザーに提示し、以下を確認する:

  1. 実行するランクの範囲(S+A のみ? 全部?)
  2. 除外したいケースはあるか
  3. 追加したい独自ケースはあるか

ユーザーの確認・承認を得てから Phase 5 に進む。


Phase 5: e2e-browser 自動連携

確定したテストケースを /e2e-browser の形式で自動実行する。

5-1. workspace準備

e2e-browser と同じ workspace を使う:

bash
E2E_WORK="/tmp/e2e-browser-$(echo "$PWD" | md5sum | cut -c1-12)"

e2e-browser の Phase 0(環境チェック)を実行。 .env.e2e / docker-compose.e2e.yml が未生成ならここで生成する。

5-2. テストコード一括生成

各テストケースについて:

  1. Fixture JSON を $E2E_WORK/fixtures/nightmare/<TC-ID>.json に生成
  2. テストコードを $E2E_WORK/tests/nightmare/<TC-ID>.spec.ts に生成

テストコードは e2e-browser の必須ルールに従う:

  • captureStep / captureState で全ステップスクショ
  • dbAssert でDB検証
  • beginCapture / destroyDb 必須

5-3. 実行

全ケース一括実行:

bash
docker compose -f "$E2E_WORK/docker-compose.e2e.yml" \
  run --rm --service-ports e2e-runner \
  bun run playwright test tests/nightmare/ \
  --reporter=list --project=chrome

5-4. 結果レポート

## 悪夢テスト結果: <対象機能>

### Summary
- Total: XX ケース
- Pass: XX
- Fail: XX
- 所要時間: XXs

### 失敗ケース詳細
| ID | ランク | シナリオ | 失敗理由 | スクショ |
|----|:------:|---------|---------|---------|
| TC-001 | S | カスケード削除漏れ | 子テーブルに3件残存 | screenshots/TC-001_step03_*.png |

### 推奨対応
1. [S] TC-001: ON DELETE CASCADE の追加 or アプリ層での削除処理
2. [A] TC-005: ...

Phase 6: クリーンアップ

e2e-browser の Phase 5 と同様:

bash
docker compose -f "$E2E_WORK/docker-compose.e2e.yml" down -v
rm -rf "$E2E_WORK"

チェックリスト拡張

新しいパターンを追加する場合:

  1. 該当カテゴリの .md に追記(IDは連番)
  2. または新カテゴリの .mdchecklists/ に追加
  3. 上記テーブルに反映

パターンのフォーマット:

markdown
### XX-NN: タイトル
- 攻撃: 具体的な操作手順
- 検証: 何を確認するか
- 壊れ方: 発生する障害
- スクショ箇所: (UI系のみ)
- 嫌度: ★☆☆☆☆ 〜 ★★★★★

Expand your agent's capabilities with these related and highly-rated skills.

Didn't find tool you were looking for?

Be as detailed as possible for better results