テストについて学ぼう! ~第6話 ペアワイズ法とは~

第6話 ペアワイズ法とは

みなさん、こんにちは。鎌倉です。日本時間の2023年9月13日、Apple社のiPhone 15シリーズが発表されました。iPhone 15のカラー展開はブラック、グリーン、ピンク、ブルー、イエローの5色で、ストレージが128GB、256GB、512GBの3種類です。「iPhone 15の全バリエーションをテストする」といった場合、15種類の端末を準備しなければなりません。さらに、購入ルートによっては端末に「SIMロック」が掛けられている場合がありますよね。ドコモ、au、ソフトバンク、SIMフリーの4パターンを区別する場合、テストする端末の種類は60種類に増えてしまいます。

このように考慮する条件が増えるとテストするパターンの数は掛け算で増加していくので、全てのパターンをテストすることは現実的ではありません。かといって、無作為に選んでテストすると、バグを見落としてしまうリスクが高まってしまうので、何らかの法則にしたがってパターンを間引く必要がありそうですね。第6話では、パターンを間引くためのテスト手法のひとつである「ペアワイズ法」をご紹介したいと思います。

ペアワイズ法とは

ペアワイズ法は「欠陥(バグ)の多くは、1つまたは2つの要因の組み合わせで発生する場合が多い」という統計的な知見にもとづいて、テストするパターンを削減する手法です。1つの要因で発生する欠陥の比率、2つの要因で発生する欠陥の比率、3つの要因で発生する欠陥の比率……を累積していくと100%に近づきますが、ある程度のところで頭打ちになります。このため、ある程度の要因数までで打ち切ることが合理的といえます。

2004年に発表された論文「Software Fault Interactions and Implications for Software Testing」でも、4つの異なるシステムにおいて、1つの要因で発生する欠陥が全体の29~68%、2つ以下の要因で発生する欠陥は全体の70~97%、3つ以下の要因で発生する欠陥は全体の89~99%という結果が出ていました。1つまたは2つの要因の組み合わせをテストすれば、リーズナブルなコストで欠陥を検出することができそうですよね。

出典:Software Fault Interactions and Implications for Software Testing

ペアワイズ法の特徴

ペアワイズ法にも利点と欠点が存在します。どのような場合にでも使える魔法の道具ではないということを理解して、有効に活用してください。

ペアワイズ法の利点

ペアワイズ法の最大の利点は、テストするパターン数を合理的に削減できることです。具体例としてラーメンを自動調理する機械のテストを考えてみます。機械に対してスープ(みそ/しょうゆの2択)、麺の太さ(太麵/細麺の2択)、麺の量(ふつう/大盛りの2択)の指定が可能な場合、全パターンを網羅するためには2の3乗で8回のテストが必要となります。

全パターン網羅の例

ペアワイズ法を用いる場合は、スープと麺の太さ、麺の太さと麺の量、麺の量とスープの組み合わせが最低1回ずつ出てくればOKです。簡単な例なので手作業で作成してみましょう。まずはスープと麺の太さの組み合わせ4パターンを表に書き込み、右側に麺の量を書きこむ列を追加します。

ペアワイズ法(作成途中)

最初に1行目の麺の量を決めましょう。「ふつう」「大盛り」のどちらでもOKですが、ここでは「ふつう」を記入します。次に2行目の麺の量ですが、「大盛り」を記入する必要があります。1行目と2行目のスープが「みそ」なので、「ふつう」を記入してしまうと「みそ」と「大盛り」の組み合わせをテストできなくなるからです。

同様に3行目の麺の量も制約があります。1行目と3行目は麺の太さが「太麺」なので、「ふつう」を記入してしまうと「太麺」と「大盛り」の組み合わせをテストできなくなりますね。したがって3行目の麺の量は「大盛り」に決まりです。4行目は「しょうゆ」と「ふつう」、「細麺」と「ふつう」のパターンが必要となるので、「ふつう」を記入します。これでペアワイズ法の表が完成しました。テストするパターンが半分に削減されていますね。

ペアワイズ法(完成形1)

このペアワイズ法の表には別解があります。1行目の麺の量で「大盛り」を選んだパターンです。完成形1と完成形2はどちらも正解で、優劣はありません。完成形1と完成形2を足し合わせると全パターン網羅の例になることを確認してください。

ペアワイズ法(完成形2)

ペアワイズ法の欠点

ペアワイズ法の欠点は、3つ以上の要因の組み合わせで発生する欠陥(バグ)を網羅できないため、見落としが発生するリスクがあることです。自動車や飛行機の操縦、医療機器の制御や、自治体の防災システムなど、誤動作すると人命にかかわるようなシステムのテストでは、安易にペアワイズ法を適用してはいけません。

上のラーメンを自動調理する機械の例で、みそスープの比重が重いために「みそ」「太麺」「大盛り」を指定すると、調理したラーメンを運ぶコンベアーが止まる事象が発生するとしましょう。完成形2を使ってテストした場合は「みそ」「太麺」「大盛り」が含まれるので、この欠陥を発見できます。しかし完成形1を使ってテストした場合は「みそ」「太麺」「大盛り」が含まれません。つまり、不具合が潜んだまま機械が出荷されるリスクがあります。

こうしたリスクを低減するためには、他のテスト手法を組み合わせることが有効です。過去に発生した欠陥のリストに沿ったテストや、システムの挙動を見ながら欠陥がありそうな箇所を深掘りするテストを追加実施することで、ペアワイズ法で見落とされた欠陥を発見できる可能性が高まります。

ペアワイズ法のツール

ペアワイズ法のツールは複数公開されています。筆者が使用したことのあるツールをいくつかご紹介しましょう。

PICT

PICTは、マイクロソフトが提供しているコマンドラインのツールです。上の例でいう「スープ」「みそ」「しお」「しょうゆ」といったデータをテキストファイルに書き込んで、そのファイルを読み込ませることで動作します。Windows 版は実行形式のファイルが提供されていますが、Linux や Mac OS の場合は、ソースコードを自分でビルドして実行形式のファイルを作成する必要があります。

GIHOZ

株式会社ベリサーブが提供しているオンラインサービスの「GIHOZ」には、ペアワイズ法のテストケースを作成する機能があります。スタータープランは無料で、アカウント登録をすればペアワイズ法を始めとした各種テスト技法のテストケースを作成可能です。

Qumias Plus

バルテス株式会社が提供しているオンラインサービスの「Qumias Plus」もペアワイズ法のテストケースを作成できます。バルテス社が運営するソフトウェア品質に関するポータルサイト「Qbook」に会員登録すると「Qumias Plus」を無料で利用可能です。注意点として、テストケースの作成がサーバー上で行われるため、閲覧可能になるまでに少しタイムラグがあります。

ペアワイズ法テストケース生成ツール

「418 I'm a teapot」さんが作成したツールです。画面の表示にテスト条件を入力すると、テストケースがリアルタイムで表示されます。会員登録も不要で、利用は簡単です。今回の例題と演習でも、このツールを利用します。

ペアワイズ法でテストケースを作成してみよう

例題

ある機械メーカーでは、ラーメンを自動調理する機械のリニューアルを計画しています。リニューアル版の機械には次の条件が指定できます。

  • スープは、みそ/しお/しょうゆ の3つから選択
  • 麺の種類は、細麺/中太/太麵 の3つから選択
  • 麺の量は、1玉/1.5玉/2玉 の3つから選択

この機械の指定条件に対してペアワイズ法を用いて、テストパターンを作成してください。なお、テストパターンの作成にあたっては、ペアワイズ法テストケース生成ツールを使用してよいものとします。

過去にペアワイズ法テストケース生成ツールを使用したことがある場合、前回入力した内容が表示されることがあります。その場合は、シークレットウィンドウで開いてください。

ペアワイズ法テストケース生成ツールを開く

まずは問題文で提示されているツールを開いてみましょう。どうやら「因子(パラメータ名) と 水準(値) を入力」という項目とオプションを指定すると表を作成してくれるようですね。見本として入力されているブラウザやOSの情報、除外する組み合わせは必要ないので、クリアしてしまいましょう。

ツールを起動したときの画面

クリアできたら、因子と水準の表に問題文の条件を入力しましょう。「スープ」、「麺の種類」、「麺の量」が因子、「みそ」や「細麺」、「1玉」などが水準にあたります。表が2因子2水準になっていますので、「因子2」の左にある「+」マークと「水準1」の右にある「+」マークを1回ずつ押して、3因子3水準の表に変更します。

3因子3水準に変更する

「因子1」を「スープ」、「因子2」を「麺の種類」に書き換え、「麺の種類」の下に「麺の量」を記入しましょう。スープの行には「みそ」「しお」「しょうゆ」、麺の種類の行には「細麺」「中太」「太麵」、 麺の量の行には「1玉」「1.5玉」「2玉」を書き込めばOKです。

因子と水準を記入する

因子と水準の表に記入すると、テストケースはリアルタイムで生成されます。全ての組み合わせは27パターンありますが、ペアワイズ法を使って9パターンに削減できました。

9パターンに削減

実践演習

上の例題に出てきたラーメンを自動調理する機械のリニューアルですが、社長の「鶴の一声」で指定できる条件を1つ追加することになりました。新しい指定条件は次の通りです。

  • スープは、みそ/しお/しょうゆ の3つから選択
  • 麺の種類は、細麺/中太/太麵 の3つから選択
  • 麺の量は、1玉/1.5玉/2玉 の3つから選択
  • 麺の硬さは、柔らかめ/ふつう/硬め の3つから選択

この機械の指定条件に対してペアワイズ法を用いてテストパターンを作成し、テストケース数がどれだけ増えるのかを確認してください。引き続き、ペアワイズ法テストケース生成ツールを使用してよいものとします。

正解と解説

まずは、「麺の硬さ」を記入する行を追加しましょう。「麺の量」の左にある「+」マークを1回押して空行を作ればOKです。

因子と水準を追加

因子には「麺の硬さ」を記入しましょう。水準には「柔らかめ」「ふつう」「硬め」の3つを記入します。因子と水準を入力し終わると、テストケースも自動的に更新されました。見てみると、因子が1つ追加されましたが、テストケースの数は9パターンで変わりありませんでした。

9パターンのまま

正解は、「テストケースは増加しない」でした。非常に効率が良いように感じますが、例題では27パターン中18パターンを削減したのに対し、この問題では81パターン中72パターンを削減しています。3つ以上の要因の組み合わせで発生する欠陥を見落とすリスクが例題よりも高まっている点に注意してください。

まとめ

今回は、多数の条件を組み合わせてテストする場合に有効な技法として「ペアワイズ法」をご紹介しました。押さえておくべきポイントは、

  • 統計的な知見にもとづいて、テストするパターンを合理的に削減できる
  • 1つまたは2つの要因で発生する欠陥(バグ)を効率よく検出可能
  • 3つ以上の要因の組み合わせで発生する欠陥(バグ)を見落すリスクがある
  • 人命にかかわるようなシステムのテストでは、安易に適用しない
  • 見落とすリスクを低減するためには、他のテスト手法を組み合わせることが有効

といった点です。全パターンのテストを避けることができますので、上手にご活用ください。

鎌倉
2010年入社、北海道札幌市出身。趣味はランニング。最近100kmリレー最速タイムのチャレンジに参加し、ギネス記録を達成したらしい。