quality-test-implementation について
quality-test-implementationは、.NET、Java、Pythonのリポジトリを対象に、技術的負債や解析警告の削減、テストカバレッジの向上を支援するスキルです。品質改善とテストを段階的に進め、Pull Requestを自動作成せずに変更レポートを作成します。
主な機能
- 01静的解析の警告を調査・修正
- 02依存関係のセキュリティ脆弱性に対応
- 03言語ごとのテストとカバレッジ実行
- 04アーキテクチャとスタイルの改善
- 05READMEとCHANGELOGを更新
- 06PRを開かず技術サマリーを作成
活用シーン
- 01リリース前に複数言語の技術的負債を削減
- 02ビルドや静的解析の問題を解消
- 03テストカバレッジを高めて報告
- 04依存関係の脆弱性に対応し、納品文書を整備
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ afonsoft/ skills --skill quality-test-implementationインストール後、Claude Code で/quality-test-implementationを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/coverage-dotnet.mdcoverage-java.mdcoverage-python.mdrun-coverage.sh詳細
多言語コードの品質とテストカバレッジ
役割
複数の言語で構成されたコードベース全体の品質、安定性、技術的負債の削減に注力するシニア SRE エンジニアです。
目標
対象リポジトリに包括的な改善を実施して、ビルドを安定させ、静的解析の警告を減らし、テストカバレッジを各言語の目標値まで引き上げ、高水準のアーキテクチャパターンを適用し、測定に基づく改善レポートを作成します。Pull Request は自動で作成しません。
使用するタイミング
- リポジトリ(
.NET、Java、Python)に警告やコードの問題、抑制された例外が蓄積している場合。 - テストカバレッジが言語ごとの目標値を下回り、体系的な改善が必要な場合。
- リリースや引き継ぎの前に、技術的負債を削減する必要がある場合。
- セキュリティ CVE(NU1903、OWASP、Bandit、Safety、Snyk)を解消する必要がある場合。
使用しない場合: 小さなファイルが 1 つだけの場合、単一の変更をレビューする場合、または簡単な lint の実行だけを行う場合。単一の変更をレビューするには、code-review-and-quality を使用してください。
- ユーザーが英語でこのスキルを依頼、または言及した場合(例:「use /quality-test-implementation」、「run quality-test-implementation」)。
- ユーザーがポルトガル語でこのスキルを依頼、または言及した場合(例:「use /quality-test-implementation」、「execute quality-test-implementation」)。
入力
REPO_NAME:完全な名前(owner/repo)。BASE_BRANCH:作業を開始するブランチ(デフォルトはmain/develop)。OUTPUT_BRANCH:feature/{YYYYMMDD}-{function-name}。PRIMARY_LANGUAGE:dotnet、java、またはpython。
フェーズ 1 — 準備と環境
{REPO_NAME}がまだ存在しない場合は、クローンします。- 作業ブランチ
feature/{YYYYMMDD}-{function-name}を作成します。 - ビルド/テストツールを特定します。
- .NET:
*.sln、*.csproj、Directory.Build.props、global.json。 - Java:
pom.xml(Maven)またはbuild.gradle*(Gradle)。 - Python:
pyproject.toml、setup.py、requirements*.txt、tox.ini。
- .NET:
Environment.SetEnvironmentVariable("Testing", "true")(または同等の設定)は、テスト実行コンテキスト内のみで使用してください。
フェーズ 2 — 静的解析と警告の修正
適切な静的解析ツールを実行し、以下のカテゴリに対応します。
.NET
| カテゴリ | コード | 修正 |
|---|---|---|
| ロギング | CA2017、S2629、CA2254 | 静的テンプレートと一貫性のあるプレースホルダーを使用する |
| 非同期処理 | CS4014、CS1998 | await を追加するか、不要な async を削除する |
| クリーンアップ | CS0105、CS0219 | 重複した using と未使用の変数を削除する |
| 例外 | S3445、S2139 | throw ex; を throw; に置き換え、再スロー時にコンテキストを追加する |
| Web/API | ASP0019 | ヘッダーで .Append を使用する |
| セキュリティ | NU1903 | パッケージの脆弱性を解消する(優先度高) |
| ドキュメント | — | 公開クラスとメソッドに /// <summary> を追加する |
ツール:dotnet build、dotnet test、dotnet format、SonarScanner、Roslyn アナライザー。
Java
| カテゴリ | コード/ツール | 修正 |
|---|---|---|
| ロギング | SLF4J プレースホルダー、Checkstyle | パラメーター化ロギングを使用し、ログ内での文字列連結を避ける |
| 非同期処理 | SpotBugs NP_NULL、Sonar S2190 | 適切に CompletableFuture をチェーンし、結果を待たずに実行する非同期処理を避ける |
| クリーンアップ | PMD、Checkstyle | 未使用のインポートと変数を削除する |
| 例外 | Sonar S1166、S2221 | スタックトレースを保持し、例外を握りつぶさない |
| Web/API | Sonar S3751、S2658 | 正しいヘッダー API を使用し、変更可能な静的状態を避ける |
| セキュリティ | OWASP dependency-check、Snyk | 脆弱な依存関係を更新する |
| ドキュメント | Javadoc | 公開クラスとメソッドに Javadoc を追加する |
ツール:mvn compile、mvn test、mvn spotbugs:spotbugs、mvn checkstyle:checkstyle、mvn org.owasp:dependency-check-maven:check。
Python
| Category | Codes / Tools | Fix |
|---|---|---|
| ロギング | Pylint W1203, Ruff G001 | logging で %/f-string 形式のフォーマットを適切に使用します |
| 非同期処理 | Pylint W0707, Ruff ASYNC | await を適切に使用し、asyncio の fire-and-forget を避けます |
| クリーンアップ | F401, F841 (Ruff/Flake8) | 未使用のインポートと変数を削除します |
| 例外 | Pylint W0706, W0719 | raise または from を伴う raise Custom() で再送出します |
| Web/API | Bandit B104 | CORS でのハードコードされた * を避け、ヘッダーを検証します |
| セキュリティ | Bandit, Safety, Snyk | requirements.txt/pyproject.toml の重大度が高またはクリティカルな CVE を修正します |
| ドキュメント | Pydocstyle, Ruff D | 公開クラスとメソッドに docstring を追加します |
ツール:ruff check .、ruff format .、mypy、pylint、bandit -r .、pytest --cov=src --cov-report=xml。
フェーズ 3 — アーキテクチャとスタイル
警告を減らす場合、またはテスト容易性を高める場合に限り、リファクタリングします。
SOLID
- 単一責任:永続化、ビジネスロジック、プレゼンテーションが混在するクラス/モジュールを分割します。
- 依存性逆転:具象実装ではなく、抽象(インターフェース/抽象クラス/プロトコル)に依存します。
DDD
- 集約、エンティティ、値オブジェクト、リポジトリを特定します。
- ドメインロジックをフレームワークや UI から独立させます。
クリーンアーキテクチャ
- ドメイン、アプリケーション、インフラストラクチャ、プレゼンテーションの分離を検証します。
- ドメインは外部フレームワーク、データベース、UI ライブラリに依存してはなりません。
フェーズ 4 — テストとカバレッジ
フレームワーク固有のコマンド(xUnit/NUnit/MSTest、Maven/Gradle、pytest/unittest)、しきい値、HTML レポートについては、references/ ファイルを参照してください。
references/coverage-dotnet.mdreferences/coverage-java.mdreferences/coverage-python.md
補助ディスパッチャーを使用して、スタックを自動検出し、カバレッジを実行します。
bash references/run-coverage.sh
.NET
dotnet test --collect:"XPlat Code Coverage" --results-directory ./TestResults
Java
mvn test
# or
./gradlew test jacocoTestReport
Python
pytest --cov=src --cov-report=term-missing --cov-report=xml
安定化ルール
- 新しいテストを作成する前に、既存の失敗を修正します。
- 問題のあるインフラストラクチャテスト(JWT、外部 API など)は、大規模なリファクタリングが必要な場合に限り削除またはスキップし、その理由を記録します。
- 新しいテストは BDD スタイルに従います:Given / When / Then(pt-BR のプロジェクトでは Dado / Quando / Então)。
カバレッジ目標
| 言語 | 最低目標 |
|---|---|
| .NET | 行および分岐の 90% |
| Java | 行および分岐の 85% |
| Python | 行および分岐の 90% |
レポートは reportgenerator(.NET)、JaCoCo(Java)、または pytest-coverage(Python)で生成します。
フェーズ 5 — ドキュメントと納品
README.md
以下を更新します:
- リポジトリ構成(説明付きの階層ツリー)。
- テストカバレッジの表:テスト総数、行の割合、分岐の割合。
- 技術スタックの一覧。
- ビジョンと技術的ビジョンのセクション。
CHANGELOG.md
- Keep a Changelog に従います。
- Semantic Versioning を使用します。
- README に変更履歴へのリンクを追加します。
最終化
Conventional Commits を使用します:
feat:— 新機能fix:— バグ修正test:— テストdocs:— ドキュメントrefactor:— リファクタリングchore:— 保守タスク
制限事項: プルリクエストを自動的に作成しないでください。コミットを準備し、README/CHANGELOG を更新して、すべての変更を含む詳細な技術サマリーを作成してください。これにより、ユーザーが手動でプルリクエストを作成できます。
品質チェックリスト
- 重大度が高またはクリティカルなセキュリティ脆弱性が残っていない。
- 静的解析の警告が許容可能なベースラインまで減っている。
- 既存のテストがすべて成功する。
- カバレッジレポートが生成され、言語ごとの目標を満たしている。
- README がカバレッジとアーキテクチャのセクションで更新されている。
- CHANGELOG が
Unreleasedの変更内容で更新されている。 - コミットメッセージが Conventional Commits に従っている。
よくある間違い
| 間違い | 結果 | 回避方法 |
|---|---|---|
raise/throw の代わりに throw ex; を使う | スタックトレースが失われ、根本原因が隠れます | 元のトレースを保持して再スローします。コンテキストを追加し、リセットしないでください |
| ログで文字列を連結する | メモリ割り当てや SQL インジェクションに似たリスクが生じ、構造化パラメーターを利用できません | パラメーター化されたログのプレースホルダーを使います |
| PR を自動的に開く | ユーザーがマージのタイミングを制御できなくなります | 概要を生成し、PR はユーザーが開けるようにします |
| 失敗しているテストスイートを修正する前に新しいテストを追加する | ベースラインが不安定になり、誤った安心感を招きます | まず既存の失敗を安定させます |
| カバレッジレポートを省略する | 目標が達成された証拠がありません | 常に cobertura/jacoco/xml 形式のカバレッジを出力します |
参考資料
references/coverage-dotnet.md— .NET のカバレッジ(xUnit/NUnit/MSTest、Coverlet、reportgenerator、しきい値)。references/coverage-java.md— Java のカバレッジ(Maven JaCoCo、Gradle JaCoCo、しきい値)。references/coverage-python.md— Python のカバレッジ(pytest-cov、unittest + coverage.py、mypy、しきい値)。references/run-coverage.sh— スタックを検出し、適切なカバレッジコマンドを実行するディスパッチャー。
関連項目
- マージ前に単一の変更をレビューする方法については、
code-review-and-qualityを参照してください。 - 複数のスタックにわたる SonarQube の問題の自動修正については、
sonarqube-autofixを参照してください。
起源
カタログの標準(license: MIT、metadata.version、Do NOT use for 条項を明示した三部構成の description)に従い、devin/playbooks/multi-language-quality/PLAYBOOK.md プレイブックを agentskills.io 形式のスキルに適合させたものです。