技術記事 2026年3月8日 読了 約10分

JSTQBテスト設計技法をAI開発にどう組み込んだか ── Qurated LabのAI-Driven Quality Assurance

AIがコードを書く時代、テストの設計はどうあるべきか。Qurated LabはJSTQBのテスト設計技法をAIエージェントに組み込み、同値分割・境界値分析・デシジョンテーブル・状態遷移テストを自動適用する仕組みを構築した。その全体アーキテクチャとワークフローを解説する。

YS
山田 翔太郎
ReIT

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
条件: プレミアム会員YesYesNoNo
条件: クーポン適用YesNoYesNo
動作: 割引率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 TestTDD Guide同値分割 / 境界値分析 / デシジョンテーブル85%以上(認証・決済は95%以上)
Widget TestTDD Guide同値分割 / 状態遷移60%以上
Integration TestTest Planner状態遷移 / デシジョンテーブル主要フロー網羅
E2E TestE2E 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
INFO

なぜカバレッジ基準は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回連続で本番バグを未然に防いだ」場合、このパターンの信頼度スコアが上がり、次回以降は日付関連のコード変更時に自動的に境界値分析が優先適用されます。

OK

まとめ: 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が体系的に検証する」品質保証の新しいかたちを実現しています。


AI品質保証を、あなたのプロジェクトに。

JSTQBに基づくテスト設計をAIが自動実行する仕組みに興味がありますか?Qurated Labの取り組みについてお気軽にご相談ください。