コンテンツにスキップ

モデルベーステスト

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Luckas-bot (会話 | 投稿記録) による 2012年4月4日 (水) 15:12個人設定で未設定ならUTC)時点の版 (r2.7.1) (ロボットによる 追加: ca:Proves basades en models)であり、現在の版とは大きく異なる場合があります。

モデルベーステスト(Model-besed testing)とは、テストケースの一部または全部を評価対象システムの(通常、機能的側面を)モデル化したものから導出して行うソフトウェアテストの手法である。モデルはテスト対象のシステムの実現すべき動作を表現した抽象的なものである。そのようなモデルから導出されるテストケースはモデルと同程度に抽象化された機能テストであり、直接実行することはできない。そのため、抽象的なテストケースを実行可能なテストケースに変換する必要がある。

モデルからテストを導出する方法はいくつも存在する。ソフトウェアテストは実験的でヒューリスティックスに基づいているため、最善の方法というものは存在しない。一般に全てのテストに関連する設計上の決定をまとめ、パッケージ化する。これを「テスト要求仕様; test requirements」、「テスト目的; test purpose」、場合によっては「ユースケース」と呼ぶ。このパッケージにはテストの中心となるべき部分のモデルに関する情報が含まれ、テスト終了条件が記述される。

モデルベーステストではテストスイートはソースコードからではなくモデルから抽出されるため、一種のブラックボックステストを構成するのが一般的である。見方によってはこれは完全とはいえない。モデルベーステストとソースコードレベルのテストの網羅率測定を組み合わせ、機能的モデルを初期段階のソースコードに基づいて構築するなどのテスト改善方法が考えられる。

複雑なソフトウェアシステムのモデルベーステストは発展途上の分野である。

モデル

特にモデル駆動工学OMGモデル駆動型アーキテクチャでは、テスト対象システムの開発以前に(あるいは並行して)モデルが構築される。このモデルも完全なシステムから構築される。これまでモデル構築はほとんど人間が行っていたが、例えばソースコードからモデルを自動的に生成する試みもなされている。新たなモデルを生成する重要な方法の1つとしてモデル変換言語ドメイン固有言語を使ったモデル変換がある。

アルゴリズム的なテスト導出

モデルベーステストの主な有効性は、自動化の可能性にある。モデルを機械が読み取ることができ、十分に形式的であれば、基本的にテストケースを機械的に抽出することができるはずである。

一般にモデルは有限オートマトン状態遷移系に変換(翻訳)される。このオートマトンはテスト対象システムのとりうる構成を表現している。テストケースを探すには、このオートマトン上で実行可能経路を探す。1つの実行可能経路が1つのテストケースに対応することになる。この手法はモデルが決定的であるか、決定的な形式に変換可能である場合にうまく機能する。

テスト対象システムが非常に複雑であった場合、システムのとりうる状態数が膨大となり、実行可能経路数も膨大となる可能性がある。適切なテストケースを見つけ出すには、例えば特定の証明すべき状況を指定して経路探索の補助とする。テストケースの選択には様々な手法が適用される。

定理証明によるテストケース生成

自動定理証明は本来、論理式の自動的な証明に使われるものであった。モデルベーステストでは、システムを一群の論理式でモデル化してシステムの振る舞いを記述する。テストケースを選択するには、テスト対象システムを記述した論理式群を翻訳したものを同値なクラスで分類する。各クラスは特定のシステムの振る舞いを表現しており、テストケースと対応させることができる。

簡単な分類法として加法標準形を使った手法がある。システムの振る舞いを表す論理式を加法標準形に変換するのである。

木構造を使った分類で、さらに洗練された階層的な分類が可能となる。分類のアルゴリズムをサポートするヒューリスティックも利用できる。例えば限界値分析に基づいたヒューリスティックなどがある。

制約論理プログラミングによるテストケース生成

制約論理プログラミングでは、変数群の制約条件を満足する解を求めることによって特定の制約を満たすテストケースを選択することができる。システムは制約によって記述される。制約条件群は充足可能性問題を解くことで解が得られたり、ガウスの消去法のような数値解析によって解が得られる。制約条件式群を解くことで得られたものを対象システムのテストケースとして使用することができる。

モデル検査によるテストケース生成

本来、モデル検査はモデルが仕様を満足するかを検証する技法として開発された。モデルベーステストに応用する場合、テスト対象システムのモデルとテストしたい属性をモデル検査機に与える。モデル検査機はその属性がモデル上で正しいかどうかを証明する過程で証拠と反例を検出する。証拠となる経路はその属性を満足する。一方、反例となる経路を実行すると、その属性に反した状態となる。これらの経路がテストケースとして使用できる。

記号的実行によるテストケース生成

記号的実行(Symbolic Execution)をモデルベーステストのフレームワークとして利用することがある。これは抽象モデルでの実行経路を追跡する手段となる。基本的にプログラム実行を実際の値を使わずに、変数を記号として扱ってシミュレートする。各実行経路が可能なプログラム実行経路を表し、テストケースとして利用できる。その際に記号に値を設定してインスタンス化する。

関連項目

外部リンク

ツール