Uat test design
任意のリポジトリを探索し、UAT(業務受入)・受入試験(システム受入)・非機能受入の試験項目一覧を L1/L2/L3 の3階層で生成します。巨大プロジェクト対応のため親は項目本文を読まず、抽出はサブエージェントへ並列委譲しますFrom its SKILL.md
npx -y skills add classmethod/tsumiki --skill uat-test-designAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
8.8 KB, as published. Nobody here has run it
任意のプロジェクトから UAT・受入試験の試験項目一覧を生成する汎用 skill。特定プロジェクトのパス・番号体系はハードコードせず、毎回実測して適応する。
アーキテクチャ原則(必ず守る)
- 親(この skill を実行するエージェント)は試験項目の本文を読まない・書かない(Phase 4 の散発修正を除く)。抽出サブエージェントが出力ファイルに直接書き、親はメタデータ要約のみ扱う
- ID レンジは親が事前配布し、サブエージェントはレンジ内でのみ採番する
- 読込は予算制: サブエージェント 1 体 10,000 行 / 30 ファイルまで。超える担当範囲は分割してから委譲
- 除外は機械基準(references/source-categories.md §2)。名指し除外はしない
- ★(低優先)情報源は逆引き専用。全読み禁止
- 過去メモ・ドキュメント記載の件数・パスを信用しない。inventory.sh で毎回実測する
- 自動化カバレッジ判定を必ず行う(references/test-levels.md §7)。L2 の各項目について UnitTest / E2E でのカバー状況を判定し、分離条件を満たす項目は本文ごと
L2-<group>-covered.mdへ分離する(UAT 本体の件数肥大を防ぐ。迷ったら UAT 本体に残す) - 出力先は実行ごとに日付ディレクトリ: 既定
<repo>/docs/uat/<yyyymmdd>/。実行開始時にdate +%Y%m%dで決定し、同名ディレクトリが既に存在する場合はdate +%H%Mを付けた<yyyymmdd>-<HHMM>を使う。以降の全フェーズ・全サブエージェントで同じ出力先を固定する
Phase 1: インベントリ
- 実測:
bash {skill_dir}/scripts/inventory.sh <repo-root>を実行し、集計のみ読む(対象ファイルの本文は読まない) - 判定: references/source-categories.md に従い、(a) カテゴリごとの情報源候補、(b) [閾値超過]/[生成物] フラグから「精読 / 分割精読 / 逆引き専用 / 除外」の扱い、(c) 性質タグ(正 / 逆 / なし)を決める。カテゴリ検出のヒットが曖昧な場合のみ、候補パスの見出し・冒頭 20 行程度で裏取りしてよい
- ユーザ確認(AskUserQuestion、必須バッテリー): スキャン結果の要約(見つかった情報源 / 見つからなかったカテゴリ / 規模感)を提示した上で聞く:
- 追加資料: リポジトリ外の要件定義・設計書・議事録等の有無(性質「正」が無い場合は特に強調して確認)
- 実施環境: 環境名 / テナント / 外部サービス(決済・認証・通知)のサンドボックス・テストアカウントの有無(「不明」も回答として許容し前提欄に明記)
- 方針(既定値を推奨として提示): 実施主体の範囲(UAT+受入の両方が既定)/ 自動テストとの重複方針(カバレッジ判定して分離条件該当項目を
L2-<group>-covered.mdへ分離するが既定。test-levels.md §7。「分離せず判定列のみ付ける」も選択可)/ 非機能の範囲(含めるが既定) - 出力: フォーマット(markdown 既定、xlsx 追加可)/ 出力先(
<repo>/docs/uat/<yyyymmdd>/既定。原則 8 の規則で決定した実パスを提示する)/ 対象範囲の絞り込み
- 成果物:
_inventory.md(情報源マップ。列: カテゴリ / パス / 規模 / 性質タグ / 扱い / 備考)を出力先に書く。以降の全フェーズはこれを正とする
Phase 2: 分類(委譲計画)
- 機能グループ一覧の導出(優先順):
- 機能グループを列挙した既存ドキュメント(feature-groups、機能一覧、README)があれば採用
- なければ Explore サブエージェント 1 体に「ルーティング定義+仕様ディレクトリ名から機能グループ一覧(10〜20 個目安)を合成」させる(読むのはファイル名・見出しのみ)
- それも困難なら画面一覧をグループとし、ユーザに提示して調整
- 名寄せ表: グループごとに「仕様 / E2E spec / 単体テスト / 画面・ルート」の対応パスを表にする(単体テストは inventory.sh §3.5 の検出結果から対応づける。カバレッジ判定の入力になる)。パス名・見出しの文字列マッチで機械的に対応づけ、不確かな対応は
?を付けて抽出サブエージェントに検証させる - 委譲計画: グループごとの読込見積り(対応パスの行数合計)を出し、予算超過グループは分割。L3 用に非機能・運用担当 1 体を別途計画
- ID レンジ配布: references/output-format.md §4 の規約で割当。inventory.sh §3 の検出接頭辞と衝突しないか確認
- 成果物:
_group-map.md(名寄せ表+ID レンジ+読込見積り)
Phase 3: 抽出(並列委譲)
references/extraction-prompts.md のテンプレートを実値で埋めて委譲する。独立した委譲は 1 メッセージにまとめて並列実行(model: 既定 sonnet)。
- グループ担当 × N(テンプレート A): L2 項目を抽出し、カバレッジ判定(test-levels.md §7)の上で UAT 対象を
L2-<group>.md、分離条件該当をL2-<group>-covered.mdに直接書かせ、YAML メタデータ要約のみ受け取る。L1 候補は 1 行サマリで回収 - L3 担当 × 1(テンプレート C):
L3-nonfunctional.mdとgaps.md(情報源が無く項目化できない確認活動)を書かせる - 全グループの要約が揃ったら L1 統合担当 × 1(テンプレート B): 全グループの L1 候補サマリを渡し、重複統合した End-to-End シナリオを
L1-scenarios.mdに書かせる - 要約の
sources_missing/budget_noteに問題があれば、該当グループのみ範囲を調整して再委譲
Phase 4: 統合・レビュー
- index 生成: 親がメタデータ要約と各ファイルの見出し行(
grep '^### UAT-'、covered ファイル含む)からindex.mdを生成(前提欄は references/output-format.md §2。性質「正」なしの場合のフォールバック文言を忘れない)。各項目に手動実施階層(test-levels.md §7。区分×カバレッジから機械導出)を付与し、L2 のサマリ表は階層①〜④でサブセクション分割、冒頭に機能グループ×階層の件数サマリを置く。サマリ表上で対象機能×観点が近い ID ペアを重複疑いとして列挙 - 独立レビュー: references/review-prompt.md でレビューサブエージェントに委譲(総数 150 件超はサンプリング 30%)。指摘の反映は同ファイルの「親の後処理」に従う(系統的問題→グループ再実行 / 散発→親が該当セクションのみ Edit)
- 件数妥当性: references/test-levels.md §6 の規模別目安と比較し、大きく外れたら原因(情報源不足 / 分割ミス / カバレッジ分離の効きすぎ・効かなさすぎ)をユーザに報告。UAT 本体件数と分離件数を分けて評価する
- xlsx 変換(ユーザが選択した場合のみ): output-format.md §6 の構成で生成
- 完了報告: 件数サマリ(L1 / L2 を手動実施階層①〜④別 / L3 / gaps)、トレース率、
sources_missing・gaps の要点、レビュー指摘の反映状況、出力先ディレクトリを簡潔に報告する。項目本文の再掲はしない
途中で詰まったら
- 情報源カテゴリが軒並み「なし」: 続行せず、ユーザに資料所在を確認(コードのみからの生成は L2 の期待結果が創作になるため)
- グループ数が 30 超 or L2 見込みが 800 超: 対象範囲の絞り込み(フェーズ分割・優先機能の選定)を AskUserQuestion で提案
- サブエージェントの要約が YAML 形式で返らない: 結果ファイルの見出し数(
grep -c '^### UAT-')で件数を代替集計し、再委譲はしない