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

直交表で制約を扱う Pairwise法との併用で制約の問題を解決

ソフトウェアテストに直交表を活用する上で常に問題となるのが制約(HAYST法では「禁則」という)の扱いです。少し複雑な制約があると人手で扱うことが不可能になります。2-Wayカバレッジが100%でなくてもよいなら人手でも可能ですが、それではテスト漏れが発生してしまいます。直交表を使用したソフトウェアテストを実用的に行なうためには制約の問題を解決することがどうしても必要です。

この直交表における制約の問題はPairwise法を併用することで解決することができます。

ここで例として4水準のL16直交表を取り上げてみます。次のPictMasterのモデルでは4つの値を持つパラメータが5個あり、制約指定が行なわれています。4水準が5個のパラメータにはL16直交表を使用することができます。

5


制約のあるテスト対象に直交表を使用する場合は、PictMasterの原型シートの機能を利用して制約を扱うようにします。原型シートにL16直交表を貼り付け、次に示すように制約に違反する値(赤字の値)を空白に置き換えて、直交表が制約に違反しないようにします。こうしてから原型シートを使用した生成を行なうと直交表の組み合わせを取り込んで、制約のために新たに網羅が必要となる組み合わせが追加されたテストケースが生成されます。

4


4水準のL16直交表の3-Wayカバレッジは26.5%です。以外に少ないと思われるかもしれませんが、この直交表は全く「ゆとり」がないために3-Wayカバレッジはかなり少ない値となります。今回の制約を盛り込んだ生成結果の3-Wayカバレッジは、テストケース数が16件から20件に増加したために35.3%に増加しています。

ここで紹介した方法を適用することで直交表での制約の問題を解決することができます。

なお、生成エンジンにPICTを使用した場合、L16の2水準直交表など「ゆとり」のある直交表(3-Wayカバレッジが100%に近い)では原型シートに貼り付けた直交表の全体を読み込まなくても2-Wayカバレッジが100%となるために、直交表の一部が生成結果に含まれなくなります。この問題は生成エンジンにCIT-BACHを使用した場合は起きません。


※ この方法で生成を行なう場合は生成エンジンにはPICTを使用してください。CIT-BACHではエラーとなります。CIT-BACHはこの問題の修正も含めて今後バージョンアップされる予定です。

※ 3月2日 PICTでの問題点を追記

16水準列番号表をもとに16水準線点図を作成する

前回の「直交表の多水準化 2水準の直交表を4水準・8水準・16水準に変形する」で、16水準の列番号表までは作成することができました。今回は16水準列番号表を使って16水準線点図を作成することにします。

2水準線点図は点で0次元、4水準線点図は直線で1次元、8水準線点図は平面で2次元なので、16水準線点図は立体で3次元になることが分かります。16水準列番号表から16水準線点図は17個あり、1列目、2列目、4列目、8列目の4つの番号(原因子)によって残りの列の番号(交互作用因子)がそれらの排他的論理和として自動的に決まることから、原因子をそれぞれ頂点としてそれらを結ぶ各辺に交互作用因子が現れる三角錐の形状になることが分かります。

以上の割りつけを行なって作成した16水準線点図を次に示します。

1

2

3


16水準線点図を使うと2水準のL256直交表のどの列をまとめると多水準化できるかがわかります。1つの16水準線点図から1つの8水準の直交表が5通りのパターンで得られることが分かります。8水準を1つ取り出すと、残りは2水準だけとなることも分かります。ただし、1つの16水準線点図を4水準5個に分解できることまでは線点図を見ただけでは分かりません。

これらの16水準線点図に描写されている3つの列番号による交互作用を表す直線は実際に存在する直線の一部だけです。実際にはもっと多くの直線が描けるのですが、それを行なうと線点図が複雑になりすぎ、見ても理解できないためにかなりの直線の描写が省略されています。これに関しては別の機会に取り上げる予定です。

直交表の多水準化 2水準の直交表を4水準・8水準・16水準に変形する

HAYST法では2水準の直交表を線点図を使用して4水準、8水準などに多水準化することになっています。線点図は4水準と8水準については公開されていますが16水準については公開されていないようです。ソフトウェアテストでは8水準を超えるパラメータを扱うことはよくあるので、16水準の線点図が公開されていない現状はソフトウェアテストに直交表を使用するうえで大きな障害になっていると思います。

そこで直交表を使用したソフトウェアテストを実用的に行なうことができるように16水準の線点図を作成することにします。その前の段階として16水準の直交表を構成する2水準直交表の列番号を示す「16水準列番号表」を作成します。「列番号表」は私の造語であって本当はどういう名称なのかわかりませんが、今後はこの名称を使うことにします、

L16、L64、L256の2水準直交表の作り方はネット上にありますのでそれを参考に作成してください。例えばJaSST 2005での富士ゼロックス 秋山浩一氏の発表資料「直交表を活用したソフトウェアテストの効率化 -HAYST法の活用-」などが参考になるでしょう。

直交表の作成では排他的論理和を行なう必要がありますが、人手では間違いやすいのでExcelの関数を使うことになります。Excel2013以降では正の整数の排他的論理和を行なえるBITXOR関数を使用することができます。Excel2013よりも前のバージョンのExcelではIF関数を使って0と1に限定した排他的論理和を行なうことができますが、扱う数値が0と1のみではなく整数になるとこの方法では対応できません。列番号表の作成では整数の排他的論理和を行なう必要があるのでそうした排他的論理和ができる次のVBAの関数を定義してそれを使うことにします。

Excel2013よりも前のバージョンのExcelでメニューから「開発」→「Visuai Basic」でVBAを開きます。開発メニューが表示されていない場合はExcelのオプションで開発メニューを表示するようにします。

VBAの画面左上にあるExcelファイルのVBAProjectを右クリックし、「挿入」→「標準モジュール...」を選択し、開いたエディタ画面に次のコードを貼り付けてセーブします。

    Function XORV(A,B)
        XORV = Val(A) XOR Val(B)
    End Function

こうするとワークシートのセルに「=XORV(A1,B1)」などと記入することで整数の排他的論理和を行なうことができるようになります。このファイルを保存する際はマクロ有効ファイル xlsmでセーブします。

4水準の列番号表は次の手順で作成します。

1


上の手順では1行目と2行目は排他的論理和の操作を示していませんが、あえて排他的論理和の操作を行なっても同じ結果となります。この列番号表の各行の3つの番号に対応する2水準のL16直交表の3列をまとめるとそれが4水準の直交表となります。これを線点図にしたものを次に示します。

2


線点図は1種類だけとは限りません。L16直交表の線点図としては次の列番号も可能です。

 1,2,3
 4,10,14
 5,9,12
 6,11,13
 7,8,15

なお、整数の排他的論理和はWindowsの電卓アプリで行なうこともできます。表示メニューから「プログラマ」を選択してXORができるようにします。10進数のままで排他的論理和ができます。

同様に8水準の列番号表は次の手順で作成します。

11


この列番号表の各行の7つの番号に対応する2水準のL64直交表の7列をまとめるとそれが8水準の直交表となります。これを線点図にしたものを次に示します。

4


同様に16水準の列番号表は次の手順で作成します。

1


この列番号表の各行の15個の番号に対応する2水準のL256直交表の15列をまとめるとそれが16水準の直交表となります。この線点図はかなりボリュームがあるので別途掲載することにします。

列番号表を作成する際に決める必要があるのは1、2、4、8列目の番号のみです。残りの列の番号は排他的論理和の結果として自動的に決まります。番号が重複しないようにする点が面倒ですが、時間さえかければ誰でも16水準の線点図を作成できることがお分かりいただけたと思います。


※ 線点図の画像はJaSST 2005での富士ゼロックス 秋山浩一氏の発表資料から引用しています。

PICTがオープンソースで公開される

いささか旧聞に属しますが、MicrosoftのPICTがオープンソース化されて公開されています。

オープンソース化されたPICTのソ-スコードは次のサイトからダウンロードすることができます。

https://github.com/microsoft/pict

ライセンスは MITライセンスです。

バイナリで公開されているPICTのバージョンは3.3ですが、ソースコードで公開されているPICTのバージョンは3.6です。コンパイルしてみたところ、ファイルサイズは219KBでした。

これまではPICTを同梱しての配布はできませんでしたが、ソースコードからコンパイルしたバイナリは自由に配布することができるようになります。

PICTのカスタマイズは難易度が高いですが、こうしたオープンソース化は大歓迎です。

2水準直交表を16水準に変形することは簡単か

2水準直交表から多水準の直交表への変形を行なうDataGenというツールが掲載されているサイトにこういう記述があります。

「問題を変えて、16水準の直交表を17個取り出す方法はすぐ解ける」

とあり、16水準17パラメータの直交表を構成する15列17行の列番号表が掲載されています。

16水準17パラメータの直交表を構成する15列17行の2水準直交表列番号表


そして、「クイズとしてはこの問題は簡単すぎる」とあります。

16水準でパラメータが2つ以上の直交表は2水準のL256直交表から作成します。これまでL64の8水準直交表まではネット上に公開されていましたが、L256の16水準直交表を構成する2水準直交表の列番号の組み合わせが公開されたとことは一度もなかったと思います。

その意味でこの15列17行の列番号一覧表は極めて重要です。これまでプロプライエタリな囲い込みによって秘密にされていた情報が一部とはいえ明らかになった意味にはとても大きいものがあると思います。このことでソフトウェアテストに関心を持つ人たちが受けるメリットには計り知れないものがあるでしょう。

さて、上の15列17行の列番号一覧表ですが、直交表の常で規則性がありそうでありません。「この問題は簡単すぎる」とありますが、ちょっと考えただけでは解けません。

これから何回かに分けて「ソフトウェアテストのための直交表活用」というカテゴリで、直交表をソフトウェアテストに活用するための方法について掲載していく予定です。直交表をソフトウェアテストに活用する方法としてはHAYST法がよく知られていますが、公開されている小出しの情報だけでは実用的なテストには全く不十分です。

私は「DataGen」というツールに触発されていま直交表について学習中です。本ブログではできるだけ詳しく説明を行ない、単に直交表を使う方法だけではなく、直交表が持つ性質にも踏み込んで明らかにしていく予定です。

多額な費用をかけられるなら別ですが、現状で実用的な組み合わせテストを行なえるのは直交表ではなく、Pairwaise法のツールを使用する方法です。直交表がPairwise法より優れているのは、3-wayカバレッジが比較的高い、3-wayカバレッジが均等である、という2点です。特に3-wayカバレッジが均等になる点はPairwise法では原理的に不可能なので、この点については直交表が大きなアドバンテージを持っています。

ただし、直交表方式で安価または無料の実用的なテストツールは現時点では存在しません(DataGenは除外します)。直交表を使ったソフトウェアテストを実用的に行なうことができるかどうかは、直交表方式のツールが既存のツールよりも大幅にリーズナブルまたは無料で手に入ることができるどうかにかかっているといえるでしょう。