はじめに
コードを読まない開発でも、テストは重要です。むしろ、コードの中身を見ないからこそ、テストで品質を担保する必要があります。
テスト駆動開発(TDD)とは
【従来の開発】
実装 → テスト作成 → テスト実行
【テスト駆動開発】
テスト作成 → 実装 → テスト実行
「テストが先、実装が後」
AI開発におけるTDD
ステップ1:テスト仕様を書く
## テスト仕様:ユーザー登録API
### 正常系
- 有効なメール・パスワードで登録できる
- 登録後、user_idが返却される
### 異常系
- メール未入力でエラー
- パスワード7文字でエラー
- 登録済みメールでエラー
ステップ2:AIにテストコードを生成させる
指示:
「上記のテスト仕様に基づいて、
Jestを使ったテストコードを生成してください」
ステップ3:AIに実装させる
指示:
「生成したテストが全て通るように、
ユーザー登録APIを実装してください」
ステップ4:テスト実行で確認
$ npm test
✓ 有効なメール・パスワードで登録できる
✓ 登録後、user_idが返却される
✓ メール未入力でエラー
✓ パスワード7文字でエラー
✓ 登録済みメールでエラー
5 tests passed
テストの種類
1. 単体テスト
個々の関数やモジュールをテスト
→ 最も基本的なテスト
→ 高速に実行可能
2. 統合テスト
複数のモジュールを組み合わせてテスト
→ APIエンドポイントのテスト
→ データベースとの連携確認
3. E2Eテスト
ユーザー操作を模擬してテスト
→ ブラウザでの動作確認
→ 実際の利用シナリオを検証
AI開発でのテスト戦略
【推奨比率】
単体テスト:70%
統合テスト:20%
E2Eテスト:10%
【理由】
- 単体テストは高速で安定
- 統合テストでAPIの動作を確認
- E2Eは重要なフローのみ
テスト仕様書の書き方
## テストケース:ログイン機能
### TC-001: 正常ログイン
- 前提条件:登録済みユーザーが存在する
- 入力:正しいメール・パスワード
- 期待結果:JWTトークンが返却される
### TC-002: パスワード誤り
- 前提条件:登録済みユーザーが存在する
- 入力:正しいメール、誤ったパスワード
- 期待結果:AUTH_FAILEDエラー
### TC-003: 未登録ユーザー
- 前提条件:なし
- 入力:未登録のメールアドレス
- 期待結果:AUTH_FAILEDエラー
まとめ
AI開発でのテストは、仕様の検証という役割を持ちます。テスト仕様を明確に書き、AIにテストコードと実装を生成させることで、品質の高いシステムを構築できます。
次回:「中小企業のためのDX入門」