はじめに-この特集のねらい
この特集では、ソフトウェアの組み合わせテストについての技法である「オールペア法」と、オールペア法を採用したテストケース作成ツール「PICT」の機能、およびその効果的な使い方を、多くの例を用いて解説していきます。筆者はPICTを実際のテスト業務に1年半以上使用してきました。そこから得られたノウハウも合わせて公開したいと思います。
ソフトウェアはさまざまな因子(パラメータ)の組み合わせにより、その挙動が違ってきます。これらパラメータの組み合わせを総当りで行うことはテスト件数の爆発を招き、実際に行うのは多くの場合、不可能です。どのようにすればテスト件数の爆発を招かずに、しかもテストの質を落とさない組み合わせをテストできるかが重要な課題となっています。
こうした課題を解決するために考え出された効率的な組み合わせテスト技法は、大規模、複雑化するソフトウェアの組み合わせテスト件数を大幅に削減することが可能な技法です。この技法には、直交表と、オールペア法の2つがあります。
この特集ではこのうち、オールペア法を取り上げています。その理由は、直交表を使う方法は単純な組み合わせの場合は問題はありませんが、パラメータの値により組み合わせることができない条件がある場合、扱いが急に難しくなります。これに対してオールペア法を採用した特定のツールでは、そのような場合でも難しさはなく、誰にでも扱えるという特長を備えているからです。
この特長を備えているオールペア法のツールが、MicrosoftのフリーソフトであるPICTです。
組み合わせテストとパラメータ数
パラメータの組み合わせがテスト結果に影響を与える場合がありますが、先にも述べたように、実際のテストでは時間や費用の制約から、そのすべてをテストすることはできないことがよくあります。テストでどのようなパラメータをとりあげ、無数にある組み合わせの中から、どのような組み合わせでテストを行うかが非常に重要となっています。
表1に、ソフトウェアの欠陥がいくつのパラメータの組み合わせで発生したかの例[1]を示します。表の要因数の欄が、関係したパラメータの数を表します。
表1 欠陥に関係したパラメータ数の割合(%)
要因数 | 組込み機器 (医療用) | ブラウザ (Netscape) | サーバ (Apache) | データベース |
1 | 66 | 29 | 42 | 68 |
2 | 31 | 47 | 28 | 25 |
3 | 2 | 19 | 19 | 5 |
4 | 1 | 2 | 7 | 2 |
5 | | 2 | 0 | |
6 | | 1 | 4 | |
表1から、組込み機器(医療用)とデータベースシステムについては、2つまでのパラメータの組み合わせで発生した欠陥が90%以上を占めていることがわかります。一方、ブラウザ(Netscape)とサーバ(Apache)では、これが70%~76%となります。この違いはどこから来るのでしょうか。筆者は、ブラウザとサーバの開発形態がオープンソースということがその理由ではないかと考えています。
次に、筆者らが統合テストを担当したビジネスホンシステムでの実例を表2に示します。ビジネスホンシステムとは、企業のオフィスなどに設置され、アナログ、ISDN、IP外線などの各種回線と数十台のボタン電話機を収容し、顧客のニーズに合わせてさまざまなサービスを提供する構内交換システムのことです。
表2 ビジネスホンシステムでの実例
要因数 | 割合[%] | 累積割合[%] |
1 | 63.7 | 63.7 |
2 | 32.6 | 96.3 |
3 | 3.7 | 100 |
この例からも明らかなように、少なくとも筆者が担当したテストケースについては、ほとんどの欠陥が2つまでのパラメータの組み合わせで発生しています。パラメータの組み合わせを考えるときは、まずは2つのパラメータの組み合わせが全て網羅されるように考慮することが重要であるといえます。
直交表の特徴
効率的な組み合わせテストの技法のひとつである直交表は、数字の入った2次元の配列であり、配列から任意の2つの列を選ぶと値のすべてのペアが同じ回数現れるという特徴があります。
表3は、直交表特有の表現で L4(23) という4行3列で1と2の2つの値からなる直交表です。この表で各列はパラメータを意味し、ある列のある行の数字は、パラメータの値を意味します。
この表が、すべての値のペアを含んでいるか調べて見ましょう。方法は次のとおりです。
- (1) 1列目と2列目に着目し、1と2のすべての組み合わせがあることを確認します。
- (2) 1列目と3列目に着目し、1と2のすべての組み合わせがあることを確認します。
- (3) 2列目と3列目に着目し、1と2のすべての組み合わせがあることを確認します。
すべての値のペアを含んでいることが確認できたと思います。この方法ですべての組み合わせが確認できれば、表3がすべての値のペアを含んでいるということができます。
この方法は、もっと大きな直交表でも同じように適用できます。たとえば表4に示す7列からなる直交表 L8(27) では次のように確認します。
表4 直交表 L8(27) の例
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
2 | 1 | 1 | 1 | 2 | 2 | 2 | 2 |
3 | 1 | 2 | 2 | 1 | 1 | 2 | 2 |
4 | 1 | 2 | 2 | 2 | 2 | 1 | 1 |
5 | 2 | 1 | 2 | 1 | 2 | 1 | 2 |
6 | 2 | 1 | 2 | 2 | 1 | 2 | 1 |
7 | 2 | 2 | 1 | 1 | 2 | 2 | 1 |
8 | 2 | 2 | 1 | 2 | 1 | 1 | 2 |
- (1) 1列目と2列目を確認します。
- (2) 1列目と3列目を確認します。
- :
- (6) 1列目と7列目を確認します。
- (7) 2列目と3列目を確認します。
- (8) 2列目と4列目を確認します。
- :
- (11)2列目と7列目を確認します。
- (12)3列目と4列目を確認します。
- :
- (15)3列目と7列目を確認します。
- :
- (21)6列目と7列目を確認します。
この直交表で任意の2つの列を見ると、同じ値のペアが2回ずつ現れていることがわかります。この同じ値のペアが同一回数現れるという直交表の性質から、テストケースの数はオールペア法に比べて多くなります。
直交表を使った組み合わせテストでは、組み合わせたいパラメータ数と値の数に合わせて適切なサイズの直交表を選び、表の各欄に実際のテスト対象を割り当てます。直交表のサイズの種類は限られており、多くの場合、実際に必要とするサイズより大きなサイズの直交表を使用することになり、このこともテストケース数の増加につながります。
ただし、メリットもあります。直交表の性質から、2パラメータの組み合わせだけでなく、3パラメータの組み合わせについてもある程度カバーされます。可能な組み合わせのうち、どの程度までカバーされるかを網羅率といいます。直交表では3パラメータに渡る網羅率もそれなりに確保されます。これはオールペア法にはないメリットです。
オールペア法の特徴
組み合わせテストのもう1つの技法であるオールペア法(ペアワイズ法ともいう)には、ペアの組み合わせを生成するさまざまな手法があります。大きく分けて、演繹的な手法と帰納的な手法の2つがあります。ここではPICTが採用している帰納的な手法について説明します。
次に示すパラメータ(因子)と値(水準)があったとき、それをもとに表5に示すように可能なすべての値のペアに変換します。ここでA, B, Cはパラメータで、0, 1, 2はそれらのとる値です。
- A → 0, 1
- B → 0, 1
- C → 0, 1, 2
表5 可能なすべてのペアに変換
AB | AC | BC |
00 | 00 | 00 |
01 | 01 | 01 |
10 | 02 | 02 |
11 | 10 | 10 |
| 11 | 11 |
| 12 | 12 |
表5で抽出されたペアをAB列から順次取り出し、ペア構成の組み合わせに割り付けていきます。これをBC列まで繰り返します。割り付けた結果を表6に示します。
表6 ペア構成の割り付け
No. | A | B | C |
1 | 0 | 0 | 0 |
2 | 0 | 1 | 1 |
3 | 1 | 0 | 1 |
4 | 1 | 1 | 0 |
5 | 0 | 0 | 2 |
6 | 1 | 1 | 2 |
割り付けを行う際、できるだけ同じ組み合わせが現れないようにします。たとえば、表5のAC列にある10を割り付ける際、表6の3行目に割り付けず、4行目に割り付けます。3行目に割り付けると、3行目のBC列の組み合わせが1行目のBC列と同じ組み合わせ(00)になるからです。
次に、より大きな表を割り付けてみましょう。パラメータと値は次のとおりです。
- A → 0, 1、2
- B → 0, 1、2
- C → 0, 1, 2
- D → 0, 1, 2
これを可能なすべてのペアに変換したものが表7です。
表7 可能なすべてのペアに変換
No. | AB | AC | AD | BC | BD | CD |
1 | 00 | 00 | 00 | 00 | 00 | 00 |
2 | 01 | 01 | 01 | 01 | 01 | 01 |
3 | 02 | 02 | 02 | 02 | 02 | 02 |
4 | 10 | 10 | 10 | 10 | 10 | 10 |
5 | 11 | 11 | 11 | 11 | 11 | 11 |
6 | 12 | 12 | 12 | 12 | 12 | 12 |
7 | 20 | 20 | 20 | 20 | 20 | 20 |
8 | 21 | 21 | 21 | 21 | 21 | 21 |
9 | 22 | 22 | 22 | 22 | 22 | 22 |
表7で抽出されたペアをAB列から順次取り出し、ペア構成の組み合わせに割り付けていきます。これをCD列まで繰り返します。割り付けた結果を表8に示します。
表8 ペア構成の割り付け
No. | A | B | C | D |
1 | 0 | 0 | 0 | 0 |
2 | 0 | 1 | 1 | 1 |
3 | 0 | 2 | 2 | 2 |
4 | 1 | 0 | 2 | 1 |
5 | 1 | 1 | 0 | 2 |
6 | 1 | 2 | 1 | 0 |
7 | 2 | 0 | 1 | 2 |
8 | 2 | 1 | 2 | 0 |
9 | 2 | 2 | 0 | 1 |
この表の割り付けを行う際は、AC列を割り付ける場合と、BD列を割り付ける場合に、すでに同じ組み合わせとならないように割り付けを行ないます。このように、まず可能なペアに変換してから順番にペア構成の割り付けを行なうと、比較的簡単に最少の組み合わせ数で割り付けることができます。
この表で任意の2つの列を見て見ると、同じ値のペアが1つしか現れていないことがわかります。直交表が同じ値のペアが同一回数現れる性質であるのに対して、オールペア法では同じ値のペアが最低1回現れるという性質を持っています。
直交表とオールペア法の比較
このように、効率的な組み合わせテストを行うには、直交表を利用する方法とオールペア法の2つの方法があります。それぞれの方法には長所と短所があり、どちらを採用すればベストかは、人によって異なるでしょう。ここで、直交表とオールペア法を比較した表を表9に示します。なおオールペア法では、専用ツールのPICTを使用した場合を比較対象としています。
表9 直交表とオールペア法の比較
比較項目 | 直交表 | PICT (オールペア法) |
テストケース数 | 多い | 少ない |
2因子間の網羅率 | 100% | 100% |
3因子間の網羅率 | L8で50% | 少ない |
因子ごとの網羅率指定 | 不可 | 可能 |
禁則処理 | 可能だが複雑 | 容易 |
3因子以上の禁則 | 可能だがかなり複雑 | 容易 |
無効値テスト | 不可 | 可能 |
仕様変更への対応 | 不可 | 可能 |
表9で因子とはパラメータのことです。また禁則処理とは、組み合わせることができないパラメータがある場合、それらの組み合わせを除外する処理のことです。これからの説明では禁則ではなく制約条件という呼び方をします。無効値テストについては今後のPICTの機能説明で説明します。
この表で注目すべきことは、直交表を使う方法に比べて、PICT(オールペア法)では制約条件の指定が容易にできるという点です。組み合わせテストを実務で実用的に使用するには、制約条件の指定が容易にできる必要があります。これは筆者がPICTを業務で使用してきた経験からの実感です。
オールペア法テストツール「PICT」
組み合わせテストのテストケースをオールペア法で生成するツールは、現時点で二十数種類存在します。それらのうちで制約条件をサポートしているツールはごくわずかしかありません。しかもサポートしているツールのうち、いくつかはWebベースで動作するもので、価格もかなり高額です。こうした中、PICTはフリーソフトなので無償で使用することができます。
PICT(Pairwise Independent Combinatorial Testing tool)は、Microsoftが開発したテストツールです。以下のWebサイトからダウンロードすることができます。
PICTはコマンドプロンプト上で動作します。PICTは制約条件の指定に独自のスクリプト言語を用いており、そのことが組み合わせテストの実施に飛躍的な柔軟性を与えています。なお、そのままではPICTは日本語を扱うと文字化けします。まずはダウンロードし、英数字のみで使ってみてください。
次回はPICTの基本的な使い方を説明します。合わせて、日本語が文字化けしないようにする方法についても説明します。