LLMがソースコードを解析してユニットテスト・統合テスト・E2Eテストを自動生成する技術。テストカバレッジの向上とリグレッション防止を効率化する。
AIテスト自動生成は、LLMがソースコードの構造・ロジック・エッジケースを解析し、ユニットテストや統合テストを自動的に生成する技術です。従来の手動テスト作成は実装時間の30〜50%を占めることもあり、開発者にとって大きな負担でした。AIテスト生成はこの工数を大幅に削減しつつ、人間が見落としがちなエッジケースを網羅します。
既存のソースコードを入力とし、関数の入出力仕様を推測してテストケースを生成します。最も一般的なアプローチです。
入力: calculateTax(price: number, rate: number): number
出力:
- 正常系: calculateTax(100, 0.1) === 10
- 境界値: calculateTax(0, 0.1) === 0
- 異常系: calculateTax(-1, 0.1) → throws Error
自然言語の仕様記述(PRD、Jiraチケット等)からテストケースを生成するアプローチです。テスト駆動開発(TDD)のワークフローに適しています。
git diff を解析し、変更された関数に対するリグレッションテストを自動生成します。CIパイプラインに組み込んで「テストなしのPRは自動でテストを追加」する運用が可能です。
| ツール | 対応言語 | 特徴 |
|---|---|---|
| Qodo (旧CodiumAI) | Python/JS/TS/Java | PR差分からテスト提案、VSCode統合 |
| Diffblue Cover | Java | Spring Boot特化、JUnit自動生成 |
| Claude Code | 多言語 | エージェントモードでテスト実行まで自律 |
| GitHub Copilot | 多言語 | テストファイル作成時にインライン補完 |
| Cody (Sourcegraph) | 多言語 | リポジトリ全体の文脈でテスト生成 |
AIが生成したテストの品質は以下の観点で評価します。
| 指標 | 説明 | 良いライン |
|---|---|---|
| パス率 | 初回実行でパスする割合 | 85%以上 |
| 有意義率 | 自明でないアサーションの割合 | 70%以上 |
| 保守性 | リファクタ後も壊れにくいか | 実装詳細に依存しない |
| 可読性 | テスト名・構造が人間に理解可能か | AAAパターン準拠 |
AIは「テストを書く」という指示に対して、expect(add(1, 2)).toBe(3) のような自明なテストを大量に生成することがあります。変異テストのスコアが低いテストは実質的にバグ検出に寄与しないため、質的なフィルタリングが重要です。
| 項目 | 手動テスト | AIテスト生成 |
|---|---|---|
| 1関数あたり所要時間 | 15〜30分 | 1〜3分 |
| エッジケース網羅 | 開発者の経験に依存 | 体系的に列挙 |
| 保守コスト | 手動更新必要 | 再生成可能 |
| 品質一貫性 | 開発者ごとにばらつき | 一定品質 |
70〜85%はそのまま使えますが、残りは修正が必要です。特にモックの設定、テストデータの妥当性、アサーションの正確性は人間のレビューが推奨されます。
行カバレッジ80〜90%までは効率的に達成できますが、100%には例外処理やエッジケースの網羅で人間の判断が必要になります。変異テストスコア70%以上を目標にする方が実質的なバグ検出力は高まります。
非常に有効です。テストがないレガシーコードに対してAIが初期テストスイートを生成し、リファクタリングの安全ネットとして機能させるのは最も効果の高いユースケースの一つです。