test-architect について
test-architectは、テストスイートの計画と分析を支援するスキルです。テスト戦略、境界値、フレークテスト、スイート構成を扱い、テストやCI/CDの実行は行いません。
主な機能
- 01テスト戦略とピラミッドの設計
- 02テストケースやコードの生成
- 03カバレッジギャップの分析
- 04関数のエッジケース特定
- 05フレークテストの診断
- 06テストスイート構成の監査
活用シーン
- 01機能やモジュールのテスト計画
- 02未カバーのコードパスの優先順位付け
- 03テスト結果の不一致の調査
- 04スイート構造と分離性の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ wyattowalsh/ agents --skill test-architectインストール後、Claude Code で/test-architectを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
data/edge-case-heuristics.jsontest-framework-patterns.jsonevals/coverage-gaps.jsondesign-strategy.jsonedge-cases.jsonevals.jsonimplicit-trigger.jsonnegative-control.jsontest-design.jsonreferences/coverage-analysis.mdedge-case-heuristics.mdflaky-diagnosis.mdframework-patterns.mdmutation-testing.mdproperty-testing.mdtest-pyramid.mdtest-suite-audit.mdscripts/check.pycoverage-analyzer.pyedge-case-generator.pyflaky-test-analyzer.pyscripts/asset_toolkit/__init__.py_shared.pycommon.pypackage.pyvalidate_evals.pyvalidate_hooks.pyvalidate_skill.pytemplates/dashboard.html詳細
テストアーキテクト
テスト戦略を設計し、カバレッジの不足箇所を分析し、エッジケースを特定し、不安定なテストを診断し、テストスイートのアーキテクチャを監査します。
対象範囲: テストの設計と分析のみです。テストの実行や CI/CD(devops-engineer)、コードレビュー(review)、TDD ワークフローには使用しません。
ディスパッチ
| $ARGUMENTS | アクション |
|---|---|
design <feature/module> | 機能またはモジュールのテスト戦略とピラミッドを設計します |
generate <file/function> | コンテキストに応じて、テストケース(戦略の文章または実際のテストコード)を生成します |
gaps | カバレッジレポートからカバレッジの不足箇所を分析します |
edge-cases <function> | 関数のエッジケースを体系的に特定します |
flaky | ログとコードから不安定なテストを診断します |
review | テストスイートのアーキテクチャを監査します |
| 空 | 例を含むモードメニューを表示します |
標準用語
すべてのモードで、以下の用語を正確に使用してください。
| 用語 | 定義 |
|---|---|
| test pyramid | テストを階層化した構成です。ユニットテスト(下層)、インテグレーションテスト(中層)、E2E テスト(上層)で構成されます |
| coverage gap | テストカバレッジがないコードパスです。複雑さに応じたリスクを考慮します |
| edge case | 境界条件、null/空、型変換、オーバーフロー、Unicode、並行処理に関する入力です |
| flaky test | 同一条件で実行しても、合否が非決定的に変化するテストです |
| mutation score | テストスイートが検出した、注入されたミューテーションの割合です |
| test strategy | 何を、どのように、どのレイヤーで、どのツールを使ってテストするかを定めた文書です |
| property-based test | 生成された入力に対する不変条件を検証するテストです(Hypothesis/fast-check) |
| test isolation | テストが可変状態を共有せず、実行順序にも依存しないことを保証します |
| fixture | 制御された状態を提供する、再利用可能なテストのセットアップ/クリーンアップです |
| test surface | テストカバレッジが必要な公開インターフェース、コードパス、状態の集合です |
モード 1:設計
/test-architect design <feature/module>
テスト対象の分析
- 機能/モジュールのコードを読みます。テスト対象をマッピングします。公開 API、内部パス、状態遷移、エラー条件を確認します。
- 複雑さを分類します。シンプル(純粋関数)、中程度(I/O、状態)、複雑(分散処理、並行処理、複数サービス)に分けます。
ピラミッドの設計
- テストピラミッドを設計します。
- ユニット層: 純粋なロジック、変換、バリデーターです。目標:テスト全体の 70~80%。
- インテグレーション層: データベース、API、ファイル I/O、サービス境界です。目標:15~25%。
- E2E 層: 重要なユーザーフローのみです。目標:5~10%。
- 各レイヤーについて、説明、入力、期待される出力、根拠を含む具体的なテストケースを列挙します。
- 言語/エコシステムに基づいて、フレームワークとツールを推奨します。
- 出力:ピラミッド図、ケース一覧、優先順位を含む構造化された戦略文書です。
参考:レイヤーのガイダンスについては references/test-pyramid.md を読んでください。
モード 2:生成
/test-architect generate <file/function>
- 対象のファイル/関数を読みます。シグネチャ、依存関係、副作用を特定します。
- 出力形式を決定します。
- 対象のテストファイルが存在する場合:既存のパターンに合わせて、実際のテストコードを生成します。
- テストファイルが存在しない場合:ケースの説明を含むテスト戦略の文章を生成します。
- ユーザーが
--codeを指定した場合:常にテストコードを生成します。
- 以下を網羅するテストケースを生成します。
- 正常系(想定される入力と出力)
- エラー系(無効な入力、例外、タイムアウト)
- エッジケース(関数に型付きパラメーターがある場合は edge-case-generator.py を実行)
- 境界条件(最小値/最大値、空のコレクション、null)
- フレームワークの規約に従います。pytest/jest/vitest のパターンについては references/framework-patterns.md を読んでください。
- 出力:カテゴリごとに明確な見出しを付けたテストケースまたはテストコードです。
モード 3:カバレッジの不足
/test-architect gaps
- カバレッジレポートを探します。以下を検索します。
coverage.json、coverage.xml、.coverage(Python/coverage.py)lcov.info、coverage/lcov.info(JS/lcov)htmlcov/、coverage/ディレクトリ
- カバレッジアナライザーを実行します。
uv run python skills/test-architect/scripts/coverage-analyzer.py <report-path> - JSON 出力を解析します。複雑度で重み付けしたリスクに基づいて、不足箇所をランク付けします。
- 不足箇所ごとに、以下を評価します。
- テストされていないコードと、それが重要な理由
- 複雑度スコア(循環的複雑度の代替指標)
- 推奨するテスト種別(ユニット/統合/E2E)
- 優先度(P0:セキュリティ/認証、P1:コアロジック、P2:ユーティリティ、P3:見た目)
- 不足箇所が10件以上ある場合は、ダッシュボードを生成します。
Copy templates/dashboard.html to a temporary file Inject gap data JSON into <script id="data"> tag Open in browser - 出力:優先順位を付けた不足箇所の一覧と、推奨アクション。
参考:解釈の指針については、references/coverage-analysis.md を参照してください。
モード 4:エッジケース
/test-architect edge-cases <function>
- 関数を読み取ります。パラメーターの型、戻り値の型、制約を抽出します。
- エッジケースジェネレーターを実行します。
uv run python skills/test-architect/scripts/edge-case-generator.py --name "<function_name>" --params "<param1:type,param2:type>" - JSON 出力を解析します。生成されたカテゴリを確認します。
- Null/空: None、""、[]、{}、0、False
- 境界: 整数の最小値/最大値、浮動小数点数の限界、文字列の長さの制限
- 型変換: "123" と 123、True と 1、None と "null"
- オーバーフロー: 大きな数値、深いネスト、長い文字列
- Unicode: 絵文字、RTL テキスト、ゼロ幅文字、結合文字
- 同時実行: 競合状態、デッドロック、古い読み取り
- エッジケースごとに、入力値、期待される動作、根拠を示します。
- 現在のコードで失敗しそうなケース(ガードや検証がないなど)に印を付けます。
参考:カテゴリの詳細については、references/edge-case-heuristics.md を参照してください。
モード 5:不安定なテスト
/test-architect flaky
ログの収集
- テスト結果のログを探します。以下を検索します。
- CI ログ、pytest の出力、jest の出力
.pytest_cache/、test-results/- 見つからない場合は、ユーザーにログのパスを尋ねます
- 不安定なテストのアナライザーを実行します。
uv run python skills/test-architect/scripts/flaky-test-analyzer.py <log-path>
根本原因の分類
- JSON 出力を解析します。不安定なテストごとに、以下を確認します。
- 失敗回数と成功回数
- 失敗のパターン(タイミング、順序、リソース、状態)
- 根本原因の分類候補:
- タイミング: sleep/タイムアウトへの依存、競合状態
- 順序: テストの実行順序への依存
- リソース: 外部サービス、データベース、ファイルシステム
- 状態: テスト間で共有される可変状態
- 環境: プラットフォーム固有、タイムゾーン、ロケール
- 根本原因ごとに、修正方法を推奨します。
- 失敗頻度と影響範囲に基づいて優先順位を付けます。
参考:根本原因のパターンについては、references/flaky-diagnosis.md を参照してください。
モード 6:レビュー
/test-architect review
- テストスイートをスキャンします。テストファイル数、フレームワーク、ディレクトリ構成を整理します。
- 以下のアーキテクチャの観点から評価します。
- ピラミッドのバランス: ユニットテスト:統合テスト:E2E テストの比率
- 独立性: 共有状態、グローバルフィクスチャ、テストの実行順序への依存
- 命名: 一貫性、説明の明確さ、規約の遵守
- カバレッジの分布: 均等か、一部に集中しているか
- フィクスチャの健全性: 重複、複雑さ、セットアップとティアダウンのバランス
- アサーションの品質: 汎用的な assertTrue ではなく、具体的なアサーションを使用しているか
- 速度: 遅いテストを特定します(ユニットテストで1秒超、統合テストで10秒超)
- 決定性: 不安定なテストの兆候の可能性
- レポートが存在する場合は、カバレッジアナライザーを実行します。
- ソースコードと照合します。
- テストされていないパブリック API
- 削除/名前変更されたコードを対象とするテスト(孤立したテスト)
- 不足している否定テストケース
- 出力:各観点のスコア、所見、推奨事項を含むアーキテクチャ監査レポート。
参考:評価基準については、references/test-suite-audit.md を参照してください。
参照ファイル
一度に読み込む参照ファイルは 1 つだけにしてください。すべての参照ファイルをコンテキストに事前読み込みしないでください。
| ファイル | 内容 | 読み込むタイミング |
|---|---|---|
| references/test-pyramid.md | テストピラミッドの各層、分布目標、アンチパターン | モード 1(設計) |
| references/framework-patterns.md | pytest、jest、vitest のパターンと規約 | モード 2(生成)、モード 6(レビュー) |
| references/coverage-analysis.md | カバレッジレポートの解釈、複雑度による重み付け | モード 3(ギャップ) |
| references/edge-case-heuristics.md | データ型ごとのエッジケースのカテゴリ、生成戦略 | モード 4(エッジケース) |
| references/flaky-diagnosis.md | 不安定なテストの根本原因、修正戦略、予防パターン | モード 5(不安定テスト) |
| references/test-suite-audit.md | テストアーキテクチャの評価基準、品質の観点 | モード 6(レビュー) |
| references/property-testing.md | Hypothesis と fast-check によるプロパティベーステスト | モード 1(設計)、モード 2(生成) |
| references/mutation-testing.md | ミューテーションテスト計画の設計、ツール連携 | モード 1(設計)、モード 6(レビュー) |
| スクリプト | 実行するタイミング |
|---|---|
| scripts/coverage-analyzer.py | モード 3(ギャップ)-- カバレッジレポートを解析 |
| scripts/edge-case-generator.py | モード 4(エッジケース)-- 関数シグネチャからエッジケースを生成 |
| scripts/flaky-test-analyzer.py | モード 5(不安定テスト)-- テストログから不安定な兆候を解析 |
| テンプレート | レンダリングするタイミング |
|---|---|
| templates/dashboard.html | モード 3(ギャップ)でギャップが 10 件以上の場合 -- カバレッジギャップの可視化 |
重要なルール
- テストは決して実行しないでください。設計と分析のみを行ってください。コマンドは提案しても、実行しないでください。
- ソースコードは決して変更しないでください。テストアーキテクチャは助言であり、実装ではありません。
- 各テストケースに適切なテスト層(ユニット/統合/E2E)を必ず推奨してください。
- エッジケースには必ず根拠を含めてください。「この入力を試す」だけではなく、「なぜ重要なのか」を示してください。
- カバレッジのギャップは、行数ではなくリスクに基づいて優先順位を付けてください。
- 不安定なテストを診断する際は、修正を推奨する前に根本原因のカテゴリを特定してください。
- フレームワークの推奨は、プロジェクトで既に使用されているスタックに合わせてください。
- プロパティベーステストは、不変条件を特定できる場合にのみ推奨してください。
- 参照ファイルは一度に 1 つだけ読み込んでください。すべてを事前読み込みしないでください。
- すべての指摘に、対象となる具体的なファイルと関数を明記してください。
- テストを生成する際は、プロジェクトに既存のテストパターンがあれば、それに従ってください。
- ダッシュボードのレンダリングはギャップが 10 件以上の場合に限ります。ギャップが少ない場合はレンダリングしないでください。