Production Parity Test Designer
本番と同じ失敗を本番前に検出するテスト階層を設計する。
API不要
スキルパッケージをダウンロード (.skill) GitHubでソースを見る ワークフロー
目次
概要
Production Parity Test Designer は、本番での障害を本番前に検出するテスト設計スキルです。テスト数を増やすのではなく、どのテスト階層がどの本番ギャップをカバーすべきかに集中し、プロキシメトリクス(テストは通るが実際の障害を見逃す)を排除して、PR CIからリリースパッケージングまでの多層防御を構築します。
コア哲学: テストは本番の障害モードを再現するために存在する。 本番と同じ方法で失敗できないテストは、偽の安心を提供しているだけです。
いつ使うか
- PR CIが軽すぎて本番差分を検出できない
- SQLiteとPostgreSQLのようなDB方言差がある
- UIが成功表示するのにDBに書かれていない問題がある
- mockによりruntime import errorが隠れている
- timezone/locale/OS/dependencyの差分が本番で初めて顕在化する
- 「何をunitで、何をsmokeで見るか」が曖昧
- 過去の重大欠陥を再発禁止テストとして構造化したい
- packaging/container buildの整合性を保証したい
ワークフロー
8ステップでテスト階層を設計します。
Step 1: 本番差分の棚卸し
開発/CI環境と本番環境の全差分を列挙します。DB方言、OS/コンテナ、依存パッケージのインストール方式、環境変数、timezone/locale、Real vs Mock、シリアライゼーション、パッケージング/デプロイの各カテゴリで差分を文書化します。
Step 2: 失敗モードの列挙
各本番ギャップに対して具体的な壊れ方を定義します。例: SQLiteでは通るがPostgreSQLで構文エラー、UIが成功表示するがINSERTが暗黙に失敗、import cv2 がdevでは動くが本番コンテナでネイティブライブラリ不足で失敗。各失敗モードを可視性(サイレント/ラウド)、影響範囲、検出困難度で分類します。
Step 3: テスト階層への配賦
各失敗モードを最適なテスト階層に割り当てます。
| 階層 | 対象 |
|---|---|
| Unit | 純粋ロジック、境界値、入力検証 |
| Integration | 実DB操作、リポジトリ操作、マルチコンポーネント |
| E2E | UIアクション → 永続化検証 → ビジネス可視結果 |
| Smoke | PR CIでの最低限の本番同等性チェック |
| Packaging | インストール、import、ビルド、コンテナイメージ整合性 |
| Nightly/Heavy | フル本番同等性スイート、パフォーマンスベースライン |
Step 4: プロキシメトリクスの排除
偽の安心を提供するテストを特定・修正します。UI表示のみ検証(DBを確認しない)、全外部呼び出しをmock(実依存をテストしない)、カバレッジシアター(行カバレッジは高いが型不一致や境界テストなし)などのパターンを検出します。
Step 5: PR必須スモークセットの決定
全PRで実行すべき最低限の本番同等性チェックを定義します。ランタイム予算(2-5分を目標)内で、DB方言smoke、import smoke、永続化smoke、timezone smoke、シリアライゼーションsmokeを選定します。
Step 6: 再発禁止テストバックログ
過去の欠陥と攻撃パターンからリグレッションテストを設計します。各過去障害に対して、exploit/失敗パターン、最小再現シナリオ、期待される防御挙動、回帰スコープを定義します。
Step 7: パッケージング・依存整合性チェック
アプリケーションが本番同等環境で正しくビルド・インストール・importできることを検証するチェックリストを作成します。lockfileの整合性、クリーンインストール、全top-level importの成功、メインエントリポイントの起動、コンテナイメージの一致を確認します。
Step 8: 実行コマンドの固定
各実行コンテキスト(ローカル高速、PR CI必須、ナイトリー、ステージングE2E、リリースパッケージング)の名前付きコマンドを定義します。
主な出力物
| 成果物 | 内容 |
|---|---|
| Production Gap Inventory | 開発/CI vs 本番の差分一覧 |
| Test Tier Allocation Matrix | 失敗モード → テスト階層の配賦表 |
| PR Smoke Suite Proposal | PR必須の最低限の本番同等性チェック |
| Adversarial Regression Backlog | 過去欠陥からの再発禁止テスト |
| Packaging / Dependency Integrity Checklist | インストール・import・ビルド検証 |
| Standard Test Command Map | 実行コンテキスト別の固定コマンド |
リソース一覧
| リソース | 種類 | 目的 |
|---|---|---|
references/production_gap_catalog.md |
リファレンス | 本番ギャップの分類体系 |
references/test_tier_strategy.md |
リファレンス | テスト階層の責務とトレードオフ |
references/adversarial_test_patterns.md |
リファレンス | 攻撃・障害パターンのカタログ |
references/persistence_verification_guide.md |
リファレンス | 永続化検証パターン |
references/packaging_integrity_guide.md |
リファレンス | パッケージング・依存整合性 |
references/timezone_dialect_boundary_guide.md |
リファレンス | timezone・DB方言・locale |
assets/test_tier_matrix_template.md |
テンプレート | テスト階層配賦表 |
assets/smoke_suite_template.md |
テンプレート | スモークスイート仕様 |
assets/adversarial_regression_template.md |
テンプレート | リグレッションバックログ |
assets/packaging_checklist_template.md |
テンプレート | パッケージングチェックリスト |
assets/command_map_template.md |
テンプレート | コマンドマップ |
ベストプラクティス
- 本番ギャップ優先、テスト数は二の次 – 「テストをいくつ書くべきか」ではなく「現在のテストで見えない本番障害は何か」から始める。
- 表示より永続化 – UIの成功表示を確認するE2Eテストは、必ずDBの行もアサートする。「成功トーストが出た」はテストアサーションとして無効。
- ランタイム予算の規律 – PRスモークスイートには2-5分の予算を設定。超過テストはナイトリーに降格し、スキップしない。
- Mock最小化 – 自分のDB、自分のファイルストレージ、自分のメッセージキューにmockを使わない。全mockに対応するインテグレーションテストを持つ。
- CI環境の本番一致 – CIは本番と同じDBエンジン、同じOSファミリー、同じtimezone設定にする。インメモリ代替ではなくサービスコンテナを使用する。
関連スキル
- TDD Developer – テストコードの実装
- Completion Quality Gate Designer – 品質ゲートの設計