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