「組み合わせテスト」ついてやさしく解説します!

はじめに

JCB デジタルソリューション開発部 QSATチームの星野です。
今回は、組み合わせテストとそのための有用な技法である同値分割や境界値分析の使い方についてやさしく解説します。

組み合わせテストとは

名前の通り、あるものの「組み合わせ」により発生するバグがないかを確認するテストです。では、具体的に何を組み合わせればよいでしょうか。

組み合わせるものは、テストしたい対象の項目が持っている具体的な「値」です。
言葉だけではイメージしづらいので、以下のカラーを選択できるプルダウンの図にて説明します。
この場合、テストしたい対象の項目はカラー。
具体的な値は、プルダウンの選択肢にある赤色または青色となります。
例えば、緑色などの項目にない値は、そもそもテストできないので値には含みません。
つまり、実際に設定できる値が組み合わせテストをする対象となります。
※ただし、「プルダウンの選択なし」も設定はできるので値に含めることはできます。

「値」を組み合わせる

以下の簡単なWebアプリケーションで、組み合わせテストを使ってテストするパターンを考えてみましょう。
今回のテストは、料金計算ボタンを押した場合の動作確認のみとします。
テストしたい対象の「項目」と、項目が持っている具体的な「値」はそれぞれどんなものになるでしょうか。

(仕様)ベッドカバー購入Webアプリ

  • カラー/サイズ/個数をすべて選択すると、料金計算ボタンが活性となる
  • 料金計算ボタンを押すと、ベッドカバーの料金が表示される
  • カラーは白色,黄色,青色をプルダウンから1つ選択可能
  • サイズはシングル,ダブル,キングをプルダウンから1つ選択可能
  • 個数は1~100までの値(整数)をプルダウンから1つ選択可能

仕様に「カラー/サイズ/個数」をすべて選択すると料金計算ができるとあるので、テストしたい対象の項目は「カラー/サイズ/個数」となります。
それぞれ具体的な値を書き出してみると以下のようになります。

項目
カラー 白色,黄色,青色
サイズ シングル,ダブル,キング
個数 1,2,3,4,5,6,7,8,9,10,11…(省略)…98,99,100

カラー、サイズは3つの値、個数は100個の値を書き出すことができました。
これらを組みあわせると、
「3×3×100」=900 パターンになります。
このように、項目が持っているすべての値を組み合わせるテストを、
「全網羅組み合わせテスト」といいます。

組み合わせテストのパターン数を考えるには、高校の数学で学んだ組み合わせの計算「nCr=異なる[n]個の中から[r]個選ぶ場合の組み合わせの数」を思い出すとイメージしやすいです。
今回であれば、カラー3つの中から1つ、サイズ3つの中から1つ、個数100個の中から1つ選んで組み合わせるので「3C1×3C1×100C1」つまり「3×3×100」となります。
シンプルな作りのシステムでも、値の数が多いとその分テストする数も膨大になってしまいます。

同値分割法、境界値分析をあわせて使おう

数値である個数の設定値は、同値分割法や境界値分析を用いると少ないパターンで効率的にテストができます。
具体的な解説は過去の同値分割法境界値分析の解説をご参照ください。
今回のシステムの場合、1~100が選択可能なので、同値分割法や境界値分析を使うと以下のように値を抽出できます。

  • 同値分割法→1~100の代表値「50」
  • 境界値分析→選択できる値の境界値「1」「100」

プルダウンで選択できない境目は「0」「101」ですが、そもそも選択できないとテストもできません。そのため、選択できる境目の「1」「100」のみを値として抽出しています。
今回は、例として同値分割法、境界値分析それぞれから抽出した「1」「50」「100」を値に設定しました。

項目
カラー 白色,黄色,青色
サイズ シングル,ダブル,キング
個数 1,50,100

3つの項目から洗い出した設定値を全て組み合わせると、
「3×3×3」=27 パターンになります。先ほどよりも現実的なパターン数になりました。

効率の良い組み合わせについて

実際に使われているシステムだともっと複雑な構造の場合が多いです。
例えばカラーが3色から15色、サイズが3つから5つに変更。
さらに、「柄」を10個の中から選択できる項目を追加するとどうでしょう。
「15(カラー)×5(サイズ)×10(柄)×3(個数)」=2250 パターンになります。
個数の値を同値分割法、境界値分析で減らしたとしても数値ではない値が増えることで、膨大なパターン数になってしまいます。
組み合わせテストでは、発見できるバグの数を極力減らさずに組み合わせの数を効率的にできる「2因子間網羅」という考え方があります。
こちらはまた次回以降に解説します。

おわりに

最後に、JCBでは我々と一緒に働きたいという人材を募集しています。
詳しい募集要項等については採用ページを ご覧下さい。

©JCB Co., Ltd. 20︎21