mcpField
T
test-quality-analysis

test-quality-analysis

github.com/laurigatesテスト・品質5939 回インストール2 日前に更新
リポジトリ

test-quality-analysis について

テストスイートを見直し、品質を改善するためのスキルです。テストの臭い、モックの過剰使用、不安定なテスト、カバレッジ不足、アサーションを扱い、TypeScript、JavaScript、Python の分析コマンドも示します。

主な機能

  1. 01代表的なテストの臭いを特定
  2. 02モック過剰と不安定なテストを分析
  3. 03カバレッジとテスト不足を確認
  4. 04アサーションと分離性を評価
  5. 05TS、JS、Python のコマンドを提示

活用シーン

  1. 01テストスイートの保守性を確認
  2. 02断続的な失敗を起こすテストを特定
  3. 03重要な処理経路のカバレッジ不足を発見

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/laurigates/claude-plugins --skill test-quality-analysis

インストール後、Claude Code で/test-quality-analysisを入力して読み込まれたか確認します。

同梱ファイルREFERENCE.md

詳細

テスト品質分析

テストの品質を分析・改善するための専門知識です。テストのにおい、過剰なモック、不十分なカバレッジ、その他のテストに関するアンチパターンを検出します。

このスキルを使う場面

このスキルを使う場面…代わりに別のスキルを使う場面…
テストの品質やにおいをレビューする新しい単体テストを作成する(vitest-testing を使用)
過剰なモックや不安定なテストを検出するE2E テストを設定する(playwright-testing を使用)
テストカバレッジの不足箇所を分析するミューテーションテストでテストを検証する(mutation-testing を使用)
テストの保守性を改善するテストデータを生成する(property-based-testing を使用)
テストスイートのアンチパターンを監査するPython のテストを作成する(python-testing を使用)

主な専門分野

テスト品質の評価項目

  • 正確性:テストが適切な動作を検証している
  • 信頼性:テストが決定論的で、不安定ではない
  • 保守性:テストが理解しやすく、変更しやすい
  • パフォーマンス:テストの実行が速い
  • カバレッジ:重要なコードパスをテストで網羅している
  • 独立性:テストが外部の状態に依存しない

テストのにおい - クイックリファレンス

におい症状修正方法
過剰なモック1つのテストにモックが3つ以上ある、純粋関数をモックしているI/O 境界のみをモックし、実際の実装を使用する
壊れやすいテスト動作が変わっていないのにリファクタリングで失敗する公開 API をテストし、意味に基づいたセレクターを使用する
不安定なテスト成功と失敗が非決定的に変わる適切に async/await を使用し、時間をモックして、独立性を確保する
テストの重複テスト間でセットアップがコピー&ペーストされているbeforeEach()、フィクスチャ、ヘルパーに切り出す
遅いテスト単体テストのスイートに10秒以上かかるコストの高いセットアップには beforeAll() を使用し、並列化する
不十分なアサーションtoBeDefined() を使用している、アサーションがない、モックに対するアサーションしかない具体的なマッチャーを使い、出力と状態をアサートする
不十分なカバレッジ重要なパスがテストされていないビジネスロジックは80%以上を目指し、エラーパスと境界値をテストする

分析ツール

TypeScript/JavaScript
vitest --coverage                              # Coverage report
vitest --coverage --coverage.thresholds.lines=80  # Threshold check
vitest --reporter=verbose                      # Find slow tests
Python
uv run pytest --cov --cov-report=term-missing  # Coverage with missing lines
uv run pytest --cov --cov-fail-under=80        # Threshold check
uv run pytest --durations=10                   # Find slow tests

主なアンチパターン

動作ではなく実装をテストする
// BAD: Testing how
test('uses correct algorithm', () => {
  const spy = vi.spyOn(Math, 'sqrt')
  calculateDistance({ x: 0, y: 0 }, { x: 3, y: 4 })
  expect(spy).toHaveBeenCalled()
})

// GOOD: Testing what
test('calculates distance correctly', () => {
  const distance = calculateDistance({ x: 0, y: 0 }, { x: 3, y: 4 })
  expect(distance).toBe(5)
})
弱いアサーション
// BAD
expect(users).toBeDefined()     // Too vague
expect(mockAPI).toHaveBeenCalled() // Testing mock, not behavior

// GOOD
expect(user).toMatchObject({
  id: expect.any(Number),
  name: 'John',
  email: '[email protected]',
})
カバレッジの不足
// BAD: Only tests happy path
test('applies discount', () => {
  expect(calculateDiscount(100, 'SAVE20')).toBe(80)
})

// GOOD: Tests all paths
describe('calculateDiscount', () => {
  it('applies SAVE20', () => expect(calculateDiscount(100, 'SAVE20')).toBe(80))
  it('applies SAVE50', () => expect(calculateDiscount(100, 'SAVE50')).toBe(50))
  it('invalid coupon', () => expect(calculateDiscount(100, 'INVALID')).toBe(100))
  it('no coupon', () => expect(calculateDiscount(100)).toBe(100))
})

テストの構造(AAA パターン)

test('user registration flow', async () => {
  // Arrange
  const userData = { email: '[email protected]', password: 'secure123' }
  const mockEmailService = vi.fn()

  // Act
  const user = await registerUser(userData, mockEmailService)

  // Assert
  expect(user).toMatchObject({ email: '[email protected]', emailVerified: false })
  expect(mockEmailService).toHaveBeenCalledWith('[email protected]', expect.any(String))
})

エージェント向けの最適化

用途コマンド
カバレッジの確認(TS)vitest --coverage --reporter=dot
カバレッジの確認(Python)uv run pytest --cov --cov-fail-under=80 -q
遅いテストを探す(TS)vitest --reporter=verbose
遅いテストを探す(Python)uv run pytest --durations=10 -q
未カバー行を確認する(Python)uv run pytest --cov --cov-report=term-missing

詳細な例、高度なパターン、ベストプラクティスについては、REFERENCE.md を参照してください。

関連項目

  • vitest-testing - TypeScript/JavaScript のテスト
  • python-testing - Python の pytest テスト
  • playwright-testing - E2E テスト
  • mutation-testing - テストの有効性を検証

参考資料

コメント