test-review について
テストスイート、カバレッジの不足、シナリオの品質をレビューするスキルで、設計上の不変条件を表すテストを特に重視します。テストの作成や更新ではなく、評価と改善計画を支援します。
主な機能
- 01言語とテストフレームワークを検出
- 02カバレッジと不足を確認
- 03テストシナリオの品質を評価
- 04不変条件を表すテストを確認
- 05テスト改善を計画
- 06根拠のある指摘を検証
活用シーン
- 01リリース前のテストスイートのレビュー
- 02テスト失敗やカバレッジ不足の調査
- 03テストが設計上の不変条件を保つか確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ athola/ claude-night-market --skill test-reviewインストール後、Claude Code で/test-reviewを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
modules/content-assertion-quality.mdcoverage-analysis.mdframework-detection.mdremediation-planning.mdscenario-quality.md詳細
テストレビューワークフロー
TDD/BDD の厳密さをもってテストスイートを評価し、改善します。
クイックスタート
/test-review
検証: pytest -v を実行し、テストがパスすることを確認します。
使用する場面
- テストスイートの品質をレビューするとき
- カバレッジの不足箇所を分析するとき
- メジャーリリースの前
- テスト失敗の後
- テスト改善を計画するとき
使用しない場面
- 新しいテストを書く場合 — parseltongue:python-testing を使用します
- 既存のテストを更新する場合 — sanctum:test-updates を使用します
必須の進捗項目
test-review:languages-detectedtest-review:coverage-inventoriedtest-review:scenario-qualitytest-review:invariant-preservationtest-review:gap-remediationtest-review:evidence-loggedtest-review:findings-verified
段階的な読み込み
レビューの深さに応じて、必要なモジュールを読み込みます。
- 基本レビュー:コアワークフロー(このファイル)
- フレームワークの検出:
modules/framework-detection.mdを読み込みます - カバレッジ分析:
modules/coverage-analysis.mdを読み込みます - 品質評価:
modules/scenario-quality.mdを読み込みます - 改善計画:
modules/remediation-planning.mdを読み込みます
ワークフロー
ステップ 1:言語を検出する(test-review:languages-detected)
テストフレームワークとバージョン制約を特定します。
→ 参照先:modules/framework-detection.md
簡易チェック:
find . -maxdepth 2 -name "Cargo.toml" -o -name "pyproject.toml" -o -name "package.json" -o -name "go.mod"
検証: --help フラグを付けてコマンドを実行し、利用可能であることを確認します。
ステップ 2:カバレッジを調査する(test-review:coverage-inventoried)
カバレッジツールを実行し、不足箇所を特定します。
→ 参照先:modules/coverage-analysis.md
簡易チェック:
git diff --name-only | rg 'tests|spec|feature'
検証: pytest -v を実行し、テストがパスすることを確認します。
ステップ 3:シナリオの品質を評価する(test-review:scenario-quality)
BDD パターンとアサーションのチェックを用いて、テスト品質を評価します。
→ 参照先:modules/scenario-quality.md
次の点に注目します。
- Given/When/Then の明確さ
- アサーションの具体性
- アンチパターン(無意味な待機、内部実装のモック化、定型コードの繰り返し)
ステップ 4:改善策を計画する(test-review:gap-remediation)
担当者と日付を含む、具体的な改善計画を作成します。
→ 参照先:modules/remediation-planning.md
ステップ 5:証拠を記録する(test-review:evidence-logged)
実行したコマンド、出力、推奨事項を記録します。
→ 参照先:imbue:proof-of-work
テスト品質チェックリスト(簡略版)
- 明確なテスト構造(Arrange-Act-Assert)
- 重要な処理経路をカバーしている(認証、検証、エラー)
- コンテキストを伴う具体的なアサーション
- 不安定なテストがない(無意味な待機、実行順への依存)
- 再利用可能なフィクスチャ/ファクトリー
- 不変条件を表すテストが維持されている(下記参照)
不変条件を符号化するテスト
テストは動作を検証するだけでなく、設計上の不変条件も符号化します。 「モジュール A はモジュール B からインポートしない」とアサートするテストは、レイヤーの境界を符号化します。「この関数は純粋である」とアサートするテストは、並行処理モデルを符号化します。こうしたテストは、カバレッジ指標では捉えられない形で重要な役割を担っています。
レビューでは、次の点を確認してください。
-
不変条件を符号化するテストが削除または弱められていませんか? アーキテクチャ上の境界、データ構造の制約、または API コントラクトを強制するテストを削除する場合は、放棄する不変条件を明示し、人間の判断を仰ぐ必要があります。
-
壊れた実装に合わせてテストの期待値が変更されていませんか? アサーションの値が変わった場合は、要件が変わったのか、それともエージェントがコードを通すためにテストを変更したのかを確認してください。後者は、テスト改ざんの中で最も危険なものです。
-
新しい不変条件がテストとして符号化されていますか? 設計上の決定(データ構造の選択、モジュール境界、エラー処理方針)が行われた場合、その不変条件への違反を失敗で示すテストが少なくとも1つ必要です。
危険なパターン:
| パターン | リスク |
|---|---|
成功しているテストに @pytest.mark.skip が追加される | 不変条件がひそかに放棄される |
| アサーションが具体的なものから広範なものに変更される | 制約が緩和される |
| 新しい動作を説明する名前にテストが変更される | 古い不変条件が履歴から消される |
| 「古いコードをテストしていたから」という理由でテストが削除される | 不変条件が置き換えられずに削除される |
不変条件の侵食が検出された場合:
承認してはいけません。品質上の重大な問題として指摘し、人間に次の3つの選択肢を提示してください。
- 維持:テストの変更を元に戻し、不変条件を満たすように実装を修正する
- 併存:不変条件のテストを維持し、新しい動作を併せて追加する(不格好さは受け入れる)
- 改訂:不変条件に根本的な誤りがある場合、古いテストを削除し、置き換える不変条件を符号化する新しいテストを作成する
これは判断を要する問題であり、モデルはあまりにも頻繁に誤った判断をします。人間に確認できない場合は、既定で選択肢1(維持)を選んでください。
出力形式
## Summary
[Brief assessment]
## Framework Detection
- Languages: [list] | Frameworks: [list] | Versions: [constraints]
## Coverage Analysis
- Overall: X% | Critical: X% | Gaps: [list]
## Quality Issues
[Q1] [Issue] - Location - Anchor: `verbatim source text at file:line` - Fix
## Remediation Plan
1. [Action] - Owner - Date
## Recommendation
Approve / Approve with actions / Block
検証: 利用可能かどうかを確認するため、--help フラグを付けてコマンドを実行してください。
統合に関する注意事項
- 再現可能なエビデンスの取得には
imbue:proof-of-workを使用してください - リスク評価には
imbue:diff-analysisを参照してください - 出力は
imbue:structured-outputのパターンを使用して整形してください
検出結果の根拠を確認する(test-review:findings-verified)
検出結果を .review/findings.json に書き込み、引用検証ツール(Skill(imbue:review-core) Step 5)を実行し、検証ツールが却下した項目は削除するか UNVERIFIED とラベル付けしてください。
完了条件
- フレームワークを検出し、記録した
- カバレッジを分析し、ギャップを特定した
- シナリオの品質を評価した
- 担当者と日付を含む是正計画を作成した
- 引用付きでエビデンスを記録した
- 報告するすべての検出結果に、
citation_verifier.pyによって確認されたLocationと逐語的なAnchorが付いている(終了コード0)。または、未検証の検出結果が削除されているか、UNVERIFIEDとラベル付けされている
トラブルシューティング
よくある問題
テストが検出されない
テストファイル名が test_*.py または *_test.py のパターンに一致していることを確認してください。pytest --collect-only を実行して確認してください。
インポートエラー
テスト対象のモジュールが PYTHONPATH に含まれていることを確認するか、pip install -e . でインストールしてください。
非同期テストが失敗する
pytest-asyncio をインストールし、テスト関数に @pytest.mark.asyncio を付けてください