🐈

探索的テスト入門 ~構造的な思考プロセスで探索的テストを実施する~

に公開

はじめに

「仕様書にはないバグを、どうやって見つけますか?」
テスト経験が 2〜3 年ほどあると、多くの方がぶつかる課題です。
要件書やテストケースを消化するだけでは、ユーザーが直面する“想定外の問題”を発見するのは難しい。

そこで登場するのが 探索的テスト(Exploratory Testing) です。
「自由にやる」活動と思われがちですが、実際には 構造化して実施することで成果が最大化 します。

本記事では書籍『フルスタックテスティング』第 2 章の内容を整理し、実務に落とし込める形でまとめました。

TL;DR

  • 探索的テストは 仕様書外の不具合を発見するユーザー視点の活動
  • 「8 つのフレームワーク」「4 つの探索パス」「5 つの着眼点」で 属人性を減らし構造化 できる
  • 継続的に計画して実施すること が、アジャイル開発での品質フィードバックを強化する

1. 探索的テストとは?

従来のテストは、要件定義書やユーザーストーリーに沿って設計されます。
しかし現実のユーザー行動は、必ずしも仕様通りではありません。

探索的テスト とは、既知の仕様に縛られずユーザー視点でアプリを操作し、未知の不具合や想定外のフローを発見する活動です。

特徴は以下の通りです。

  • 分析力・観察力に依存する(属人化しやすい)
  • 既知のテスト設計では拾えない不具合を発見できる
  • “探索”という言葉の通り、アプリを理解しながらテストを進める

→ だからこそ「フレームワーク」を活用して 構造化する工夫 が欠かせません。

2. 思考を支える「8 つのフレームワーク」

探索的テストは「自由にやる」と属人化し、再現性や網羅性が下がります。
そこで使えるのが 8 つのフレームワーク。本来はテスト設計手法ですが、探索の“思考の道具”として有効です。

1. 同値クラス分割法

  • 定義:入力をグループ化し、各グループから代表値を選ぶ
  • :年齢入力 → 未成年(0〜19)/成人(20〜120)/不正値(負数や 121 以上)
  • 適用シーン:入力値が膨大なフォームや検索条件
  • 落とし穴:全値を網羅しようとして非効率になる

2. 境界値分析

  • 定義:境界条件付近に不具合が集中する
  • :「6 文字以上」パスワード → 5/6/7 文字を確認
  • 適用シーン:文字数制限、数値範囲、閾値判定
  • 落とし穴:正常値だけでテストを終える

3. 状態遷移

  • 定義:状態によって挙動が変わる点を確認する
  • :未ログイン → ログイン済み → ログアウト後に再操作
  • 適用シーン:認証、購入フロー、マルチステップフォーム
  • 落とし穴:状態を図示せず機能単体だけを確認

4. デシジョンテーブル

  • 定義:条件と結果を表形式で整理して網羅する
  • :会員種別 × 在庫有無 × 支払い方法 → 注文可否
  • 適用シーン:複雑なビジネスルール
  • 落とし穴:文章で整理して抜け漏れが生じる

5. 原因結果グラフ

  • 定義:入力と出力の因果関係を図に整理する
  • :割引条件を複数組み合わせ、どのケースで適用されるか図示
  • 適用シーン:複雑な計算式や業務ルール
  • 落とし穴:因果関係を明文化せず属人的に理解する

6. ペアワイズ法

  • 定義:条件の組合せを「2 つずつ」網羅する
  • :OS × ブラウザ × 言語設定 → 全組合せは膨大だが、ペア網羅で効率化
  • 適用シーン:多環境テスト、設定が多い UI
  • 落とし穴:全組合せを網羅しようとして工数過多になる

7. サンプリング

  • 定義:全データから代表的なサンプルを選んで検証する
  • :数千商品から売上上位・下位・特殊カテゴリを選ぶ
  • 適用シーン:データ件数が膨大なケース
  • 落とし穴:偏ったデータ選定で検証の幅が狭くなる

8. エラー推測

  • 定義:経験や直感から「壊れやすい箇所」を狙う
  • :特殊文字入力、通信遮断、タイムアウト
  • 適用シーン:過去に障害が多い領域、新機能直後
  • 落とし穴:個人の思いつきで終わり、共有されない

3. アプリを歩く「4 つの探索パス」

フレームワークで観点を広げたら、実際にどこを歩くか を考えます。

1. 機能的ユーザーフロー

  • 定義:ユーザーが実際にたどる操作の流れを探索する
    • 単一ユーザー正常系(まず基本動線を確認)
    • 繰り返しフロー(同じ操作を繰り返すと挙動が変化するか)
    • 複数ユーザー(同時操作で衝突が起きないか)
  • 落とし穴:正常系を 1 回だけ確認して終える

2. 故障とエラーハンドリング

  • 定義:アプリが直面し得る故障やエラーを想定し、ハンドリングを確認する
  • :ネットワーク切断、サービス停止、入力ミス時のエラーメッセージ表示
  • 適用シーン:外部連携、通信依存の処理、入力フォーム
  • 落とし穴:正常時だけの確認で終える

3. UI のルック&フィール

  • 定義:見た目や操作感を探索する
  • :ブラウザ間で表示が崩れないか、遅延時にローディングが出るか
  • 適用シーン:Web アプリ、UI 依存度が高いサービス
  • 落とし穴:「動けばよい」と考え UI 品質を軽視する

4. 機能横断観点

  • 定義:特定機能に限らずアプリ全体に対して影響する観点を探索する
  • :セキュリティ、プライバシー、認証/認可、パフォーマンス、アクセシビリティ、監査
  • 適用シーン:大規模 Web アプリ、規制がある業界
  • 落とし穴:横断的な影響を無視して単一機能のみ確認

4. 背景を理解する「5 つの着眼点」

テストの精度を高めるには、アプリの背景理解が必須です。

1. ユーザーペルソナ

  • 定義:代表的ユーザー像を設定し、その立場で探索する
  • :若者と高齢者で求めるものは異なるため観点も異なる
  • 落とし穴:テスター自身の感覚だけで判断する

2. ドメイン

  • 定義:業界特有の知識やワークフローを理解して探索する
  • :EC → 注文 → 支払い → 納期確定 → 注文確認、金融 → 利息計算や端数処理
  • 落とし穴:ドメイン知識を持たず一般的な観点だけで済ませる

3. ビジネスの優先事項

  • 定義:事業上重要な要素に沿って探索する
  • :拡張性が重要なら API 連携やシステム統合に注目
  • 落とし穴:事業優先度を気にせず、機能観点のみ重点的に確認する

4. インフラストラクチャと設定

  • 定義:環境や制約を理解し探索に活かす
  • :レート制限超過時の挙動、VPN 下での接続
  • 落とし穴:デフォルト環境でしか検証しない

5. アーキテクチャ

  • 定義:内部構造や技術選定を理解し探索を広げる
  • :マイクロサービス間通信、外部サービス障害時の挙動、API エラーの UI 反映
  • 落とし穴:内部構造を考慮せず表面操作だけに留まる

5. 分析と継続的探索

探索的テストは 一度きりではありません
アプリが変われば探索もやり直す必要があります。

マインドマップの活用

  • 観点(監査、性能、セキュリティ、入力検証、UI、エラー処理)を整理し、チームに共有することで抜け漏れを防ぐ

フェーズごとの探索戦略

  • Dev-box テスト:開発直後、正常系と UI 確認に限定
  • ユーザーストーリーテスト:横断的観点やクロスブラウザを追加
  • リリーステスト:パフォーマンス、信頼性、スケーラビリティを重点探索

6. 従来テストとの比較

項目 従来のテスト 探索的テスト
基準 要件・仕様書 ユーザー操作や直感
特徴 再現性が高い 新しい不具合を発見しやすい
課題 想定外に弱い 属人化しやすい
解決策 網羅性を高める設計 フレームワークと観点で構造化

7. 実務への落とし込み

チェックリスト

  • 想定外のユーザーフローを探索したか
  • エラーメッセージは意味があり解決策を示しているか
  • フレームワークを活用して観点を広げたか
  • ペルソナやドメイン知識を反映したか
  • チームで観点を共有し、属人化を避けているか
  • 継続的なフィードバックを前提としてテスト計画を立てたか

8. まとめ

  • 探索的テストは「自由」ではなく「構造化」がカギ
  • 8 つのフレームワーク・4 つの探索パス・5 つの着眼点で属人性を減らせる
  • 継続的に計画して実施することで、アジャイル開発での品質フィードバックが強化できる

参考

フルスタックテスティング 10 のテスト手法で実践する高品質ソフトウェア開発

Discussion