組み合わせテストを開発現場で使いこなすには?――考え方のヒントと5つのコツ現場で使うためのオールペア法、直交表の基本(3)(1/3 ページ)

オールペア法や直交表は組み合わせテストの品質を一定に保ち、テストケースを合理的に削減できる利点を持ちます。しかし、ツールでやみくもにテストケースを削減してはいけません。そこには勘も経験則もコツも必要です。筆者がコツを伝授します。

» 2015年04月28日 05時00分 公開
[五味弘OKI(沖電気工業)]

連載バックナンバー

 本連載では、組み合わせテストを科学的かつ効率的に実施するための方法として「オールペア法」「直交表」を紹介しています。第一回では、代表的なテスト手法とその課題を整理し、第二回では「オールペア法」「直交表」がどういったものかを、ツールを使って「とにかくやってみる」ことで理解できるように配慮して紹介しました。その中で、オールペア法や直交表を使えば「理屈の上では」6561件の組み合わせテストを15件にまで削減できることを示しました。しかし、それだけでは開発現場の実務には不十分な場合が多く、やはり実際のプロジェクトで使いこなすためには勘や経験から得られるコツも重要です。

 本連載で紹介してきたオールペア法や直交表は、組み合わせの「強さ」(=品質の水準)を保証することがポイントです。これらは勘と経験に頼った職人技の組み合わせテストではないことを保証するものなので、間違えないようにしましょう。

 なお、本連載では、テストケースの組み合わせについて、「強さ」や「因子」「水準」といった独特の単語が出現しますが、これらについては連載第二回で意味を解説した通り、「オールペア法」「直交表」に特有の概念です。独自の用語で“迷子”になりそうになったら、連載第二回に立ち返ってみてください。

 今回からは数回にわたり、実際の開発現場でオールペア法や直交表を使う際のコツや考え方のヒントを紹介していきます。

コツを知る前に:テストは「そのまま素直に」が大原則

 今回紹介する組み合わせテストのコツの中には、かなりテクニカルなものも含まれています。これらのコツをむやみに使ってしまうと、テストケースを作成するコストが大きくなるだけでなく、生成したテストケースも読みにくくなってしまいます。また、本来の組み合わせテストの考え方からもずれてしまう可能性があります。

 テストとは、基本的には与えられた対象を「そのまま素直に」テストケースに写像して行うものです。職人技を使わずにテストをすることが本来の方法です。

 素直に実行すること、という大原則を踏まえた上で、「どうしてもテストをもっと効率的に実施したい」という要求や「特定の因子や水準を優先的に多くテストしたい」というような特定の意図を盛り込む場合のみ、「要求」と「使うコツ」を明確にして、最小限のコツだけを使うようにします。

コツその1:テストケース数を減らすために因子と水準を減らすコツ

 ここではいくつかの実践的なテストのコツを紹介します。オールペア法や直交表だけでなく、「デシジョンテーブル」(第一回参照)などの組み合わせテスト全体に使えるコツも多く紹介します。

 因子数には頃合いの良い相場の個数があります。例えば因子数が3〜4個のように少ないときは、組み合わせを「強さ2」のように小さくしても、テストケース数はそれほど減少しません。逆に因子数が16個以上だと「強さ2」の組み合わせテストでも絶対数が大きいので、テストのコストが大きくなります。組み合わせテストのコストと効果を考えれば、因子数の相場は10個程度が良いでしょう。

 因子と水準は独立して考えるものではなく、相互に調整可能です。例えば、第一回第二回で例に示したアミューズメントパークの例を取り上げてみましょう。第一回の該当箇所を引用します。

第一回で登場した「アミューズメントパーク施設の入場料」のテストケース

 ここで「アミューズメントパーク施設の入場料」のテストケースを作成するために、デシジョンテーブルを Excelで記述した例を紹介します。このパークでは子供と高齢者の年齢割引があり、女性に限っての曜日割引、高齢者に限っての県内在住者割引があります。このときのデシジョンテーブルの一部は以下の図1のようになります。

連載第1回で示したアミューズメントパーク入場料に関するデシジョンテーブル

 このパークでは、子供と高齢者の年齢割引があり、女性に限っての曜日割引、高齢者に限っての県内在住者割引があります。このときの因子と水準を表1に示します。

表1 アミューズメントパークの因子と水準

 女性のみ曜日割引があるので、曜日因子は性別因子に影響されます。この場合は例えば、表2のように性別・曜日と合体させた「性別・年齢」因子にして、その水準を「男性・曜日関係なし」「女性・月曜日」「女性・月曜日以外」の三つにします。このように、因子を合体することで合計の水準数を減らすことができます。

表2 「因子の合体」調整後の因子と水準

 繰り返しになりますが、実際のプログラムの実装がこの組み合わせに合致していなければ、このような組み合わせ数の削減を検討すべきではありません。性別と曜日を別々に分岐して全パターンをたどる実装であれば、テストも性別と曜日を別因子にして、実装に合わせるべきです。実装がどのようになっているかが不明な場合は、実装を想像して因子と水準を実装に合わせるようにします。

 因子数と水準数がアンバランスになった場合は、この「因子の合体」を使って因子数と水準数をバランスさせることができ、オールペア法や直交表では少ない個数でテストケースを生成できます。くどいようですが、このコツの使い過ぎには十分に注意してください。不自然な因子や水準を設定してしまうと、テストの対象や意図が不明になり、テストケースが読みにくくなります。

無視できる関係にある因子グループを分割して組み合わせ数を減らす

 因子グループ同士の関係が、プログラムの実装から独立しているか、ほぼ無関係であるときは、その因子グループ間で組み合わせテストをする必要はあまりありません。

 因子グループを別々にして組み合わせテストをすると、テスト回数は大きく減少します。全ての因子を対象にすると、水準数の乗算でテストケース数が増えてしまいますが、このコツを使って因子グループで分割すれば、テストケース数は分割したグループごとのテストケース数の加算で済みます。

 例えば、本連載でサンプルにしているアミューズメントパークの例では、「年齢割引や曜日割引のプログラム」と「県内在住割引のプログラム」が独立していることが分かる(予想できる)場合は、因子グループを表3表4のように分割します。

表3 県内在住を分割削除した因子グループ
表4 性別と在住だけに分割した因子グループ

 この例では、「性別」という因子が両方の因子グループに入ってきますので、今回の分割では因子と水準はそんなに大きくは減少しません。実際のテストでは、これぐらいの削減率ならば分割しない方が良いでしょう。

 実装を踏まえた上で因子グループ間の関係が独立であるかどうかを判断するのは難しいことです。少なくとも同じプロセス空間で動作しているプログラムであれば、全くの無関係ではありません。ですから、因子間の関係を「無視できるものかどうか」を判断し、その判断に従って分割することになります。このような「デシジョンテーブル」の分割は、実際には非常に難易度の高い作業になる場合もあります。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。