システム開発におけるテスト工程は、いかに機能を網羅したテストケースを作成して実行できるかがポイントとなります。

しかし、システムの規模によってはテスト内容が複雑となり、テストケースの数も膨大になる場合があります。その分、テスト工程で掛かる工数も増加してしまいますし、無駄なテストケースを作成していると尚更です。

こうしたテストの複雑化を解決するために考案されたのが、組み合わせテスト技法です。今回は組み合わせテストについて、概要や代表的な組み合わせテスト技法、効率的な進め方をご紹介します。

組み合わせテストとは?

組み合わせテストとは、テスト対象の機能に複数の入力条件がある場合、その入力条件の値をいろいろと組み合わせて実施するテストです。

これだけ見るとただ値を総当たりでテストしているだけのように感じますが、すべての入力条件で値の組み合わせを考えていくと、機能によっては膨大な数となってしまい、テストの実施が現実的ではなくなる場合が多いです。

そこで、実際にすべての組み合わせをテストせずとも、すべての組み合わせを網羅できたとみなす網羅基準を設けて、その基準に基づいてテストを実施します。これが、組み合わせテストの本質です。

組み合わせテストを行う場合、入力条件を「因子」、入力する値を「水準」として扱います。これは、効率のよい実験方法を設計して、適切に結果を解析する統計学の応用分野である「実験計画法」で使われている用語が由来しています。

組み合わせテストは2種類

組み合わせテストは2種類

組み合わせテストを効率的に実施するための技法には「オールペア法」と「直交表」の2種類あります。それぞれの詳しい内容を解説します。

オールペア法

オールペア法はソフトウェアのバグの多くが1つ、もしくは2つの因子の組み合わせで発生しているという経験則に基づいて2パラメータ間の値の組み合わせを網羅するテストケースを作成する技法で「ペアワイズ法」とも呼ばれています。

例えば、食券の発券システムにおいて、選んだ内容で食券が正しく印字されるかのテストを想定して、次のような因子と水準があるとします。

  • サイズがS、M、Lの3種類
  • メニューはオムライス、ハンバーグ、ナポリタン
  • 価格はサイズ問わず同じだが、それぞれのメニューで800円、1000円の2種類がある

これらを表で表すと以下のように整理できます。

この因子と水準の組み合わせをすべてテストすると、以下のように18パターンのテストケースが作成されます。

18パターンであればテストできなくもないパターン数ですが、時間が掛かるのは確実ですし、因子もしくは水準が1つ追加されるだけでも、そのパターンはさらに膨れ上がります。

そこで、2パラメータ間の値の組み合わせを網羅するオールペア法の原則に基づいて、2つの因子の組み合わせだけを網羅したテストケースを作成してみます。

ここではサイズとメニューの2つの因子を網羅すると仮定します。すると、以下のような組み合わせになります。

サイズとメニューの2因子の網羅を条件として組み合わせると、18パターンあったテストケースが半分の9パターンとなりました。

理屈が分かっていても、実際にオールペア法を用いる場合は制約条件などが加わるとさらに複雑になります。

オールペア法のテストケース作成については、テストケース抽出ツールとして「PICT」や「PictMaster」などが活用されています。

興味のある方は、ぜひ上記ツールの使い方を調べてオールペア法でのテストケース作成に挑戦してみてください。

直交表

直交表とは、どの列を取っても、同じ組み合わせが同じ数だけある表です。テストケース作成においては、直交表を用いることで、無駄なテストケースを除外できます。

直交表には、因子と水準の数によって用いるべき直交表が定められています。例えば、3つの因子と2つの水準でテストを行う場合は、L4直交表を用います。

前述した食券のシステムの設定を一部変更して、以下のケースで考えてみましょう。

  • サイズがS、Mの2種類
  • メニューはオムライス、ハンバーグの2種類
  • 価格はサイズ問わず同じだが、それぞれのメニューで800円/1000円の2種類

この仕様のテストケースすべてを表に表すと次の8パターンになります。

これを、L4直交表の法則に当てはめると、以下のように書き換えられます。

この4パターンのテストを行えばほとんどの不具合を洗い出せるという、効率的な組み合わせを示した表が直交表です。さまざまなパターンの直交表については、以下サイトで詳しく紹介されています。

参考:主な直交表の種類と特徴 – ものづくりドットコム

オールペア法と直交表の違いとは?

オールペア法と直交表では、それぞれ組み合わせ数の多さに違いが出てきます。

2つの因子の組み合わせを全て網羅する2因子間網羅という考え方がありますが、オールペア法ではこの2因子が重複しないことを重視する組み合わせであるため、重複しない分、組み合わせ数は少なくなります。

一方、直交表は水準の出現回数が均等になることを重視するため、2因子の重複が見られて組み合わせ数も多くなります。

テストケース数を少なくするにはオールペア法、テストケースをオールペア法ほど少なくせずとも、一定の網羅率は維持しておきたい場合は、直交表を用いるのがよいとされています。

組み合わせテストの効率的な進め方

組み合わせテストの効率的な進め方

組み合わせテストの効率的な進め方についてご紹介します。

因子と水準を洗い出す

まずは、テスト対象の機能に対しての入力条件である因子と、入力する値である水準を洗い出しましょう。前述した食券システムを例に挙げると、次のようになります。

  • 因子:サイズ、メニュー、価格
  • 水準:サイズ(S/M)、メニュー(オムライス/ハンバーグ)、価格(800円/1000円)

組み合わせを考える

次に、それぞれの因子と水準の組み合わせを考えます。ボリューム次第ではすべての組み合わせをテストする場合もありますが、少しでも数が多くなる場合は、オールペア法や直交表などを用いて間引きましょう。

また、因子と水準を組み合わせていくと、仕様上や論理上ありえない組み合わせが出てくる場合もあります。

これを「禁則組み合わせ」といいます。禁則組み合わせも、実際のテストケースとしては利用できないため除外しましょう。

期待値を考える

因子と水準を洗い出して、適切な組み合わせを列挙できたら、それぞれの組み合わせに対する期待値を考えましょう。

例で挙げた食券システムの場合は「サイズS、オムライス、800円が印字された食券が発券される」といったものが期待値となります。

期待値は、実際にテストを実施した場合に、テスト結果がOKなのかNGなのかを判断する大事な値となります。テスターがテストの成否を適切に判断できるような期待値を設定しましょう。

【まとめ】組み合わせテストを使いこなそう

組み合わせテストでは、適切な組み合わせを作ることで網羅率は高くなり、網羅率の高さは品質向上にもつながります。

また、無駄な組み合わせを除外することでテスト時間の短縮にもつながり、コストも削減できます。オールペア法や直交表といった組み合わせ技法を使いこなして、効率のよい組み合わせテストを実施しましょう。