組み合わせテストケース生成ツール 「PictMaster」 とソフトウェアテストの話題 -35ページ目

仕様変更があったとき直交表とPairwise法(All-Pair法)のどちらが柔軟に対応できるか

テストケースを作成した後で仕様変更があり、仕様変更を盛り込んだテストケースに作り直さなくてはならないことがあります。こうした場合に、直交表とPairwise法(All-Pair法)のどちらが柔軟に対応できるかを比較してみましょう。


例によって直交表の場合は2水準系直交表を使用するHAYST法によるものとしますが、「HAYST法のツールを自前で開発して使用しているケースは、ツールの開発費用が莫大となるためにかなり少ないと考えられるため、手作業によるものを対象とします。Pairwise法(All-Pair法)ではいうまでもありませんがPICTとPictMasterを使用しているものとします。


仕様変更時の対応については2005年に開かれたJaSST05での「公開討論会 直交表 VS All-Pair 」において、Pairwise法(All-Pair法)では、仕様変更時にはテストの作り直しとなることが「問題点」とされていました。そしてその「対処法」として、「予備のパラメータを導入しておく」ということが述べられていました。


2005年当時においては、直交表ではテストケースに使わない直交表の列が余るために、この列を変形することで新しいパラメータや値の追加に対応できる点が、Pairwise法(All-Pair法)に対する優位点と見なされてきた経緯があります。しかし、こうした見方はPairwise法(All-Pair法)の優れた組み合わせ生成エンジンPICTの出現によって過去のものとなったと言えるでしょう。


PICT(PictMaster)の「原型シート」の機能を利用することにより、既存のテストケースを流用して新しいパラメータの追加および新しい値の追加を簡単に行なうことができます。さらに言えば、既存のテストケースを「流用」する必要性はそれほどありません。テストケースを作成することに時間がかかっていたころは、既存のテストケースを流用することには充分な必要性がありましたが、PictMasterを使う限り、テストケースの作成はかなり短時間で済んでしまいます。既存のテストケースを流用するよりも、モデルに新しいパラメータや値を追加して新しいテストケースを作り直したほうが速いほどです。


これに対して直交表ではまったく話しが異なります。直交表ベースでテストケースを作成するには、Pairwise法(All-Pair法)に比較して非常に長い時間が必要となるために、気軽に作り直すということができません。どうしても既存のテストケースを流用することになります。ただし、どんなパラメータや値でも追加できるという訳には行きません。テストケース作成に利用した直交表のサイズに収まる範囲での追加になります。直交表のサイズに収まらない仕様変更の場合は、最初から長い時間をかけて作り直しとなります。


手作業で直交表ベースのテストケースを作成しようとする場合、あまりにも煩雑な作業が多く、テストケース作成に多くの時間をとられることで、結局直交表ベースでのテストケース作成をあきらめるケースも多いのではないかと思われます。こうした直交表ベースでテストケースを作成する際の大きな問題は、HAYST法のツールがあれば解決します。


しかしながらHAYST法のツールが無償で公開されることは将来においてもないでしょう。HAYST法の考え方を説明した書籍はありますので、直交表ベースのテストケース作成にこだわっていて、かつ莫大な開発費用を負担できるだけの企業は独自に開発を行なうと思います。

直交表の作成にPictMasterを利用する 制約による2因子網羅率低下の問題を解決

直交表ベースでテストケースを作成する場合の問題の1つとして、モデルが組み合わせできない組み合わせ(制約)を含んでいる場合があります。この場合、制約の関係にある組み合わせは直交表から除外しなければなりません。除外することによって絶妙なバランスを保っていた直交表の直交性が失われてしまいます。その結果として2因子間網羅率100%を確保できなくなります。


そのままでは組み合わせテストとしては不十分なテストとなってしまい、「ペア構成テスト」ではなくなってしまいます。それでも構わないという考え方もあり得るでしょうが、不足した組み合わせは追加するべきだという考え方もあります。


漏れのないテストを実施するためには、不足する2因子間の組み合わせを追加する必要があります。ですが手作業で不足する組み合わせを追加することは簡単ではありません。今回は4水準の因子が5つある次に示す L16直交表で制約のある場合を取り上げてみます。因子の名称はA,B,C,D,Eで水準の名称は0,1,2,3です。


表1.制約のないL16直交表
組み合わせテストケース生成ツール 「PictMaster」 とソフトウェアテストの話題-0


直交表ベースでは制約を表すのに「組み合わせマトリクス表」を使っているようですから、この表を使って制約を表してみましょう。ここではごく単純な1つの制約があるとしています。表で灰色の升目の組み合わせが組わせできない組み合わせです。左側のパラメータの値が制約条件であり、上側のパラメータの値が制約対象となります。


表2.制約を表した組み合わせマトリクス表
組み合わせテストケース生成ツール 「PictMaster」 とソフトウェアテストの話題-1


この組み合わせマトリクス表では、因子Aの水準が0,1,2の場合、因子Bの組み合わせ可能な水準は3だけであることを表しています。制約としてはごく単純なものです。この制約を盛り込んだ L16直交表を次に示します。


表3.制約を盛り込んだ L16直交表
組み合わせテストケース生成ツール 「PictMaster」 とソフトウェアテストの話題-2


ごく単純な制約ですから直交表への盛り込みに難しいことはありません。この直交表で緑色の組み合わせが制約に対応する組み合わせです。この直交表の2因子間網羅率は82.1%です。約18%の2因子間組み合わせが欠落していることになります。


直交表ベースの組み合わせテスト手法として有名なHAYST法では、制約を盛り込んだために欠落した組み合わせについて、テストの必要性の有無を十分検討する必要があるとしています。では今回の直交表で欠落した組み合わせには何があるでしょうか。それはすべての2因子間の組み合わせマトリクス表を作成すれば分かります。この組み合わせマトリクス表を表4に示します。


表4.制約を盛り込んだ L16直交表の2因子間全組み合わせ表
組み合わせテストケース生成ツール 「PictMaster」 とソフトウェアテストの話題-4


この表で薄い灰色の組み合わせが制約によって除外された組み合わせです。この制約を直交表に盛り込んだ結果として欠落した2因子間の組み合わせが茶色で示した組み合わせです。この欠落した組み合わせを直交表に盛り込むことは簡単ではありません。盛り込む場合、因子Bの水準は他の3つの因子C,D,Eの全水準との組み合わせを網羅する必要がありますが人手でそれを行なうことは困難です。テストケース数が大幅に増加してもよいのなら人手で行なうことは可能です。しかしそれは望ましい方法とは言えないでしょう。


HAYST法では2因子間網羅率100%を保証していません。80%程度を確保できればそれでよいという考え方です。こうした考え方でよければ事は簡単です。ですがそれではペア構成テストを実施したことにはなりません。新規機能などリスクが高いテスト対象では、最低限2因子間網羅率100%はどうしても必要だと考えざるを得ません。


それでは制約を盛り込んだ L16直交表で2因子間網羅率100%をできるだけ少ないテストケース数で実現するにはどうすればよいでしょうか。それはPicMasterを利用することで簡単にできます。PictMasterを使った、制約による2因子網羅率低下の問題を解決する手順を次に示します。


.モデルにふさわしい直交表を決定する。
.その直交表に制約を盛り込む。
.PictMasterの原型シートに制約を盛り込んだ直交表を貼り付ける。
.PictMasterのパラメータ欄と値の並び欄に直交表の因子名と水準名を記入する。
.PictMasterの制約表に制約を記入する。
.PictMasterの環境設定フォームで「原型シートを使用」を指定する。
.PictMasterの実行ボタンをクリックする。


上の手順で3の原型シートは、PictMasterのワークシートのすぐ右隣りに新しいワークシートを挿入したものです。このワークシートに制約を盛り込んだ表3の直交表を貼り付けます。


今回の直交表のモデルをPictMasterのパラメータ欄、値の並び欄そして制約表に記入した内容を図1に示します。直交表の因子と水準の名称がPictMasterにそのまま記入されていることが必要です。


組み合わせテストケース生成ツール 「PictMaster」 とソフトウェアテストの話題-3

図1.PictMasterに直交表のモデルを記入した内容


この内容で生成したテストケースを表5に示します。この表で茶色の組み合わせはPictMasterが追加した「欠落した組み合わせ」に相当する部分です。この組み合わせを人の手によって9件のテストケース数増加で追加することはかなり困難です。この組み合わせ追加により2因子間網羅率は100%となりました。


表5.制約の欠落部分を追加した2因子間網羅率100%のテストケース
組み合わせテストケース生成ツール 「PictMaster」 とソフトウェアテストの話題-5


直交表ベースで組み合わせテストケースを作成することはかなり時間のかかる作業です。2因子間網羅率が100%でなくてもよいと割り切っている場合は別ですが、制約がある場合はさらに長い時間が必要となります。こうした場合にPictMasterを利用することでテストケース作成の作業時間をいくらかでも短縮させることができるようになります。


しかし、これには条件があります。今回取り上げた L16直交表のオリジナルの3因子間網羅率は45.5%しかありません。このように3因子間網羅率の低い直交表は同じペアの値の組み合わせは1つしか存在しません。こうした直交表であれば今回紹介した方法で問題はありません。


それに対して同じペアの値の組み合わせが2つ以上含まれる直交表(3因子間網羅率が非常に高い)では、PictMasterで生成された組み合わせの3因子間網羅率が低下することになります。PictMasterは2因子間網羅率100%を確保した時点でそれ以上原型シートを読み込もうとはしなくなるからです。ただし、この場合でも2因子間網羅率100%は確保されていることには変わりありません。


2因子間網羅率100%を確保できていなくて3因子間網羅率が高い方がよいか、それとも3因子間網羅率は低下してもよいが2因子間網羅率100%は確保したいか。どちらかを選択することになります。

PictMasterで直交表の3因子間網羅率を測定する

これまで何度かPictMasterで測定した直交表の3因子間網羅率を公開してきましたが、具体的な測定方法については説明していませんでした。今回はPictMasterで手軽に直交表の3因子間網羅率を測定する具体的な方法を説明します。


今回取り上げる直交表を表1に示します。1行目は因子名としています。4水準の因子が3個、2水準の因子が6個ある L16 の直交表です。この直交表は4水準の因子が2~3個、2水準の因子が1個~6個あるモデルで利用することができます。


表1.3因子間網羅率を測定したい L16 直交表

組み合わせテストケース生成ツール 「PictMaster」 とソフトウェアテストの話題-1


PictMasterで直交表の3因子間網羅率を測定する手順の概要は次の通りです。


1. 3因子間網羅率を測定したい直交表の因子と水準をPictMasterのパラメータ欄と値の並び欄に記入する。
2. PictMasterで実行ボタンをクリックしテストケースの生成を行なう。
3. 生成されたテストケースのファイル a.xls を閉じて削除する。
4. 直交表をExcelのファイル a.xls として保存し、ファイルを開いたままにしておく。
5. PictMasterの環境設定フォームで「既存テストケースのカバレッジを表示」を指定する。
6. PictMasterで実行ボタンをクリックする。


具体的な方法は次の通りです。


1. 直交表の因子に対応するパラメータの名称をPictMasterのパラメータ欄に記入します。記入するパラメータの名称は直交表に記入されている因子の名称と違っていてもかまいません。今回はパラメータの名称として1~9を使用することにします。PictMasterに記入する値の名称も直交表に記入されている水準の名称と違っていてかまいません。今回は値の名称として0~3を使用することにします。直交表の因子数と水準数がPictMasterのパラメータと値に正しく反映されていることが重要です。


2. PictMasterの環境設定フォームで「組み合わせるパラメータ数」に2を指定し、実行ボタンをクリックしていったんテストケースファイル a.xls を生成します。このときPictMasterは組み合わせ生成エンジンPICTへの入力ファイルであるモデルファイル a.txt を作成します。ここでの目的は直交表の因子と水準に正確に対応したモデルファイル a.txt を作成することです。「最小テストケース生成」を行なう必要はありません。


3. ここで生成されたテストケースファイル a.xls は不要なので削除します。


4. テキストファイルから読み込むなどして直交表をExcelで作成し、ファイル名 a.xls でPictMasterがあるフォルダ内に保存して開いたままにしておきます。このときファイルの1行目には因子の名称があるようにします。どんな名称でもかまいません。


5. PictMasterの環境設定フォームで「既存テストケースのカバレッジを表示」を指定します。


6. PictMasterで実行ボタンをクリックします。これで直交表の2因子間網羅率と3因子間網羅率が表示されます。


PICTは、モデルファイル a.txt を入力として2因子間の組み合わせおよび3因子間の組み合わせを100%網羅した結果を出力します。PictMasterは出力された結果をもとに2因子間の全組み合わせ数と3因子間の全組み合わせ数を算出します。その結果と直交表のファイル a.xls の全組み合わせ数を比較し、2因子間網羅率および3因子間網羅率を測定します。


今回の直交表に合わせたPictMasterのモデルを図1に示します。


組み合わせテストケース生成ツール 「PictMaster」 とソフトウェアテストの話題-2

図1.3因子間網羅率を測定したい直交表に合わせたPictMasterのモデル

測定の結果、今回の直交表の3因子間網羅率は72.6%であることが分かりました。


組み合わせテストケース生成ツール 「PictMaster」 とソフトウェアテストの話題-3


直交表で因子の複数の値を同値として水準数に合わせている場合は、PictMasterでそれらの値をエイリアスとして指定しておく必要があります。ダミーの水準についてはPictMaster側では何もする必要はありません。直交表側でダミーとした水準の名称は本来の値の名称と同じでなければなりません。組み合わせできない組み合わせ(制約)を除外している場合は、PictMasterの制約表で同じ指定をしておく必要があります。制約がある直交表はそのままでは2因子間網羅率が100%とはなりません。

テストケース作成に必要な作業を直交表とPairwise法(All-Pair法)で比較する

適用するテスト技法が組み合わせテストの場合、直交表ベースでテストケースを作成するか、Pairwise法(All-Pair法)ベースで作成するかどちらかを選択することになります。どちらのアプローチでもテスト対象にふさわしいパラメータと値を決定する作業は同じだけの工数がかかります。漏れのないテストケースを作成する上でテスト分析に相当するこの作業が最も重要であることは言うまでもありません。


パラメータと値が決定した後の作業は直交表ベースとPairwise法(All-Pair法)ベースととで大きく異なります。ここでは直交表ベースにおいては専用のツールを利用している事例はかなり少ないと思われるため、手作業で行なう場合を取り上げます。Pairwise法(All-Pair法)ベースでは手作業でテストケースを作成することはほとんど不可能であるため、専用ツールの利用は必須事項です。ここではPictMasterを利用することにします。


Pairwise法(All-Pair法)ベースの場合では、この後の作業手順は次の通りとなります。


. パラメータと値をツールに入力する。
. 同値と見なせる値があればツールで指定する。
. 値の重み付けが必要であればツールで指定する。
. 制約があればツールで指定する。
. ツールでテストケースを生成する。


以上の作業は機械的に行なうことができ、テスト分析と比較してかなり少ない時間で済みます。


直交表ベースでの作業手順は次の通りとなります。


. モデル(パラメータと値)に合う直交表の大きさを決定する。
. モデルに合う直交表がない場合、既存の直交表を変形してモデルに合う直交表を作成する。
. 値の数に比較して直交表の水準数が不足する場合、線点図を用いて多水準の直交表に変形する。
. 直交表の水準数と値の数が合わない場合、ダミーの値を追加するか、複数の値を1つの値にまとめる
. 制約があればそれを直交表に入れ込む。


上の手順で1と2は最も値の数が多いパラメータと次に値の数が多いパラメータのそれぞれの値の数を掛け合わせた値が最も小さな直交表のサイズになります。ただし、モデルによっては最小サイズの直交表では収まりきらない場合があります。これは値の数が多いパラメータが比較的多く存在するモデルで発生します。この場合は自由度を用いた見積もりを行ない、より大きなサイズの直交表を採用することになります。2水準系の直交表を利用するならば、サイズは4,8,16,32…と2のべき乗で大きくなります


手順3では2水準系の直交表であれば線点図を用いることで値の数に収まるだけの水準数を持つ直交表に変形することができます。この場合も水準数は2,4,8,16と2のべき乗の数になります。8個を超える値が2つ以上存在するモデルではL256の直交表が必要となります。2水準系の直交表は変形がしやすいという利点がありますが、値の数が多いモデルではテストケース数が多くなりすぎてしまうという問題があります。


手順4では手順3までで作成した直交表を利用するにあたって、パラメータの値と直交表の水準数が異なる場合に、直交表の水準数にパラメータの値を当てはめる作業を行ないます。モデルと直交表がぴったり一致するケースはほとんどないため、この作業は必ず行なう必要があると考えた方がよいでしょう。直交表の水準数が多い場合は不足する水準にダミーの値を割り付けます。この際に、特に重要と考えられる値をダミーの値として使用することで、他の値よりも多くの組み合わせとすることができます。逆に直交表の水準が少ない場合はパラメータの値の一部を同値と見なして1つの値として直交表に割り付けます。割り付け終ったあとで元の複数の値に戻します。


同値分割を行なうこと自体、もともと同値とみなせる値であるならば何も問題はありません。問題は同値でないのに強引に同値としてしまう場合があり得るという点です。ここでより水準数の大きな直交表に変形すればそうした問題は起きないのですが、たとえば値の数が5個の場合、4水準では足りないので次はその2倍の8水準にしなければなりません。このためにテストケース数が2倍になってしまうような場合、テスト工数の増加を恐れて無理に同値分割を行ない、4水準に納めるといったことが無いとは言い切れません。


組み合わせることのできない組み合わせ(制約)がある場合、手順5で制約の関係にあるパラメータの組み合わせマトリクス表を作成し、直交表からその組み合わせを除外します。これを行なうことで直交性が失われ、2-Wayカバレッジ100%を確保できなくなります。Pairwise法(All-Pair法)では、制約を実現したうえでペアの組み合わせが生成されるため、制約があるからといって2-Wayカバレッジ100%を確保できなくなるということにはなりません。Pairwise法(All-Pair法)ではツールによって制約の関係にある組み合わせは自動で除外することができますが、直交表ベースでは手作業で行わなければなりません。単純な制約なら問題はありませんが複雑な制約の場合、手作業では煩雑すぎて手に負えないという事態に陥る可能性があります。


これらの直交表ベースの手順を完了するには、Pairwise法(All-Pair法)ベースと比較しておおざっぱにですが数倍程度は時間がかかると考えられます。直交表のメリットとして高い3-Wayカバレッジを確保できるとされていますが、2-Wayカバレッジ100%を確保できない場合はいくら3-wayカバレッジが高いと言っても組み合わせテストの基本である「ペア構成テスト」ができていないのですからあまり意味があるとは思えません。


Pairwise法(All-Pair法)ベースではモデルの特性に合わせて値の重み付けや同値分割(エイリアス化)を行ないます。ここには何の制限も存在しません。自由自在です。しかし直交表ベースではどうしても「直交表にモデルを当てはめる」という傾向にならざるを得ません。直交表の水準が余ったから値の重み付けを行なう直交表の水準が足りないから同値分割を行なう。テスト対象を確実にかつ効率よくテストする上での必要に迫られて値の重み付けや同値分割を行なうのではなく、直交表の都合に合わせて値の重み付けや同値分割を行なうといったことにもなりかねません。


もともと直交表は実験計画法で利用されてきました。それをソフトウェアテストに「流用」した訳です。実験計画法が扱う対象の水準は2つの場合が多いという特徴があります。ソフトウェアテストのように多水準の因子が多数存在するといった使い方はまずしません。また実験計画法での直交表の使い方には水準が余った場合にダミーの水準を使うということはありますが、水準が足りない場合に同値と見なして1つとして扱うという使い方はしません。そして制約という概念も実験計画法の直交表には存在しません。


こうした事情があるため、直交表は実験計画法で盛んに利用されてきました。実験計画法での直交表の利用は理想的です。ではソフトウェアテストに導入した直交表の使い方はどうでしょうか。実験計画法では無理なく使えても、ソフトウェアテストでは話が違います。多水準の値がいくつも存在しますし、直交表の水準では足りないといったことが頻繁に起こります。実験計画法では存在しない「制約」が存在します。実験計画法で利用されてきた直交表をソフトウェアテストに導入したために、これまで述べた様々な弊害が生まれたことは否定できません。


とはいえ、直交表を使った組み合わせテストは3パラメータ間の組み合わせが均等に現れる3-Wayカバレッジが高いといった特徴があります。これはPairwise法(All-Pair法)にはない長所です。テストケース作成に時間がかかる、テストケース数が増加するなどといった点を問題とせず、モデルと直交表が無理なくマッチしているなら、直交表ベースでテストケースを作成することはよいことだと思います。その他に、テスト結果がOK/NGの2値では判定できず、出力レベルといったような連続値で表わされる場合は、結果に影響を与える交互作用やをSN比を調べることができる直交表によるテストが適しています。


総合テストにおける組み合わせテストは「グレーボックステスト」で行なう

大規模な総合テストでは、テストチームと設計チームが分かれている形態がほとんどだと思います。ソフトウェアの規模が大きくなると、設計チームだけで総合テストを行なうには限界があります。そのような形態では、同じチーム内でテストとデバッグの両方を行なわなければならず、担当者がデバッグに追われてテストまで手が回らないといった事態が起きてしまいがちです。


テストをスムーズに進める上で、設計チームから独立したテストチームを設けることは、大規模なソフトウェア開発では当然と言えます。独立したテストチームの存在には、効果的なテストを実施する上でもう1つのメリットがあります。設計チームがテストを行なう場合、バグを見つけようとするよりも、仕様通りに動作することを確認しようとする、といった姿勢になりがちです。その点、設計チームから独立したテストチームでは、仕様通りに動作することを確認することにとどまらず、まだ見つかっていないバグを見つけ出そうとする強い意欲があります。言ってみればテストチームはバグを見つけるのが仕事です。ソフトウェアの構成を知らないので、設計者とは異なる観点からテストを行なうことができるため、多くのバグを見つけ出せる可能性があります。


しかし、テストチームがソフトウェアの構成を知らないということにはデメリットもあります。ソフトウェアの構成を知らずに行なうテストを「ブラックボックステスト」と呼びますが、独立したテストチームが行なう総合テストの多くはこのブラックボックステストに該当します。ブラックボックステストでは、ソフトウェアについての知識がないために、往々にして「無駄なテスト」を行ないがちです。ソフトウェアの構成を知っている設計者なら、ソフトウェアの構成から見て無駄なテストか意味のあるテストかを識別することができますが、テスト担当者にはそれが分かりません。例えば、ソフトウェア構成上、同値と見なせるのに、すべてテストを行なってしまうといったことが起こり得ます。その逆に、ソフトウェア構成上、同値ではないのに同値と見なしてテスト件数を抑えようとするといったことも起こり得ます。


ここでいう「ソフトウェの構成」とは、ソフトウェの基本的な構成のことであり、個々の細かい構成についてではありません。ソフトウェの基本構成上、あり得ないことを設計者は除外することができますし、あり得ることは対象に含めることができます。こうしたことに関する知識をテストチームが共有することで、より効果的なテストを行なうことができるようになります。


テスト設計の最初に「テスト分析」を行ないますが、これはテスト対象をどのような観点からテストするかという、テストの観点を決めることです。このテストの観点を決める際に、設計担当者を含めてレビューを実施することで、無駄なテストを排除し、必要なテストの漏れを防ぐことができます。このようにテストチームのテスト分析に、設計担当者の知識を取り込んで実施するテストを「グレーボックステスト」と言います。


グレーボックステストは、総合テストにおける組み合わせテストに適用すると最も効果があります。基本的なソフトウェア構成に関する知識が全くない場合、理屈の上では考えられる限りの要因を網羅した組み合わせテストを実施しなければなりません。もちろんこんなことは不可能ですから、まあこんなところだろうといった「あいまいな基準」で組み合わせに取り上げる要因を決めることになります。こうした場合に、ソフトウェアの基本的な構成の上から、意味のない組み合わせを排除し、必要な組み合わせを取り入れるようにするためには、どうしても設計者の知識が欠かせません。テストの観点レビューに設計者が参加することで、効果的な組み合わせテストを実施することができるようになります。