(57)【特許請求の範囲】
【請求項１】
システムの動作検証試験の仕様を作成する試験仕様作成装置であり、
システムの仕様を表すシステム仕様情報であって、そのシステムで使用される複数の変数と、そのシステムの機能を表す操作と、前記操作を実行するための条件とが定義されたシステム仕様情報を入力するシステム仕様情報入力部と、
前記システム仕様情報入力部が入力したシステム仕様情報に定義された前記条件に基づき、前記複数の変数の各変数が取り得る値を特定する変数値特定部と、
前記変数値特定部が特定した前記各変数の値の組合せを示す状態プロパティのうち所定の状態プロパティから順に、その状態プロパティにおいて実行可能な操作のうちのいずれかの操作を実行することにより、前記状態プロパティを遷移させることを繰り返す実行部と、
前記実行部が実行した操作を識別する操作識別情報と、前記操作を実行することにより遷移した遷移先の状態プロパティを識別するプロパティ識別情報との組をエントリとして記憶装置に記憶するパターン記憶部と、
前記パターン記憶部が記憶しようとする新エントリが、前記パターン記憶部が既に記憶した既エントリと等価であるか否かを判定する照合部と、
前記所定の状態プロパティから、前記照合部が等価であると判定した前記新エントリのプロパティ識別情報が示す状態プロパティに遷移するまでに前記実行部が実行した一連の操作を、１つの試験項目として生成する試験項目生成部と
を備えることを特徴とする試験仕様作成装置。
【請求項２】
前記照合部は、新エントリが既エントリと等価であると判定した場合、前記新エントリから順に、前記パターン記憶部がそのエントリの前に記憶した派生元のエントリを辿り、そのエントリのプロパティ識別情報が示す状態プロパティにおいて、実行されていない実行可能な操作である未実行操作を検索し、
前記実行部は、前記照合部が検索した未実行操作を実行することにより状態プロパティを遷移させるとともに、遷移した先の状態プロパティにおける実行可能な操作のうちいずれかの操作を実行することにより、状態プロパティを遷移させることを繰り返し、
前記パターン記憶部は、前記実行部が操作を実行する度に、前記実行部が実行した操作を識別する操作識別情報と、前記操作を実行したことにより遷移した状態プロパティを識別するプロパティ識別情報との組をエントリとして記憶し、
前記照合部は、前記パターン記憶部が記憶しようとする新エントリが、前記パターン記憶部が既に記憶した既エントリと等価であるか否かを判定し、
前記試験項目生成部は、前記所定の状態プロパティから、前記未実行操作が検索された状態プロパティに遷移するまでに前記実行部が実行した一連の操作と、前記未実行操作と、前記未実行操作が実行されることにより遷移した遷移先の状態プロパティから前記照合部が等価であると判定した前記新エントリのプロパティ識別情報が示す状態プロパティに遷移するまでに前記実行部が実行した一連の操作とを、１つの試験項目として生成する
ことを特徴とする請求項１に記載の試験仕様作成装置。
【請求項３】
前記試験仕様作成装置は、さらに、
前記照合部が一致しないと判定した場合に、前記パターン記憶部が記憶した既エントリから前記新エントリとの間に所定の条件を満たす既エントリを抽出して、前記新エントリと抽出した既エントリとを表示装置に表示して、表示した新エントリと既エントリとを等価であるとみなすか否かをユーザに入力させるユーザ入力部
を備え、
前記試験項目生成部は、前記ユーザ入力部が表示した新エントリと既エントリとを等価であるとみなすと入力された場合、前記所定の状態プロパティから、前記ユーザ入力部が表示した前記新エントリのプロパティ識別情報が示す状態プロパティに遷移するまでに前記実行部が実行した一連の操作を、試験項目の１つとして生成する
ことを特徴とする請求項１又は２に記載の試験仕様作成装置。
【請求項４】
前記ユーザ入力部は、前記新エントリの操作識別情報が示す操作と、既エントリの操作識別情報が示す操作とが、引数のみ異なる場合には、前記新エントリと抽出した既エントリとを表示して、表示した新エントリと既エントリとを等価であるとみなすか否かをユーザに入力させる
ことを特徴とする請求項３に記載の試験仕様作成装置。
【請求項５】
前記ユーザ入力部は、前記新エントリのプロパティ識別情報が示す状態プロパティと、既エントリのプロパティ識別情報が示す状態プロパティとが、所定の変数の値のみ異なる場合には、前記新エントリと抽出した既エントリとを表示して、表示した新エントリと既エントリとを等価であるとみなすか否かをユーザに入力させる
ことを特徴とする請求項３に記載の試験仕様作成装置。
【請求項６】
前記試験仕様作成装置は、さらに、
前記ユーザ入力部が表示した新エントリと既エントリとを等価であるとみなすと入力された場合、前記ユーザ入力部が表示した新エントリと既エントリとの間の関係を正マッチングルールとして記憶装置に記憶するマッチングルール記憶部
を備え、
前記照合部は、前記新エントリと前記既エントリとが、前記マッチングルール記憶部が記憶した正マッチングルールに示す関係である場合に、前記新エントリと前記既エントリとを等価であると判定する
ことを特徴とする請求項３から５までのいずれかに記載の試験仕様作成装置。
【請求項７】
前記試験仕様作成装置は、さらに、
前記ユーザ入力部が表示した新エントリと既エントリとを等価であるとみなさないと入力された場合、前記ユーザ入力部が表示した新エントリと既エントリとの間の関係を負マッチングルールとして記憶装置に記憶するマッチングルール記憶部
を備え、
前記ユーザ入力部は、前記新エントリと、前記マッチングルール記憶部が記憶した負マッチングルールに示す関係である既エントリは、表示装置に表示する対象から除外する
ことを特徴とする請求項３から５までのいずれかに記載の試験仕様作成装置。
【請求項８】
前記試験仕様作成装置は、さらに、
マッチングルールを含む試験仕様の作成条件を示すテストプロパティをユーザに入力させるテストプロパティ入力部
を備え、
前記マッチングルール記憶部は、前記テストプロパティ入力部が入力させたテストプロパティに含まれるマッチングルールを記憶する
ことを特徴とする請求項６又は７に記載の試験仕様作成装置。
【請求項９】
前記パターン記憶部は、前記実行部が操作を実行する度に、前記実行部が実行した操作を識別する操作識別情報と、前記操作を実行したことにより遷移した状態プロパティを識別するプロパティ識別情報との組であるエントリとともに、そのエントリの前に記憶した派生元のエントリを示す派生元情報を記憶し、
前記試験項目生成部は、前記パターン記憶部が記憶したエントリを、前記照合部が等価であると判定した前記新エントリから順に前記派生元情報が示すエントリを抽出して、抽出した一連のエントリの操作識別情報が示す操作を１つの試験項目として生成する
ことを特徴とする請求項１から８までのいずれかに記載の試験仕様作成装置。
【請求項１０】
前記試験項目生成部は、前記パターン記憶部が新エントリを記憶する度に、その新エントリにおける操作識別情報が示す操作を操作履歴として記憶しておき、前記照合部が等価であると判定した前記新エントリの操作識別情報が示す操作までに操作履歴として記憶した一連の操作を１つの試験項目として生成する
ことを特徴とする請求項１から８までのいずれかに記載の試験仕様作成装置。
【請求項１１】
システムの動作検証試験の仕様を作成する試験仕様作成方法であり、
入力装置が、システムの仕様を表すシステム仕様情報であって、そのシステムで使用される複数の変数と、そのシステムの機能を表す操作と、前記操作を実行するための条件とが定義されたシステム仕様情報を入力するシステム仕様情報入力ステップと、
処理装置が、前記システム仕様情報入力ステップで入力したシステム仕様情報に定義された前記条件に基づき、前記複数の変数の各変数が取り得る値を特定する変数値特定ステップと、
処理装置が、前記変数値特定ステップで特定した前記各変数の値の組合せを示す状態プロパティのうち所定の状態プロパティから順に、その状態プロパティにおいて実行可能な操作のうちのいずれかの操作を実行することにより、前記状態プロパティを遷移させることを繰り返す実行ステップと、
記憶装置が、前記実行ステップで実行した操作を識別する操作識別情報と、前記操作を実行することにより遷移した遷移先の状態プロパティを識別するプロパティ識別情報との組をエントリとして記憶するパターン記憶ステップと、
処理装置が、前記パターン記憶ステップで記憶しようとする新エントリが、前記パターン記憶ステップで既に記憶した既エントリと等価であるか否かを判定する照合ステップと、
処理装置が、前記所定の状態プロパティから、前記照合ステップで等価であると判定した前記新エントリのプロパティ識別情報が示す状態プロパティに遷移するまでに前記実行ステップで実行した一連の操作を、１つの試験項目として生成する試験項目生成ステップと
を備えることを特徴とする試験仕様作成方法。
【請求項１２】
システムの動作検証試験の仕様を作成する試験仕様作成プログラムであり、
システムの仕様を表すシステム仕様情報であって、そのシステムで使用される複数の変数と、そのシステムの機能を表す操作と、前記操作を実行するための条件とが定義されたシステム仕様情報を入力するシステム仕様情報入力処理と、
前記システム仕様情報入力処理で入力したシステム仕様情報に定義された前記条件に基づき、前記複数の変数の各変数が取り得る値を特定する変数値特定処理と、
前記変数値特定処理で特定した前記各変数の値の組合せを示す状態プロパティのうち所定の状態プロパティから順に、その状態プロパティにおいて実行可能な操作のうちのいずれかの操作を実行することにより、前記状態プロパティを遷移させることを繰り返す実行処理と、
前記実行処理で実行した操作を識別する操作識別情報と、前記操作を実行することにより遷移した遷移先の状態プロパティを識別するプロパティ識別情報との組をエントリとして記憶するパターン記憶処理と、
前記パターン記憶処理で記憶しようとする新エントリが、前記パターン記憶処理で既に記憶した既エントリと等価であるか否かを判定する照合処理と、
前記所定の状態プロパティから、前記照合処理で等価であると判定した前記新エントリのプロパティ識別情報が示す状態プロパティに遷移するまでに前記実行処理で実行した一連の操作を、１つの試験項目として生成する試験項目生成処理と
をコンピュータに実行させることを特徴とする試験仕様作成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアシステムの設計でその機能的仕様の妥当性を確認するための動作検証試験の試験項目を生成する技術に関する。
【背景技術】
【０００２】
プログラムの動作試験を行う際、試験項目の抽出は重要である。設計者が想定していなかった処理に、システムが危険な状態に陥るような不具合が潜んでいる可能性がある。通常、少ない試験項目で多くの不具合を発見できるよう、命令網羅、条件網羅、分岐網羅、変数の境界値といった周知の基準を利用して試験項目を作成する方法が取られる。
【０００３】
特許文献１には、プログラム中の各メソッドの前後において本来その箇所で満たされているべき条件の真偽を都度判定することにより、不具合の原因となるメソッドの箇所を自動特定する方法についての記載がある。
【０００４】
また、システム開発の後半で発見される不具合は、開発の手戻りが発生し、その不具合の修正に大きなコストがかかる。そのため、設計段階で要求仕様や機能仕様に潜む不具合を検出することを目的とし、設計に形式的手法または準形式的手法が取られることがある。
形式的手法とは、数学に基づく厳密な論理体系で定義された言語を用いて仕様を記述する手法である。形式的手法には、ＩＳＯ／ＩＥＣ１３８１７−１で標準化されている言語ＶＤＭ−ＳＬ（Ｖｉｅｎｎａ  Ｄｅｖｅｌｏｐｍｅｎｔ  Ｍｅｔｈｏｄ−Ｓｐｅｃｉｆｉｃａｔｉｏｎ  Ｌａｎｇｕａｇｅ）を用いたＶＤＭや、Ｂメソッドと呼ばれる手法等がある。
また、準形式的手法とは、形式的手法に準ずるものの、数学的厳密性が若干損なわれた手法である。準形式的手法には、数学的厳密性が若干損なわれる代わりにモジュールの相関関係や処理シーケンス等をグラフィカルに表現するＵＭＬ（Ｕｎｉｆｉｅｄ  Ｍｏｄｅｌｉｎｇ  Ｌａｎｇｕａｇｅ）等がある。
ＶＤＭやＢメソッド、またＵＭＬの拡張であるｅＵＭＬ（Ｅｘｅｃｕｔａｂｌｅ  ＵＭＬ）は、記述したモデルを専用のツールを用いて動作させることができ、モデルの挙動を確認することができる。その際、人の手で関数を呼び出したり、あるいは関数呼び出しを予め試験プログラムとして記述しツールに入力したりする手法が取られている。
【０００５】
特許文献２には、ＵＭＬのユースケース図およびＶＤＭ−ＳＬで記述されたモデルから得られる情報を用いて要求仕様を用意し、そこから利用者が要求する網羅率を実現するテスト仕様を自動で生成する技術についての記載がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００８−２１００５９号公報
【特許文献２】特開２００８−２９３３８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従来、ＶＤＭ−ＳＬやＢメソッド等を用いた形式モデルの動作検証を行う際には、専用ツールで人の手から関数を呼び出したり、あるいは一連の関数の呼び出しを予め試験プログラムとして記述しツールに入力したりする必要があった。しかしこの方法では、試験内容の偏りや漏れ等が発生する可能性があり、また人間側の負担も大きいという課題がある。
【０００８】
また、特許文献１に記載された技術は、ある処理を実行するプログラム中に存在する不具合の箇所を自動で特定する方法である。したがって、特許文献１に記載された技術では、プログラムの提供する各機能（メソッド）の妥当性を検証するためにはどのような処理系列を試すのが適当かといういわゆるテストケースを生成することはできない。
【０００９】
また、特許文献２に記載された技術では、試験仕様を作成する元情報となる要求仕様にイベント間の従属関係（イベントフロー）を記述するため、検証対象となるイベントフローを記述したユースケース図が必要になる。
【００１０】
本発明は、形式モデル等のシステム仕様情報から試験仕様を自動的に生成することを目的とする。
【課題を解決するための手段】
【００１１】
この発明に係る試験仕様作成装置は、
システムの動作検証試験の仕様を作成する試験仕様作成装置であり、
システムの仕様を表すシステム仕様情報であって、そのシステムで使用される複数の変数と、そのシステムの機能を表す操作と、前記操作を実行するための条件とが定義されたシステム仕様情報を入力するシステム仕様情報入力部と、
前記システム仕様情報入力部が入力したシステム仕様情報に定義された前記条件に基づき、前記複数の変数の各変数が取り得る値を特定する変数値特定部と、
前記変数値特定部が特定した前記各変数の値の組合せを示す状態プロパティのうち所定の状態プロパティから順に、その状態プロパティにおいて実行可能な操作のうちのいずれかの操作を実行することにより、前記状態プロパティを遷移させることを繰り返す実行部と、
前記実行部が実行した操作を識別する操作識別情報と、前記操作を実行することにより遷移した遷移先の状態プロパティを識別するプロパティ識別情報との組をエントリとして記憶装置に記憶するパターン記憶部と、
前記パターン記憶部が記憶しようとする新エントリが、前記パターン記憶部が既に記憶した既エントリと等価であるか否かを判定する照合部と、
前記所定の状態プロパティから、前記照合部が等価であると判定した前記新エントリのプロパティ識別情報が示す状態プロパティに遷移するまでに前記実行部が実行した一連の操作を、１つの試験項目として生成する試験項目生成部と
を備えることを特徴とする。
【発明の効果】
【００１２】
本発明に係る試験仕様作成装置によれば、システムの仕様情報から試験項目を自動生成することが可能であり、試験仕様作成負荷を軽減することができる。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１に係る試験仕様作成装置１００の機能を示す機能ブロック図。
【図２】試験仕様作成装置１００の動作を示すフローチャート。
【図３】最終的に出力される試験仕様情報２０における状態プロパティの遷移図。
【図４】実行可能操作群記憶部１６２を示す図。
【図５】パターンテーブル１６５を示す図。
【図６】図５に示すパターンテーブル１６５の項番号を派生順に木構造にした図。
【図７】図５に示すパターンテーブル１６５から抽出された全試験項目を示す図。
【図８】照合部１４０の詳細処理を示すフローチャート。
【図９】実施の形態２に係る試験仕様作成装置１００の機能を示す機能ブロック図。
【図１０】実施の形態３に係る試験仕様作成装置１００の機能を示す機能ブロック図。
【図１１】実施の形態３に係るパターンテーブル１６５を示す図。
【図１２】実行操作履歴記憶部１６６へ実行操作履歴が登録される過程を簡単に示す図。
【図１３】実行可能操作群記憶部１６２を示す図。
【図１４】試験仕様作成装置１００のハードウェア構成の一例を示す図。
【発明を実施するための形態】
【００１４】
以下、図に基づき、発明の実施の形態を説明する。
以下の説明において、処理装置は後述するＣＰＵ９１１等である。記憶部１６０は後述するＲＯＭ９１３、ＲＡＭ９１４、磁気ディスク９２０等の記憶装置である。入力装置は後述するキーボード９０２、マウス９０３等である。表示装置は後述するＬＣＤ９０１等である。つまり、処理装置、記憶部１６０、入力装置、表示装置はハードウェアである。
【００１５】
実施の形態１．
実施の形態１では、システムの仕様を形式的手法で表した形式モデル１０（システム仕様情報）を入力として、試験項目を示す試験仕様情報２０を出力する試験仕様作成装置１００について説明する。
【００１６】
図１は、実施の形態１に係る試験仕様作成装置１００の機能を示す機能ブロック図である。
図２は、試験仕様作成装置１００の動作を示すフローチャートである。
【００１７】
図１に示すように、試験仕様作成装置１００は、ＧＵＩ入出力部１１０、モデル構造解析部１２０（変数値特定部）、実行部１３０、照合部１４０、実行操作系列生成部１５０（試験項目生成部）、記憶部１６０を備える。
ＧＵＩ入出力部１１０は、システム仕様情報入力部１１１、ユーザ入力部１１２、試験項目出力部１１３を備える。また、実行部１３０は、状態プロパティ特定部１３１、実行可能操作特定部１３２を備える。また、記憶部１６０は、実行環境データ記憶部１６１、実行可能操作群記憶部１６２、バッファ１６３、マッチングルール記憶部１６４、パターンテーブル１６５（パターン記憶部）を備える。
試験仕様作成装置１００が備える各機能の動作について、図２に基づき説明する。なお、初めに簡単に全体的な処理の流れを説明し、その後具体例を用いて各処理について詳しく説明する。
【００１８】
まず、全体的な処理の流れを説明する。
（Ｓ１１０：システム仕様情報入力ステップ）
システム仕様情報入力部１１１は、入力装置により、形式モデル１０を入力する。形式モデル１０は、記述対象とするシステムの変数宣言、変数の型定義、不変条件、システムの機能を実現する操作の定義、操作の事前条件及び事後条件が記述されている。なお、形式モデル１０の具体的な言語、生成法は、どのようなものであっても構わない。但し、試験仕様作成装置１００が形式モデル１０の実行環境を備えている必要がある。
ここで、不変条件とは、システムの各変数が恒常的に満たすべき制約条件である。また、操作の事前条件及び事後条件とは、その操作を実行する直前及び直後に満たされているべき条件である。
【００１９】
（Ｓ１２０：変数値特定ステップ）
モデル構造解析部１２０は、処理装置により、形式モデル１０の仕様構造、特に変数宣言、操作の定義、操作の事前条件及び事後条件等を解析し、変数の取り得る値の範囲等を特定する。モデル構造解析部１２０は、特定した情報を実行環境データ記憶部１６１に記憶する。
なお、各変数の値がある時点でのシステムの状態を決定する。そこで、ここでは、各変数の値をまとめたものを状態プロパティと呼ぶ。つまり、複数の変数が定義されている場合、各変数の値の組合せを状態プロパティと呼ぶ。
ここで、各変数が動作試験中に取り得る値は、形式モデル１０において予め有限個に設定されているものとする。
【００２０】
（Ｓ１３０：実行ステップ）
実行ステップ（Ｓ１３０）は、初期状態プロパティ特定ステップ（Ｓ１３１）、実行可能操作特定ステップ（１）（Ｓ１３２）、操作実行ステップ（Ｓ１３３）、実行可能操作特定ステップ（２）（Ｓ１３４）を備える。
【００２１】
（Ｓ１３１：初期状態プロパティ特定ステップ）
状態プロパティ特定部１３１は、処理装置により、（Ｓ１２０）で実行環境データ記憶部１６１に記憶された各変数が取り得る値から、所定の組合せを初期状態プロパティとして特定する。
初期状態プロパティは、例えば、形式モデル１０において各変数の初期値が定義されているのであれば、その初期値の組合せである。
【００２２】
（Ｓ１３２：実行可能操作特定ステップ（１））
実行可能操作特定部１３２は、処理装置により、初期状態プロパティにおいて実行可能な操作を特定する。なお、状態プロパティが固定されると、各操作の事前条件・事後条件に基づき、実行可能な操作を特定することができる。また、実行可能操作特定部１３２は、特定した操作の引数についても、実行環境データ記憶部１６１に記憶された変数の定義域等を参照して特定する。
実行可能操作特定部１３２は、特定した実行可能な操作を、その操作の引数情報も含めて実行可能操作群記憶部１６２に記憶する。また、実行可能操作特定部１３２は、バッファ１６３を介して、初期状態プロパティを識別するプロパティ識別情報と、特定した実行可能な操作を識別する操作識別情報とを１つのエントリとしてパターンテーブル１６５に記憶する。
【００２３】
（Ｓ１３３：操作実行ステップ）
状態プロパティ特定部１３１は、処理装置により、（Ｓ１３２）で実行可能操作群記憶部１６２に記憶された操作のうち実行されていない操作（未実行操作）を１つ選択して実行する。操作が実行された結果、各変数の値が変更され、新たな状態プロパティに遷移する。
【００２４】
（Ｓ１３４：実行可能操作特定ステップ（２））
実行可能操作特定部１３２は、処理装置により、遷移先の状態プロパティにおいて実行可能な操作を特定する。また、実行可能操作特定部１３２は、特定した操作の引数についても、実行環境データ記憶部１６１に記憶された変数の定義域等を参照して特定する。
実行可能操作特定部１３２は、実行された操作を識別する操作識別情報と、遷移先の状態プロパティを識別するプロパティ識別情報と、遷移先の状態プロパティにおいて実行可能な操作の操作識別情報とをバッファ１６３に記憶する。なお、バッファ１６３が記憶した情報は、順次上書きされる。
【００２５】
（Ｓ１４０：照合ステップ）
照合ステップ（Ｓ１４０）は、マッチングステップ（Ｓ１４１）、実行可能操作登録ステップ（Ｓ１４２）、パターンテーブル登録ステップ（Ｓ１４３）、未実行操作検索ステップ（Ｓ１４４）を備える。
【００２６】
（Ｓ１４１：マッチングステップ）
照合部１４０は、処理装置により、バッファ１６３に記憶された情報と等価な情報が、パターンテーブル１６５に記憶されているか否かを判定する。なお、マッチングルール記憶部１６４には、等価と判定する条件がマッチングルールとして記憶されている。ここでは、マッチングルールとして、バッファ１６３に記憶された情報と完全に一致する情報を等価と判定するという完全一致ルールが記憶されているとする。
等価な情報がないと照合部１４０が判定した場合（Ｓ１４１でなし）、（Ｓ１４２）へ処理を進める。一方、等価な情報があると照合部１４０が判定した場合（Ｓ１４１であり）、（Ｓ１４３）へ処理を進める。
【００２７】
（Ｓ１４２：実行可能操作登録ステップ）
照合部１４０は、バッファ１６３に記憶された実行可能な操作を、その操作の引数情報も含めて実行可能操作群記憶部１６２に記憶する。この際、実行可能な操作を新たな識別子で管理する。
【００２８】
（Ｓ１４３：パターンテーブル登録ステップ（パターン記憶ステップ））
照合部１４０は、バッファ１６３に記憶された、実行された操作の操作識別情報と、遷移先の状態プロパティを識別するプロパティ識別情報と、遷移先の状態プロパティにおいて実行可能な操作を識別する操作識別情報とを１つのエントリとしてパターンテーブル１６５に記憶する。
【００２９】
つまり、バッファ１６３に記憶された情報は、常にパターンテーブル１６５には登録されるが、実行可能操作群記憶部１６２には等価な情報がないと照合部１４０が判定した場合だけ登録される。
【００３０】
（Ｓ１４４：未実行操作検索ステップ）
照合部１４０は、処理装置により、実行可能操作群記憶部１６２に記憶された実行可能操作のうち、最新の（最も後に登録された）識別子で管理された実行可能操作から順に遡って、未実行操作を検索する。
未実行操作が検索された場合（Ｓ１４４であり）、（Ｓ１３３）へ処理を戻し、未実行操作を実行させる。一方、未実行操作が検索されない場合（Ｓ１４４でなし）、処理を（Ｓ１５０）へ進める。
【００３１】
（Ｓ１５０：試験項目生成ステップ）
実行操作系列生成部１５０は、処理装置により、パターンテーブル１６５に記憶された情報に基づき、初期状態プロパティから、（Ｓ１４１）で等価な情報がパターンテーブル１６５に記憶されていると照合部１４０に判定された際の状態プロパティへ遷移させる操作を１つの試験項目として生成する。
【００３２】
（Ｓ１６０：試験項目出力ステップ）
試験項目出力部１１３は、（Ｓ１５０）で実行操作系列生成部１５０が生成した全ての試験項目を試験仕様情報２０として表示装置に表示する等して出力する。
【００３３】
次に、具体例について説明する。
まず、（Ｓ１１０）で形式モデル１０が入力され、（Ｓ１２０）で各変数が取り得る値が特定される。そして、（Ｓ１３１）で、初期状態プロパティが特定される。
図３は、最終的に出力される試験仕様情報２０における状態プロパティの遷移図である。なお、図３では、状態プロパティを丸で示し、各状態プロパティで実行可能な操作をその状態プロパティから出る矢印で示す。状態プロパティを示す丸の中に記載された符号は、その状態プロパティを識別するプロパティ識別情報である。また、操作を示す矢印に付された符号は、その操作を識別する操作識別情報であり、その操作の引数まで識別可能である。操作を示す矢印が指している先の状態プロパティが、その操作を実行した場合に、遷移する先の状態プロパティである。
（Ｓ１３１）では、状態プロパティ特定部１３１が、図３の状態プロパティＮ１（二重丸で示す状態プロパティ）を初期状態プロパティとして選択したとする。なお、図３に示す状態プロパティの遷移図は、試験仕様作成装置１００の処理が全て終了して判明するものであり、（Ｓ１３１）の時点では初期状態プロパティＮ１だけが判明している状態である。
【００３４】
（Ｓ１３２）では、実行可能操作特定部１３２が、図３の初期状態プロパティＮ１において実行可能な操作として操作Ａ，Ｂの２つの操作を特定する。つまり、この時点では、初期状態プロパティＮ１と、実行可能な操作Ａ，Ｂとが判明した状態である。
【００３５】
図４は、実行可能操作群記憶部１６２を示す図である。
ここでは、実行可能操作特定部１３２は、図４（１）に示す情報を実行可能操作群記憶部１６２に記憶する。
図４（１）に示すように、実行可能操作群記憶部１６２は、識別子項目、実行可能操作項目、実行項目を持つ。識別子項目は、同じ状態プロパティから導出された実行可能操作を管理する情報であり、実行可能操作群記憶部１６２から操作を選択する際の指標となるものである。実行可能操作項目は、実行可能操作特定部１３２が特定した操作とその引数とを示す情報である。実行項目は、その操作が実行されたか否かを示す情報である。
図４（１）に示すように、実行可能操作特定部１３２は、この時点では、初期状態プロパティにおいて実行可能な操作として、操作Ａと操作Ｂとを実行可能操作群記憶部１６２に記憶する。なお、操作Ａと操作Ｂとの両操作は、識別子１でまとめて管理される。また、操作Ａと操作Ｂとの両操作は実行されていないため、実行項目にはいずれも未が設定される。
【００３６】
また、実行可能操作特定部１３２は、初期状態プロパティを識別するプロパティ識別情報（Ｎ１）と、初期状態プロパティにおいて実行可能な操作（操作Ａ，Ｂ）を識別する操作識別情報（Ａ，Ｂ）とをエントリとしてパターンテーブル１６５に記憶する。
図５は、パターンテーブル１６５を示す図である。
図５に示すように、パターンテーブル１６５は、項番号項目、エントリ種別項目、選択実行操作項目、状態プロパティ項目、実行可能操作群項目、派生元項目を持つ。項番号項目は、パターンテーブル１６５のエントリの識別情報である。エントリ種別項目は、１つの試験項目を表す情報であり、同じ値であれば同じパス（試験項目）に所属する操作に該当するエントリであることを意味する。選択実行操作項目は、実行された操作の操作識別情報である。状態プロパティ項目は、選択実行操作項目の操作識別情報が示す操作が実行された結果遷移した遷移先の状態プロパティを示すプロパティ識別情報である。実行可能操作群項目は、状態プロパティ項目のプロパティ識別情報が示す状態プロパティにおいて実行可能な操作の操作識別情報である。派生元項目は、選択実行操作がどのエントリの実行可能操作群から選択されたかを示すもので、項番号を値にとる。
この時点では、図５の項番号１のエントリの情報がパターンテーブル１６５に追加される。つまり、バッファ１６３に記憶されたプロパティ識別情報（Ｎ１）が状態プロパティ項目に設定され、操作識別情報（Ａ，Ｂ）が実行可能操作群項目に設定される。なお、この時点では初期状態プロパティについての情報を追加するため、選択実行操作項目、派生元項目に設定される情報はなく、これらの項目には空白が設定される。また、エントリ種別項目についても空白が設定される。
【００３７】
（Ｓ１３３）では、状態プロパティ特定部１３１が、実行可能操作群記憶部１６２に記憶された操作のうち未実行操作を１つ選択して実行する。つまり、状態プロパティ特定部１３１は、図４（１）に示す識別子１の実行可能操作のうち、実行項目が「未」の操作を１つ選択して実行する。なお、実行する操作の選択方法は、乱数を利用したり、所定の操作に所定の優先度を設定したりする等、複数の実行可能操作から１つの操作を選び出すものであれば何でもよい。
ここでは、図４の操作Ａを実行したとする。図４の操作Ａが実行されると、図３の状態プロパティＮ１から状態プロパティＮ２へ遷移する。つまり、この時点では、初期状態プロパティＮ１と、初期状態プロパティＮ１で実行可能な操作Ａ，Ｂと、状態プロパティＮ２とが判明した状態である。
また、状態プロパティ特定部１３１は、実行した操作Ａの実行項目を「済」に更新する。
【００３８】
（Ｓ１３４）では、実行可能操作特定部１３２が、図３の状態プロパティＮ２において実行可能な操作として操作Ａ，Ｂの２つの操作を特定する。つまり、この時点では、初期状態プロパティＮ１と、初期状態プロパティＮ１で実行可能な操作Ａ，Ｂと、状態プロパティＮ２と、状態プロパティＮ２で実行可能な操作Ａ，Ｂとが判明した状態である。
ここで、実行可能操作特定部１３２は、実行された操作（操作Ａ）の操作識別情報（Ａ）と、遷移先の状態プロパティを識別するプロパティ識別情報（Ｎ２）と、遷移先の状態プロパティにおいて実行可能な操作（操作Ａ，Ｂ）を識別する操作識別情報（Ａ，Ｂ）とをバッファ１６３に記憶する。
【００３９】
（Ｓ１４１）では、照合部１４０が、バッファ１６３に記憶された情報と一致する情報が、パターンテーブル１６５に記憶されているか否かを判定する。つまり、照合部１４０は、選択実行操作項目として「Ａ」、状態プロパティ項目として「Ｎ２」、実行可能操作群項目として「Ａ，Ｂ」が設定されたエントリが、パターンテーブル１６５に含まれるか否かを判定する。ここでは、パターンテーブル１６５には、項番号１のエントリのみが登録された状態である。したがって、照合部１４０はパターンテーブル１６５に含まれないと判定する。
なお、項番号１のエントリは（Ｓ３０２）で登録された初期状態を示すエントリであり、選択実行操作項目には空白が設定されている。そこで、初期状態を示すエントリと、バッファ１６３に記憶された情報とを比較する場合、選択実行操作項目については比較せず、状態プロパティ項目と実行可能操作群項目とのみを比較する。この場合であっても、ここでは状態プロパティ項目が異なるため、照合部１４０はパターンテーブル１６５に含まれないと判定する。
そこで、処理を（Ｓ１４２）へ進める。
【００４０】
（Ｓ１４２）では、実行可能操作特定部１３２が、バッファ１６３に記憶された実行可能な操作（操作Ａ，Ｂ）を実行可能操作群記憶部１６２に記憶する。
図４（２）は、この時点における実行可能操作群記憶部１６２を示す図である。図４（２）では、識別子１で管理される操作Ａは実行されたため、実行項目が「済」に更新されている。また、状態プロパティＮ２において実行可能な操作として、操作Ａと操作Ｂとが記憶されている。なお、状態プロパティＮ２で実行可能な操作は、新たな識別子２で管理される。
【００４１】
（Ｓ１４３）では、照合部１４０は、バッファ１６３に記憶された、実行された操作（操作Ａ）の操作識別情報（Ａ）と、遷移先の状態プロパティを識別するプロパティ識別情報（Ｎ２）と、遷移先の状態プロパティにおいて実行可能な操作（操作Ａ，Ｂ）を識別する操作識別情報（Ａ，Ｂ）とをエントリとしてパターンテーブル１６５に記憶する。
つまり、この時点では、図５の項番号２のエントリの情報がパターンテーブル１６５に追加される。すなわち、バッファ１６３に記憶された操作識別情報（Ａ）が選択実行操作項目に設定され、プロパティ識別情報（Ｎ２）が状態プロパティ項目に設定され、操作識別情報（Ａ，Ｂ）が実行可能操作群項目に設定される。また、派生元項目には、項番号１が設定される。また、エントリ種別項目には種別ｉが設定される。
【００４２】
（Ｓ１４４）では、照合部１４０が、最新の識別子で管理される実行可能操作から順に遡って、未実行操作を検索する。つまり、ここでは、図４（２）の識別子２、識別子１の順にその識別子で管理される実行可能操作から、実行項目が未の操作を検索する。
すると、識別子２で管理される実行可能操作から、未実行操作が検索されるため、照合部１４０は処理を（Ｓ１３３）へ戻す。
【００４３】
（Ｓ１３３）では、状態プロパティ特定部１３１が、識別子２で管理される未実行操作を１つ選択して実行する。ここでは、図４の操作Ａを実行したとする。図４の操作Ａが実行されると、図３の状態プロパティＮ２から状態プロパティＮ４へ遷移する。つまり、この時点では、初期状態プロパティＮ１と、初期状態プロパティＮ１で実行可能な操作Ａ，Ｂと、状態プロパティＮ２と、状態プロパティＮ２で実行可能な操作Ａ，Ｂと、状態プロパティＮ４とが判明した状態である。
また、状態プロパティ特定部１３１は、実行した操作（ここでは、識別子２で管理される操作Ａ）の実行項目を「済」に更新する。
【００４４】
（Ｓ１３４）では、実行可能操作特定部１３２が、状態プロパティＮ４で実行可能な操作Ｄを特定する。また、実行可能操作特定部１３２が、実行された操作（操作Ａ）の操作識別情報（Ａ）と、遷移先の状態プロパティを識別するプロパティ識別情報（Ｎ４）と、遷移先の状態プロパティにおいて実行可能な操作（操作Ｄ）を識別する操作識別情報（Ｄ）とをバッファ１６３に記憶する。
【００４５】
（Ｓ１４１）では、照合部１４０が、選択実行操作項目として「Ａ」、状態プロパティ項目として「Ｎ４」、実行可能操作群項目として「Ｄ」が設定されたエントリが、パターンテーブル１６５に含まれるか否かを判定する。ここでは、パターンテーブル１６５には、項番号１，２のエントリのみが登録された状態である。したがって、照合部１４０はパターンテーブル１６５に含まれないと判定する。
そこで、（Ｓ１４２）で操作Ｄが新たな識別子３で実行可能操作群記憶部１６２に登録され、（Ｓ１４３）でパターンテーブル１６５に項番号３のエントリが追加される。なお、登録する選択実行操作が実行可能操作群記憶部１６２に最新の識別子で管理される操作から（Ｓ１３３）で選択された操作である場合、エントリ種別はその前にパターンテーブル１６５に追加したエントリのエントリ種別と同じにする。ここでは、選択実行操作（操作Ａ）は、（Ｓ１３３）において最新の識別子２で管理される実行可能操作から選択された操作であるため、追加する項番号３のエントリのエントリ種別は変更せず種別ｉにする。
そして、（Ｓ１４４）では、照合部１４０が最新の識別子で管理される実行可能操作から順に遡って、未実行操作を検索する。ここでは、先ほど登録された識別子３で管理される操作Ｄが検索される。そこで、照合部１４０は処理を（Ｓ１３３）へ戻す。
【００４６】
（Ｓ１３３）では、状態プロパティ特定部１３１が、識別子３で管理される操作Ｄを選択して実行する。操作Ｄが実行されると、図３の状態プロパティＮ４から再び状態プロパティＮ４へ遷移する。また、状態プロパティ特定部１３１は、実行した操作Ｄの実行項目を「済」に更新する。
（Ｓ１３４）では、実行可能操作特定部１３２が、状態プロパティＮ４で実行可能な操作Ｄを特定する。また、実行可能操作特定部１３２が、実行された操作（操作Ｄ）の操作識別情報（Ｄ）と、遷移先の状態プロパティを識別するプロパティ識別情報（Ｎ４）と、遷移先の状態プロパティにおいて実行可能な操作（操作Ｄ）を識別する操作識別情報（Ｄ）とをバッファ１６３に記憶する。
【００４７】
（Ｓ１４１）では、照合部１４０が、選択実行操作項目として「Ｄ」、状態プロパティ項目として「Ｎ４」、実行可能操作群項目として「Ｄ」が設定されたエントリが、パターンテーブル１６５に含まれるか否かを判定する。ここでは、パターンテーブル１６５には、項番号１−３のエントリが登録された状態である。したがって、照合部１４０はパターンテーブル１６５に含まれないと判定する。
そこで、（Ｓ１４２）で実行可能操作群記憶部１６２にバッファ１６３に記憶された実行可能な操作Ｄが新たな識別子４で登録され、（Ｓ１４３）でパターンテーブル１６５に項番号４のエントリが追加される。
そして、（Ｓ１４４）では、照合部１４０が最新の識別子で管理される実行可能操作から順に遡って、未実行操作を検索する。ここでは、先ほど登録された識別子４で管理される操作Ｄが検索される。そこで、照合部１４０は処理を（Ｓ１３３）へ戻す。
【００４８】
（Ｓ１３３）では、状態プロパティ特定部１３１が、識別子４で管理される操作Ｄを選択して実行する。操作Ｄが実行されると、図３の状態プロパティＮ４から再び状態プロパティＮ４へ遷移する。また、状態プロパティ特定部１３１は、実行した操作Ｄの実行項目を「済」に更新する。図４（３）は、この時点における実行可能操作群記憶部１６２を示す図である。
（Ｓ１３４）では、実行可能操作特定部１３２が、状態プロパティＮ４で実行可能な操作Ｄを特定する。また、実行可能操作特定部１３２が、実行された操作（操作Ｄ）の操作識別情報（Ｄ）と、遷移先の状態プロパティを識別するプロパティ識別情報（Ｎ４）と、遷移先の状態プロパティにおいて実行可能な操作（操作Ｄ）を識別する操作識別情報（Ｄ）とをバッファ１６３に記憶する。
【００４９】
（Ｓ１４１）では、照合部１４０が、選択実行操作項目として「Ｄ」、状態プロパティ項目として「Ｎ４」、実行可能操作群項目として「Ｄ」が設定されたエントリが、パターンテーブル１６５に含まれるか否かを判定する。ここでは、パターンテーブル１６５には、項番号１−４のエントリが登録された状態である。項番号４のエントリは、選択実行操作項目として「Ｄ」、状態プロパティ項目として「Ｎ４」、実行可能操作群項目として「Ｄ」が設定されたエントリである。したがって、照合部１４０はパターンテーブル１６５に含まれると判定する。
そこで、（Ｓ１４２）を経ることなく、（Ｓ１４３）へ処理を進め、（Ｓ１４３）でパターンテーブル１６５に項番号５のエントリが追加される。つまり、項番号５のエントリは、項番号４のエントリと等価と判定されたエントリである。
そして、（Ｓ１４４）では、照合部１４０が最新の識別子で管理される実行可能操作から順に、未実行操作を検索する。ここでは、図４（３）の識別子４から識別子１へ順に遡って、その識別子で管理される実行可能操作から、実行項目が未の操作を検索する。
すると、識別子２で管理される実行可能操作から、未実行操作が検索されるため、照合部１４０は処理を（Ｓ１３３）へ戻す。
【００５０】
（Ｓ１３３）では、状態プロパティ特定部１３１が、識別子２で管理される操作Ｂを選択して実行する。操作Ｂが実行されると、図３の状態プロパティＮ２から状態プロパティＮ５へ遷移する。また、状態プロパティ特定部１３１は、実行した操作Ｂの実行項目を「済」に更新する。
（Ｓ１３４）では、実行可能操作特定部１３２が、状態プロパティＮ５で実行可能な操作Ａを特定する。また、実行可能操作特定部１３２が、実行された操作（操作Ｂ）の操作識別情報（Ｂ）と、遷移先の状態プロパティを識別するプロパティ識別情報（Ｎ５）と、遷移先の状態プロパティにおいて実行可能な操作（操作Ａ）を識別する操作識別情報（Ａ）とをバッファ１６３に記憶する。
【００５１】
（Ｓ１４１）では、照合部１４０が、選択実行操作項目として「Ｂ」、状態プロパティ項目として「Ｎ５」、実行可能操作群項目として「Ａ」が設定されたエントリが、パターンテーブル１６５に含まれるか否かを判定する。ここでは、パターンテーブル１６５には、項番号１−５のエントリが登録された状態である。したがって、照合部１４０はパターンテーブル１６５に含まれないと判定する。
そこで、（Ｓ１４２）で実行可能操作群記憶部１６２にバッファ１６３に記憶された実行可能な操作Ａが新たな識別子５で登録され、（Ｓ１４３）でパターンテーブル１６５に項番号６のエントリが追加される。なお、登録する選択実行操作が実行可能操作群記憶部１６２に最新の識別子で管理される操作から（Ｓ１３３）で選択された操作でないため、エントリ種別を変更する。つまり、これまでにパターンテーブル１６５に登録した項番号２−５のエントリ種別は種別ｉであったが、ここで追加する項番号６のエントリのエントリ種別は種別ｉｉとする。
そして、（Ｓ１４４）では、照合部１４０が最新の識別子で管理される実行可能操作から順に、未実行操作を検索する。ここでは、先ほど登録された識別子５で管理される操作Ａが検索される。そこで、照合部１４０は処理を（Ｓ１３３）へ戻す。
【００５２】
この後、以上のように処理を進めると、最終的に、図３に示す状態プロパティの遷移図が描ける状態になり、パターンテーブル１６５には、図５に示すように項番号１から１２までのエントリが登録される。すると、実行可能操作群記憶部１６２には未実行操作がなくなり、（Ｓ１４４）から（Ｓ１５０）へ遷移する。
【００５３】
（Ｓ１５０）では、実行操作系列生成部１５０がパターンテーブル１６５の情報に基づき、試験項目となる実行操作系列を生成する。
具体的には、実行操作系列生成部１５０は、パターンテーブル１６５において同じエントリ種別の選択実行操作項目に登録された操作識別情報を順番に抽出し結合する。これが実行操作系列であり、一つの試験項目に相当する。但し、同じエントリ種別を持つエントリのうち最も項番号が若いエントリの派生元が初期エントリを指していない場合は、派生元が初期エントリを指すまで派生元を遡り、その過程において各エントリの選択実行操作項目に登録された操作識別情報を試験項目の冒頭に連結する。
図６はこの作業を表した図であり、図５に示すパターンテーブル１６５の項番号を派生順に木構造にした図である。図６において、点線で囲まれた各領域は同じエントリ種別を持つエントリのグループを表しており、その中でもっとも項番号が若いものが丸で囲まれたノードである。
例えば、図５に示すパターンテーブル１６５でエントリ種別ｉを持つエントリグループ５０２は、図６における領域６０１に相当する。このグループは、項番号２、項番号３、項番号４、項番号５のエントリから構成されており、これを実際の実行順に並べると操作Ａ、操作Ａ、操作Ｄ、操作Ｄという４つの操作からなる実行操作系列となる。
また、図５に示すパターンテーブル１６５でエントリ種別ｉｉを持つエントリグループ５０３は、図６における領域６０２に相当する。このグループは、項番号６、項番号７、項番号８のエントリから構成される。これを実際の実行順に並べると操作Ｂ、操作Ａ、操作Ａという３つの操作からなる実行操作系列になる。しかし、エントリグループ５０３のもっとも若い項目番号６が初期エントリ５０１（項番号１のエントリ）から直接派生していない。そのため、項番号６の派生元である項番号２の選択実行操作Ａを実行操作系列の頭に付け加え、最終的に操作Ａ、操作Ｂ、操作Ａ、操作Ａという４つの操作からなる実行操作系列が領域６０２に相当する試験項目となる。なお、項番号２の派生元は初期エントリであるため、それ以上派生元を遡る必要はない。
以下同様に全ての試験項目を抽出する。すると、図７に示す５つの試験項目が抽出される。図５に示すパターンテーブル１６５から抽出された全試験項目を示す図である。なお、各試験項目は、図３において初期状態プロパティから出発する一連の操作系列（パス）が１つの試験項目に相当する。
【００５４】
（Ｓ１６０）では、抽出した全ての試験項目を試験仕様情報２０として表示装置に表示する等して出力する。試験項目の設計者は、その後の利用に適した形式に試験仕様情報２０を編集することができる。
【００５５】
なお、上記説明では、マッチングルール記憶部１６４にマッチングルールとして完全一致ルールが登録されている場合を例として説明した。しかし、照合部１４０が試験項目の設計者と対話的にマッチングルールを設定することで、より適切な試験項目を設計することができる。
【００５６】
次に、照合部１４０が試験項目の設計者と対話的にマッチングルールを設定することで、より適切な試験項目の設計を可能とした照合部１４０の処理について説明する。
図８は、照合部１４０の詳細処理を示すフローチャートである。つまり、図８は、図２の（Ｓ１４０）に相当する処理を示す図である。
なお、以下の説明において、マッチングルールには、正マッチングルールと負マッチングルールとがある。正マッチングルールは、そのマッチングルールが示す条件に適合するエントリは、等価とみなすというルールである。完全一致ルールは、正マッチングルールの一例である。一方、負マッチングルールは、そのマッチングルールが示す条件に適合するエントリは、等価とみなさないというルールである。
処理の開始時には、上述した完全一致ルールが正マッチングルールとして登録されているものとする。
【００５７】
（Ｓ２０１）
照合部１４０は、バッファ１６３に記憶された情報と等価な情報が、パターンテーブル１６５に記憶されているか否かを判定する。
等価な情報が記憶されていないと照合部１４０が判定した場合（Ｓ２０１でなし）、（Ｓ２０７）へ処理を進める。一方、等価な情報が記憶されていると照合部１４０が判定した場合（Ｓ２０１であり）、（Ｓ２０２）へ処理を進める。
【００５８】
（Ｓ２０２）
照合部１４０は、バッファ１６３に記憶された、実行された操作の操作識別情報と、遷移先の状態プロパティを識別するプロパティ識別情報と、遷移先の状態プロパティにおいて実行可能な操作を識別する操作識別情報とを１つのエントリとしてパターンテーブル１６５に記憶する。
【００５９】
（Ｓ２０３）
照合部１４０は、実行可能操作群記憶部１６２に記憶された実行可能操作のうち、現在の参照している識別子で管理される実行可能操作に、未実行操作が存在するか否か判定する。なお、（Ｓ２０２）から（Ｓ２０３）へ遷移してきた場合には、最新の識別子を参照する。
存在すると照合部１４０が判定した場合（Ｓ２０３であり）、（Ｓ２０４）へ処理を進める。一方、存在しないと照合部１４０が判定した場合（Ｓ２０３でなし）、（Ｓ２０５）へ処理を進める。
【００６０】
（Ｓ２０４）
照合部１４０は、処理を図２に示す（Ｓ１３３）へ戻し、現在参照している識別子で管理される実行可能操作のうち、未実行操作を選択させ、実行させる。
【００６１】
（Ｓ２０５）
照合部１４０は、実行可能操作群記憶部１６２に、現在参照している識別子よりも古い（前に登録された）識別子が存在するか否かを判定する。
存在しないと照合部１４０が判定した場合（Ｓ２０５で最古）、処理を図２に示す（Ｓ１５０）へ進める。一方、存在すると照合部１４０が判定した場合（Ｓ２０５で最古ではない）、（Ｓ２０６）へ処理を進める。
【００６２】
（Ｓ２０６）
照合部１４０は、参照する識別子を１つ古い識別子に置き換え、処理を（Ｓ２０３）へ戻す。
【００６３】
（Ｓ２０７）
照合部１４０は、バッファ１６３に記憶された情報と類似するエントリがパターンテーブル１６５に記憶されているか否かを判定する。なお、類似するとは、等価として扱っても試験項目作成上構わない可能性があるという意味である。類似するか否かの判定方法については後述する。
類似するエントリが記憶されていると照合部１４０が判定した場合（Ｓ２０７であり）、処理を（Ｓ２０８）へ進める。一方、類似するエントリが記憶されていないと照合部１４０が判定した場合（Ｓ２０７でなし）、処理を（Ｓ２１２）へ進める。
【００６４】
（Ｓ２０８）
照合部１４０は、バッファに記憶された情報と、類似するエントリとを示すダイアログ等を、ユーザ入力部１１２によって表示装置に表示させる。これにより、類似するエントリがパターンテーブル１６５に存在することを、試験項目の設計者へ通知する。そして、ユーザ入力部１１２は、表示したバッファに記憶された情報と、類似するエントリとを等価とみなすか否かを試験項目の設計者に入力させる。
【００６５】
（Ｓ２０９）
（Ｓ２０８）で等価とみなすと入力された場合（Ｓ２０９で合意）、処理を（Ｓ２１０）へ進める。一方、（Ｓ２０８）で等価とみなさないと入力された場合（Ｓ２０９で拒否）、処理を（Ｓ２１１）へ進める。
【００６６】
（Ｓ２１０）
照合部１４０は、等価とみなすと入力されたバッファに記憶された情報と類似するエントリとを、正マッチングルールとしてマッチングルール記憶部１６４に記憶する。
【００６７】
（Ｓ２１１）
照合部１４０は、等価とみなさないと入力されたバッファに記憶された情報と類似するエントリとを、負マッチングルールとしてマッチングルール記憶部１６４に記憶する。
【００６８】
（Ｓ２１２）
照合部１４０は、バッファ１６３に記憶された実行可能操作を、新しい識別子で実行可能操作群記憶部１６２に記憶する。
【００６９】
次に、（Ｓ２０７）における類似するか否かの判定方法について説明する。
まず、照合部１４０は、負マッチングルールとしてマッチングルール記憶部１６４に記憶されている関係に当たるエントリは、類似しないと判定する。例えば、「状態プロパティ３と状態プロパティ４は等価とは見なさない」という負マッチングルールが存在する場合において、バッファ１６３に状態プロパティ３を示すプロパティ識別情報が記憶されているなら、状態プロパティ項目に状態プロパティ４を示すプロパティ識別情報が登録されたエントリは類似しないと判定する。
次に、照合部１４０は、バッファ１６３に記憶された実行可能操作と、引数のみが異なる選択実行操作を持つエントリを類似すると判定する。例えば、会員登録を行う関数ｒｅｇｉｓｔが引数として会員名を取るとき、ｒｅｇｉｓｔ（ＴＡＲＯ）とｒｅｇｉｓｔ（ＪＩＲＯ）とは要求仕様上特に識別する必要がない可能性がある。そのため、このような関係の場合、類似すると判定される。
また、照合部１４０は、バッファ１６３に記憶された状態プロパティのうち１つの変数の値のみ異なっている状態プロパティを持つエントリを類似すると判定する。例えば、会員制座席予約システムにおいてある座席の予約状況を変数ｓｅａｔで表し、その値として会員名を取るとするとき、ｓｅａｔ＝ｍｅｍｂｅｒ１という状態とｓｅａｔ＝ｍｅｍｂｅｒ２という状態とは、要求仕様上特に識別する必要がない可能性がある。そのため、このような関係の場合、類似すると判定される。
また、照合部１４０は、バッファ１６３に記憶された状態プロパティと対称性を有する状態プロパティを持つエントリは類似すると判定する。例えば、会員制座席予約システムにおいて、２つの座席の予約状況を変数ｓｅａｔ１とｓｅａｔ２で表し、その値として会員名を取るとするとき、ｓｅａｔ１＝ｍｅｍｂｅｒ１、ｓｅａｔ２＝ｍｅｍｂｅｒ２という状態と、ｓｅａｔ１＝ｍｅｍｂｅｒ２、ｓｅａｔ２＝ｍｅｍｂｅｒ１という状態とは、要求仕様上特に識別する必要がない可能性がある。そのため、このような関係の場合、類似すると判定される。
【００７０】
試験仕様作成装置１００の効果について説明する。
上述したように、動作試験の各項目は図３において初期状態プロパティから隣接した状態プロパティを辿っていく操作系列に相当する。実際には、逐次的に実行可能操作群記憶部１６２から操作を選択し続け、一連の操作を連結した実行操作系列を試験項目とするが、これだけではどこまでを一つの試験項目と見なすべきか判断できない。一般に、あるプログラムと入力が与えられたとき、計算が有限時間内に停止するかどうかを判定することは不可能であることが証明されているからである。
しかし、試験仕様作成装置１００では、プログラムが途中で経過する状態を利用して状態の等価性（あるいは類似性）を判定し、等価である（あるいは類似している）と判断されれば強制的に以降のプログラム実行を停止させている。そのため、プログラムが取りうる状態が有限であれば、実行操作系列は必ず有限の長さで停止する。したがって、予めシステムの変数が取りうる値を有限に制約しておくことで実行操作系列を有限の長さに留め、試験項目を自動生成することができる。
なお、実行操作系列を本質的に有限の長さに抑えるためには、実行操作系列の集約が必要である。つまり、複数の実行操作系列が途中で等価な状態に陥った場合、それ以後の系列も同じものを辿るため全てを試験する必要はない。すなわちどれか１つの実行操作系列を残して他をすべての実行操作系列を、等価な状態で実行操作系列を終了とし、無限ループや無駄な試験項目を省くことが可能になる。
【００７１】
また、（Ｓ１４０）において、等価であるか否かの判定に使用した判断基準は、試験仕様情報２０を形成する上で重要な情報となる。
例えば、異なる引数を持つ操作に対して類似していると判断することは、境界値分析や同値分割等の試験仕様情報２０を与える。また、値が異なる状態プロパティに対して類似していると判断することは、仕様内で各変数が持つ意味に影響を及ぼし、例えば条件網羅や分岐網羅等の試験仕様情報２０を与える。また、状態の等価性の判定に選択実行操作の情報を用いているため、形式モデル内で定義されている操作が網羅されているかどうか確認することができ、これは命令網羅等の試験仕様情報２０を与える。
試験仕様作成装置１００では、図８に基づき説明したように、このような判断材料を試験項目の設計者に提供し、試験項目の設計者がこれに答えることによって、境界値分析や条件網羅等のテスト仕様情報を対話的に構築し出力することができる。
なお、この観点から、マッチングルール記憶部１６４に記憶されたマッチングルールについても、試験仕様情報２０に含めて出力してもよい。
【００７２】
実施の形態２．
実施の形態２では、試験仕様情報２０を作成する条件を示すテストプロパティ３０を予め設定した上で、試験仕様情報２０を生成する方法について説明する。
【００７３】
図９は、実施の形態２に係る試験仕様作成装置１００の機能を示す機能ブロック図である。
実施の形態２に係る試験仕様作成装置１００は、実施の形態１に係る試験仕様作成装置１００の機能に加え、ＧＵＩ入出力部１１０がテストプロパティ入力部１１４を備える。
テストプロパティ入力部１１４は、入力装置により、予め（例えば（Ｓ１０１）の前に）テストプロパティ３０を入力する。テストプロパティ３０には、図２の（Ｓ１４０）で使用されるマッチングルールや、（Ｓ１３２）、（Ｓ１３４）で実行可能な操作が特定される際の引数を制限する情報や、強制的に実行可能な操作の特定を停止する情報等が設定されている。テストプロパティ入力部１１４は、テストプロパティ３０に設定されているマッチングルールをマッチングルール記憶部１６４に登録する。また、テストプロパティ入力部１１４は、テストプロパティ３０に設定されている引数を制限する情報や実行可能な操作の特定を停止する情報等を実行環境データ記憶部１６１に登録する。
【００７４】
テストプロパティ３０に設定され、予めマッチングルール記憶部１６４に登録されたマッチングルールが、事前に試験項目の設計者によって指定されることにより、照合部１４０の作業を効率化できる。
但し、実施形態１と同様に、テストプロパティ３０に設定されたマッチングルールが完全なものでなくても、対話方式で補完していくことが可能である。
【００７５】
また、テストプロパティ３０に設定される変数の値制限は、事前に試験項目の設計者によって指定されることにより、実行可能操作群記憶部１６２に記憶される情報の規模を縮小することができる。
例えば、ある会員制予約システムをモデル化した場合、会員を引数として予約処理を行う操作はすべての会員に対して愚直に動作試験をする必要がないことは要求仕様から容易に判断できる。このような情報を予めテストプロパティ３０として与え、実行環境データ記憶部１６１に登録することで、効率的に状態遷移の規模を縮小させることができる。
【００７６】
また、対象の形式モデル１０の規模が膨大になると、ある状態が他の状態と等価な状態であると判断できる状態に到達するまでに多くの時間資源やメモリを消費する場合がある。その場合には、操作の逐次実行を任意の深さで止めることで発散または必要以上の計算時間消費、メモリ消費を抑止する。このように操作の逐次実行の深さを指定するような情報を予めテストプロパティ３０として与えることで、効率的に状態遷移の規模を縮小させることができる。
【００７７】
実施の形態３．
実施の形態１では、パターンテーブル１６５に記憶されたエントリから、試験項目を生成した。実施の形態３では、パターンテーブル１６５にエントリを登録しつつ、並行して試験項目を作成する方法について説明する。
【００７８】
図１０は、実施の形態３に係る試験仕様作成装置１００の機能を示す機能ブロック図である。
実施の形態３に係る試験仕様作成装置１００は、実施の形態１に係る試験仕様作成装置１００の機能に加え、記憶部１６０が実行操作履歴記憶部１６６を備える。また、実施の形態１に係る試験仕様作成装置１００の機能のうち、実行操作系列生成部１５０を備えていない。
なお、実行操作履歴記憶部１６６には、図７に示すような、最終的に出力される試験仕様情報２０が記憶される。つまり、実行操作履歴記憶部１６６には、実施の形態１で実行操作系列生成部１５０が最後に生成した試験項目が、パターンテーブル１６５にエントリを登録していく過程で、並行して登録される。そのため、実施の形態３に係る試験仕様作成装置１００は実行操作系列生成部１５０を備える必要がなく、試験項目出力部１１３は実行操作履歴記憶部１６６に登録された試験項目を試験仕様情報２０として出力すればよい。
また、図１１は、実施の形態３に係るパターンテーブル１６５を示す図である。図１１に示すように、実施の形態３に係るパターンテーブル１６５では、各エントリにおける実行可能操作群項目や派生元項目を省略することが可能になる。これに伴い照合部１４０は、等価性の判断に実行可能操作群項目の比較が必要なくなる。なお、図１１では、図５に示すパターンテーブル１６５に対応する情報を示している。
【００７９】
実行操作履歴記憶部１６６へ実行操作履歴を登録する処理について説明する。基本的には、バッファ１６３に記憶された情報を、パターンテーブル１６５へ登録する際、選択実行操作を同時に実行操作履歴記憶部１６６へ登録する。
図１２は、実行操作履歴記憶部１６６へ実行操作履歴が登録される過程を簡単に示す図である。なお、図１２では、図１１に示すパターンテーブル１６５の情報が登録される際、同時に登録される実行操作履歴を示している。
最初に実行された選択実行操作Ａは、図１２（ａ）のようにまず試験項目番号ｉで実行操作履歴記憶部１６６に登録される。このままパターンテーブル１６５に同一のエントリ種別で格納されていく間は、実行操作履歴記憶部１６６にも同一の試験項目番号のリストに実行された操作が登録される。このときパターンテーブル１６５におけるエントリ種別と実行操作履歴記憶部１６６の試験項目番号とは同じものを使用すると簡便である。
図１２（ｂ）は、図１１で言うと項番号５のエントリまでこのようにして進めた状態を表している。項番号５のエントリは、照合部１４０によって項番号４のエントリと等価であると判定されるため試験項目番号ｉのリストはここで終了となる。
図１３は、この時点における実行可能操作群記憶部１６２を示す図である。図１３の識別子は図１１の項番号に対応しており、例えば図１１の項番号１のエントリ、つまり初期エントリにおける実行可能操作が、図１２の識別子１で管理されている実行可能操作である。
【００８０】
試験項目番号ｉの試験項目生成が終了したため、新しい試験項目を作成する。実施形態１と同様、実行可能操作群記憶部１６２において識別子を遡りながら未実行操作を検索する。図１３の例では、識別子２に未実行操作である操作Ｂ（網掛け部分）が存在するためこれが選択される。
選択された操作Ｂは、新しい試験項目番号ｉｉで登録されることとなるが、試験項目はすべて識別子１の実行可能操作から始まるという定義のため、識別子２を導出するに至った操作系列を冒頭に連結する必要がある。識別子２を導出するに至った操作系列は、図１１によると項番号２の所属するエントリ種別に相当する試験項目番号ｉの試験項目に含まれる。さらに正確にいうと試験項目番号ｉの指す試験項目の１番目までの系列（図１２（ｂ）の下線部分）に相当する。これを試験項目番号ｉｉの試験項目の冒頭として操作Ｂの前部分に連結したものが図１２（ｃ）である。
以上の操作を繰り返すことで最終的に図７のような実行操作履歴が実行操作履歴記憶部１６６に登録される。
【００８１】
この実施の形態では、操作を実行しながら試験項目を納めたデータベースを構築していくため、パターンテーブル１６５を最後に走査する必要がない。そのため、実施の形態１のように、パターンテーブル１６５に記憶されたエントリから、実行可能操作群項目および派生元項目を省略することが可能になり、データサイズの縮小および照合時間の短縮につながる。これは、形式モデル１０の規模が大きくなり、パターンテーブル１６５のサイズが大きくなるような場合に、より高い効果が得られる。
【００８２】
次に、実施の形態における試験仕様作成装置１００のハードウェア構成について説明する。
図１４は、試験仕様作成装置１００のハードウェア構成の一例を示す図である。
図１４に示すように、試験仕様作成装置１００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３、ＲＡＭ９１４、ＬＣＤ９０１（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）、キーボード９０２（Ｋ／Ｂ）、通信ボード９１５、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置９２０（固定ディスク装置）の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。磁気ディスク装置９２０は、所定の固定ディスクインタフェースを介して接続される。
【００８３】
磁気ディスク装置９２０又はＲＯＭ９１３などには、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。
【００８４】
プログラム群９２３には、上記の説明において「ＧＵＩ入出力部１１０」、「モデル構造解析部１２０」、「実行部１３０」、「照合部１４０」、「実行操作系列生成部１５０」等として説明した機能を実行するソフトウェアやプログラムやその他のプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
ファイル群９２４には、上記の説明において「記憶部１６０」が記憶するとして説明された情報やデータや信号値や変数値やパラメータが、「ファイル」や「データベース」の各項目として記憶される。「ファイル」や「データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵ９１１の動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のＣＰＵ９１１の動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリに一時的に記憶される。
【００８５】
また、上記の説明におけるフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、その他光ディスク等の記録媒体やＩＣチップに記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体や電波によりオンライン伝送される。
また、上記の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」、「〜手段」、「〜機能」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。また、「〜装置」として説明するものは、「〜回路」、「〜機器」、「〜手段」、「〜機能」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。さらに、「〜処理」として説明するものは「〜ステップ」であっても構わない。すなわち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、ＲＯＭ９１３等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、上記で述べた「〜部」としてコンピュータ等を機能させるものである。あるいは、上記で述べた「〜部」の手順や方法をコンピュータ等に実行させるものである。
【符号の説明】
【００８６】
１０  形式モデル、２０  試験仕様情報、３０  テストプロパティ、１００  試験仕様作成装置、１１０  ＧＵＩ入出力部、１１１  システム仕様情報入力部、１１２  ユーザ入力部、１１３  試験項目出力部、１１４  テストプロパティ入力部、１２０  モデル構造解析部、１３０  実行部、１３１  状態プロパティ特定部、１３２  実行可能操作特定部、１４０  照合部、１５０  実行操作系列生成部、１６０  記憶部、１６１  実行環境データ記憶部、１６２  実行可能操作群記憶部、１６３  バッファ、１６４  マッチングルール記憶部、１６５  パターンテーブル、１６６  実行操作履歴記憶部。
【図１】
0005452366.tif 000002
【図２】
0005452366.tif 000003
【図３】
0005452366.tif 000004
【図４】
0005452366.tif 000005
【図５】
0005452366.tif 000006
【図６】
0005452366.tif 000007
【図７】
0005452366.tif 000008
【図８】
0005452366.tif 000009
【図９】
0005452366.tif 000010
【図１０】
0005452366.tif 000011
【図１１】
0005452366.tif 000012
【図１２】
0005452366.tif 000013
【図１３】
0005452366.tif 000014
【図１４】
0005452366.tif 000015