本文へ移動

ホーム / QA / 第2部 テストの基礎

第2部 テストの基礎・第2章

テスト設計の技法と探索的テスト

★★★ 必須10トピック・面接 5問

限られた時間で効果の高いテストを作るための技法と、手順書では見つからない問題に強い探索的テストを押さえる。

ひとことで

同値分割・境界値・デシジョンテーブル・状態遷移・組み合わせ(ペアワイズ)で、少ないケースで多くを確かめる。

テストは全部の組み合わせを試すことはできません。テスト設計の技法は、少ないケースで不具合を見つけやすくするための考え方です。ここでは「年齢(整数)を入力する欄。18〜64 歳なら登録できる」という仕様を例にします。

技法考え方例(年齢の欄)
同値分割同じ扱いになる値をグループに分け、各グループから1つずつ選ぶ有効:30/無効:10(下)・70(上)・「abc」・空欄
境界値分析不具合はグループの境目に多い。境目とその両隣を試す17・18・64・65(必要なら 19・63 も)
デシジョンテーブル条件の組み合わせと結果を表にして、抜けをなくす会員か×クーポンありか → 割引率
状態遷移テスト状態と「何をしたら次にどの状態になるか」を図にして、遷移と不正な遷移を試す注文:未払い→支払い済み→発送済み。発送済みからキャンセルできないか
ペアワイズ(組み合わせ)2つずつの組み合わせだけは全部出るように、ケースを減らすOS×ブラウザ×言語の全組み合わせ 27 通り → 9 通り程度
エラー推測経験から不具合が出やすい入力を試す全角数字「18」、前後の空白、0、マイナス、とても大きな数

どの技法を使うか

  • 入力欄・数値の範囲 → 同値分割+境界値分析(ほぼ必ずセットで使う)。
  • 条件の組み合わせで結果が変わる(料金・権限) → デシジョンテーブル。
  • 手順や状態がある(注文・会員登録・ワークフロー) → 状態遷移テスト。
  • 環境や設定の組み合わせが多い → ペアワイズ。
  • どれでも最後に → エラー推測と探索的テストで補う。

落とし穴:境界の「以上・未満」を仕様で確かめずにテストすると、期待する結果そのものが間違います。また、技法で作ったケースは「仕様に書いてあること」しか試せないので、書かれていない動き(同時操作・通信の切断・戻るボタン)は別に考えます。

同値分割と境界値分析をくわしく

面接ではこう答える

テストは全部の組み合わせを試せないので、技法を使って少ないケースで不具合を見つけやすくします。入力の範囲には同値分割と境界値分析、条件の組み合わせにはデシジョンテーブル、手順や状態がある機能には状態遷移テスト、環境の組み合わせにはペアワイズを使います。技法は仕様に書いてあることしか試せないので、最後にエラー推測と探索的テストで補います。

2.2同値分割と境界値分析

用語★★★ 必須
ひとことで

同値分割は同じ扱いになる値をグループに分けて代表を選ぶ技法、境界値分析はグループの境目とその両隣を試す技法。

同値分割は、同じ扱いになる値をグループ(同値クラス)に分け、各グループから代表を1つ選ぶ技法です。境界値分析は、不具合が多いグループの境目と、その両隣を試す技法です。2つはほぼ必ずセットで使います。例は「18〜64 歳なら登録できる」年齢の欄です。

年齢の欄(18〜64 歳が有効)の同値クラスと境界値無効(小さすぎる)有効(登録できる)無効(大きすぎる)17186465代表値 10代表値 30代表値 70丸=境界値(境目とその両隣) 四角=代表値(同じ扱いのグループから1つ) 数字以外・空欄も別の無効クラス
同値分割(3つのグループ)と境界値分析(境目の4点)を数直線で見る
グループ代表の値境界で試す値
無効(下):17 以下1017
有効:18〜643018・64
無効(上):65 以上7065
無効(形が違う)「abc」・空欄・小数・全角「18」—

境界の両隣だけを試す「2値」が基本で、より慎重に見るときは境界の内側の隣(19・63)も加える「3値」にします。

落とし穴:「64 歳まで」が「64 歳を含む」のか、仕様で確かめずに期待結果を書くと、テストそのものが間違います。また、画面で止めても API に直接送れば通ってしまうことがあるので、無効な値はサーバー側でも拒否されるか確かめます。

面接ではこう答える

同値分割は、入力の値を「同じ扱いになるグループ」に分け、それぞれから代表を1つ選んでテストの数を減らす技法です。境界値分析は、不具合が境目に多いことを利用して、境目とその両隣の値を試す技法です。たとえば 18〜64 歳が有効なら、代表は 10・30・70、境界は 17・18・64・65 を試します。前提として「以上・未満」を仕様で確かめることが大事です。

2.3デシジョンテーブル

用語★★★ 必須
ひとことで

条件の組み合わせと結果を表にして、テストの抜けと仕様の抜けを見つける技法。

デシジョンテーブルは、条件の組み合わせと結果を表にして、抜けをなくす技法です。料金・割引・権限のように、複数の条件で結果が変わる機能に向きます。

条件・結果ケース1ケース2ケース3
会員であるはいはいいいえ
クーポンを持つはいいいえはい
結果:割引会員割+クーポン(併用できるか仕様を確認)会員割のみクーポンのみ

表にすると「会員でなくクーポンもない」ケース4が抜けていることに気づけます。こうした仕様の抜けを見つけられるのも技法の効果です。

会員かクーポンはいクーポンいいえケース1:会員割+クーポンケース2:会員割のみケース3:クーポンのみケース4:割引なし条件が n 個(はい・いいえ)なら、組み合わせは 2 の n 乗
条件を木に展開すると、表で抜けていたケース4(割引なし)が見える

条件が増えると組み合わせは倍々に増えます(3つで 8 通り、4つで 16 通り)。結果に影響しない条件は「—(どちらでもよい)」にまとめて列を減らします。表を作ると、仕様書に書かれていない組み合わせ(ケース4)が見つかり、PdM への質問になります。

面接ではこう答える

デシジョンテーブルは、条件の組み合わせごとに結果を表にまとめる技法です。会員かどうか、クーポンを持っているかのように、複数の条件で結果が変わる機能に使います。表にすると、仕様に書かれていない組み合わせに気づけるのが大きな利点です。条件が増えると組み合わせが倍々に増えるので、結果に影響しない条件はまとめて減らします。

2.4状態遷移テスト

用語★★★ 必須
ひとことで

状態と遷移を図や表にし、正しい遷移を通すことと、許されない遷移が拒否されることを確かめる技法。

状態遷移テストは、対象が持つ「状態」と、何をしたら次にどの状態になるか(遷移)を図や表にして、テストを作る技法です。注文・会員登録・申請の承認のような、手順や状態がある機能に向きます。

注文の状態遷移:矢印のない遷移(不正な遷移)も試す未払い支払い済み発送済み配達済み支払う発送する届くキャンセル済みキャンセルキャンセル(返金)発送済みでキャンセル → 拒否されるか不正な遷移
状態遷移テスト:正しい遷移をすべて通し、許されない遷移が拒否されるかも確かめる
確かめること例ねらい
正しい遷移をすべて1回は通す未払い→支払い済み→発送済み→配達済み仕様どおりに進むか
矢印のない操作が拒否される発送済みでキャンセル、配達済みで支払い不正な遷移を防げているか
同じ操作を2回支払いボタンを2回押す二重の遷移・二重課金がないか
時間で変わる遷移支払い期限切れで自動キャンセル時刻・バッチでの遷移

矢印のない操作は、ボタンを隠すだけでなく、API を直接呼んでも拒否されるかまで確かめます。状態と操作を縦横に並べた状態遷移表を作ると、図では見落としやすい「この状態でこの操作をしたら?」をすべて洗い出せます。

面接ではこう答える

状態遷移テストは、注文の「未払い・支払い済み・発送済み」のような状態と、操作による遷移を図にしてテストを作る技法です。正しい遷移をすべて通すケースに加えて、発送済みでキャンセルするといった許されない操作がきちんと拒否されるかを確かめます。状態と操作を表にすると、図では見落とす組み合わせも洗い出せます。画面だけでなく API を直接呼んでも拒否されるかまで見るのがポイントです。

ひとことで

どの2因子の組み合わせも1回は出るようにケースを選び、組み合わせテストの数を大きく減らす技法。

ペアワイズは、「どの2つの因子の値の組み合わせも、少なくとも1回は出てくる」ようにケースを選び、組み合わせの数を減らす技法です。不具合の多くは1つか2つの条件の組み合わせで起きる、という経験則にもとづいています。

必要なケースの数(3つの値を持つ因子の数ごと)3因子全組み合わせ 27ペアワイズ 94因子全組み合わせ 81ペアワイズ 9
すべての2つずつの組み合わせを1回以上出すだけなら、ケースは大きく減る

例:ブラウザ(Chrome・Firefox・Safari)×言語(日・英・中)×会員(無料・有料・法人)。全部なら 27 通りですが、次の 9 通りで2つずつの組み合わせはすべて出ます。

No.ブラウザ言語会員
1Chrome日無料
2Chrome英有料
3Chrome中法人
4Firefox日有料
5Firefox英法人
6Firefox中無料
7Safari日法人
8Safari英無料
9Safari中有料

手で作ると間違えやすいので、PICT などのツールで作るのが一般的です。注意:3つ以上が同時にそろったときだけ起きる不具合は見逃すことがあるので、決済のように重要な組み合わせは別に追加します。ありえない組み合わせ(Safari と Windows など)は制約として除きます。

面接ではこう答える

ペアワイズは、環境や設定の組み合わせが多いときに、どの2つの値の組み合わせも最低1回は出るようにケースを選ぶ技法です。多くの不具合は1つか2つの条件の組み合わせで起きる、という経験則にもとづいています。たとえば3つの値を持つ因子が3つなら、27 通りが 9 通りになります。ただし3つ以上がそろったときだけ起きる不具合は見逃すので、重要な組み合わせは追加します。

エラー推測は、経験から「不具合が出やすい入力や操作」を狙って試すことです。技法で作ったケースの最後に、次の早見表から足します。

種類試す値・操作よくある不具合
数値0・マイナス・小数・とても大きな数・先頭の 0(007)割り算のエラー、桁あふれ、負の在庫
文字空欄・空白だけ・前後の空白・全角英数字・絵文字・とても長い文字列保存できない、文字化け、途中で切れる、表示が崩れる
記号'・"・<・&・%・改行SQL のエラー、表示の崩れ、XSS
日時月末・うるう日(2/29)・日付が変わる直前・年末年始・タイムゾーン日付のずれ、集計の漏れ
件数0 件・1 件・ページの境目(20 件と 21 件)・とても多い空の画面の崩れ、ページ送りの抜け・重複
操作二度押し・戻るボタン・再読み込み・別タブで同時に操作二重登録、古いデータで上書き
通信遅い回線・途中で切断・機内モード読み込み中のまま固まる、失敗が伝わらない

見つかった不具合の傾向を、チームの早見表に足していくと、次の機能のテストでも使える財産になります。

2.7テストケースの書き方

用語★★☆ 重要
ひとことで

誰が実行しても同じ判定になるよう、前提条件・手順・期待結果を書く。期待結果は数値や状態で判定できる形に。

テストケースは、誰が実行しても同じ結果を判定できるように書きます。いちばん大事なのは、あいまいさのない期待結果です。

TC-012 割引クーポンの適用(優先度:高)前提条件クーポン SAVE10 を持つ無料会員でログインしているテストデータカートに 3,000 円の商品が1つ手順1. カートを開く 2. クーポン欄に SAVE10 と入力 3.「適用」を押す期待結果小計が 2,700 円になり、「10% 割引」と表示される関連仕様書 3.2「クーポン」・不具合 #482
1つのテストケースに書く項目(例)
項目書き方のこつ悪い例 → 良い例
タイトル何を確かめるかが一目で分かる「クーポン」→「無料会員に 10% クーポンが適用される」
前提条件ログイン状態・権限・データの状態(なし)→「SAVE10 を持つ無料会員」
手順1つの操作を1行に。番号を振る「クーポンを試す」→「1. 入力 2. 適用を押す」
期待結果数値・文言・状態で判定できる形に「正しく表示される」→「小計が 2,700 円」
優先度リスクから。時間がないとき、どこまで実行するかの基準—

細かく書きすぎると保守が大変になります。手順が自明な部分は「チェックリスト」(確かめる観点だけを並べた一覧)で十分なこともあります。回帰テストで何度も使う重要なケースは細かく書き、自動化の候補にします。

面接ではこう答える

テストケースは、誰が実行しても同じように判定できるように書きます。項目は、何を確かめるかが分かるタイトル、前提条件、テストデータ、番号付きの手順、そして期待結果です。特に期待結果は「正しく表示される」ではなく「小計が 2,700 円になる」のように判定できる形にします。すべてを細かく書くと保守が重くなるので、重要度に応じてチェックリストと使い分けます。

2.8探索的テスト

用語★★☆ 重要
ひとことで

台本どおりではなく、観察しながら次に試すことを決めるテスト。自動化で見つからない問題に強い。

探索的テストは、決まった手順書を使わず、触りながら学び、次に試すことをその場で考えていくテストです。手順書どおりのテストでは見つからない、想定外の使い方による不具合を見つけるのに向いています。ただし、思いつきで触るのではなく、目的と時間を決めて行います。

手順書どおりのテスト探索的テスト
進め方事前に書いた手順と期待結果どおりに確かめる触りながら学び、次に試すことをその場で決める
向いていること回帰テスト・仕様どおりかの確認・自動化想定外の使い方、新しい機能、仕様があいまいな所
弱いところ書かれていないことは見つけにくい何を見たかが残りにくい(だから記録する)

チャーター(目的の一文)

チャーターは、そのテストの目的を一文にしたものです。よく使う形は「〔対象〕を、〔方法・道具〕を使って調べ、〔見つけたい情報〕を見つける」です。

カート画面を、通信を遅くして(開発者ツールの Slow 4G)
何度も操作して調べ、二重注文や表示の食い違いを見つける

チャーターがあると、「何を見たか・何を見ていないか」をあとで説明できます。思いつきで触るアドホックテストとの違いはここにあります。

面接ではこう答える

探索的テストは、手順書を使わずに、触りながら学び、次に試すことをその場で決めていくテストです。手順書どおりのテストでは見つからない、想定外の使い方による不具合に強いです。ただし思いつきではなく、「何を・どうやって・何を見つけるか」を一文にしたチャーターと時間の区切りを決め、記録を残して進めます。

ひとことで

探索的テストを、チャーター1つにつき60〜90分ほどのセッションで区切り、記録と振り返りで管理するやり方。

セッションベースのテスト管理は、探索的テストを時間の区切り(セッション)で管理するやり方です。セッションごとにチャーターを1つ決め、終わったら記録と振り返りを残します。

チャーター → セッション → 記録 → 振り返り を回すチャーターを決める目的を一文にセッション60〜90分ほど集中記録を整理不具合・疑問・次短い振り返り何が分かったか次に調べたいことを、新しいチャーターにする
セッションベースの探索的テストの回し方

セッションは、1つのチャーターに集中する時間の区切りで、60〜90 分ほどにすることが多く、長くても 2 時間までにします(決まった長さはなく、慣れや対象に合わせて調整します)。終わったら、他の人と短く振り返り(何を試したか・何が分かったか・次に何を調べるか)を行います。

  • 試したこと・気づいたことを時刻つきで簡単にメモする(後で「どこまで見たか」を説明できるように)。
  • 見つけた不具合、仕様の疑問、次に調べたいことを分けて書く。
  • 画面の録画やスクリーンショット、開発者ツールの通信の記録(HAR ファイル)を残すと、再現しにくい不具合の報告に役立ちます。
  • 何度も確かめたい手順が見つかったら、テストケースや自動テストにする。
記録の項目例
チャーター・時間カートを Slow 4G で…(60 分)
試したこと数量の連打、戻るボタン、2タブで同時に購入
見つけた不具合2タブで同時に購入すると在庫が負になる(#511)
疑問・次に調べることクーポンの再利用の仕様は?

面接ではこう答える

セッションベースのテスト管理は、探索的テストを時間の区切りで進めるやり方です。セッションごとにチャーターを1つ決めて集中し、60〜90 分ほどで区切ります。終わったら、試したこと、見つけた不具合、疑問、次に調べることを記録し、短く振り返ります。こうすると、探索的テストでも「どこまで見たか」をチームに説明でき、計画にも組み込めます。

探索的テストで「次に何を試すか」に迷ったら、経験則(ヒューリスティック)の観点を順に当てると、考えが広がります。

探索のヒントCRUD作る・読む・変える・消す境界・極端0・最大・空・長い中断戻る・再読込・切断同時2タブ・2人で同時に順序いつもと違う順番で立場権限・初めての人
次に何を試すか迷ったときの観点(ヒューリスティック)
観点試すことの例
CRUD作ったものを編集・削除したら、一覧・検索・集計にも反映されるか
境界・極端0 件、上限ちょうど、とても長い名前、とても古い・未来の日付
中断保存の途中で戻る・再読み込み・通信を切る・アプリをバックグラウンドへ
同時同じデータを2つのタブや2人で同時に変更する
順序手順を飛ばす、逆の順番で操作する、URL を直接開く
立場権限の違うユーザー、初めて使う人、キーボードだけの人

観点のリストはチームで育てます。過去の不具合を観点ごとに分類しておくと、どこを探索すべきかが分かりやすくなります。

この章のまとめ

🖨 まとめシート(印刷・PDF)
  • 同値分割・境界値・デシジョンテーブル・状態遷移・ペアワイズを使い分ける
  • 期待結果を判定できる形で、テストケースを書く
  • 探索的テストはチャーターとセッションで計画的に進める
  • テスト設計の技法の全体像:同値分割・境界値・デシジョンテーブル・状態遷移・組み合わせ(ペアワイズ)で、少ないケースで多くを確かめる。
  • 同値分割と境界値分析:同値分割は同じ扱いになる値をグループに分けて代表を選ぶ技法、境界値分析はグループの境目とその両隣を試す技法。
  • デシジョンテーブル:条件の組み合わせと結果を表にして、テストの抜けと仕様の抜けを見つける技法。
  • 状態遷移テスト:状態と遷移を図や表にし、正しい遷移を通すことと、許されない遷移が拒否されることを確かめる技法。
  • ペアワイズ(組み合わせテスト):どの2因子の組み合わせも1回は出るようにケースを選び、組み合わせテストの数を大きく減らす技法。
  • テストケースの書き方:誰が実行しても同じ判定になるよう、前提条件・手順・期待結果を書く。期待結果は数値や状態で判定できる形に。
  • 探索的テスト:台本どおりではなく、観察しながら次に試すことを決めるテスト。自動化で見つからない問題に強い。
  • セッションの回し方と記録:探索的テストを、チャーター1つにつき60〜90分ほどのセッションで区切り、記録と振り返りで管理するやり方。

この章のクイズ

面接ではこう聞かれる

まず答えを見ずに声に出して答え、そのあと開いて比べる。

Q1ログイン画面のテストケースを考えてください。

模範回答

まず仕様を確認します。何回間違えるとロックされるか、パスワードの条件、「ログインしたままにする」の有無などです。そのうえで観点ごとに考えます。正常系は、正しいメールとパスワードでログインでき、元のページに戻ること。異常系は同値分割で、メールが未登録・形式が不正・空欄、パスワードが違う・空欄。境界値として、ロックの回数ちょうどとその前後、文字数の上限と上限+1 を試します。

状態としては、ロック中・ロック解除後・セッション切れ・別の端末で同時ログイン。セキュリティでは、エラーメッセージで「メールが存在するか」が分からないこと、SQL インジェクション、パスワードが画面や通信に平文で出ないこと、総当たりが制限されることを見ます。ほかに、キーボードだけで操作できるか、主要なブラウザやスマホでの表示も確かめます。

優先順位は、影響が大きい「正しく入れる・他人では入れない・ロック」と、セキュリティを最初にし、正常系とロックの境界は自動化して毎回流します。

深掘りされたら

  • 二要素認証が加わったら、何を足しますか?
  • このうちどれを自動化し、どれを手動で残しますか?

見られているポイント技法を使った網羅と、優先順位

Q2同値分割と境界値分析を、例を使って説明してください。

模範回答

同値分割は、入力を「同じ扱いになるグループ」に分けて、各グループから代表を1つずつ試す技法です。境界値分析は、グループの境目に不具合が多いので、境目とその両隣を重点的に試す技法です。ほぼセットで使います。

例えば「18〜64 歳なら登録できる」年齢の欄なら、グループは「17 以下(無効)」「18〜64(有効)」「65 以上(無効)」と、数字以外や空欄の無効です。代表として 10・30・70・「abc」・空欄を試し、境界値として 17・18・64・65 を試します。境界値で見つかるのは、< と <= の書き間違いのような不具合です。注意点は、「以上・未満」を仕様で必ず確かめることで、そこがあいまいだと期待する結果そのものを間違えます。

深掘りされたら

  • 小数(例:17.5)が入力されたら、どのグループに入れますか?
  • 日付の境界値は、何を試しますか?

見られているポイント2つの技法の目的の違いと、具体的な値を出せるか

Q3自動販売機のテストケースを考えてください。

模範回答

まず仕様を質問します。使えるお金(硬貨・お札・電子マネー)、おつりが足りないときの動き、売り切れの表示、取り消しのボタンがあるかなどです。そのうえで観点ごとに考えます。

正常系は、ちょうどの金額で買える、多めに入れておつりが正しく出る、続けて2本買える。境界値は、商品の値段ちょうど・1 円足りない(10 円足りない)・入れられる上限。状態としては、待機中→お金が入った→商品を選んだ→商品とおつりを出す、の遷移と、売り切れ・おつり切れ・取り消しを押したとき・途中で停電したときです。異常系では、使えない硬貨や偽の硬貨、同時に2つのボタンを押す、を試します。ほかに、表示の見やすさや、車いすの人が届く位置かといった使いやすさもあります。

優先順位は、お金に関わる「正しい金額で売れる・おつりが正しい・取り消しでお金が戻る」を最初にします。

深掘りされたら

  • おつり切れのときは、どう動くのが正しいと思いますか?
  • このうち自動化できるのはどれですか?

見られているポイント仕様の質問から始め、観点(正常・境界・状態・異常)で整理し、お金を優先できるか

Q4デシジョンテーブルはどんなときに使いますか?

模範回答

複数の条件の組み合わせで結果が変わるときに使います。条件と結果を表にして、組み合わせの抜けや矛盾を見つけるのが目的です。料金の計算、割引、権限(誰が何をできるか)などに向いています。

例えば「会員か」「クーポンを持っているか」で割引が変わる場合、条件が2つなら組み合わせは 4 通りです。表にすると「会員でクーポンもある場合、併用できるのか」のように、仕様に書かれていないケースに気づけます。これがテストの前に見つかるのが大きな効果です。条件が多くて組み合わせが爆発するときは、結果が同じになる列をまとめたり、影響の小さい組み合わせはペアワイズで減らしたりします。

深掘りされたら

  • 条件が 5 つあって組み合わせが 32 通りになったら、どう減らしますか?

見られているポイント条件の組み合わせ・仕様の抜けを見つける用途の理解

Q5探索的テストとアドホックテスト(思いつきのテスト)の違いは何ですか?

模範回答

どちらも手順書を使いませんが、探索的テストは目的と時間を決め、記録を残す点が違います。目的は「チャーター」として一文にし(例:カート画面を通信を遅くして操作し、二重注文を見つける)、60〜90 分ほどの区切りで集中して行い、終わったら何を試して何が分かったかを振り返ります。

そのため、探索的テストは「どこまで見たか」を説明でき、チームの中で分担や次の計画にもつなげられます。思いつきで触るだけだと、同じところばかり見たり、見つけた不具合を再現できなかったりします。探索的テストで見つかった繰り返し確かめたい手順は、テストケースや自動テストにします。

深掘りされたら

  • 探索的テストの成果は、どうやってチームに報告しますか?

見られているポイントチャーター・時間の区切り・記録という構造の理解