ペアワイズテストは、「どの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の重要性とテスト技法の活用法にまとめています。

ABOUT ME
りん
このブログでは、Web開発やプログラミングに関する情報を中心に、私が日々感じたことや学んだことをシェアしています。技術と生活の両方を楽しめるブログを目指して、日常で触れた出来事や本、グルメの話題も取り入れています。気軽に覗いて、少しでも役立つ情報や楽しいひとときを見つけてもらえたら嬉しいです。