概要
AIはテストコード生成に非常に有効です。ただし、テスト設計(何をテストするか)は人間が行い、テストコードの実装をAIに依頼するのが効果的なアプローチです。
基本原則
テスト設計 = 人間:何をテストするか、どんなケースを検証するかは人間が決める
テスト実装 = AI:設計に基づいたテストコードの記述はAIに依頼
推奨フロー
テスト設計
→
テストコード生成
→
テスト確認
→
実装生成
→
テスト実行
→
結果検証
ステップ1: テスト設計(人間)
テストケースを設計する
以下の観点でテストケースを洗い出します:
- 正常系:期待通りの入力での動作
- 異常系:エラー入力、境界値、エッジケース
- 境界値:上限・下限、空、null
- 組み合わせ:複数条件の組み合わせ
例:ユーザー作成関数のテスト設計
【正常系】
- 有効なメール・パスワードでユーザー作成成功
- 作成後にユーザーIDが返る
【異常系】
- 無効なメール形式でエラー
- パスワードが短すぎる(8文字未満)でエラー
- 既存メールで重複エラー
【境界値】
- パスワード8文字(最小)で成功
- パスワード7文字でエラー
- メール最大長(255文字)で成功
ステップ2: テストコード生成(AI)
AIへの依頼テンプレート
【対象コード】
def create_user(email: str, password: str) -> User:
# 実装...
【テストフレームワーク】
pytest
【テストケース】
1. 正常系:有効なメール・パスワードでユーザー作成成功
2. 異常系:無効なメール形式でValidationError
3. 異常系:パスワード7文字でValidationError
4. 境界値:パスワード8文字(最小)で成功
5. 異常系:既存メールでDuplicateEmailError
上記のテストケースを実装してください。
モックは必要に応じて使用してください。
ステップ3: テスト確認(人間)
⚠️ 確認すべきポイント
- 設計したテストケースが網羅されているか
- アサーション(検証内容)が正しいか
- モックの使い方が適切か
- テストが独立しているか(他のテストに依存していないか)
- テスト名がわかりやすいか
ステップ4: 実装生成(AI)
テストが整ったら、実装をAIに依頼します。
✓ 良い依頼例
以下のテストがすべてパスする実装を作成してください。
【テストコード】
def test_create_user_success():
user = create_user("test@example.com", "password123")
assert user.email == "test@example.com"
assert user.id is not None
def test_create_user_invalid_email():
with pytest.raises(ValidationError):
create_user("invalid-email", "password123")
...
【制約】
- パスワードはbcryptでハッシュ化
- バリデーションはPydanticを使用
AIにエッジケースを提案させる
AIはエッジケースの提案にも有効です。人間が見落としがちなケースを発見できます。
エッジケース提案の依頼
以下の関数について、テストすべきエッジケースを提案してください。
def calculate_discount(price: float, quantity: int,
is_member: bool) -> float:
# 価格と数量から割引を計算
...
【現在のテストケース】
- 通常価格、数量1、非会員
- 会員割引適用
【追加すべきエッジケースを教えてください】
AIの提案例:
- 価格が0の場合
- 価格が負の場合
- 数量が0の場合
- 数量が非常に大きい場合(オーバーフロー)
- 小数点以下の丸め処理
注意点
- テストは必ず実行する:AI生成テストも実際に動かして確認
- カバレッジを確認する:生成されたテストが十分な範囲をカバーしているか
- テストの意図を理解する:なぜそのテストが必要か理解しておく
- ハルシネーションに注意:存在しないAPIやモジュールを使っていないか
参考文献
- IEEE Software - AI-assisted testing (2025)
- pytest documentation
次へ
→ 検証と責任