Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 55/100

test-coverage

テストカバレッジを分析します。本番環境のファイルをテストにマッピングし、テストの漏れを検出し、品質を確認できます。以下のキーワードで起動できます:「テストカバレッジ」「テストが不足している」「何をテストする必要があるか」

description の原文を見る

Analyze test coverage. Maps production files to tests, finds gaps, checks quality. Triggers: 'test coverage', 'missing tests', 'what needs tests'.

SKILL.md 本文

テストカバレッジスキル

欠落しているテストを見つけ、重要度に基づいて優先順位をつけます。

引数

  • <path> - 分析対象のディレクトリ (デフォルト: ./)
  • --scope-file <path> - scope.json へのパス (premerge から取得)
  • --changed - main 以降に変更されたファイルのみ
  • --strict - カバレッジが 80% 未満または重要ファイルがテストされていない場合、終了コード 1 で終了

クイックフロー

  1. スコープをロード (premerge からの場合)
  2. プロダクションファイルを見つける (スコープされたもの)
  3. 予想されるテストファイルにマップ
  4. 欠落しているテストを優先度でも分類
  5. テストの品質シグナルをチェック
  6. test-coverage.json を生成

ステップ 0: スコープをロード

# premerge から呼び出されているかチェック (スコープファイルが存在するか)
if [[ -f .review-output/scope.json ]]; then
  SCOPE=$(jq -r '.scope' .review-output/scope.json)
  FILES=$(jq -r '.files[]' .review-output/scope.json)
  echo "Using scope: $SCOPE"

  # プロダクション Java ファイルにフィルタリング
  echo "$FILES" | grep "src/main/.*\.java$" | grep -v Test > /tmp/prod.txt

  # テストファイルにフィルタリング
  echo "$FILES" | grep "src/test/.*Test\.java$" > /tmp/tests.txt

elif [[ "$1" == "--changed" ]]; then
  # レガシー --changed フラグ
  MAIN=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@' || echo "main")
  git diff $(git merge-base $MAIN HEAD) --name-only | grep "\.java$" | grep -v Test > /tmp/prod.txt
  git diff $(git merge-base $MAIN HEAD) --name-only | grep "Test\.java$" > /tmp/tests.txt
else
  # デフォルト: リポジトリ全体を分析
  find . -path "*/src/main/*" -name "*.java" ! -name "*Test.java" > /tmp/prod.txt
  find . -path "*/src/test/*" -name "*Test.java" > /tmp/tests.txt
fi

ステップ 1: ファイルを集める

プロダクションファイルとテストファイルは、スコープに基づいて /tmp/prod.txt/tmp/tests.txt に配置されました。

ステップ 2: プロダクション → テストのマップ

プロダクション予想されるテスト
src/main/.../Foo.javasrc/test/.../FooTest.java
FooServiceImpl.javaFooServiceImplTest.java
for f in $(cat /tmp/prod.txt); do
  test=$(echo "$f" | sed 's|/main/|/test/|; s|\.java$|Test.java|')
  [[ -f "$test" ]] && echo "✓ $f" || echo "✗ $f$test"
done

ステップ 3: 優先度の分類

ファイルタイプ優先度理由
*Service.java重要度高ビジネスロジック
*ServiceImpl.java重要度高実装
*Repository.javaデータアクセス
*Resource.javaAPI エンドポイント
*Handler.javaイベント処理
*Mapper.java変換
*Validator.java検証
*Factory.java作成
*Config.java設定の配線
*Exception.javaシンプルなクラス
*Dto/Request/Response.javaデータクラス
*Constants.javaスキップ動作なし

ステップ 4: テストの品質

既存テストの品質シグナルをチェック:

シグナル良好警告
テストあたりのアサーション数≥10
命名should_*, when_*test1, testIt
長さ<50 行>50 行
for t in $(cat /tmp/tests.txt | head -30); do
  tests=$(grep -c "@Test" "$t")
  asserts=$(grep -cE "assert|verify|expect" "$t")
  [[ $asserts -eq 0 ]] && echo "⚠ $t - no assertions"
  [[ $tests -gt 0 && $((asserts/tests)) -lt 1 ]] && echo "⚠ $t - low assertion ratio"
done

ステップ 5: 出力

test-coverage.json を生成:

{
  "meta": { "path": "./", "mode": "full", "analyzedAt": "..." },
  "summary": {
    "productionFiles": 100,
    "filesWithTests": 85,
    "coveragePercent": 85
  },
  "missing": {
    "critical": ["UserService.java", "PaymentService.java"],
    "high": ["UserRepository.java"],
    "medium": ["UserMapper.java"],
    "low": ["UserConfig.java"]
  },
  "quality": {
    "warnings": [
      { "file": "UserServiceTest.java", "issue": "no assertions" }
    ]
  },
  "grade": "B",
  "strictPassed": false
}

サマリーを表示

## テストカバレッジ

**カバレッジ**: 85/100 (85%) | **評価**: B

### 優先度別の欠落テスト

| 優先度 | 件数 | ファイル |
|----------|-------|-------|
| 重要度高 | 2 | UserService, PaymentService |
| 高 | 1 | UserRepository |
| 中 | 3 | ... |
| 低 | 5 | ... |

### 品質警告
- ⚠ UserServiceTest.java - アサーションなし
- ⚠ OrderTest.java - テスト名が不適切

### 推奨事項
1. **[重要度高]** UserServiceTest.java を追加
2. **[重要度高]** PaymentServiceTest.java を追加
3. **[高]** UserRepositoryTest.java を追加

### 判定
⚠ 重要度高いファイルにテストが必要です

評価

評価ファイルカバレッジ欠落した重要ファイル
A≥90%0
B≥80%≤1
C≥70%≤3
D≥60%あり
F<60%あり

ストリクトモード

coverage=$(cat /tmp/coverage-pct.txt)
critical=$(cat /tmp/critical-missing.txt | wc -l)

[[ $coverage -lt 80 ]] && exit 1
[[ $critical -gt 0 ]] && exit 1
exit 0

自律的な動作

このスキルは次の動作で自律的に動作します:

可能な限り自動生成:

シナリオアクション
シンプルな DTO のテストファイルが欠落基本的なテストスケルトンを生成
テストファイルが存在するが空推奨テストを含む TODO コメントを追加
テストの名前が変更されたが存在マッピングを更新、警告なし

自動修正できない (レポートのみ):

シナリオ理由
複雑なサービスがテストなしビジネスロジックの理解が必要
統合テストが欠落アーキテクチャ判断が必要
セキュリティ重要テストが欠落セキュリティの専門知識が必要

他のスキルとの協力

コラボレーション要求の受け取り

他のスキルがテスト必要性をフラグした場合:

{
  "collaborationNeeded": [
    {
      "skill": "test-coverage",
      "reason": "Security vulnerability needs regression test",
      "files": ["UserRepository.java"],
      "testType": "security",
      "priority": "critical"
    }
  ]
}

応答アクション:

リクエストソーステストアクション
security-review: 脆弱性修正セキュリティテストカバレッジを優先
self-review: 新機能テストが欠落している場合はフラグ
solid-review: リファクタリングされたクラステストマッピングが引き続き機能することを確認

コラボレーション要求の送信

テスト分析がより広い問題を明らかにした場合:

{
  "collaborationRequests": [
    {
      "targetSkill": "write-docs",
      "reason": "Test requirements should be documented",
      "suggestedContent": {
        "section": "testing.md",
        "topics": ["Coverage requirements", "Test patterns"]
      }
    },
    {
      "targetSkill": "self-review",
      "reason": "Untested critical service - block merge?",
      "files": ["PaymentService.java"],
      "action": "WARN_OR_BLOCK"
    }
  ]
}

コラボレーションからの優先順位付け

security-review が脆弱性をフラグした場合、このスキルは:

  1. それらのファイルを重要度高に昇格
  2. テスト推奨事項に「security」タグを追加
  3. 脆弱性リグレッションの特定のテストケースを提案

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
samanthaci
リポジトリ
samanthaci/stormstack
ライセンス
MIT
最終更新
2026/2/6

Source: https://github.com/samanthaci/stormstack / ライセンス: MIT

本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: samanthaci · samanthaci/stormstack · ライセンス: MIT