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

16水準列番号表を基に16水準・8水準・4水準が混在した多水準のL256直交表を作成する

2水準の直交表を多水準に変形する方法については「直交表の多水準化 2水準の直交表を4水準・8水準・16水準に変形する」で説明しました。今回は、2水準の直交表を多水準に変形する際に使用する列番号表を使って16水準・8水準・4水準が混在した多水準のL256直交表の作成に挑戦してみます。ここで使用する列番号表は16水準の列番号表です。

このL256直交表を作成することは、16水準が6個、8水準が13個、4水準が21個、2水準が11個の列番号表を作成することを意味します。これさえできればこれから多水準のL256直交表を作成することは機械的作業です。とはいえ非常に煩雑な機械的作業であることは間違いありません。

6個の16水準は、16水準列番号表のはじめの6行をそのまま使用します。8水準13個と4水準21個はこれまで説明した2つの原因子とそれらの交互作用因子を求める方法で決定します。

手作業で作成した列番号表を次に示します。

1


残念ながら4水準が19個であと2つ足りません。ここまで作成したところで残っている列番号では、2つの原因子とそれらの交互作用因子に合致する列番号が見つかりませんでした。8水準の列番号を決定する際に、32以降の群と64以降の群からいくつを使用するかが最適な組み合わせに関係するようです。

今回までに説明した方法を用いれば、最適とはいえないまでも、2水準の直交表を任意の多水準の直交表に手作業で変形できることがお分かりいただけたと思います。とはいえ、非常に煩雑な作業であることは間違いありません。

直交表ベースの組み合わせテストにこだわるのであれば、制約の問題も含めてツールを使用しない手作業では実用性に疑問符がつくと言わざるを得ません。さればといって、制約もサポートした直交表ベースのツールは某メーカから販売されていますが、1ライセンスが百万円もします。

直交表ベースの組み合わせテストにこだわる限り、悩みは尽きないようです。

ソフトウェアテストの目的を一言で言い表すとすれば ?

テストの目的を一言で言い表すならば何かと聞かれて人によって様々な答えがありそうです。最もよくありそうなのは「欠陥を検出する」ことだと言えそうです。その他に「品質を保証する」、「ユーザを満足させる」などがあるでしょう。

JSTQBのシラバスでは、テストの目的として次の4つが挙げられています。

1. 欠陥の検出
2. 対象ソフトウェアの品質レベルが充分であることの確認
3. 意思決定のための情報の提示
4. 欠陥の作りこみの防止

このうち、4は実際にソフトウェアを動作させるのではなく、レビューや静的解析のことを指しています。どれもそれなりに説得力がありますが、ソフトウェアテストの目的を「一言で言い表す」ということを考えるとどれもあてはまりません。

私がソフトウェアテストの目的を一言で言い表すならばと聞かれたなら「ソフトウェアの品質を測定する」ことだと答えるでしょう。これは上の2に近いですが同じことではありません。

IEEE 標準規格 610.12-1990 ではソフトウェアテストを次のように定義しています。

「ある特定の条件下でシステムまたはコンポーネントを操作するプロセスであり、その結果を観察または記録して、システムまたはコンポーネントのある側面を評価すること」

ここではソフトウエアのある側面を評価することが目的とされています。「側面」を「品質」と言い換えても大きな違いにはならないと思われます。

Rick Craig と Stefan Jaskiel は、著書の "Systematic Software Testing" (邦訳「体系的ソフトウェアテスト入門」)の中で、ソフトウェアテストを次のように定義しています。

「テストとは、テストされるソフトウェアの品質を測定して改善するために、テストウェアをエンジニアリングし、利用し、保守しながら、同時並行的に進めるライフサイクルプロセスである」

ここでもソフトウエアの品質を測定することが品質の改善とともに目的とされています。

私のいう「ソフトウェアの品質を測定する」は、JSTQBのシラバスの2でいう「対象ソフトウェアの品質レベルが充分であることの確認」とはかなり意味が異なります。「ソフトウェアの品質を測定する」には「品質レベルが充分であることの確認」は含まれません。

ソフトウェアの品質を測定することができていれば、品質レベルが充分であるかどうかの確認はそれ以上テストすることなく自明となります。ソフトウェアの品質を測定することができていれば、意思決定のための情報(ソフトウェア信頼度成長曲線等のデータ)の提示に必要なテストはそれ以上必要ありません。ソフトウェアの品質を測定した結果として、欠陥を検出したり、欠陥の作りこみ防止となります。

シラバスで挙げられている4つのテストの目的はいずれも、「ソフトウェアの品質を測定する」という目的を達成したことの結果として実現されるものです。

それでは「ソフトウェアの品質」とは何でしょうか。SQuBOK策定部会・編集の「ソフトウェア品質知識体系ガイド -SQuBOK Guide-」ではソフトウェア品質の定義について何人もの著名人や諸組織による10通りの定義が時系列で解説されています。これらによるとソフトウェアの品質とは単に要求仕様を満たすだけではなく、顧客やユーザのニーズを満たしている度合いも含まれていると見なされているようです。機能要件のみならず非機能要件も満足して初めて品質が高いと言えることになるのでしょう。

ソフトウェアテストの目的を一言で言い表すとすれば 、「ソフトウェアの品質を測定する」という表現が私には一番しっくりきます。

16水準線点図を4水準5個に解体 2水準255因子のL256直交表を4水準85因子の直交表に変形

前回は5つの8水準線点図を4水準10個に解体してみました。今回は17個の16水準線点図を4水準85個に解体してみましょう。

16水準線点図の1つを次に示します。

1


この線点図から8水準を取り出すと、後は2水準にしか解体できません。8水準×2水準=16水準なので8水準と4水準に解体することはできないことが分かります。では16水準線点図から4水準にはいくつに解体できるでしょうか。4水準×4水準=16水準なので最低でも4水準2個に解体できることはが分かります。

上の16水準線点図を見ると、2つの原因子と1つの交互作用因子からなる4水準線点図の直線が相互に接触しないで取り出せるのは2つまでのようです。

ですがこの16水準線点図には2つの原因子と1つの交互作用因子からなる4水準のごく一部しか表現されていません。存在する4水準をできるだけ多く表現した16水準線点図を次に示します。これでもまだ表現できていない4水準がいくつもあります。

1


多数の4水準線点図が複雑に入り組んでいます。この16水準線点図を5つの4水準線点図に解体することができます。16水準の自由度は15で4水準の自由度は3です。3×5=15なので16水準線点図を5つの4水準線点図に解体すると、2水準は1つも残らないことが分かります。

解体のしかたは「直交表の多水準化 2水準の直交表を4水準・8水準・16水準に変形する」で説明した方法と基本的に同じです。2つの原因子と1つの交互作用因子からなる5つの組み合わせを網羅することです。この方法で見つけた16水準を4水準5個に解体した「16水準列番号表」を次に示します。これは一例であり、別の組み合わせも可能です。4水準5個に解体することにこだわらなければ可能な4水準の組み合わせは膨大な数になります。

3


この表で同じ色の3つの列番号を持つ2水準L256直交表の3列をまとめると4水準となります。1つの16水準で4水準が5個に解体できるので、L256直交表では17×5=85個の4水準に解体できることになります。実際上、4水準のパラメータが85個あるテスト対象はあまり考えにくいのですが、任意の数の16水準と4水準との組み合わせではあり得るかもしれません。

例えば、16水準が8因子で4水準が16因子などといった組み合わせが可能です。この場合でも4水準はまだ29因子余っています。この4水準はもちろん2水準に解体することもできます。

効率のよい線点図の解体 原因子と交互作用因子をもとに5つの8水準線点図を4水準10個に解体する

直交表をテストに使いたいと思っている人の多くは、「線点図の解体」という言葉を知っていることでしょう。例えば、次の図に示すように1つの8水準線点図は1つの4水準と4つの2水準に解体することができます。

1


この解体のしかたでは、例えば5つの8水準線点図は5つの4水準にしか解体できないことになります。しかし、線点図の解体のしかたとしてこの方法は効率がよくありません。別の方法を使うと5つの8水準線点図を10個の4水準に解体することができます。

8水準線点図に表現されている4つの直線(要素)は、それぞれが4水準に解体できますが、4水準に解体できる要素はこれだけではありません。4水準に解体できるすべての要素を表現した8水準線点図を次に示します。

2


この線点図では、7つの列番号による原因子とその排他的論理和の交互作用因子のすべての組み合わせが表現されています。これまでの線点図ではそれが4つでしたが、この線点図では7つになっています。新たに増えたのは列番号2,7,5、4,7,3、3,6,5の3つです。このことで1つの8水準線点図を1つの4水準線点図に解体するしかたが4通りから7通りに増えます。

ここまでは1つの8水準線点図のみに着目してきましたが、効率のよい線点図の解体では異なる線点図にまたがって解体を行ないます。例えばL64直交表で8水準9個の線点図を8水準4個、4水準10個、2水準5個に解体するには次のように行ないます。

9個の8水準線点図のうち、4個はそのまま8水準として使用します。残った5個の8水準線点図の列番号をいったんバラバラに解体し、その列番号の集まりから2つの原因子とその排他的論理和となる交互作用因子の列番号の組み合わせ10個を抽出します。列番号の組み合わせ抽出のしかたは「直交表の多水準化 2水準の直交表を4水準・8水準・16水準に変形する」で説明した方法と基本的に同じです。

この方法で作成した8水準4個、4水準10個、2水準5個の列番号の組み合わせを次に示します。

1


4水準を構成する3つの列番号はそれぞれ2つの原因子とその排他的論理和となる交互作用因子です。このうち、例えば21,38,51は3つの8水準線点図にまたがっています。同様に22,42,60も3つの8水準線点図にまたがっています。そしてこれは8水準線点図の右下と左上を結ぶ直線が、異なる8水準線点図にまたがった形になっています。この異なる線点図にまたがる解体を行なうことで、1つの線点図に閉じた解体よりもかなり多くの多水準に解体することができるようになります。

この方法で4水準に解体した列番号を8水準線点図上に表した図を次に示します。○で囲まれた列番号が4水準に解体した列番号です。


4



この方法は16水準線点図にも適用することができますが、8水準に解体する際に選択する列番号が最適でないと4水準に解体できる数が少なくなります。16水準線点図の解体は8水準線点図の解体よりも難易度が高いです。


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

PictMaster 6.4.3J をリリースしました

PictMaster 6.4.3J をリリースしました。

このバージョンでの変更点は次の通りです。

【バグ修正】
・生成エンジンにPICTを使用して原型シートを使用した生成およびカバレッジを指定した生成を行なった場合、実行環境によっては正しく処理が行なわれない場合があるバグを修正した。
(v6.0からのバグ)

PictMaster 6.4.3J は次のサイトからダウンロードすることができます。

https://osdn.jp/projects/pictmaster/