本稿では、組み合わせテストの用語について簡潔に解説する。2因子間網羅、直交表、All-Pairs法について触れる。
組み合わせテスト
- 組み合わせテスト(combinatorial testing):複数の条件を組み合わせてテストする手法
全網羅組み合わせテスト
- 全網羅組み合わせテスト: 考えられるすべての条件の組み合わせをテストする手法
- 当然、全網羅組み合わせテストのほうが欠陥を検出できる可能性は高い。
- しかし、組み合わせ数が膨大になると、全網羅組み合わせテストは現実的に不可能になる。
たった3つの条件がそれぞれ3パターンあるだけで27通りのテストが必要。
組み合わせ | 全網羅組み合わせテストの数 |
---|---|
2 * 2 | 4 |
3 * 3 * 3 | 27 |
4 * 4 * 4 * 4 | 256 |
2因子間網羅
- 因子(parameters): 変数名
- 例: "OS"
- 例: "PHPのバージョン"
- 例: "データベース"
- 水準(values): 因子がとりうる値
- 例: Windows, Linux, macOS
- 例: PHP7.1, PHP7.2, PHP7.3
- 例: MySQL, PostgreSQL, SQLite
- 2因子間網羅: 2因子間の組み合わせを網羅した状態
- 2因子間網羅を満たす組み合わせを作成する手法
- 直交表(orthogonal array)
- All-Pairs法(Pairwise法)
- 2因子間網羅では、「OSとPHP」「PHPとデータベース」「OSとデータベース」の組み合わせが全通り存在する。
- 2因子間の網羅率が100%であれば、妥当なテストと言える
- 経験的根拠「多くの欠陥は2因子間でみつかる」1
- 1因子で見つかる欠陥: 29%〜68%
- 2因子で見つかる欠陥: 70%〜97%
- 3因子で見つかる欠陥: 89%〜99%
- 1因子のテストは簡単だが、効果が薄い。
- 3因子は2因子とそんなに変わらない割に、テストが大変。
- だから、2因子間網羅で大抵は妥当。
- 2因子間網羅を採用するか、3因子間網羅以上を採用するかは、テスト工数と欠陥見逃しリスクのトレードオフになる。
- テスト対象の重要度やバグりやすさによって、3因子間網羅、4因子間網羅、N因子間網羅、全網羅…とリスク回避に重きを置く選択もあり。
- 例: 新機能はバグりやすいから、3因子間網羅にする。
- 例: 返品返金処理は大クレームに繋がりやすいから、全網羅にする。
- ちなみに、3因子間網羅のテストは3-wise testingと言われる。
All-Pairs法と直交表の違い
- All-Pairs法と直交表: どちらも2因子間網羅なのは同じ。
- All-Pairs法: 2因子間が重複しないことを重視
- したがって、組み合わせ数が少なくなる。
- 水準の出現回数が均一にならないことがある。
- 例: MySQLは4回しかテストされないが、PostgreSQLは5回ずつテストされる
- 直交表: 水準の出現回数が均等になること重視
- したがって、重複したペアがあることがある。
- 組み合わせ数が多くなる。
- 直交表は科学実験の手法。実験ではデータが偏らないよう水準を均等に割り付けるのは大事な特性。
- 例: 投薬Aの実験はデータが10回あるのに、投薬Bは7回しかないと実験データとしては良くない。