ソフトウェアテストには、ソフトウェアの内部構造は意識せずに、入力値と出力結果に着目してテストの振る舞いブラックボックステストという手法があります。ブラックボックステストの技法の一つが「組合せテスト」です。
組合せテスト技法はテストケースを大幅に削減できる、非常に強力な技法です。
しかし、組合せテスト技法はうまく工夫しないと適切な因子・水準を抽出できなくなってしまうため、効率的かつ効果的にテストを行うことが重要です。
この記事では、組合せテスト技法の代表的な手法や大まかな手順、システム開発で組合せテストを使いこなすための4つのポイントをご紹介します。
- もくじ
1.組合せテストの概要と大原則
組合せテストとは、「ブラックボックステスト」の技法の一つです。ブラックボックステストではソフトウェアの内部構造を考慮せず、入出力にフォーカスして確認を行います。
ここでは組合せテストの概要や、事前におさえておきたい原則について解説します。なお、ブラックボックステストについて詳しくは、次の記事を参考にしてください。
1-1 組合せテストとは
組合せテストとは、複数の条件を組み合わせてシステムの動作を確認するテスト技法です。「単一の条件では発生しないけれど、複数の条件が組み合わさった際に発生する欠陥」を検出できます。例えば、Windows上でMicrosoft Edgeブラウザを用いると問題ないテストケースが、Chromeブラウザだとエラーになるケースも考えられます。このような問題は、OSの条件にブラウザの条件を組み合わせることで、初めて判明します。
組合せテストでは、テスト対象における条件を「因子」、各条件が取りうるパターンを「水準」と呼びます。例えば「OS」を因子とした場合、水準には、「Windows」「macOS」「Linux」などが該当します。あくまで一例ですが、OSやブラウザ、言語といった因子に該当する水準を列挙すると下表の通りです。
因子 | OS | ブラウザ | 言語 |
---|---|---|---|
水準 | Windows | Microsoft Edge | 日本語 |
macOS | Chrome | 英語 | |
Linux | Firefox | 中国語 | |
‐ | Safari | ‐ |
しかし、因子や水準には他にも多数のパターンがあり、すべてを組み合わせると膨大なテストケースが必要になるでしょう。このように膨れ上がる組み合わせパターンから価値の高いテストケースを選定することが、組合せテストの重要な目的です。
具体的には、表の横(列)に因子、縦(行)に水準をとり、任意にn列(つまりn因子)を選んだときの水準の組み合わせがすべて1回以上表れるようにします。このような組み合わせを「n因子間網羅」といいます。
組合せテスト技法を端的にいえば、この「n因子間網羅」となるテストケースを作成することです。組合せテスト技法では、特に2因子間網羅をよく使用します。
1-2 組合せテストの大原則
組合せテストの技法は、条件が増えてテスト実行に支障が生じる場合に活用する手法であり、効率性を求めて安易に頼ることは望ましくありません。
どのようなテストであっても、すべての条件の組み合わせを網羅できることが理想です。初めから組合せテスト技法を適用してテストパターンを削減したり、因子や水準の性質を考慮せずに組み合わせを省略したりすると、本来テストケースがカバーするべき条件が満たされない場合があります。
洗い出した因子・水準をそのまま用い、後述する手法を活用しながらテストパターンを作成することが組合せテストの大原則です。テストパターンの削減や効率化に活用するテスト技法は、目的や意図に合わせて見極める必要があります。
2.組合せテスト技法の代表的な手法
組合せテスト技法では、膨大な組み合わせパターンから必要なテストケースを選定するために、主に2つの手法が用いられます。それぞれの基本を知っておきましょう。
2-1 直交表
「直交表」とは、どのn因子を選んだとしても、同数の組み合わせパターンが含まれる表のことです。例として、シンプルな直交表をご覧ください。それぞれ「〇(有効)」「×(無効)」の2水準を持つ4因子を組み合わせた場合の直交表です。
No. | 因子A | 因子B | 因子C | 因子D |
---|---|---|---|---|
1 |
✕ |
✕ | ✕ | ✕ |
2 | ✕ | ✕ | 〇 | 〇 |
3 | ✕ | 〇 | ✕ | 〇 |
4 | ✕ | 〇 | 〇 | ✕ |
5 |
〇 |
✕ | ✕ | 〇 |
6 | 〇 | ✕ | 〇 | ✕ |
7 | 〇 | 〇 | ✕ | ✕ |
8 | 〇 | 〇 | 〇 | 〇 |
2水準に4因子を組み合わせると、通常は2×2×2×2=16パターン必要となります。しかし、この表では8パターンに抑えられました。
また、どの2因子の組み合わせ(AB/AC/AD/BC/BD/CD)においても、「××」「×〇」「〇×」「〇〇」がそれぞれ2回ずつ出現します。同様に、どの3因子を組み合わせても同数のパターンが含まれます。このように、任意の因子を組み合わせたときに同数のパターンが含まれるのが直交表です。
直交表は、後述するオールペア法よりも網羅性を高めやすいといえます。その反面、テストケース数が増大しやすく、パターン作成の難易度が高いのがデメリットです。
2-2 オールペア法(ペアワイズ法)
「オールペア法(ペアワイズ法)」とは、どの2因子を選んだとしても、最低1回以上の組み合わせパターンが含まれる表のことです。オールペア法では因子数が最小の「2」でよく、パターンの登場回数にバラつき・重複があっても構いません。
先ほどの4因子・2水準の直交表をオールペア法で表現すると、一例として次のような表になります。
No. | 因子A | 因子B | 因子C | 因子D |
---|---|---|---|---|
1 |
〇 |
〇 | ✕ | 〇 |
2 | 〇 | ✕ | 〇 | ✕ |
3 | ✕ | 〇 | 〇 | ✕ |
4 | ✕ | ✕ | ✕ | ✕ |
5 |
✕ |
✕ | 〇 | 〇 |
直交表では8パターンでしたが、ペアワイズ法だと5パターンに抑えられました。どの2因子の組み合わせ(AB/AC/AD/BC/BD/CD)においても、「××」「×〇」「〇×」「〇〇」がそれぞれ最低1回以上は出現します。ただし、直交表と比べてバラつきがあり、同じパターンが重複するケースも含まれます。
このように、オールペア法は直交表と比べるとテストケース数を圧縮しやすいのがメリットです。一方で、組み合わせによってバラつきがあり、3因子間以上の網羅度は直交表よりも低くなります。
3.組合せテスト技法の大まかな手順
ここでは、手動により組合せテストを実施する場合の大まかな手順を紹介します。
3-1 因子の洗い出し
まずはOSやブラウザなど、考えられる因子を洗い出しましょう。因子を組み合わせてテストケースを作るため、因子に漏れがあるとテストケースにも漏れが生じます。ただし、この段階で直交表やオールペア法の表に落とし込む必要はありません。
3-2 因子ごとの水準洗い出し
洗い出した因子ごとに、考えられる水準を洗い出しましょう。OSはWindows、macOS...、ブラウザはMicrosoft Edge、Chrome、...といった具合に、水準を列挙します。
なお、水準の洗い出しにおいては「同値分割法」や「境界値分析」といった技法が有効です。それぞれについて詳しくは、以下の記事をご確認ください。
3-3 禁則組合せの除外
洗い出した因子同士を組み合わせていきますが、このとき「禁則組合せ」を除外しましょう。禁則組合せとは、システムの仕様や論理上あり得ない組み合わせパターンのことです。例えば、iOSやmacOS向けのブラウザ「Safari」は、Windowsでは使えません。そのため、Windows×Safariというパターンは禁則組合せといえます。
冒頭に挙げた因子水準表でいえば、以下の横線で消去している組み合わせが除外されるということです(組み合わせは一部抜粋)。
禁則除外後のテーブル
因子 | OS | ブラウザ | 言語 |
---|---|---|---|
水準 | Windows | Microsoft Edge | 日本語 |
Windows | Chrome | ||
Windows | Firefox | ||
Windows | Safari | ||
macOS | Microsoft Edge | ||
macOS | Chrome | ||
(以下略) |
禁則組合せを除外することで無効なテストケースを除外でき、必要なテストケース数を把握しやすくなります。一方で、禁則組合せがあるとテストケースの組み合わせを考えるうえでの制約が多くなります。禁則組合せが多いほど、組合せテストの意義である「n因子間網羅の達成」は難しくなるでしょう。禁則組合せを除外する際には、ほかの組み合わせでn因子間網羅を達成できるかも考えて慎重に行うべきです。
3-4 表による組合せの作成
前述した直交表やオールペア法を用いて、組合せテストのパターンを表に落とし込んでいきます。どの手法を採用するかは、テストに使える工数や求められるテスト品質などにより選びましょう。
完成した表にしたがって、テストケースを作成します。テストケース作成以降の工程は、一般的なブラックボックステストと変わりません。
4.システム開発で組合せテストを使いこなす4つのポイント
組合せテストの大原則を踏まえた上で、効率よくテストを実施するためのポイントを見ていきましょう。
4-1 必要なテストパターンを網羅する因子と水準を設定する
組合せテストの技法としては直交表やオールペア法などさまざまな方法がありますが、因子と水準を減らせば組合せパターンを減らせるため、因子とその水準の選び方が重要な要素となります。ただし、削減する際には注意すべき点もあります。
例えば、映画館の入場チケットを購入するシステムを考えてみましょう。
通常1人あたりのチケット代金は、大人1,800円、中学生以下は1,000円であるとします。毎週水曜日はレディースデーで、大人の女性はチケット代が1,200円、それ以外の会員登録をしている人のチケット代が1,500円になると仮定しましょう。
このとき考慮すべき因子は、「性別」「年齢」「曜日」「会員登録状態」の4つで、それぞれの水準は下記のようになります。
・性別:男性、女性
・年齢:中学生以下、大人(16歳以上)
・曜日:レディースデー(水曜日)、レディースデー以外
・会員登録:登録済、未登録
単純に全水準を組み合わせてテストパターンを洗い出すと、2×2×2×2=16通りの確認を行わなければならなくなります。このとき、期待値に影響を与える因子をまとめて考える方法を用いると、因子数を減らすことができます。
映画館の入場チケット販売システムに当てはめると、割引の適用が金額の期待値に影響するのはレディースデーの場合と会員登録済みの場合に限られるため、「性別」と「曜日」の因子を一つにまとめ、期待値の違いによって、「女性・レディースデー」「女性・レディースデー以外」「男性・曜日関係なし」の3水準にすることも可能です。こうすることで、因子数や全体の水準数を削減できるようになります。
ただし、上記の方法を採用できるのは、実際のコードがまとめた因子と同じ条件で動いているケースです。今回の例でいうと、ロジックの条件分岐が「女性・レディースデー」「女性・レディースデー以外」「男性・曜日関係なし」の3パターンで行われている場合であれば因子水準の削減が可能です。逆に、ロジックに即していない組み合わせを設定してしまうと、必要なテストパターンを網羅できずにテスト品質が落ちてしまいます。例えば、「性別」と「曜日」の因子の組み合わせを網羅的に辿るロジックでシステムが動いている場合、安易にパターンを削ってしまうと不具合の見逃しに繋がりかねません。
実装内容に合わせた因子と水準を採用することを常に念頭に置くようにしておきましょう。
4-2 禁則組合せの抜け漏れや重なりに着目する
因子水準を洗い出してそれぞれを組合せていくと、システムの仕様や論理上実現し得ない組合せが出てくることがあります。これを「禁則組合せ」と呼びます。
禁則組合せが多い場合、因子や水準の洗い出しはできても、実際のテストパターンとして利用できるものが限られてしまうことがあります。この現象は、因子水準の設定の仕方が適切でない場合によく見られます。
禁則組み合わせが多い場合、条件のヌケモレや重複が生じている可能性が高いです。禁則組み合わせが多くなる背景には、切り分けた水準がMECE(漏れなくダブりない状態)になっていないことや、そもそも組み合わせ表に表現すべきでない事柄を因子として取り上げていることなどの原因があります。システムの構造を理解しないまま、テストすべき区分値や条件を因子・水準に適切に盛り込めていないと、禁則組み合わせが増える傾向にあるのです。
禁則組み合わせが過度に増えた場合、テスト不足またはテスト過多が起こりやすくなります。ポイント1で述べたようにテストパターンを網羅した上で起こりえない条件を省く、もしくは起こりえないパターンを多く含む因子を除いた上で組み合わせを行うなどの対応が必要です。
ポイント1でご紹介した映画のチケット販売システムでいうと、「性別」の因子のうち「男性」にはレディースデーは適用されないことに着目し、「性別」の因子の「男性」という水準は除いて表を組む方法が考えられます。男性に対する組み合わせは別途作成し、「女性」の水準に絞った組み合わせ表を作成することで条件表を整理し見やすくすることができるでしょう。
4-3 因子や水準の優先度を調整する
合理的にテストパターンを削ったとしても、限られたテスト工数ですべてのテストケースを実行・確認することが難しい場合や、実装内容に合わせて因子水準を設定した結果、テストケース数が極端に少なくなってしまう場合も考えられます。このような場合には、因子や水準の採用基準となる優先度を設定し、工数に見合うテストボリュームになるように調整する必要があります。
優先度の低いものを削減する方法はポイント1、2にて示した通りですが、水準を分割してパターン数を増やす方法もあります。映画のチケット販売システムの例であれば、「曜日」の因子に関して月曜日から日曜日までの具体的な曜日を7パターン用意することも可能です。
優先度の判断基準としては、「不具合があった場合にリスクが高いものかどうか」「ユーザー利用頻度が高いかどうか」「過去の傾向として不具合が発生しやすい組み合わせであるか」などが挙げられます。やみくもにパターン数を増減させるのではなく、目的や根拠を持ってパターン数を調節することが大切です。
4-4 「機能要求」から必要な因子・水準を抽出する
因子や水準を適切に設定できれば、組み合わせを作成するという組合せテストにおける最も重要な工程はほぼ完了となります。しかし、適切な因子・水準を導き出すことは経験や知識がないテスト担当者にとっては難しく、因子・水準の選び方がテスト設計の後工程に大きく影響する作業だということを認識する必要があります。
より適切な因子・水準を見つけるためには、「機能要求」を参考にする方法も有効です。機能要求とは、ソフトウェアに要求される機能面の要素(画面UIやデータ構造など)を指します。例えば、入力欄のラジオボタンやチェックボックスなどの入力制御状況を確認して、禁則パターンを導き出せます。実際の画面を元に確認することで、新たに気づくポイントもあります。
また、「性別」という因子を取り上げる際に、画面を見ない状態では「男性」「女性」の2水準を想定するのが通常だと思います。しかし、入力画面の仕様上、男性・女性のどちらにもチェックされない場合も発生しうることが分かれば、新たな水準として「選択なし」を設ける必要があると判断できます。
5.組合せテスト技法を効率化するツール
組合せテスト技法は、テストの網羅性と効率性を両立できる有効な技法です。しかし、組合せテストのパターンを手動で考える場合、非常に多くの労力を要します。因子や水準が多くなればなるほど、テスト担当者の負担は増すでしょう。
そこで、組合せテストのパターンを自動生成できる「Qumias Plus」がおすすめです。Qumias Plusを使うと、条件を指定するだけでオールペア法によるテストケースを瞬時に生成できます。また制約条件の設定機能もあり、禁則組み合わせを回避しつつ必要なテストケースを生成することが可能です。合せテストを効率的に実施したい場合は、ぜひお試しください。
組合せテストに役立つツール「Qumias Plus」
Qbookは、組合せテストの効率化に役立つツールとして、Webアプリ「Qumias Plus(クミアス・プラス)」をリリースしました。テストケースの生成に役立つツールですので、ぜひ業務にお役立てください。
まとめ:組合せテスト技法を取り入れ、効率的にテスト成果を高めよう
膨大なパターンのテスト条件が設定されがちな組合せテストですが、テスト工数を削減しようとむやみにテストケース数を減らす試みは適切ではありません。まずは必要な因子と水準を洗い出した上で、テスト目的と実装内容に即した効果的なテストケース数の調整を行う必要があります。
システムの仕様と因子・水準を見比べ、禁則パターンを抽出したり機能仕様に基づく因子抽出を行ったりできれば、必要最低限のテストパターンを用いてテストケースを作成できるでしょう。
今回ご紹介した組合せテスト技法の代表的な手法やポイントを踏まえて、組合せテストを効果的に実施してみてください。