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

PictMaster 5.5 をリリースしました。

PictMaster v5.5 をリリースしました。

このバージョンがPictMasterの最終バージョンとなる予定です。 盛り込みたいと考えていた機能はすべて盛り込みました。問題となるバグがなければこのバージョンが最終バージョンとなります。


使用上の制限が多く、使い方が難しい2つの機能、「k-way組み合わせと比較」と「既存テストケースのカバレッジを表示」の機能を削除しました。


おもな変更点は以下の通りです。


【その他】
・「k-way組み合わせと比較」の機能は仕様上の制限が多く、正しい比較ができない場合があり、実用的でないため削除した。
・「既存テストケースのカバレッジを表示」の機能は仕様上の制限が多く、使い方が間違いやすく、実用的でないため削除した。
・ユーザーズマニュアルを組み合わせテストの説明だけに限定したユーザーズガイドに変更した。


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

http://sourceforge.jp/projects/pictmaster/


NISTが公開している組み合わせテストツール ACTS を使ってみる

NIST(米国立標準技術研究所)は、同研究所が開発した組み合わせテストツール ACTS を公開しています。ACTSはフリーソフトとして公開されており、商業用途に使用することが許可されています。この記事では ACTS の主な機能を説明した上で、実際に使用した感想を述べたいと思います。


ACTSはJavaベースで開発されており、GUIバージョンとコマンドプロンプト上で動作するバージョンの2つがあり、1つのパッケージに同梱されています。JavaベースですのでJavaさえインストールされていればどのプラットホームでも動作します。


ACTSの主な機能は次の通りです。


1.6-wayまでの組み合わせを生成可能
2.パラメータの重み付けが可能
3.制約のサポート
4.既存テストケースの流用が可能


値のタイプを明示的に指定する必要があります。タイプには Boolean, Enum, Number, Range があります。


組み合わせ生成アルゴリズムが6種類用意されており、対象モデルの大きさによって最適な生成アルゴリズムが選択可能だとされています。ただし、制約指定が可能な生成アルゴリズムは1つだけです。


PictMasterでいうところの拡張サブモデルに該当する Mixed Strength という機能があり、任意の希望するパラメータについて通常の組み合わせるパラメータ数とは異なるパラメータ組み合わせ数を指定することができます。


制約指定はPICTの関係式に似たスクリプト言語で行ないます。豊富な数値演算子を備えているという特徴があります。PICTとは異なりパラメータとパラメータとの制約は指定できません。PICTの無条件制約に相当する制約指定はありません。


以前に生成したテストケースを流用して新しい値などを追加したテストケースを生成することができます。


期待する結果を自動設定することができます。この機能は制約指定を使用して期待する結果を指定するというものです。制約指定の機能を流用して実現している関係からか、期待する結果を指定する専用の入力画面は用意されていません。


GUIバージョンのACTSをダブルクリックすると次の画面が表示されます。


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


「New System」の画面でSystem nameを入力し、Parameter NameとParameter TypeおよびValueを1つづつ入力します。1つのパラメータの値の入力が完了したら「Add to Table」をクリックし、Saved Parameterのテーブルに登録します。これを全てのパラメータについて繰り返します。全てのパラメータの登録が完了したら「Add System」をクリックし、パラメータを「システム」に登録します。


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


制約の指定が必要な場合は「Modify System」の画面のconstraintsのタブをクリックし、「Constraint Editor」の欄に1つづつ入力し、「Add Constraint」をクリックして登録します。全ての制約の登録が完了したら最後に「Modify System」クリックして「システム」に登録します。パラメータの重み付けを行ないたいときはRelationsのタブをクリックして登録します。


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


「Option Windows」の画面で使用する生成アルゴリズムを選択することができますが、ほとんどの場合デフォルトのIPOGが最良の結果となるようです。この画面では組み合わせるパラメータ数、既存テストケースの流用などを指定することができます。


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


Buildをクリックすると生成が行なわれます。生成結果はCSVファイルとしてエクスポートすることができます。


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


使ってみた感想ですが、使いにくいです。何でここまで使いにくいUIにしたのか、プログラミングしやすさを優先したのかもしれませんが不思議です。一度登録した値や制約指定に修正を加えたい場合、登録を削除して最初から登録し直さなければなりません。


期待する結果を制約指定で行なっているのは良いこととは思えません。この方法では、すべてのテストケースについて制約指定でどれかの期待する結果と組み合わせを行なう必要があります。そうしないと期待する結果が他のパラメータと組み合わされてしまいます。期待する結果の種類が多い場合、そのどれにも該当しないテストケースの期待する結果を指定するためには極めて複雑な制約指定が必要となり、現実的な方法とは思えません。ACTSでは期待する結果の自動指定についてはごく簡単に触れている程度なので実用的に使用できるとはNIST自身思っていないのかもしれません。


エイリアスの機能がないのはかなり不便です。なければテストケース生成後、手作業でエイリアス化することは不可能ではありませんが煩雑な作業となってしまいます。値の重み付けの機能がないのも不便です。PICTと比較して機能的にはかなり限定した機能しか備えていません。それなのに生成アルゴリズムを6種類も用意するなど、実際のテストにはなくてもよいと思える機能には力を入れていてアンバランスな印象を受けます。


日本語を使うとエラーになるので日本語は使えません。すべて英文字でモデルを登録し、生成結果をCSVファイルにエクスポートしてExcelで日本語に置換する手間をかければ使えないことはありませんが...。


NISTを入手するには次のWebページにあるように、勤務先の会社名(学生なら大学名)を明記してNISTの担当者にACTSのコピーを入手したい旨をメールで要請すれば、後日ACTSのダウンロードページのURLが書かれたメールが送られてきます。


http://csrc.nist.gov/groups/SNS/acts/documents/comparison-report.html


なお、今のACTSはβバージョンだそうです。現在も頻繁にバージョンアップが行なわれています。

NISTによる組み合わせテストに関する包括的な文書

米国立標準技術研究所(National Institute of Standards and Technology, NIST)は、民間と政府機関の共同で標準化された規格の開発と評価に直接関与している組織です。NISTが公開している文書に Combinatorial and pairwise testing tutorial があります。




この文書のエグゼクティブ・サマリーには次のように書かれています。




2003年にNISTは、ソフトウェア開発予算の50%から80%をテストが占めており、年間595億ドルのコストがかかっていると推定した広く引用されている報告書を公表しました。すべての可能な入力および実行パスをテストするには、多くの人数と長い時間を要するため莫大な費用がかかり、現実的には不可能です。重要度がそれほど高くないソフトウェアでは、予算の制約から実施できるテストの量が制限され、しばしばシステム障害やセキュリティ上の弱点につながるリスクを増加させています。

 組み合わせテストは、コストを削減し、多くのアプリケーションにおいてテストの効率を高めることができる方法です。このテスト方式の鍵となる重要な洞察は、すべての障害がすべてのパラメータによるものではなく、ほとんどの障害は比較的少数のパラメータ間の相互作用によって引き起こされるということです。NISTなどが集めた経験的なデータでは、相互作用している(6またはより少ない)少数の変数が引き金となってソフトウェア障害が起きることを示唆しています。このことはパラメータの組み合わせテストが非常に効果的な障害検出を提供するかもしれないことを示唆するため、この発見はテストにとって重要な意味合いを持ちます。Pairwise(2-wayの組み合わせ)テストは、低コストで効率的に良い結果を得ることができるためにしばしば用いられますが、システムバグの10%~40%以上を見逃してしまうことがあり、そのためミッションクリティカルなソフトウェアのためには十分ではありません。2-wayを超える組み合わせテストは、主に4-wayから6-wayのようなより高いレベルの相互作用に適したアルゴリズムの不足のために制限されています。しかし、新しいアルゴリズムはPairwiseを超える組み合わせテストを工業用途向けに実用化しました。

 この文書では、組み合わせテストを現実世界のソフトウェアに使用することについての自己完結的なチュートリアルを提供します。それは重要な概念および方法を導入し、組み合わせテストのテストケースを生成する(NISTウェブサイトcsrc.nist.gov/ACTSに関して自由に入手可能な)ソフトウェアツールの使用を説明し、テスト入力の各セットごとに期待される結果を決定するために、ソフトウェアの形式モデルを使用するような先進的な話題について議論します。各トピックには、コストおよび実際的な考慮についてのセクションがあり、資源や資金調達に影響を与えるかもしれないトレードオフと制限事項について説明します。資料は、コンピュータ科学や工学の学生にアクセス可能であり、各トピックをより深く考察した論文への参照の広範囲なセットが含まれています。




このサマリにあるように、この文書ではさまざまな組み合わせテストのトピックに、NISTが開発した組み合わせテストツールであるACTSを適用しています。ACTSは無償で公開されており、希望する人は誰でも自由に使用することができます。ACTSについては、別に改めて取り上げることにします。




この文書の主な内容は次の通りです。




1. はじめに

2. 組み合わせテスト技法

3. 構成テスト

4. 入力パラメータテスト

5. シーケンスカバレッジ配列

6. 組み合わせカバレッジの測定

7. 組み合わせテストとランダムテスト

8. アサーションベースドテストオラクル

9. モデルベースドテストオラクル

10. 障害の原因特定




この文書のユニークな点のひとつに、各章でそれぞれの手法を導入する場合のコストと実践する場合の注意事項が明記されている点です。型通りの説明に終わるのではなく、実際に導入しようとした場合の問題点について考察されており、参考になるでしょう。




各章にある「まとめ」の概要は次の通りです。




組み合わせテスト技法

 経験的データはソフトウェアの障害が比較的少数のパラメータの相互作用によって引き起こされていることを示唆しており、通常ひとつのパラメータまたはふたつのパラメータのペアが障害の原因ではあるが、割合は少ないが3-way、4-wayおよびより高次の相互作用によって引き起こされる障害もあります。適切な相互作用の強さ(2から通常は6まで)を持ったテストを行なうことで高度な保証を得ることができます。必要とされる t-way のテストケース数は、vt log n に比例し、v は値の数、n はパラメータの数です。組み合わせテスト技法は、構成または入力パラメータに適用され、その両方を含む場合もあります。また各テストケースごとに異なる結果となる場合に、期待する結果(テストオラクル)を決定する方法が重要です。




構成テスト

 構成テストは最も一般的な組み合わせテストであり、5つ以上の設定可能な属性がある場合は、効率的な組み合わせテストが可能であり、構成テストでは設定可能な属性は通常少数な値であるので組み合わせテストにとっては理想的です。また制約を考慮したテストケース生成が重要です。




入力パラメータテスト

 リソースによっては最高で 5-way または 6-way の組み合わせテストを行なうことが可能であり、同時に同値分割による適切な抽象化を行なう必要があります。カバレッジの完全さはアプリケーションのリソースとクリティカルさに依存します。




シーケンスカバレッジ配列

 何種類かのイベントの発生順序に依存する障害の問題を扱っています。シーケンスカバレッジ配列は、相互運用性テストでの問題を解決するためにNISTによって開発された組み合わせ手法の新しいアプリケーションであり、イベントのすべての t-way の発生シーケンスを確認する一連のテストです。t 個のイベントのすべての発生順序の組み合わせがテストされます。

 このテストにおいても制約の問題は重要であり、NISTが開発したツールでは制約を指定することができます。




組み合わせカバレッジ

 組み合わせテストにおいては選択された t のレベルで100%になりますが、t+1 あるいは t+2 のカバレッジを測定したいと思うかもしれませんが、これを測定することで、異なるアルゴリズムによって生成された t-way を網羅する配列を選択するのに役立てることができます。

 多くのケースではテストセットのカバレッジを高めるために追加のテストケースを生成することが可能かもしれません。




組み合わせテストとランダムテスト

 既存の研究において、ランダムテストと組み合わせテストとで障害検出効果に違いがあることは示されていません。高度に最適化されたt-way網羅配列は同等サイズのランダムテストよりもt+1、t+2そしてより高い相互作用のテストを含みます。組み合わせテストがランダムテストより一様によいことを報告された分析が示さない一方で、2つのテスト・アプローチを適用するコストが同じである場合、組み合わせテストを選択することを支持します。

 多重障害を検出する可能性は、単独障害を検出する可能性が c = パーセントであるとき、独立した障害の数を m とすると、mc となり、急激に減少します。




アサーションベースドテストオラクル

 アサーションは、オラクル(期待する結果)の問題に対処するために使用する最も簡単かつ効果的なアプローチの一つです。アサーションとは、プログラムの前提として満たされるべき条件を記述し、実行時にそれが満たされていない場合にエラーや例外を発生させたり、メッセージを表示して処理を中断したりする機能です。

 十分に強力なアサーションが埋め込まれている場合、コードはセルフチェックの性質を持つことになります。セルフチェックコードで、自動化による何千ものテストによってより多くの障害が検出される可能性を向上させ、ほとんどの場合に低コストで実行することができます。




モデルベースドテストオラクル

 オラクルの問題はいかなるテスト方法論においても解決されなければななりません。多数のテストケースが生成される徹底的なテストにとっては特に重要です。テスト入力ごとに期待される結果を決定するひとつのアプローチは、シミュレートすることができるか、入力ごとに出力を分析することができるモデルを使うことです。モデル検査は、モデルのために指定された特性が満足されない場合、反例を生成することができるためオラクル問題を解決することができます。

 この章で報告した方法は、コスト効果の高い方法であり、各テストの期待する結果と、完全な組合せのテストスイートを生成するために使用することができます。




障害の原因特定

 ソース・コードが利用可能な場合、失敗の原因を確認する、最良の方法は従来のデバッグ技術を使用することです。純粋なブラックボックステストで、ソース・コードを参照できない場合は、本章で議論されたヒューリスティックス手法は助けになるかもしれません。

 通常、障害の原因には複数の組み合わせがあります。したがって、正確な原因を特定するために追加のテストが必要かもしれません。






この文書で議論されている話題は内容が深く、かつ豊富な事例をもとにしています。NISTのサイトによれば、この文書は2010年10月に公開されて以降、8ヶ月間で10,000回ダウンロードされたそうです。組み合わせテストに関心のある方は一読しておく価値のある文書だと思います。




Combinatorial and pairwise testing tutorial は次のサイトからダウンロードすることができます。




http://csrc.nist.gov/groups/SNS/acts/index.html


PictMaster 5.4 をリリースしました

 このバージョンでは、「カバレッジを表示」、「カバレッジを指定して生成」、「拡張サブモデル」の機能の使い勝手を向上させています。1-wayから6-wayまでの組み合わせを取り扱うことができるようになりました。そのほか細かい多数の改善を盛り込んでいます。
 ユーザーズマニュアルは内容を大幅に見直し、デシジョンテーブルテスト、状態遷移テストのテストケース生成を行う方法の説明を追加しました。

主な変更点は次の通りです。

【機能改善】
・組み合わせるパラメータ数(N)が1~5の範囲内であれば、「カバレッジを指定して生成」が実行できるようにした。この場合、N+1 wayのカバレッジ指定となる。
・組み合わせるパラメータ数(N)が1~5の範囲内であれば、N-wayとN+1-wayのカバレッジを表示できるようにした。
・拡張サブモデルで指定した2つ以上のパラメータについて、3つ以上から拡張サブモデルで指定したパラメータの数までの任意のパラメータ間の組み合わせ数を指定してテストケースを生成できるようにした。
・生成したテストケースで網羅されていない組み合わせを簡単に知ることができるように、任意の組み合わせるパラメータ数を指定して組み合わせを生成し、通常の方法で生成されたテストケースと比較して、テストケースに含まれていない組み合わせを灰色に塗りつぶして表示できるようにした。

【バグ修正】
・拡張サブモデルを指定した場合、パラメータの値が数値ではなく文字であるとVBAのエラーとなる場合があるバグを修正した。

【その他】
・拡張サブモデルで1つのパラメータについてのみ3パラメータ間の組み合わせとする機能は、メリットがなくデメリットが大きいため削除した。
・「実行」ボタンをクリックしたときにモデルファイル a.txt を新規に作成することができなかった場合に表示されるメッセージの文言をより分かりやすい文言に訂正した。
・値の並び欄にカンマ区切りで3つの数値を記入した場合、Excelのエラーマークが表示されることがある問題を修正した。
・ユーザーズマニュアルの内容を全面改訂した。
・その他に細かい改善多数

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

http://sourceforge.jp/projects/pictmaster/

直交表とPairwise法(All-Pair法)の比較 HAYST法とPictMaster

 これまで直交表とPairwise法(All-Pair法)の比較を何回か行なってきましたが、ここで総まとめを行ないたいと思います。

 直交表ベースのテストケース作成は、2水準系直交表を利用するHAYST法によるものとします。HAYST法では専用のツールを使ってテストケースを生成することになっていますが、ここでは手作業でテストケースを作成する場合を取り上げます。HAYST法の専用ツールの開発には莫大な費用がかかるため、専用ツールを開発できる企業はごく限られ、直交表ベースでのテストケース作成はほとんどの場合、手作業によるものと考えられるためです。

Pairwise法(All-Pair法)はPictMasterを使用した場合とします。それでは直交表とPairwise法(All-Pair法)との比較表を以下に示します。

1


有利な手法を黄色で塗りつぶしています。直交表の場合、3因子間網羅率と組み合わせのばらつきの項目で有利です。それ以外の項目ではPictMasterが有利という結果となりました。

・2因子間網羅率100%は確保したい。
・8水準を超える多水準の因子を丸め込まずに扱いたい。
・複雑な制約がある。
・3因子間網羅率を測定したい。
・テストケース数の調節をしたい。
・テストケース作成に長い時間をかけたくない。

こういったことを重視するならPictMasterの使用を推奨します。これらを重視しないなら直交表ベースのテストケース作成がよいでしょう。