テストピラミッド
単体テスト、結合テスト、E2E テストの比率を示すテスト戦略のモデル
テスト品質
テストピラミッドとは
テストピラミッドは、Mike Cohn が提唱したテスト戦略のモデルで、下層 (単体テスト) を多く、上層 (E2E テスト) を少なくする。下層ほど高速・安定・低コストで、上層ほど低速・不安定・高コスト。
ピラミッド
/ E2E \ 少数、遅い、不安定
/ 結合テスト \
/ 単体テスト \ 多数、速い、安定
| レベル | 速度 | 安定性 | コスト | 比率 |
|---|---|---|---|---|
| 単体テスト | 最速 | 高い | 低い | 70% |
| 結合テスト | 中程度 | 中程度 | 中程度 | 20% |
| E2E テスト | 遅い | 低い | 高い | 10% |
各レベルの役割
| レベル | テスト対象 | ツール |
|---|---|---|
| 単体テスト | 関数、クラス、モジュール | Vitest |
| 結合テスト | モジュール間の連携、API | Vitest + supertest |
| E2E テスト | ユーザーフロー全体 | Playwright |
アンチパターン: アイスクリームコーン
┌──────────────┐
│ 手動テスト │ ← 多い (遅い、高コスト)
├──────────────┤
│ E2E テスト │
├──────────────┤
│ 結合テスト │
├──────────────┤
│ 単体テスト │ ← 少ない
└──────────────┘
手動テストや E2E テストに依存し、単体テストが少ない状態。テストが遅く不安定で、フィードバックが遅い。
テスティングトロフィー (Kent C. Dodds)
/ E2E \
/ 結合テスト \ ← 結合テストを最も重視
/ 単体テスト \
/ 静的解析 \ ← TypeScript, ESLint
フロントエンド開発では、結合テスト (コンポーネントテスト) を最も重視する。
Lambda のテスト戦略
| レベル | テスト内容 |
|---|---|
| 単体テスト | ビジネスロジック (純粋関数) |
| 結合テスト | Lambda ハンドラー + モック DB |
| E2E テスト | API Gateway → Lambda → DynamoDB (dev 環境) |
テストカバレッジの目安
| カバレッジ | 評価 |
|---|---|
| 80%+ | 良好 |
| 60〜80% | 許容 |
| 60% 未満 | 改善が必要 |
100% を目指す必要はない。重要なビジネスロジックとエッジケースをカバーする。
テストピラミッドの背景や設計思想は関連書籍に詳しい。