AIがコードを書く時代、「テスト」の意味が根本的に変わりつつあります。
従来、テストは「人間が書いたコードの品質を人間が検証する」行為でした。しかしAI開発では、コードの生成速度がテストの実施速度をはるかに上回り、「テストが追いつかない」状態が常態化しています。
Qurated Labでは、この課題に対してJSTQB(Japan Software Testing Qualifications Board / ソフトウェアテスト技術者資格認定)のテスト設計技法をAIエージェントの意思決定ロジックに組み込むというアプローチを取っています。この記事では、JSTQBの知見をどのようにAI駆動型品質保証に統合しているかを、システムのアーキテクチャとワークフローとともに解説します。
全体アーキテクチャ
まず、Qurated LabのAI品質保証がどのような構成になっているかを俯瞰します。
graph TB
subgraph "開発者の操作"
DEV[コード変更 / Push]
end
subgraph "Agent Dispatcher"
DISPATCH[ファイルパターン検出 / キーワード / イベントトリガー]
end
subgraph "品質保証エージェント群"
direction TB
CR[Code Reviewer Claude / Opus]
SR[Security Reviewer OWASP Top 10]
AR[Architect クリーンアーキテクチャ検証]
TP[Test Planner カバレッジ分析]
TDD[TDD Guide JSTQB技法適用]
E2E[E2E Runner ユーザージャーニー検証]
end
subgraph "クロスレビュー"
GR[Gemini Reviewer セカンドオピニオン]
end
subgraph "学習システム"
LS[継続的学習 成功/失敗パターン記録]
end
DEV --> DISPATCH
DISPATCH --> CR
DISPATCH --> SR
DISPATCH --> AR
DISPATCH --> TP
CR -->|修正後| GR
TP --> TDD
TDD --> E2E
GR --> LS
CR --> LS
SR --> LS
style TDD fill:#1a6b35,stroke:#27ae60,color:#fff
style TP fill:#1a6b35,stroke:#27ae60,color:#fff
style E2E fill:#1a6b35,stroke:#27ae60,color:#fff
この中で、JSTQBの知見が直接組み込まれているのは「Test Planner」「TDD Guide」「E2E Runner」の3つのエージェントです。それぞれがJSTQBの異なるレイヤーを担当しています。
JSTQBテスト設計技法の組み込み箇所
JSTQBが定義するテスト設計技法を、どのエージェントがどのように活用しているかを整理します。
graph LR
subgraph "JSTQB テスト設計技法"
EP[同値分割法]
BVA[境界値分析]
DT[デシジョンテーブル]
ST[状態遷移テスト]
end
subgraph "適用先エージェント"
TDD_AGENT[TDD Guide]
TP_AGENT[Test Planner]
E2E_AGENT[E2E Runner]
end
subgraph "テストレベル"
UNIT["Unit Test 85%以上"]
WIDGET["Widget Test 60%以上"]
INT[Integration 主要フロー]
E2E_TEST[E2E Test ユーザージャーニー]
end
EP --> TDD_AGENT
BVA --> TDD_AGENT
DT --> TDD_AGENT
ST --> TDD_AGENT
EP --> TP_AGENT
BVA --> TP_AGENT
ST --> E2E_AGENT
TDD_AGENT --> UNIT
TDD_AGENT --> WIDGET
TP_AGENT --> INT
E2E_AGENT --> E2E_TEST
style EP fill:#1a3a5c,stroke:#2980b9,color:#fff
style BVA fill:#1a3a5c,stroke:#2980b9,color:#fff
style DT fill:#1a3a5c,stroke:#2980b9,color:#fff
style ST fill:#1a3a5c,stroke:#2980b9,color:#fff
TDD 7ステップワークフロー ── JSTQB技法の実践適用
Qurated Labの中核をなすのが、TDD Guideエージェントが遂行する7ステップのワークフローです。このワークフロー内で、JSTQBの4つのテスト設計技法が実際に適用されます。
sequenceDiagram
participant DEV as 開発者
participant TDD as TDD Guide
participant JSTQB as JSTQB技法エンジン
participant CODE as コードベース
participant CI as CI/CDゲート
DEV->>TDD: 機能実装を依頼
Note over TDD: Step 1: SCAFFOLD
TDD->>CODE: インターフェース定義を作成
Note over TDD,JSTQB: Step 2: RED(失敗するテスト作成)
TDD->>JSTQB: テスト対象の仕様を分析
rect rgb(46, 139, 87)
Note over JSTQB: 同値分割法を適用
JSTQB-->>TDD: 有効クラス・無効クラスを導出
Note over JSTQB: 境界値分析を適用
JSTQB-->>TDD: 境界値テストケースを導出
Note over JSTQB: デシジョンテーブルを適用
JSTQB-->>TDD: 条件組み合わせを導出
Note over JSTQB: 状態遷移テストを適用
JSTQB-->>TDD: 状態遷移パスを導出
end
TDD->>CODE: 失敗するテストを作成
Note over TDD: Step 3: 実行(失敗確認)
TDD->>CI: テスト実行 → 失敗を確認
Note over TDD: Step 4: GREEN(最小限の実装)
TDD->>CODE: テストを通す最小限のコードを実装
Note over TDD: Step 5: 実行(成功確認)
TDD->>CI: テスト実行 → 成功を確認
Note over TDD: Step 6: REFACTOR
TDD->>CODE: コードをリファクタリング
TDD->>CI: テスト実行 → 成功を再確認
Note over TDD: Step 7: COVERAGE
TDD->>CI: カバレッジ計測
CI-->>TDD: カバレッジ85%以上か判定
alt カバレッジ不足
TDD->>JSTQB: 不足箇所を分析
JSTQB-->>TDD: 追加テストケースを導出
TDD->>CODE: 追加テストを作成
end
TDD-->>DEV: TDD完了レポート
各JSTQB技法の具体的な適用方法
1. 同値分割法(Equivalence Partitioning)
JSTQB定義: 入力データを「同じ振る舞いが期待されるグループ(同値クラス)」に分割し、各クラスから代表値を選んでテストする技法。
Qurated Labでの適用: TDD Guideが新しい関数やメソッドのテストを設計する際、まず入力パラメータの有効同値クラスと無効同値クラスを自動的に導出します。
graph TD
subgraph "同値分割法の自動適用例"
INPUT[入力: quantity]
INPUT --> VALID["有効クラス: 1〜100"]
INPUT --> INVALID1["無効クラス1: 0以下"]
INPUT --> INVALID2["無効クラス2: 101以上"]
VALID --> TEST1["accepts valid (50)"]
INVALID1 --> TEST2["rejects below min (0)"]
INVALID2 --> TEST3["rejects above max (101)"]
end
style VALID fill:#1a6b35,stroke:#27ae60,color:#fff
style INVALID1 fill:#922b21,stroke:#e74c3c,color:#fff
style INVALID2 fill:#922b21,stroke:#e74c3c,color:#fff
AIが同値クラスを自動で認識し、各クラスの代表値に対するテストケースを生成します。人間が手動で「このパラメータの境界はどこか」と考える工程を、エージェントが自律的に実行します。
2. 境界値分析(Boundary Value Analysis)
JSTQB定義: 同値クラスの境界上および境界近傍の値を重点的にテストする技法。バグは境界付近に集中しやすいという経験則に基づく。
Qurated Labでの適用: 同値分割法で導出したクラスの境界値を特定し、境界上・境界直前・境界直後のテストケースを生成します。
graph LR
subgraph "境界値分析"
RANGE["有効範囲: 1〜100"]
RANGE --> B1["0: 境界外・下限"]
RANGE --> B2["1: 境界上・下限"]
RANGE --> B3["100: 境界上・上限"]
RANGE --> B4["101: 境界外・上限"]
end
style B1 fill:#922b21,stroke:#e74c3c,color:#fff
style B2 fill:#1a6b35,stroke:#27ae60,color:#fff
style B3 fill:#1a6b35,stroke:#27ae60,color:#fff
style B4 fill:#922b21,stroke:#e74c3c,color:#fff
3. デシジョンテーブルテスト(Decision Table Testing)
JSTQB定義: 複数の条件とそれに対する動作の組み合わせを表形式で整理し、すべての組み合わせをテストする技法。
Qurated Labでの適用: ビジネスロジックに複数の条件分岐がある場合、TDD Guideが条件の組み合わせを網羅するデシジョンテーブルを構築し、各パターンに対するテストを生成します。
graph TD
subgraph "デシジョンテーブル例"
COND["条件分析"]
COND --> C1["プレミアム会員?"]
COND --> C2["割引クーポン適用?"]
C1 --> COMBO
C2 --> COMBO
COMBO["組み合わせ網羅"]
COMBO --> T1["premium + discount = 30%割引"]
COMBO --> T2["premium + no discount = 20%割引"]
COMBO --> T3["standard + discount = 10%割引"]
COMBO --> T4["standard + no discount = 0%割引"]
end
| ルール1 | ルール2 | ルール3 | ルール4 | |
|---|---|---|---|---|
| 条件: プレミアム会員 | Yes | Yes | No | No |
| 条件: クーポン適用 | Yes | No | Yes | No |
| 動作: 割引率 | 30% | 20% | 10% | 0% |
| テスト生成 | 自動 | 自動 | 自動 | 自動 |
4. 状態遷移テスト(State Transition Testing)
JSTQB定義: システムの状態と、イベントによる状態遷移を定義し、すべての遷移パス(および無効な遷移)をテストする技法。
Qurated Labでの適用: TDD GuideとE2E Runnerの両方で活用されます。特にユーザーフロー(認証状態、注文ステータスなど)のテストで効果を発揮します。
stateDiagram-v2
[*] --> Draft: 作成
Draft --> Pending: 申請
Pending --> Approved: 承認
Pending --> Rejected: 却下
Rejected --> Draft: 再編集
Approved --> [*]: 完了
sequenceDiagram
participant TDD as TDD Guide
participant ST as 状態遷移分析
participant TEST as テストケース
TDD->>ST: 状態遷移図を分析
ST->>TEST: 有効遷移テスト: Draft → Pending
ST->>TEST: 有効遷移テスト: Pending → Approved
ST->>TEST: 有効遷移テスト: Pending → Rejected
ST->>TEST: 有効遷移テスト: Rejected → Draft
Note over ST,TEST: 無効遷移テスト(これが重要)
ST->>TEST: 無効遷移テスト: Draft → Approved(直接遷移禁止)
ST->>TEST: 無効遷移テスト: Approved → Draft(逆遷移禁止)
ST->>TEST: 無効遷移テスト: Rejected → Approved(直接遷移禁止)
無効遷移のテストが特に重要です。「Draft から Approved への直接遷移はできないこと」を検証するテストは、人間が設計する際に見落としがちですが、状態遷移テストの技法を適用するAIエージェントは、これを体系的に網羅します。
テストレベルとJSTQB技法の対応
JSTQBではテストレベルごとに適切なテスト設計技法を選択することが推奨されています。Qurated Labでも、テストレベルに応じてエージェントと技法を使い分けています。
graph LR
U["Unit Test"] --> W["Widget Test"] --> I["Integration Test"] --> E["E2E Test"]
style U fill:#1a6b35,stroke:#27ae60,color:#fff
style W fill:#1a6b35,stroke:#27ae60,color:#fff
style I fill:#1a6b35,stroke:#27ae60,color:#fff
style E fill:#1a6b35,stroke:#27ae60,color:#fff
| テストレベル | 担当エージェント | 適用JSTQB技法 | カバレッジ基準 |
|---|---|---|---|
| Unit Test | TDD Guide | 同値分割 / 境界値分析 / デシジョンテーブル | 85%以上(認証・決済は95%以上) |
| Widget Test | TDD Guide | 同値分割 / 状態遷移 | 60%以上 |
| Integration Test | Test Planner | 状態遷移 / デシジョンテーブル | 主要フロー網羅 |
| E2E Test | E2E Runner | 状態遷移テスト | 認証・決済・主要機能フロー |
CI/CDゲートでの強制 ── 品質基準を「ルール」にする
JSTQBの技法を適用しても、それがCI/CDパイプラインで強制されなければ意味がありません。Qurated Labでは以下の品質基準をCIゲートとして実装し、基準を満たさないコードは物理的にマージできない仕組みにしています。
graph LR
subgraph "CIゲート(すべて必須)"
G1["静的解析 エラー0件"]
G2["Unit Test 全パス必須"]
G3["カバレッジ 85%以上必須"]
G4["コードサイズ 800行/ファイル 50行/関数"]
G5["Code Review CRITICAL 0件"]
G6["Security Scan 脆弱性0件"]
end
CODE[コード変更] --> G1
G1 -->|Pass| G2
G2 -->|Pass| G3
G3 -->|Pass| G4
G4 -->|Pass| G5
G5 -->|Pass| G6
G6 -->|Pass| MERGE[マージ許可]
G1 -->|Fail| BLOCK[マージ拒否]
G2 -->|Fail| BLOCK
G3 -->|Fail| BLOCK
G4 -->|Fail| BLOCK
G5 -->|Fail| BLOCK
G6 -->|Fail| BLOCK
style MERGE fill:#1a6b35,stroke:#27ae60,color:#fff
style BLOCK fill:#922b21,stroke:#e74c3c,color:#fff
なぜカバレッジ基準は85%なのか: 外部APIとの結合、ブラウザ固有のUI挙動、ネットワーク障害時のリカバリなど、自動テストだけでは検証が困難な領域が存在するためです。これらは手動テストやステージング環境での確認で補完し、自動テストでカバーできる範囲について85%以上を必須としています。
継続的学習 ── テスト設計の精度を高め続ける
AIがJSTQB技法を適用するだけでは、静的なルールエンジンと変わりません。Qurated Labが目指しているのは、適用結果を学習し、プロジェクト固有の品質パターンに最適化し続ける仕組みです。
sequenceDiagram
participant TDD as TDD Guide
participant TEST as テスト実行
participant LS as 学習システム
participant KB as ナレッジベース
TDD->>TEST: JSTQB技法でテスト生成・実行
alt テストが本番バグを事前に検出
TEST-->>LS: 成功パターン記録
LS->>KB: 信頼度スコア +0.15
Note over KB: 「このパターンの境界値分析は有効」
end
alt テストが偽陽性(不要な警告)
TEST-->>LS: 失敗パターン記録
LS->>KB: 信頼度スコア -0.25
Note over KB: 「この条件組み合わせは過剰」
end
Note over LS,KB: 信頼度が閾値を超えたパターンは「Instinct」に昇格し優先的に適用される
KB-->>TDD: 次回のテスト設計に反映
たとえば、あるプロジェクトで「日付パラメータに対する境界値分析が3回連続で本番バグを未然に防いだ」場合、このパターンの信頼度スコアが上がり、次回以降は日付関連のコード変更時に自動的に境界値分析が優先適用されます。
まとめ: Qurated LabがJSTQBのテスト設計技法をAI開発に取り込む5つのポイント。
- 技法のエージェントへの埋め込み: 同値分割・境界値分析・デシジョンテーブル・状態遷移の4技法をTDD Guide・Test Planner・E2E Runnerに直接組み込み
- TDD 7ステップでの実践: REDフェーズでJSTQB技法が自動適用される
- テストレベル別の技法選択: Unit→状態遷移まで、レベルに応じた技法の使い分け
- CI/CDゲートでの強制: カバレッジ85%・全テストパス・静的解析エラー0件を機械的に強制
- 継続的学習による最適化: 成功・失敗パターンを信頼度スコア付きで記録し、プロジェクト固有の品質に最適化
JSTQBは「人間のテスト技術者のための知識体系」として発展してきましたが、その体系的なテスト設計技法は、AIエージェントの意思決定にも極めて有効です。私たちは、JSTQBの知見をAIに正しく組み込むことで、「AIが書いたコードをAIが体系的に検証する」品質保証の新しいかたちを実現しています。