ペアワイズテストの基本と実践方法|効率的なテストケース作成
ペアワイズテストは、「どの2つの因子の組み合わせも必ず1回は試す」ようにテストケースを選ぶ技法です。全組み合わせを試さずに済むため、設定項目が多い機能でも現実的な件数に収まります。
根拠は経験則で、不具合の多くは1つの因子か、2つの因子の組み合わせで起きるという観測に基づいています。3つ以上が同時に絡む不具合は相対的に少ない、という前提の技法です。
この記事は2024年の公開後、2026年9月に見直しました。 公開当時に載せていたテストケースの表は、2因子の網羅を満たしていない誤りだったため、検証したうえで差し替えています。
- 公開当時の4ケースの表では、「男性×30代」「女性×20代」「20代×PC」「30代×スマホ」の4ペアが漏れていました
- この例で全ペアを網羅するには最低6ケース必要です(後述)
ペアワイズテストとは
すべての因子の組み合わせではなく、「2因子間の組み合わせ」だけを全部カバーするという考え方です。
次のような場面で効きます。
- OS・ブラウザ・会員種別・通貨のように、設定項目が多い
- 全組み合わせが数百〜数千件になり、実行が現実的でない
- 期間が削られ、テストケースを減らす必要がある
実例:3因子でどれだけ減るか
次の3因子で考えます。
- 性別:男性 / 女性(2値)
- 年齢層:10代 / 20代 / 30代(3値)
- デバイス:PC / スマホ(2値)
全組み合わせは 2 × 3 × 2 = 12ケースです。
最小ケース数の求め方
ペアワイズの理論的な下限は「値の数が多い2因子の積」です。
| 因子の組 | ペアの数 |
|---|---|
| 性別 × 年齢層 | 2 × 3 = 6 |
| 性別 × デバイス | 2 × 2 = 4 |
| 年齢層 × デバイス | 3 × 2 = 6 |
最大が6なので、6ケースを下回ることはできません。1ケースで各ペアは1つずつしかカバーできないためです。
実際に6ケースで組む
| No. | 性別 | 年齢層 | デバイス |
|---|---|---|---|
| 1 | 男性 | 10代 | PC |
| 2 | 男性 | 20代 | スマホ |
| 3 | 男性 | 30代 | PC |
| 4 | 女性 | 10代 | スマホ |
| 5 | 女性 | 20代 | PC |
| 6 | 女性 | 30代 | スマホ |
検証すると、すべてのペアが1回以上出ています。
- 性別×年齢層(6通り):(男,10代)#1 (男,20代)#2 (男,30代)#3 (女,10代)#4 (女,20代)#5 (女,30代)#6 → すべて登場
- 性別×デバイス(4通り):(男,PC)#1 (男,スマホ)#2 (女,スマホ)#4 (女,PC)#5 → すべて登場
- 年齢層×デバイス(6通り):(10代,PC)#1 (20代,スマホ)#2 (30代,PC)#3 (10代,スマホ)#4 (20代,PC)#5 (30代,スマホ)#6 → すべて登場
12ケース → 6ケースで50%削減できました。因子や値が増えるほど、この削減率は大きくなります。
PICT でテストケースを生成する
手作業で組むのは3因子が限界です。 それ以上はツールを使ってください。Microsoft の PICT が定番です。
入力ファイルを書く
Gender: Male, Female
Age: Teen, 20s, 30s
Device: PC, Smartphone
実行する
pict input.txt
タブ区切りで結果が出力されます。生成されるのは6ケースで、上で手作業で組んだものと同じ規模になります。
結果をそのままファイルに保存できます。
pict input.txt > result.tsv
ケース数を確認してから使う
# 3因子まで網羅する(トリプルワイズ)
pict input.txt /o:3
# 生成結果の統計を見る
pict input.txt /s
/o:3 にするとケース数が跳ね上がります。 実行前に /s で件数を確認してください。
制約を書かないと使い物にならない
ここが実務で最も重要な部分です。 現実には「あり得ない組み合わせ」が必ず存在します。
たとえば OS とブラウザの組み合わせでは、「iOS × Internet Explorer」は存在しません。制約を書かずに生成すると、実行できないテストケースが混ざります。
OS: Windows, macOS, iOS, Android
Browser: Chrome, Safari, Edge
Plan: Free, Paid
# 制約:iOS と Android では Edge を対象外にする
IF [OS] IN {"iOS", "Android"} THEN [Browser] <> "Edge";
# 制約:Windows では Safari を対象外にする
IF [OS] = "Windows" THEN [Browser] <> "Safari";
制約を書くと、PICT はその条件を満たす範囲で全ペアを網羅しようとします。「制約で除外されたペアは、そもそも存在しないので網羅対象から外れる」という扱いです。
制約の書き忘れは、レビューで必ず指摘されるべき点です。 生成された表を見て「この行、実行できないのでは」と気づいたら、制約が足りていません。
必ず含めたい組み合わせを固定する
ペアワイズは機械的にケースを選ぶため、「一番よく使われる組み合わせ」が入らないことがあります。
主要な利用パターン(たとえば Windows × Chrome × 有料会員)は、必ずテストしたいはずです。PICT では seeding という仕組みで、含めたい行を先に指定できます。
# seed.txt に必ず含めたい組み合わせを書く
OS Browser Plan
Windows Chrome Paid
pict input.txt /e:seed.txt
これを知らないと、「一番大事なケースが入っていない表」ができあがります。 生成結果を鵜呑みにせず、主要導線が含まれているかを目視で確認してください。
ペアワイズの限界
3つ以上の因子が同時に絡む不具合は検出できません。 これは技法の性質上どうしようもない部分です。
例:「iOS」かつ「ゲストユーザー」かつ「クーポン適用時」にだけ落ちる
→ この3つが同時に揃うケースが生成されない可能性がある
対処は3つあります。
- 重要な機能だけ
/o:3で3因子網羅にする:全体に適用するとケース数が爆発します - seeding で危険な組み合わせを固定する:過去に不具合が出た組み合わせを入れておく
- リスクの高い領域は別途重点テストする:決済まわりなど
「ペアワイズをやったから網羅できている」とは言えません。 減らした分だけ、何を諦めたかを説明できる状態にしておく必要があります。
使う前に確認したいこと
因子と値の切り出しが適切か
ペアワイズの品質は、入力の作り方でほぼ決まります。 ツールは与えられた因子と値を機械的に組み合わせるだけです。
- 値を細かくしすぎない:年齢を1歳刻みにしたら意味がありません。同値分割でクラスにまとめてから因子にします
- 互いに影響しない因子を混ぜない:関係のない項目を入れるとケース数だけが増えます
- 境界値は別に確認する:ペアワイズは組み合わせの技法であって、境界を見る技法ではありません
他の技法との使い分け
| 状況 | 使う技法 |
|---|---|
| 設定項目が多く、組み合わせが爆発する | ペアワイズ |
| 1つの入力項目の範囲を確認したい | 同値分割と境界値分析 |
| 条件によって結果が変わる業務ロジック | 決定表テスト |
| 画面や状態が遷移する | 状態遷移テスト |
決定表とペアワイズを混同しないでください。 決定表は「条件と結果の対応を漏れなく定義する」ため、原則すべての組み合わせを列挙します。ペアワイズは「実行できる件数まで減らす」ための技法です。目的が逆です。
まとめ
- ペアワイズは2因子間の組み合わせだけを全部カバーする技法
- 最小ケース数の下限は「値の数が多い2因子の積」。それを下回る表は網羅できていない
- 手作業は3因子が限界。それ以上は PICT を使う
- 制約(
IF ... THEN ...)を書かないと、実行不能なケースが混ざる - 主要な組み合わせは seeding(
/e:)で固定する。放っておくと入らないことがある - 3因子以上が絡む不具合は検出できない。 重要箇所は
/o:3か重点テストで補う - 因子と値の切り出しが品質を決める。値は同値分割でまとめてから使う
- 決定表とは目的が逆。混同しない
期間が削られたときの現実的な削減手段として有効ですが、「何を諦めたか」を説明できる形で使うのが前提です。上流での使い方はウォーターフォール開発におけるQAの重要性とテスト技法の活用法にまとめています。