📝

ペアワイズ法で行われていることが頭の中でイメージできるようになった

に公開1件

概要

ペアワイズ法で行われていることが頭の中でイメージできるようになったので、そのイメージをシェアします。
シェアすることで、以前の私と同じようにペアワイズ法で行われていることがイメージできなくてモヤモヤしている人を助けたり、私が間違った理解をしている場合を指摘してもらえることを期待してこの記事を公開します。

ペアワイズ法とは

以下の記事をご参照下さい。
https://www.veriserve.co.jp/helloqualityworld/media/20240125003/

当時の私の混乱

ペアワイズ法の説明の中で、よく「2因子間を網羅する」という説明があります。
私はこれを聞いて「2つの​因子のみを対象に水準の​組み合わせをテストすると、他の因子の組み合わせもバランスよく行われる​」というような理解をしていました。

その結果、ソフトウェアテスト技法練習帳の3.1のお題に対して、ツールを使わず自力でペアワイズ法を適用した結果、テストケースが16件導出されました。
16件という数字がどこから出てきたのかというと、麺とスープの水準の組み合わせを計算した結果出た数値です(4×4=16)。

ソフトウェアテスト技法練習帳3.1の因子水準表を以下に記載しておきます。

因子名 水準1 水準2 水準3 水準4
麺 極細麺 細麺 中太麺 太麺
スープ 醤油 味噌 塩 トンコツ
具 チャーシュー ねぎ 海苔 メンマ
調味料 コショウ 七味唐辛子 ニンニク

問題はここからです。練習帳の回答に書かれていた件数は19件でした(注釈で PickMaster は1行目は見出し行になる旨が書かれていたので、厳密には18件なのだと思います)。

この18件というのが、どうやって導き出されたのか分からずに困っていました。
また、テストケース数を出して終わってしまっていたのですが、実際にテストケースを書き出す時に、麺とスープ以外の因子の水準の組み合わせをどう行えばいいかわからないことに気づきました。

麺とスープ以外の組み合わせをどう考えれば良いか

前提として、ペアワイズ法を適用する際に、以下の理解をしておきます。

目的:すべてのペアをカバーするテストケースを見つける
特性:各テストケースは複数のペアを同時にカバーできる

各テストケースは複数のペアを同時にカバーできる

これを理解しやすくするために、ペアワイズ法のプロセスを以下に説明します。

  1. 因子と水準を洗い出す(因子水準表を作成する)

  2. 異なる因子の2水準の組み合わせを洗い出す

    1. で洗い出した組み合わせを全て網羅するテストケースを導出する

3.でテストケースを導出する際、2. の組み合わせ(ペア)を全て出現させようとすると、テストケース間で水準の重複が発生します。これが先ほど説明した、

各テストケースは複数のペアを同時にカバーできる

の意味になります。

話を戻します。麺とスープ以外の組み合わせをどう考えれば良いのでしょうか。
それは、2. で洗い出したペアを全てカバーするテストケースを考えることです。
「2因子間を網羅する」というより「異なる因子の2水準を網羅する」と考えることです。

これで、組み合わせをどう考えればいいのかわかりました。

しかし、まだ気になることがあります。
最小のテストケース数はどのように導き出せばいいのでしょうか?

最小のテストケース数をどうやって導き出すのか

最小のテストケース数を導き出すには、どのペアをどう組み合わせれば最小になるか、すべての可能性を調べる必要があり、今回取り上げた練習帳の題材(4×4×4×3=192通り)でも計算量が膨大になります。

すべての可能性を調べる場合の手順

全探索の取り組み方:

  1. 理論的下限(今回の場合14件)から開始(84ペア÷6ケース ※1ケースは最大6ペアをカバー可能(C(4,2)=6))
  2. n個選ぶすべての組み合わせを試す
  3. 解が見つからなければ n を1増やす
  4. 解が見つかるまで繰り返す
  5. 初めて解が見つかった n が最小値

各nでの計算量:

n=14: C(192,14) = 6.53×10²⁰ 通りをチェック
n=15: C(192,15) = 7.75×10²¹ 通りをチェック
n=16: C(192,16) = 8.57×10²² 通りをチェック
n=17: C(192,17) = 8.88×10²³ 通りをチェック

合計: 約9.68×10²³ 通り以上をチェック
1秒で10億通り調べても約3070万年かかる

計算量が膨大のため、世の中のペアワイズ法のツールは、すべての可能性を調べることをしていません。

すべての可能性を洗い出した上でテストケースを決定するような全体最適の求め方ではなく、ボトムアップ的に組み合わせを導き出すアルゴリズム(貪欲法など)を用いています。
そのため、すべての可能性を調べた上で導出したテストケース数と差異が生じる可能性がありますが、最小に近いかつすべてのペアを網羅したテストケース数を導出することができ、実用上は問題になりません。

ちなみに、PICT というペアワイズ法のツールを動かした結果、生成されたテストケース数は17件でした。おそらく使用しているアルゴリズムが PickMaster と異なることで差が生じたのだと思います。

まとめ

AI に壁打ち相手になってもらったことで、ペアワイズ法の理解が進み、混乱が解消されました。

導出されるテストケース数に差があっても、異なる因子の2水準を網羅できていれば、ペアワイズ法を正しく使えていると言えそうです。

また、最小のテストケース数を厳密に求めるのは、コンピュータを使っても難しいことがわかりました。
世の中のペアワイズ法のツールが出している答えは近似解(厳密さにおいて一番良い解ではなく、ある程度良い解)であり、しかし、実用上は問題がないものであることもわかりました。

おまけ

ペアワイズ法を使用する際の注意点や、失敗談がまとめられた記事のリンクを貼っておきます。
https://nihonbuson.hatenadiary.jp/entry/AllCoverageTrap
https://www.docswell.com/s/horix2/K3J9EZ-2022-03-17-003622#p1

Discussion