(57)【要約】【課題】プログラムモデル検査において、動的に境界値を特定して必要十分なデータを生成するためのドライバを生成するデータ生成プログラム、データ生成方法およびデータ生成装置を提供する。【解決手段】記録部に記録されたモデル検査装置に入力されるプロパティごとの条件部から予め定義された入力項目となる生成対象変数を特定し、特定した生成対象変数を含むプロパティの前記条件部を抽出する生成条件特定処理と、生成条件特定処理で抽出した条件部を、特定した生成対象変数の生成条件を定義する生成条件式に変換して、生成条件式ごとに生成条件を満たす値を生成するコードを生成するデータ生成／コード生成処理と、コードをドライバに組み込み第２のドライバを生成するドライバ組み込み処理と、を実行させる。【選択図】図１
2010191508.tif 000002
【特許請求の範囲】
【請求項１】
擬似システムである検査対象プログラムと、前記検査対象プログラムの実行を制御するドライバと、機能仕様であるプロパティを用いてモデル検査を実行するモデル検査装置用のデータを生成するデータ生成プログラムであって、
コンピュータに、
記録部に記録された前記モデル検査装置に入力される前記プロパティごとの条件部から予め定義された入力項目となる生成対象変数を特定し、特定した生成対象変数を含む前記プロパティの前記条件部を抽出する生成条件特定処理と、
前記生成条件特定処理で抽出した前記条件部を、特定した生成対象変数の生成条件を定義する生成条件式に変換して、前記生成条件式ごとに前記生成条件を満たす値を生成するコードを生成するデータ生成／コード生成処理と、
前記コードを前記ドライバに組み込み第２のドライバを生成するドライバ組み込み処理と、
を実行させることを特徴とするデータ生成プログラム。
【請求項２】
前記データ生成／コード生成処理は、
前記生成条件式ごとに前記生成対象変数の上限に含まれる変数を特定し、前記変数が予め記録されている設定変数と一致していれば、前記設定変数に関連付けて記録されている前記変数に代入する値の取得先から値を取得するコードを生成し、
前記生成条件式を構成する前記生成対象変数の生成条件を定義する各部分式のうち上限に関する部分式を特定し、特定した部分式に用いられている比較の種類に基づいて前記生成対象変数の上限の候補を算出するコードを生成し、
前記生成対象変数の上限の候補から最小値を算出するコードを生成し、
対象の前記生成条件式に下限がなければ、前記最小値が前記生成条件を満たしていれば、前記最小値を入力データに設定するコードを生成することを特徴とする請求項１に記載のデータ生成プログラム。
【請求項３】
前記データ生成／コード生成処理は、
前記対象の前記生成条件式に下限があれば、
前記生成対象変数の下限に含まれる変数を特定し、前記変数が予め記録されている設定変数と一致していれば、前記設定変数に関連付けて記録されている前記変数に代入する値の取得先から値を取得するコードを生成し、
前記生成条件式を構成する前記生成対象変数の生成条件を定義する各部分式のうち下限に関する部分式を特定し、特定した部分式をチェック条件として記録するコードを生成し、
前記チェック条件を満たしていれば、前記最小値を入力データに設定するコードを生成することを特徴とする請求項２に記載のデータ生成プログラム。
【請求項４】
前記データ生成／コード生成処理は、
前記生成条件式ごとに前記生成対象変数の下限に含まれる変数を特定し、前記変数が予め記録されている設定変数と一致していれば、前記設定変数に関連付けて記録されている前記変数に代入する値の取得先から値を取得するコードを生成し、
前記生成条件式を構成する前記生成対象変数の生成条件を定義する各部分式のうち下限に関する部分式を特定し、特定した部分式に用いられている比較の種類に基づいて前記生成対象変数の下限の候補を算出するコードを生成し、
前記生成対象変数の下限の候補から最大値を算出するコードを生成し、
前記最大値が前記生成条件を満たしていれば、前記最大値を入力データに設定するコードを生成することを特徴とする請求項１に記載のデータ生成プログラム。
【請求項５】
擬似システムである検査対象プログラムと、前記検査対象プログラムの実行を制御するドライバと、機能仕様であるプロパティを用いて動作するモデル検査装置用のデータを生成するデータ生成方法であって、
記録部に記録された前記モデル検査装置に入力される前記プロパティごとの条件部から予め定義された入力項目となる生成対象変数を検出し、前記生成対象変数を含む前記プロパティの前記条件部を抽出し、
抽出した前記条件部を前記生成対象変数の生成条件を定義する生成条件式に変換して、前記生成条件式ごとの前記生成条件を満たす値を生成するコードを生成し、
前記コードを前記ドライバに組み込み第２のドライバを生成する、
ことを特徴とするデータ生成方法。
【請求項６】
擬似システムである検査対象プログラムと、前記検査対象プログラムの実行を制御するドライバと、機能仕様であるプロパティを用いて動作するモデル検査装置用のデータを生成するデータ生成装置であって、
記録部に記録された前記モデル検査装置に入力される前記プロパティごとの条件部から予め定義された入力項目となる生成対象変数を検出し、前記生成対象変数を含む前記プロパティの前記条件部を抽出する生成条件特定部と、
前記生成条件特定部で抽出した前記条件部を前記生成対象変数の生成条件を定義する生成条件式に変換して、前記生成条件式ごとの前記生成条件を満たす値を生成するコードを生成するデータ生成／コード生成部と、
前記コードを前記ドライバに組み込み第２のドライバを生成するドライバ組み込み部と、
を備えることを特徴とするデータ生成装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムモデル検査に用いる動的にテストデータを自動生成する技術に関する。
【背景技術】
【０００２】
従来、プログラムモデル検査として、テスト対象システムの振舞いを設計書・仕様書から取り出し、モデル検査の専用言語で記述したソフトウェア（擬似システム）を作成し、当該擬似システムにテストデータを入力することで実施するテストが知られている。モデル検査を行うためには一般に対象プログラムを動かすドライバとデータベースやネットワークなどの外部環境を抽象化するためのスタブが必要となる。設計書・仕様書に基づき、状態遷移の各状態が取りうる全ての組み合わせを抽出し、これらの組み合わせに対してテストデータを入力するという考え方がある。
【０００３】
図１６はモデル検査について示した図である。図１６はモデル検査（第１のテスト：網羅的な検査）を実施するときに用いる構成例を示す図である。クライアントの代わりにドライバ１６１から検査対象プログラム１６２に対してユーザ操作を模倣したデータ１６６が入力される。図１６では検査対象プログラム１６２と検査対象プログラム１６２に接続されているデータベーススタブ１６３とネットワークスタブ１６４に対して網羅的な検査が行われる。
【０００４】
ドライバ１６１は検査対象プログラム１６２をさまざまなバリエーションで複数回、連続的に呼び出していく。モデル検査装置１６５は、その中で機能仕様（プロパティ１６７に格納されている）が満たされているかチェックする。検査対象プログラム１６２をさまざまな実行順序で呼び出す際、引数として渡す入力データもさまざまなバリエーションを実行する必要がある。
【０００５】
また、対象プログラム１６２のあらゆる動作を想定して検査ができるドライバ１６１を作成するためには、対象プログラム１６２の操作イベント、および操作イベントの引数となるデータについて、仕様上可能な組み合わせを再現できるようにする必要がある。
【０００６】
そこで、従来は上記のような網羅的なドライバ作成のためのデータ設計について、各データについて機能仕様から同値分割を行い、その各同値クラスから代表値を選ぶ方法(境界値分析)が実施されている。
【０００７】
しかし、状態空間を明示的に探索するＪａｖａ  ＰａｔｈＦｉｎｄｅｒに代表されるようなプログラムモデル検査手法において従来の境界値分析を適用すると次のような問題がある。
【０００８】
境界値がプログラムの動作結果に依存して決定されるケースでは、プログラムを動作させる前に具体的な値を決定することができない。
例えば、商品注文システム（商品の注文を複数回連続して行えるシステム）において、注文できる数量が在庫数を超える場合は購入できないという仕様がある場合を考える。従来のデータ生成技術では、在庫数に対して具体的な値を（人があるいはランダムに）設定し（例えば１００）、そのケースにおいて在庫数＜数量を満たす数量を求める（数量は１０１）。
【０００９】
しかし、購入によって在庫数が変わるため１回目に注文できる数量と２回目に注文できる数量は異なる。２回目に注文できる数量を求めるには、１回注文をした結果の在庫数を算出する必要があり、プログラムを動作させずにそれを求めるには、在庫数算出に関するすべての仕様を機械が判断できる形で記述する必要がある。
【００１０】
図１７のＡ、Ｂに示すような商品注文システムで、もし１回目に数量＝９０個で購入したら、在庫数は在庫数（図１７のＡの１７２に記録）−購入数量（図１７のＡの１７１に入力）＝１０個になるので、次の購入時の境界値は１０個になる。しかし、在庫数１０個を求めるには「在庫数−数量が次の在庫数になる」という仕様が、機械が分かる形で記述されなければならないが、通常そのような仕様は記述しきれない。
【００１１】
また、図１７のＢに示すように、前述の境界値分析により作成したデータを、２回目以降の購入でも使うと次のような問題が発生する。例えば、在庫数１００個のときに購入数量１００個の場合、在庫数量（境界値）は０個になるが、１回目と同じデータを用いているため在庫が無いにも関らず３パターン（購入数量１０１、１００、９０）も検索を試している。
【００１２】
また、在庫数１００個のときに購入数量９０個の場合、在庫数量（境界値）は１０個になるが、１回目と同じデータを用いているため在庫が１０個にも関らず３パターン（購入数量１０１、１００、９０）も試している。さらに、数量１０以下のケースの検索を試せていない。
【００１３】
しかし、通常そのような仕様をすべて記述するのは現実的でないため、２回目以降も１回目の境界値分析で求めた値を使って検査せざるをえず、無駄な探索をしている。
従来のテストデータ生成手法としては、テスト実行中に通過しなかったルートを検出し、ソースプログラムを解析し、当該ルートを通るような入力パラメータ値を生成する技術などがある。
【００１４】
特許文献１では、プログラムのテスト実行中にコードカバレッジを測定し、テスト実行後、カバレッジ結果を解析して未実行ルートを特定し、その直前の分岐条件から未実行ルートを実行させるための条件を抽出する。その条件と関連する変数の変移情報（テスト実行中に計測）から、未実行ルートを通す入力データを特定する。しかし、テスト対象のプログラムを一度呼び出すなかで実行できるコードのカバレッジしかみることができない。すなわち同じプログラムを複数回呼び出すことで初めて到達できるコードを通すような入力データを生成することはできない。また、特許文献２、特許文献３などが提案されている。
【先行技術文献】
【特許文献】
【００１５】
【特許文献１】特開２０００−３４７９００号公報
【特許文献２】特開２００５−３２１８９２号公報
【特許文献３】特開２００７−３０４７７８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１６】
上記のような実情に鑑みてなされたものであり、プログラムモデル検査において、動的に境界値を特定して必要十分なデータを生成するためのドライバを生成するデータ生成プログラム、データ生成方法およびデータ生成装置を提供することを目的とする。
【課題を解決するための手段】
【００１７】
検査対象プログラムの実行を制御するドライバと、機能仕様であるプロパティを用いてモデル検査を実行するモデル検査装置用のデータの生成は、生成条件特定処理、データ生成／コード生成処理、ドライバ組み込み処理により行う。
【００１８】
生成条件特定処理は、記録部に記録された前記モデル検査装置に入力される前記プロパティごとの条件部から予め定義された入力項目となる生成対象変数を特定し、特定した生成対象変数を含む前記プロパティの前記条件部を抽出する。
【００１９】
データ生成／コード生成処理は、前記生成条件特定処理で抽出した前記条件部を、特定した生成対象変数の生成条件を定義する生成条件式に変換して、前記生成条件式ごとに前記生成条件を満たす値を生成するコードを生成する。
【００２０】
ドライバ組み込み処理は、前記コードを前記ドライバに組み込み第２のドライバを生成する。
【発明の効果】
【００２１】
プログラムモデル検査において、動的に境界値を特定して必要十分なデータを生成するためのドライバを生成することができる。
【図面の簡単な説明】
【００２２】
【図１】プログラムのモデル検査に用いるドライバ生成装置、データ生成装置、モデル検査装置から構成されるシステムを示す図である。
【図２】データ生成装置の構成を示す図である。
【図３】商品注文システムを示す図である。
【図４】Ａは「購入」操作（引数：「数量」）に関するプロパティを示す図である。Ｂはプロパティ格納テーブルの構成を示す図である。
【図５】Ａは画面項目定義格納テーブルの構成を示す図である。ＢはＤＢ項目定義格納テーブルの構成を示す図である。
【図６】生成条件特定部の動作について説明する図である。Ａは条件部格納テーブルの構成を示す図である。Ｂは生成条件式格納テーブルの構成を示す図である。
【図７】データ生成／コード生成部の動作を説明するためのフロー図である。
【図８】ＤＢ項目定義格納部から変数を取得するコードの生成を示すフロー図である。
【図９】画面項目定義格納部から変数を取得するコードの生成を示すフロー図である。
【図１０】下限チェック処理の動作を示すフロー図である。
【図１１】下限処理の動作を示すフロー図である。
【図１２】Ａはドライバの動作を示すフロー図である。Ｂはデータ生成／コード生成部で生成したコードを第１のドライバに組み込んだ第２のドライバのコードを示す図である。Ｃは、ドライバコード片格納テーブルを示す図である。
【図１３】Ａはコード片の動作を示すフロー図である。Ｂはデータ生成／コード生成部で生成した生成条件式格納テーブルに記録した識別番号Ｐ２Ｃ’に対応するコードを示す図である。
【図１４】モデル検査装置がアルゴリズムに従って、第２のドライバからに記載されているプロパティＰ１〜Ｐ５ごと生成されたコードを実行し、その時に生成される入力データ（数量）の例を示す表である。
【図１５】本発明の実施形態の装置を実現できるコンピュータのハードウェア構成の一例を示す図である。
【図１６】従来のモデル検査について示した図である。
【図１７】Ａは従来のモデル検査（商品注文システム）について示した図である。Ｂは従来のモデル検査における遷移を示す図である。
【発明を実施するための形態】
【００２３】
以下図面に基づいて、本発明の実施形態について詳細を説明する。
図１は、プログラムのモデル検査に用いるドライバ生成装置１、データ生成装置２、モデル検査装置３から構成されるシステムを示す図である。
【００２４】
ドライバ生成装置１は、検査対象プログラムを様々なバリエーションで複数回、連続的に呼び出す検査対象プログラムの実行を制御する第１のドライバ８を生成する。
データ生成装置２は、動的な境界値を特定してモデル検査に用いる必要十分なデータを生成するための第２のドライバ９を生成する。なお、必要十分なデータとは、モデル検査装置３で使用する入力データである。第２のドライバ９は、機能仕様を示すプロパティ７に基づいて生成されたコードを、第１のドライバ８に組み込んだものである。データ生成装置２の詳細については後述する。
【００２５】
モデル検査装置３は、検査対象プログラムと、検査対象プログラムの実行を制御する上記ドライバと、機能仕様を示すプロパティ７を用いて、プロパティ７に示される内容が満たされているかを判定する装置である。
【００２６】
データ生成装置２は、生成条件特定部４、データ生成／コード生成部５、ドライバ組み込み部６を備えている。
生成条件特定部４は、記録部（図２のプロパティ格納部２１などが記録されている記録部）に記録されたモデル検査装置３に入力されるプロパティ７ごとの条件部から予め定義された入力項目（図１の設計情報１０）となる生成対象変数を検出する。そして、生成対象変数を含むプロパティの条件部を抽出する。生成条件特定部４の詳細は後述する（図６）。
【００２７】
条件部について説明する。例えば、プロパティ７には仕様書や設計書に記載された機能仕様が「Ａ（条件部）ならばＢ（帰結部）」（Ａ−＞Ｂ）の形で示されており、条件部はＡに当たる部分である。
【００２８】
生成対象変数（図１の１１）は、例えば、表示装置の入力画面から利用者がキーボードなどの入力装置を利用して入力したデータなどを代入しておく変数である。
データ生成／コード生成部５は、生成条件特定部４で抽出したプロパティの条件部を生成対象変数の生成条件を定義する生成条件式に変換して、生成条件式ごとの生成条件を満たす値を生成するコード（データ生成コード片１３）を生成する。コードの生成は、記録部に記録されている図１の設計情報１０（図２の２２）、図１の設計情報１２（図２の２５）を参照し、参照した内容に基づいて生成する。データ生成／コード生成部５の詳細は後述する（図７〜図１１）。
【００２９】
生成条件式（図１の１１）は、生成対象変数を含むプロパティの条件部を抽出して、生成対象変数を定義する式に変換する。例えば、Ａ（条件部）が１０≦在庫数−数量  ａｎｄ  数量＞０であるときに生成対象変数が数量であれば、数量＜＝在庫数−１０  ａｎｄ
数量＞０のように生成対象変数を定義するように変換する。
【００３０】
ドライバ組み込み部６は、コードを第１のドライバに組み込み第２のドライバを生成する。ドライバ組み込み部６の詳細は後述する。
【００３１】
図２はデータ生成装置２の構成を示す図である。また、図３は商品注文システム３０を示す図である。
データ生成装置２は、生成条件特定部４、データ生成／コード生成部５を備えている。さらに、ドライバ組み込み部６、プロパティ格納部２１、画面項目定義格納部２２、生成条件格納部２３、ドライバコード格納部２４、ＤＢ項目定義格納部２５、データ生成／コード片格納部２６を備えている。
【００３２】
図３の商品注文システム３０は、１）購入時に入力した数量が在庫数以内なら購入可能、２）庫数−数量が１０未満なら警告をだす、３）数量に０未満をいれたらエラー、４）数量×単価が１００００円を超えたら金額オーバーとするような仕様のシステムである。
【００３３】
また、図３の画面３１は表示装置などに表示された商品注文システム３０の操作画面である。図３の数量の入力部３２には利用者が商品を購入する数量を入力する。図３の単価の表示部３３には商品の単価が表示されている。図３の購入ボタン３４は購入する数量を決定するときに使用する。検査対象プログラム３５は商品注文システム３０のプログラムである。なお、本例の記録部３６には商品の在庫数が１００個（図３の３７）あることが示されている。
【００３４】
上記のような商品注文システム３０のモデル検査を、図２のデータ生成装置２を用いて行なう場合について各部の説明をする。
プロパティ格納部２１は、上記説明したように仕様書や設計書に記載された機能仕様（図４のＡに記載されているプロパティ）が、図４のＢに示すようにプロパティ格納テーブルに記録されている。図４のＢの「識別番号」には、各プロパティに対応する識別番号Ｐ１〜Ｐ５が記録されている。また、図４のＢの「プロパティ」には、上記説明したように仕様書や設計書に記載された機能仕様が「Ａ（条件部）ならばＢ（帰結部）」（Ａ−＞Ｂ）の形で記録されている。
【００３５】
画面項目定義格納部２２は、上記説明した図１の設計情報１０を記録している。
例えば、商品注文システム３０の場合であれば、図５のＡに示すような画面項目定義格納テーブルを有している。「画面項目名」には画面３１に表示される項目名が記録されている（図３の数量、単価など）。「入出力区分」には、「画面項目名」に記録されている項目名に対応する入力と出力に関する情報が記録されている。図５のＡの「数量」に対応する「入出力区分」には、図３の入力部３２から注文する商品の数量を入力されることを示す「入力」が記録されている。図５のＡの「メッセージ」に対応する「入出力区分」には、画面３１に表示される警告（上記プロパティＰ２〜Ｐ５）が出力されることを示す「出力」が記録されている。図５のＡの「単価」に対応する「入出力区分」には、図３の表示部３３に表示される商品の単価が出力されることを示す「出力」が記録されている。「型」には、「画面項目名」に記録されている項目名に対応する入力と出力に関する情報のデータの型が記録されている。「数量」は商品の数量を示している変数であるので、例えば整数型であることが記録されている。図５のＡではＪＡＶＡ（登録商標）などのプログラム言語を用いているのでｉｎｔ型を示す「ｉｎｔ」が設定されている。同様に、「メッセージ」に対応する「型」にはｓｔｒｉｎｇ型を示す「ｓｔｒｉｎｇ」が記録されている。「単価」に対応する「型」にはｉｎｔ型を示す「ｉｎｔ」が記録されている。
【００３６】
ＤＢ項目定義格納部２５は、上記説明した図１の設計情報１２を記録している。
例えば、商品注文システム３０の場合であれば、図５のＢに示すようなＤＢ項目定義格納テーブルを有している。「ＤＢ項目名」には記録部のデータベースに記録されている項目名が記録されている（図３の在庫数など）。「テーブル名」には、「ＤＢ項目名」に記録されている項目名に対応するデータベースの名称が記録されている。図５のＢの「在庫数」に対応する「テーブル名」には、在庫ＤＢが記録されている。在庫ＤＢは複数の商品の在庫数に関するデータを記録しているデータベースで、データ生成装置２の外部または内部に設けられている。「注文数」に対応する「テーブル名」には、注文ＤＢが記録され
ている。注文ＤＢは複数の商品の注文数に関するデータを記録しているデータベースで、データ生成装置２の外部または内部に設けられている。「型」には、「ＤＢ項目名」に記録されている項目名に対応するデータの型が記録されている。「在庫数」は商品の在庫数を示しているので、例えば整数型であることが記録されている。図５のＢではＪＡＶＡなどを用いているのでｉｎｔ型を示す「ｉｎｔ」が設定されている。同様に、「注文数」に対応する「型」にはｉｎｔ型を示す「ｉｎｔ」が記録されている。
【００３７】
生成条件格納部２３は、上記説明した生成条件式を記録する生成条件式格納テーブルを有している。ドライバコード格納部２４は、上記説明した第１のドライバと第２のドライバを記録するドライバコード格納テーブルを有している。データ生成／コード片格納部２６は、第２のドライバを生成するために、データ生成／コード生成部５で生成された第１のドライバに組み込むコード片をドライバコード片格納テーブルに記録している。また、モデル検査にモデル検査装置３に入力する入力データも記録している。
【００３８】
生成条件式格納テーブル（図６のＢ）、ドライバコード片格納テーブル（図１２のＣ）については後述する。
検査対象プログラム格納部２７には、モデル検査装置３で検査する対象のプログラムが記録されている。
【００３９】
（生成条件特定部の動作説明）
図６を用い生成条件特定部４の動作について説明する。
まず、生成対象変数を含む条件部を抽出する。
生成条件特定部４は、プロパティ格納部２１に記録されているプロパティ格納テーブルを参照して、各プロパティの条件部を抽出し、さらに抽出した条件部に生成対象変数を含む条件部を抽出する。例えば、図４のＢに示したプロパティ格納テーブルのＰ１〜Ｐｎから条件部を特定する。その後、特定した条件部に生成対象変数である数量を含む条件部Ｐ１〜Ｐ５をさらに特定して、図６のＡに示した条件部格納テーブルに記録する。
【００４０】
条件部の特定は、例えば「→」を検出して、前半の文字列を条件部とし、後半の文字列を帰結部として検出することができる。
本例では、生成対象変数の特定は、図５のＡの画面項目定義格納テーブルを参照して、「入出力区分」が入力である数量を特定する。
【００４１】
条件部格納テーブルには、「識別番号」「生成対象変数を含む条件部」を有しており、「識別番号」には特定した生成対象変数を含む条件部に対応する番号を付する。図６のＡではＰ１Ｃ〜Ｐ５Ｃを付している。また、「生成対象変数を含む条件部」には特定した生成対象変数を含む条件部を記録する。
【００４２】
次に、生成条件特定部４は生成条件式を生成する。
図６のＡの画面項目定義格納テーブルを参照して、生成対象変数を定義する式に変換して生成条件式を生成し、生成条件式格納テーブルに記録する。図６のＡに示す例では、Ｐ１Ｃ〜Ｐ５Ｃに対応する条件部を、生成対象変数である数量を定義する式に変換する。
【００４３】
Ｐ１Ｃの場合、条件部は１０≦在庫数−数量  ａｎｄ  数量＞０と記載されているので、まず、１０≦在庫数−数量を変換して数量＜＝在庫数−１０にする。次に、Ｐ１Ｃの数量＞０は変形する必要が無いため変換を行なわず、上記数量＜＝在庫数−１０と数量＞０をａｎｄ（論理積）で結合する。
【００４４】
Ｐ２Ｃの場合、０＜＝在庫数−数量＜１０  ａｎｄ  数量＞０と記載されているので、０＜＝在庫数−数量を変換して数量＜＝在庫数を生成し、在庫数−数量＜１０を変換して
数量＞在庫数−１０を生成してａｎｄ（論理積）で結合する。また、Ｐ２Ｃの数量＞０についてはＰ１Ｃ同様に変換する必要がないので、数量＜＝在庫数  ａｎｄ  数量＞在庫数−１０と数量＞０をａｎｄ（論理積）で結合する。同様に、Ｐ３Ｃ〜Ｐ５Ｃについても生成対象変数である数量に対する生成条件式に変形を行い、その生成条件式を生成条件格納部２３の有する生成条件式格納テーブルに記録する。生成条件式格納テーブルは「識別番号」「生成条件式」を有し、「識別番号」には生成条件式に対応する識別番号Ｐ１Ｃ’〜Ｐ５Ｃ’が記録されている。「生成条件式」には生成条件式が記録されている。
【００４５】
なお、生成対象変数は複数あってもよく、その場合、それぞれの生成対象変数に対しての生成対象変数を含む生成条件式を生成する。また、同じ生成条件式に２個以上の異なる生成対象変数があるときは、それぞれについて生成条件式を生成する。
【００４６】
（データ生成／コード生成部の動作説明）
生成条件式ごとに生成対象変数の上限に含まれる変数を特定し、変数が予め記録されている設定変数と一致していれば、設定変数に関連付けて記録されている変数に代入する値の取得先から値を取得するコードを生成する。
【００４７】
次に、生成条件式を構成する生成対象変数の生成条件を定義する各部分式のうち上限に関する部分式を特定し、特定した部分式に用いられている比較の種類に基づいて生成対象変数の上限の候補を算出するコードを生成する。
【００４８】
そして、生成対象変数の上限の候補から最小値を算出するコードを生成し、対象の生成条件式に下限がなく、最小値が前記生成条件を満たしていれば、最小値を入力データに設定するコードを生成する。
【００４９】
図７に示すフローを用いてデータ生成／コード生成部５の動作について説明する。
ステップＳ１では、データ生成／コード生成部５が生成条件式格納テーブルに記録されている生成条件式に上限があるかを判定する。上限がある場合はステップＳ３に移行し、上限がない場合にはステップＳ２に移行する。上限の有無の判定は、例えば、Ｐ１Ｃ’：数量＜＝在庫数−１０  ａｎｄ  数量＞０の場合であれば、数量＜＝在庫数−１０と数量＞０それぞれに対して上限があるかを判定する。数量＜＝在庫数−１０の場合、数量は在庫数−１０以下であると定義されているので数量に上限があると判断する。数量＞０の場合は、数量は０よりも大きいと定義されているので上限はないと判断する。
【００５０】
ステップＳ２では後述する下限処理（図１１）を行う。
ステップＳ３では、生成条件式の上限に含まれる変数を１つ特定する。例えば、Ｐ１Ｃ’：数量＜＝在庫数−１０  ａｎｄ  数量＞０の場合であれば、数量の上限である在庫数−１０の中から変数を検出する。本例では在庫数が変数であると特定する。
【００５１】
ステップＳ４では、特定した変数がＤＢ項目定義格納テーブルに記録されているかを判定する。ＤＢ項目定義格納テーブルに特定した変数があれば（予め記録した設定変数と特定した変数が一致すれば）ステップＳ５に移行し、無ければステップＳ６に移行する。例えば、上記変数である在庫数がＤＢ項目定義格納テーブルに記録されているかを判定する。本例では在庫数がＤＢ項目定義格納テーブルに記録されているのでステップＳ５に移行する。
【００５２】
ステップＳ５では、変数に代入する値を、変数に関係するＤＢから取得するコードを生成する。例えば、上記変数である在庫数に代入する値を取得するためには、在庫データベースに記録されている値を取得する次のようなコードを生成する。ＪＡＶＡなどによりコードを生成する場合であれば、「ｉｎｔ  在庫数＝ｇｅｔＤＢ（“在庫ＤＢ”）．ｇｅｔ在庫数（）；」のようなコードを生成する。このコード生成の詳細については後述する図８を用いて説明する。
【００５３】
ステップＳ６では、特定した変数は画面項目定義格納テーブルに記録されているかを判定する。画面項目定義格納テーブルに特定した変数があれば（予め記録した設定変数と特定した変数が一致すれば）ステップＳ７に移行し、無ければステップＳ８に移行する。例えば、図３の画面３０に表示される値を出力するために必要な変数が、画面項目定義格納テーブルに記録されているかを判定する。そして、その変数が画面項目定義格納テーブルに記録されていればステップＳ７に移行する。
【００５４】
ステップＳ７では、上記ステップＳ６で特定した画面に関する変数に代入する値を、その変数に関係する画面から取得するコードを生成する。このコード生成の詳細については後述する（図９）。
【００５５】
ステップＳ８では、生成条件式格納テーブルに記録されている生成条件式に含まれる全ての変数を処理（ステップＳ３〜Ｓ７）したか判定する。全ての変数の処理がされていればステップＳ９に移行し、他にまだ変数がある場合はステップＳ３に移行する。全ての変数が処理されたか否かの判定は、例えば複数の変数を生成条件式が有している場合、ステップＳ３で特定した変数に対してステップＳ７までの処理が完了するごとに記録部に記録し、該記録した変数以外の変数を生成条件式から検索する。そして、記録部に記録した変数以外の変数が検出できなければ対象の生成条件式の全ての変数についてステップＳ３〜Ｓ７の処理が完了したと判定する。例えば、Ｐ１Ｃ’：数量＜＝在庫数−１０  ａｎｄ  数量＞０の場合であれば、在庫数だけなので、在庫数の処理が完了すればステップＳ９に移行する。
【００５６】
ステップＳ９では生成条件式の上限に関する部分式を１つ特定する。例えば、Ｐ１Ｃ’：数量＜＝在庫数−１０  ａｎｄ  数量＞０の場合であれば、部分式は数量＜＝在庫数−１０になる。
【００５７】
ステップＳ１０では、生成対象変数に対して比較（＝、＜＝、＜）をどのようにしているかを判定する。＜で比較していればＳ１１に移行し、＝または＜＝で比較していればステップＳ１２に移行する。上記部分式、数量＜＝在庫数−１０の場合であれば、＜＝を用いて比較をしているのでステップＳ１２に移行する。
【００５８】
ステップＳ１１では、生成条件式の上限−１を生成対象変数の候補とするコードを生成する。例えば、部分式が在庫数−１０の場合であれば、「数量候補ｓｅｔ．ａｄｄ（在庫数−１０−１）；」のコードを生成する。つまり、在庫数−１０−１を数量候補として記録する。
【００５９】
ステップＳ１２では、生成条件式の上限を生成対象変数の候補とするコードを生成する。例えば、部分式が在庫数−１０の場合であれば、「数量候補ｓｅｔ．ａｄｄ（在庫数−１０）：」のコードを生成する。
なお、数量候補ｓｅｔ．ａｄｄは、生成条件式の上限（例えば「在庫数−１０−１」または「在庫数−１０」）を生成対象変数の候補を特定するオブジェクトである。
【００６０】
ステップＳ１３では、生成条件式格納テーブルに記録されている生成条件式に含まれる全ての上限に関する部分式を処理したかを判定する。全ての部分式の処理がされていればステップＳ１４に移行し、他にまだ変数がある場合はステップＳ９に移行する。全ての部分式が処理されたか否かの判定は、例えば複数の部分式を生成条件式に有している場合、ステップＳ９で特定した部分式に対してステップＳ１３までの処理が完了するごとに記録部に記録し、該記録した部分式以外の部分式を生成条件式から検索する。そして、記録部
に記録した部分式以外の変数が検出できなければ対象の生成条件式の全ての変数についてステップＳ３〜Ｓ７の処理が完了したと判定する。例えば、Ｐ１Ｃ’：数量＜＝在庫数−１０  ａｎｄ  数量＞０の場合であれば、上限を含む部分式は数量＜＝在庫数−１０だけなので、数量＜＝在庫数−１０に関係する処理が完了すればステップＳ１４に移行する。
【００６１】
ステップＳ１４では、上限の最小値を選択するコードを生成する。対象の生成条件式の部分式のうち最小のものを選択する。ステップＳ１１またはＳ１２で生成した数量候補のうち最小のものを最小の値を生成対象変数に代入する。例えば、Ｐ１Ｃ’：数量＜＝在庫数−１０  ａｎｄ  数量＞０の場合であれば、コードとして「ｉｎｔ  数量＝数量候補ｓｅｔ．ｇｅｔ最小値（）；」を生成する。なお、「数量候補ｓｅｔ．ｇｅｔ最小値（）」は、数量候補から最小の値を選択するものである。
【００６２】
ステップＳ１５では生成条件式に下限があるかを判定する。対象の生成条件式に下限がある場合にはステップＳ１７に移行し、下限がない場合にはステップＳ１６に移行する。下限の判定は、上限を判定した対象の生成条件式を構成する部分式をそれぞれに対して下限を含んでいるか判定する。例えば、Ｐ１Ｃ’：数量＜＝在庫数−１０  ａｎｄ  数量＞０の場合は、各部分式（在庫数−１０、数量＞０）に下限が無いのでステップＳ１７に移行する。
【００６３】
ステップＳ１６では、モデル検査を行う際に用いる入力データに値を設定するコードを生成する。入力データの値を設定するコードは、各部分式の生成対象変数に対する条件を入力するコードと、該条件において数量候補として選択した値が、下限を満たしているかを判定するコードと、下限を満たしている値を入力データに記録するコードから構成されている。例えば、Ｐ１Ｃ’：数量＜＝在庫数−１０  ａｎｄ  数量＞０の場合であれば、ＪＡＶＡなどを用いてコードを生成すると、次のようなコードが生成される。
チェッカ．ａｄｄ（“＞”，０）；
ｉｆ（チェッカ．ｃｈｅｃｋ（数量））｛
ｉｎｐｕｔＤａｔａ．ｐｕｔ（“数量”，数量）；
}
【００６４】
上記「チェッカ．ａｄｄ（“＞”，０）；」コードでは、下限を判定するチェッカオブジェクトに部分式（数量＞０）の条件を示す「＞」「０」を設定する。次に、「ｉｆ（チェッカ．ｃｈｅｃｋ（数量））｛ｉｎｐｕｔＤａｔａ．ｐｕｔ（“数量”，数量）；｝により、チェッカオブジェクトに入力した該条件下で、数量（数量候補を代入した値）が下限を満たしているかを判定する。満たしている場合には入力データとして数量が記録される。
ステップＳ１７では後述する下限チェック処理を行う（図１０）。
【００６５】
（ＤＢ項目定義格納部に基づいたコードの生成）
図８は、ＤＢ項目定義格納部２５から変数を取得するコードの生成を示すフロー図であり、図７のステップＳ５で説明したコード生成の具体例である。
【００６６】
ステップＳ８１では、ＤＢ項目定義格納部２５のＤＢ項目定義格納テーブルから変数の型を取得し、型と変数を書き出す。図８では、在庫数が変数であるので、在庫数の前にＤＢ項目定義格納テーブルの「ＤＢ項目名」に記録されている在庫数に対応する「型」を設定する。図８ではｉｎｔが在庫数の前に記録される（ｉｎｔ  在庫数）。
【００６７】
ステップＳ８２では、変数が存在するテーブル名をＤＢ項目定義格納部２５のＤＢ項目定義格納テーブルから取得し、その対象のテーブルから値を取得する関数を書き出す。図８では、在庫数が変数であるので、在庫数の後にＤＢ項目定義格納テーブルの「ＤＢ項目
名」に記録されている在庫数と、該在庫数に対応する「テーブル名」に記録されている在庫ＤＢを取得する。例えば、予め用意したコード「＝ｇｅｔＤＢ(“［ｘ１］”)．ｇｅｔ［ｘ２］()；」の、ｘ１およびｘ２にそれぞれ在庫ＤＢと在庫数を代入して、「＝ｇｅｔＤＢ(“在庫ＤＢ”)．ｇｅｔ在庫数()；」を生成し、「ｉｎｔ  在庫数」の後に結合する。
【００６８】
（画面項目定義格納部に基づいたコードの生成）
図９は、画面項目定義格納部２２から画面３０から変数を取得するコードの生成を示すフロー図であり、図７のステップＳ７で説明したコード生成の具体例である。
【００６９】
ステップＳ９１では、画面項目定義格納部２２の画面項目定義格納テーブルから変数の型を取得し、型と変数を書き出す。図９では、単価が変数であるので、単価の前に画面項目定義格納テーブルの「画面項目名」に記録されている単価に対応する「型」を設定する。図９ではｉｎｔが単価の前に記録される（ｉｎｔ  単価）。
【００７０】
ステップＳ９２では画面３０から変数を取得する関数を書き出す。画面項目定義格納部２２の画面項目定義格納テーブルから取得し、その対象のテーブルから値を取得する関数を書き出す。図９では、単価が変数であるので、単価の後に画面項目定義格納テーブルの「画面項目名」に記録されている単価と、該単価に対応する「テーブル名」に記録されている在庫ＤＢを取得する。例えば、予め用意したコード「＝ｇｅｔ画面()．ｇｅｔ［ｙ１］()；」の、ｙ１に単価を代入して、「＝ｇｅｔ画面()．ｇｅｔ単価()；」を生成し、「ｉｎｔ  在庫数」の後に結合する。
【００７１】
（下限チェック処理）
対象の前記生成条件式に下限があれば、生成対象変数の下限に含まれる変数を特定し、変数が予め記録されている設定変数と一致していれば、設定変数に関連付けて記録されている変数に代入する値の取得先から値を取得するコードを生成する。
【００７２】
次に、生成条件式を構成する生成対象変数の生成条件を定義する各部分式のうち下限に関する部分式を特定し、特定した部分式をチェック条件として記録するコードを生成する。
【００７３】
チェック条件を満たしていれば、最小値を入力データに設定するコードを生成する。
図１０は、図７で説明した下限チェック処理（ステップＳ１７）の動作を示すフロー図である。
【００７４】
例えば、Ｐ２Ｃ’：数量＜＝在庫数  ａｎｄ  数量＞在庫数−１０  ａｎｄ  数量＞０の場合であれば、上限に関する処理（ステップＳ１〜Ｓ１５の処理）を終えて次のコードが生成されている。
ｉｎｔ  在庫数＝ｇｅｔＤＢ（“在庫ＤＢ”)．ｇｅｔ在庫数（）；
数量候補ｓｅｔ．ａｄｄ（在庫数）；
ｉｎｔ  数量＝数量候補ｓｅｔ．ｇｅｔ最小値（）；
上記コードは生成対象変数が数量であり、数量の上限が在庫数以下であるときの数量候補を生成するコードである。
【００７５】
ステップＳ１０１では生成条件式を構成する部分式のうち生成対象変数に対して下限に含まれる変数を１つ特定する。変数の特定は、例えばＰ２Ｃ’：数量＜＝在庫数  ａｎｄ
数量＞在庫数−１０  ａｎｄ  数量＞０の場合であれば、数量＞在庫数−１０は数量の下限を在庫数−１０で表しているため在庫数を変数と特定する。
【００７６】
ステップＳ１０２では、ステップＳ４と同様に、特定した変数はＤＢ項目定義格納部２
５のＤＢ項目定義格納テーブルにあるかを判定する（予め記録した設定変数と特定した変数が一致するかを判定）。ＤＢ項目定義格納テーブルにある場合はステップＳ１０３に移行し、ない場合にはステップＳ１０４に移行する。
【００７７】
ステップＳ１０３では、ステップＳ５と同様に、ＤＢ項目定義格納テーブルから変数に代入する値を取得するコードを生成する。例えば、Ｐ２Ｃ’：数量＜＝在庫数  ａｎｄ  数量＞在庫数−１０  ａｎｄ  数量＞０の場合であれば、ｉｎｔ  在庫数２＝ｇｅｔＤＢ(“在庫ＤＢ”)．ｇｅｔ在庫数（）；を生成する。なお、在庫数２は上記説明した変数在庫数と異なる。
【００７８】
ステップＳ１０４では、ステップＳ６と同様に、特定した変数が画面項目定義格納部２２の画面項目定義格納テーブルにあるかを判定する（予め記録した設定変数と特定した変数が一致するかを判定）。画面項目定義格納テーブルの入出力区分の出力にある場合はステップＳ１０５に移行し、ない場合にはステップＳ１０６に移行する。
【００７９】
ステップＳ１０５では、ステップＳ７と同様に、画面項目定義格納テーブルから変数に代入する値を取得するコードを生成する。
ステップＳ１０６では、ステップＳ７と同様に、生成条件式格納テーブルに記録されている生成条件式に含まれる全ての変数を処理（ステップＳ１０１〜Ｓ１０６）したか判定する。全ての変数の処理がされていればステップＳ１０７に移行し、他にまだ変数がある場合はステップＳ１０１に移行する。
【００８０】
ステップＳ１０７では条件式の下限に関する部分式を１つ特定する。例えば、Ｐ２Ｃ’：数量＜＝在庫数  ａｎｄ  数量＞在庫数−１０  ａｎｄ  数量＞０の場合であれば、数量＞在庫数−１０を特定する。
【００８１】
ステップＳ１０８では部分式をチェック条件として登録するコードを生成する（各部分式の生成対象変数に対する条件を入力するコード）。例えば、Ｐ２Ｃ’：数量＜＝在庫数
ａｎｄ  数量＞在庫数−１０  ａｎｄ  数量＞０の場合であれば、次のようなコードが作成される。
チェッカ．ａｄｄ（“＞”，在庫数２−１０）；
チェッカ．ａｄｄ（“＞”，０）；
【００８２】
上記「チェッカ．ａｄｄ（“＞”，在庫数２−１）；」コードでは、下限を判定するチェッカオブジェクトに部分式（数量＞在庫数−１０）の条件を示す「＞」「在庫数２−１０」を設定する。
また、上記「チェッカ．ａｄｄ（“＞”，０）；」コードでは、下限を判定するチェッカオブジェクトに部分式（数量＞０）の条件を示す「＞」「０」を設定する。
【００８３】
ステップＳ１０９では、生成条件式を構成するすべての下限をもつ部分式の処理をしたかを判定する。すべての下限をもつ部分式の処理が終了すればステップＳ１１０に移行し、まだ処理が残っている場合にはステップＳ１０７に移行する。
【００８４】
ステップＳ１１０では、チェック条件を満たせばモデル検査を行う際に用いる入力データに値を設定するコードを生成する。入力データの値を設定するコードは、該条件において数量候補として選択した値が下限を満たしているかを判定するコードと、下限を満たしている値を入力データに記録するコードから構成されている。例えば、Ｐ２Ｃ’：数量＜＝在庫数  ａｎｄ  数量＞在庫数−１０  ａｎｄ  数量＞０の場合であれば、次のようなコードが作成される。
ｉｆ（チェッカ．ｃｈｅｃｋ（数量））{
ｉｎｐｕｔＤａｔａ．ｐｕｔ(“数量”，数量)；
}
【００８５】
「ｉｆ（チェッカ．ｃｈｅｃｋ（数量））｛ｉｎｐｕｔＤａｔａ．ｐｕｔ（“数量”，数量）；」により、チェッカオブジェクトに入力した該条件下で、数量（数量候補を代入した値）が下限を満たしているかを判定する。満たしている場合には入力データとして数量が記録される。
【００８６】
（下限処理）
生成条件式ごとに生成対象変数の下限に含まれる変数を特定し、変数が予め記録されている設定変数と一致していれば、設定変数に関連付けて記録されている変数に代入する値の取得先から値を取得するコードを生成する。
【００８７】
生成条件式を構成する生成対象変数の生成条件を定義する各部分式のうち下限に関する部分式を特定し、特定した部分式に用いられている比較の種類に基づいて生成対象変数の下限の候補を算出するコードを生成する。
【００８８】
生成対象変数の下限の候補から最小値を算出するコードを生成し、最小値が生成条件を満たしていれば、最小値を入力データに設定するコードを生成する。
図１１は、図７で説明した下限処理（ステップＳ２）の動作を示すフロー図である。
【００８９】
ステップＳ１１１では条件式の下限に含まれる変数１つを特定する。生成条件式の下限に含まれる変数を１つ特定する。例えば、Ｐ３Ｃ’：数量＞在庫数  ａｎｄ数量＞０の場合であれば、部分式である数量＞在庫数と数量＞０のうち在庫数を、下限であり変数であると特定する。
【００９０】
ステップＳ１１２〜１１５は、図７で説明したステップＳ４〜Ｓ７と同様の処理を行う。本例では、「ｉｎｔ  在庫数＝ｇｅｔＤＢ（“在庫ＤＢ”）．ｇｅｔ在庫数（）；」のようなコードを生成する。
【００９１】
ステップＳ１１６では、生成条件式格納テーブルに記録されている生成条件式に含まれる全ての変数を処理（ステップＳ１１１〜Ｓ１１５）をしたか判定する。全ての変数の処理がされていればステップＳ１１７に移行し、他にまだ変数がある場合はステップＳ１１１に移行する。
【００９２】
ステップＳ１１７では、生成条件式の下限に関する部分式を１つ特定する。例えば、Ｐ３Ｃ’：数量＞在庫数  ａｎｄ数量＞０の場合であれば、部分式は数量＞在庫数になる。
ステップＳ１１８では、生成対象変数に対して比較（＞＝、＞）をどのようにしているかを判定する。＞＝で比較していればＳ１１１０に移行し、＞で比較していればステップＳ１１８に移行する。
【００９３】
ステップＳ１１９では、生成条件式の下限＋１を生成対象変数の候補とするコードを生成する。例えば、Ｐ３Ｃ’：数量＞在庫数  ａｎｄ数量＞０の場合であれば、各部分式に対して次のようなコードを生成する。
数量候補ｓｅｔ．ａｄｄ（在庫数＋１）；
数量候補ｓｅｔ．ａｄｄ（１）；
【００９４】
ステップＳ１１１０では、生成条件式の下限を候補とするコードを生成する。例えば、数量＞＝在庫数、数量＞＝０であれば、各部分式に対して次のようなコードが生成される。
数量候補ｓｅｔ．ａｄｄ（在庫数）；
数量候補ｓｅｔ．ａｄｄ（０）；
【００９５】
ステップＳ１１１１では、生成条件式格納テーブルに記録されている生成条件式に含まれる全ての下限に関する部分式を処理したかを判定する。全ての部分式の処理がされていればステップＳ１１１２に移行し、他にまだ変数がある場合はステップＳ１１１１に移行する。
【００９６】
ステップＳ１１１２では、下限の最大値を選択するコードを生成する。対象の生成条件式の部分式のうち最大のものを選択する。ステップＳ１１９またはＳ１１１０で生成した数量候補のうち最大のものを最大の値を生成対象変数に代入する。例えば、Ｐ３Ｃ’：数量＞在庫数  ａｎｄ数量＞０の場合であれば、次のようなコードを生成する。
ｉｎｔ  数量＝数量候補ｓｅｔ．ｇｅｔ最大値（）；
ｉｎｐｕｔＤａｔａ．ｐｕｔ（“数量”，数量）；
【００９７】
なお、「数量候補ｓｅｔ．ｇｅｔ最大値（）；」は、数量候補から最大の値を選択するものである。「ｉｎｐｕｔＤａｔａ．ｐｕｔ（“数量”，数量）；」により、数量候補オブジェクトにより取得した数量候補の最大値を数量に代入し、数量が入力データとして記録される。
【００９８】
（ドライバ組み込み部の動作説明）
図１２のＡはドライバの動作を示すフロー図である。図１２のＢはデータ生成／コード生成部５で生成したコードを第１のドライバに組み込んだ第２のドライバのコードを示す図である。図１２のＣはドライバコード片格納テーブルを示す図である。
【００９９】
まずドライバ組み込み部６は、第１のドライバをドライバコード格納テーブルから取得する。
次に、ドライバ組み込み部６は、例えば、図１２のＣに示したドライバコード片格納テーブルに記録した、識別番号Ｐ１Ｃ’〜Ｐ５Ｃ’に対応するコード片を、第１のドライバに組み込み第２のドライバを生成する。なお、コード片とはデータ生成／コード生成部５で生成したコードである。
【０１００】
例えば、図１２のＢに示すような第１のドライバ（破線枠のコードからＰ１Ｃ’〜Ｐ５Ｃ’を除いたコード）への組み込みは、予めデータ生成／コード生成部５で生成したコード片を組み込む場所を決めておき、その場所にコードを組み込んでいく。図１２のＢでは、各ｃａｓｅ文の後にコード片を埋め込んでいる。
【０１０１】
（第２のドライバの説明）
ドライバ組み込み部６により生成された第２のドライバは、モデル検査装置３がモデル検査で使用するデータを生成する際に用いる。
【０１０２】
図１２のＡに示すＰ１２１では、モデル検査装置３にどのコード片で入力データを生成するか問い合わせる。図１２のＢの場合であれば、コード「ｗｈｉｌｅ  （ｔｒｕｅ）｛ｓｗｉｔｃｈ（Ｖｅｒｉｆｙ．ｇｅｔＩｎｔ（４））｛」が実行され、モデル検査装置３のコード生成のアルゴリズムに従いコード片が指定される。コード生成のアルゴリズムは例えば、Ｐ１Ｃ’から順番にＰ５Ｃ’までの処理を行うようなアルゴリズムである。
【０１０３】
Ｐ１２２では、モデル検査装置３から上記指定されたコード片を用いて入力データが生成される。
Ｐ１２３では、検査対象プログラムを生成された入力データを用いて実行する。
【０１０４】
（コード片の動作説明）
図１３のＡはコード片の動作を示すフロー図である。図１３のＢはデータ生成／コード生成部５で生成した生成条件式格納テーブルに記録した識別番号Ｐ２Ｃ’に対応するコー
ドを示す図である。
【０１０５】
Ｐ１３１では、図１３のＢに示すコード「ｉｎｔ  在庫数＝ｇｅｔＤＢ（“在庫ＤＢ”）．ｇｅｔ在庫数（）；」により、在庫数を在庫ＤＢから取得する。
Ｐ１３２では、図１３のＢに示すコード「数量候補ｓｅｔ．ａｄｄ（在庫数）；」により、在庫数を数量の上限候補に設定する。
【０１０６】
Ｐ１３３では、図１３のＢに示すコード「ｉｎｔ  数量＝数量候補ｓｅｔ．ｇｅｔ最小値（）；」により、候補の中から最小のものを数量の値として取得する。
Ｐ１３４では、図１３のＢに示すコード「ｉｎｔ  在庫数２＝ｇｅｔＤＢ（“在庫ＤＢ”)．ｇｅｔ在庫数（）；」「チェッカ．ａｄｄ（“＞”，在庫数２−１０）；」により、在庫数を在庫ＤＢから取得し下限を計算し、下限チェックの値として設定する。
【０１０７】
Ｐ１３５では、図１３のＢに示すコード「チェッカ．ａｄｄ（“＞”，０)；」を下限チェックの値として設定する。
Ｐ１３６では、「ｉｆ（チェッカ．ｃｈｅｃｋ（数量））｛ｉｎｐｕｔＤａｔａ．ｐｕｔ（“数量”，数量）；｝」により、数量が設定した下限チェックを満たすかチェックを行い、通れば入力データとして登録する。
【０１０８】
図１４は、モデル検査装置３がアルゴリズムに従って、第２のドライバ９からに記載されているプロパティＰ１〜Ｐ５ごと生成されたコードを実行し、その時に生成される入力データ（数量）の例を示す表である。ここで、在庫数と単価は変数である。
【０１０９】
上記によりプログラムモデル検査において、動的に境界値を特定して必要十分なデータを生成するためのドライバを生成することができる。
また、プログラムの状態を考慮して適切な境界値が特定できるので、同じ値域に含まれるデータによる実行を複数行うような無駄な探索を抑制できるとともに、プロパティで定義された事前条件のバリエーションをもれなく実行することができる。その際、プロパティ以外のプログラムの動作仕様を機械が判断できる形で記述する必要がない。
【０１１０】
（本発明の実施形態がコンピュータプログラムとして実現される場合の構成）
図１５は、上記本発明の実施形態の装置を実現できるコンピュータのハードウェア構成の一例を示す図である。
【０１１１】
コンピュータのハードウェア１５０は、ＣＰＵ１５１、記録部１５２（ＲＯＭ、ＲＡＭ、ハードディスクドライブなど）、記録媒体読取装置１５３、入出力インタフェース１５４（入出力Ｉ／Ｆ）、通信インタフェース１５５（通信Ｉ／Ｆ）などを備えている。また、上記各構成部はバス１５６によってそれぞれ接続されている。
【０１１２】
ＣＰＵ１５１は、記録部１５２に格納されている上記説明した生成条件特定、データ生成／コード生成、ドライバ組み込みなどの処理を入力データに応じて実行する。
記録部１５２は、ＣＰＵ１５１が実行するプログラムやデータが記録されている。プロパティ格納テーブル、ＤＢ項目定義格納テーブル、画面項目定義格納テーブル、生成条件式格納テーブル、ドライバコード格納テーブル、ドライバコード片格納テーブル、検査対象プログラムが記録されている。また、ワークエリアなどとして使用される。
【０１１３】
記録媒体読取装置１５３は、ＣＰＵ１５１の制御にしたがって記録媒体１５３ａに対するデータのリード／ライトを制御する。そして、記録媒体１５３ａ、記録媒体読取装置１５３の制御で書き込まれたデータを記憶したり、記録媒体１５３ａに記憶されたデータを読み取らせたりする。また、着脱可能な記録媒体１５３ａは、コンピュータで読み取り可能な記録媒体として、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）などがある。光ディスクには、ＤＶＤ(Digital Versatile Disc)、ＤＶＤ−ＲＡＭ(Random Access Memory)、ＣＤ−ＲＯＭ(Compact Disc Read Only Memory)、ＣＤ−Ｒ(Recordable)／ＲＷ(ReWritable)などがある。光磁気記録媒体には、ＭＯ(Magneto-Optical disk)などがある。
【０１１４】
入出力インタフェース１５４には、入出力装置１５４ａ（マウス、キーボード、ディスプレイなど）が接続され、ユーザが入力した情報を受信し、バス１５６を介してＣＰＵ１５１に送信する。また、ＣＰＵ１５１からの命令に従ってディスプレイの画面上に操作情報などを表示する。
【０１１５】
通信インタフェース１５５は、必要に応じ、他のコンピュータとの間のＬＡＮ接続やインターネット接続や無線接続のためのインタフェースである。また、他の装置に接続され、外部装置からのデータの入出力を制御する。
【０１１６】
このようなハードウェア構成を有するコンピュータを１台または２台以上用いることによって、上記説明した各種処理機能（実施例で説明した処理（フローチャートなど））が実現される。その場合システムが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体１５３ａに記録しておくことができる。
【０１１７】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１１８】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１１９】
また、本発明は、上記実施の形態に限定されるものでなく、本発明の要旨を逸脱しない範囲内で種々の改良、変更が可能である。
【０１２０】
以上実施例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
擬似システムである検査対象プログラムと、前記検査対象プログラムの実行を制御するドライバと、機能仕様であるプロパティを用いてモデル検査を実行するモデル検査装置用のデータを生成するデータ生成プログラムであって、
コンピュータに、
記録部に記録された前記モデル検査装置に入力される前記プロパティごとの条件部から予め定義された入力項目となる生成対象変数を特定し、特定した生成対象変数を含む前記プロパティの前記条件部を抽出する生成条件特定処理と、
前記生成条件特定処理で抽出した前記条件部を、特定した生成対象変数の生成条件を定義する生成条件式に変換して、前記生成条件式ごとに前記生成条件を満たす値を生成するコードを生成するデータ生成／コード生成処理と、
前記コードを前記ドライバに組み込み第２のドライバを生成するドライバ組み込み処理と、
を実行させることを特徴とするデータ生成プログラム。
（付記２）
前記データ生成／コード生成処理は、
前記生成条件式ごとに前記生成対象変数の上限に含まれる変数を特定し、前記変数が予め記録されている設定変数と一致していれば、前記設定変数に関連付けて記録されている前記変数に代入する値の取得先から値を取得するコードを生成し、
前記生成条件式を構成する前記生成対象変数の生成条件を定義する各部分式のうち上限に関する部分式を特定し、特定した部分式に用いられている比較の種類に基づいて前記生成対象変数の上限の候補を算出するコードを生成し、
前記生成対象変数の上限の候補から最小値を算出するコードを生成し、
対象の前記生成条件式に下限がなく、前記最小値が前記生成条件を満たしていれば、前記最小値を入力データに設定するコードを生成することを特徴とする付記１に記載のデータ生成プログラム。
（付記３）
前記データ生成／コード生成処理は、
前記対象の前記生成条件式に下限があれば、
前記生成対象変数の下限に含まれる変数を特定し、前記変数が予め記録されている設定変数と一致していれば、前記設定変数に関連付けて記録されている前記変数に代入する値の取得先から値を取得するコードを生成し、
前記生成条件式を構成する前記生成対象変数の生成条件を定義する各部分式のうち下限に関する部分式を特定し、特定した部分式をチェック条件として記録するコードを生成し、
前記チェック条件を満たしていれば、前記最小値を入力データに設定するコードを生成することを特徴とする付記２に記載のデータ生成プログラム。
（付記４）
前記データ生成／コード生成処理は、
前記生成条件式ごとに前記生成対象変数の下限に含まれる変数を特定し、前記変数が予め記録されている設定変数と一致していれば、前記設定変数に関連付けて記録されている前記変数に代入する値の取得先から値を取得するコードを生成し、
前記生成条件式を構成する前記生成対象変数の生成条件を定義する各部分式のうち下限に関する部分式を特定し、特定した部分式に用いられている比較の種類に基づいて前記生成対象変数の下限の候補を算出するコードを生成し、
前記生成対象変数の下限の候補から最大値を算出するコードを生成し、
前記最大値が前記生成条件を満たしていれば、前記最大値を入力データに設定するコードを生成することを特徴とする請求項１に記載のデータ生成プログラム。
（付記５）
擬似システムである検査対象プログラムと、前記検査対象プログラムの実行を制御するドライバと、機能仕様であるプロパティを用いて動作するモデル検査装置用のデータを生成するデータ生成方法であって、
記録部に記録された前記モデル検査装置に入力される前記プロパティごとの条件部から予め定義された入力項目となる生成対象変数を検出し、前記生成対象変数を含む前記プロパティの前記条件部を抽出し、
抽出した前記条件部を前記生成対象変数の生成条件を定義する生成条件式に変換して、前記生成条件式ごとの前記生成条件を満たす値を生成するコードを生成するデータ生成／コード生成をし、
前記コードを前記ドライバに組み込み第２のドライバを生成する、
ことを特徴とするデータ生成方法。
（付記６）
擬似システムである検査対象プログラムと、前記検査対象プログラムの実行を制御するドライバと、機能仕様であるプロパティを用いて動作するモデル検査装置用のデータを生
成するデータ生成装置であって、
記録部に記録された前記モデル検査装置に入力される前記プロパティごとの条件部から予め定義された入力項目となる生成対象変数を検出し、前記生成対象変数を含む前記プロパティの前記条件部を抽出する生成条件特定部と、
前記生成条件特定部で抽出した前記条件部を前記生成対象変数の生成条件を定義する生成条件式に変換して、前記生成条件式ごとの前記生成条件を満たす値を生成するコードを生成するデータ生成／コード生成部と、
前記コードを前記ドライバに組み込み第２のドライバを生成するドライバ組み込み部と、
を備えることを特徴とするデータ生成装置。
（付記７）
前記データ生成／コード生成は、
前記生成条件式ごとに前記生成対象変数の上限に含まれる変数を特定し、前記変数が予め記録されている設定変数と一致していれば、前記設定変数に関連付けて記録されている前記変数に代入する値の取得先から値を取得するコードを生成し、
前記生成条件式を構成する前記生成対象変数の生成条件を定義する各部分式のうち上限に関する部分式を特定し、特定した部分式に用いられている比較の種類に基づいて前記生成対象変数の上限の候補を算出するコードを生成し、
前記生成対象変数の上限の候補から最小値を算出するコードを生成し、
対象の前記生成条件式に下限がなく、前記最小値が前記生成条件を満たしていれば、前記最小値を入力データに設定するコードを生成することを特徴とする付記５に記載のデータ生成方法。
（付記８）
前記データ生成／コード生成は、
前記対象の前記生成条件式に下限があれば、
前記生成対象変数の下限に含まれる変数を特定し、前記変数が予め記録されている設定変数と一致していれば、前記設定変数に関連付けて記録されている前記変数に代入する値の取得先から値を取得するコードを生成し、
前記生成条件式を構成する前記生成対象変数の生成条件を定義する各部分式のうち下限に関する部分式を特定し、特定した部分式をチェック条件として記録するコードを生成し、
前記チェック条件を満たしていれば、前記最小値を入力データに設定するコードを生成することを特徴とする付記７に記載のデータ生成方法。
（付記９）
前記データ生成／コード生成は、
前記生成条件式ごとに前記生成対象変数の下限に含まれる変数を特定し、前記変数が予め記録されている設定変数と一致していれば、前記設定変数に関連付けて記録されている前記変数に代入する値の取得先から値を取得するコードを生成し、
前記生成条件式を構成する前記生成対象変数の生成条件を定義する各部分式のうち下限に関する部分式を特定し、特定した部分式に用いられている比較の種類に基づいて前記生成対象変数の下限の候補を算出するコードを生成し、
前記生成対象変数の下限の候補から最大値を算出するコードを生成し、
前記最大値が前記生成条件を満たしていれば、前記最大値を入力データに設定するコードを生成することを特徴とする付記５に記載のデータ生成方法。
（付記１０）
前記データ生成／コード生成部は、
前記生成条件式ごとに前記生成対象変数の上限に含まれる変数を特定し、前記変数が予め記録されている設定変数と一致していれば、前記設定変数に関連付けて記録されている前記変数に代入する値の取得先から値を取得するコードを生成し、
前記生成条件式を構成する前記生成対象変数の生成条件を定義する各部分式のうち上限
に関する部分式を特定し、特定した部分式に用いられている比較の種類に基づいて前記生成対象変数の上限の候補を算出するコードを生成し、
前記生成対象変数の上限の候補から最小値を算出するコードを生成し、
対象の前記生成条件式に下限がなく、前記最小値が前記生成条件を満たしていれば、前記最小値を入力データに設定するコードを生成することを特徴とする付記６に記載のデータ生成装置。
（付記１１）
前記データ生成／コード生成部は、
前記対象の前記生成条件式に下限があれば、
前記生成対象変数の下限に含まれる変数を特定し、前記変数が予め記録されている設定変数と一致していれば、前記設定変数に関連付けて記録されている前記変数に代入する値の取得先から値を取得するコードを生成し、
前記生成条件式を構成する前記生成対象変数の生成条件を定義する各部分式のうち下限に関する部分式を特定し、特定した部分式をチェック条件として記録するコードを生成し、
前記チェック条件を満たしていれば、前記最小値を入力データに設定するコードを生成することを特徴とする付記１０に記載のデータ生成装置。
（付記１２）
前記データ生成／コード生成部は、
前記生成条件式ごとに前記生成対象変数の下限に含まれる変数を特定し、前記変数が予め記録されている設定変数と一致していれば、前記設定変数に関連付けて記録されている前記変数に代入する値の取得先から値を取得するコードを生成し、
前記生成条件式を構成する前記生成対象変数の生成条件を定義する各部分式のうち下限に関する部分式を特定し、特定した部分式に用いられている比較の種類に基づいて前記生成対象変数の下限の候補を算出するコードを生成し、
前記生成対象変数の下限の候補から最大値を算出するコードを生成し、
前記最大値が前記生成条件を満たしていれば、前記最大値を入力データに設定するコードを生成することを特徴とする付記６に記載のデータ生成装置。
【符号の説明】
【０１２１】
１      ドライバ生成装置
２      データ生成装置
３      モデル検査装置
４      生成条件特定部
５      データ生成／コード生成部
６      ドライバ組み込み部
７      プロパティ
８      第１のドライバ
９      第２のドライバ
１０      設計情報（画面項目定義）
１１      生成対象変数  生成条件
１２      設計情報（画面項目定義）
１３      データ生成コード片
２１      プロパティ格納部
２２      画面項目定義格納部
２３      生成条件格納部
２４      ドライバコード格納部
２５      ＤＢ項目定義格納部
２６      データ生成／コード片格納部
２７      検査対象プログラム格納部
１５１      ＣＰＵ
１５２      記録部
１５３      記録媒体読取装置
１５３ａ      記録媒体
１５４      入出力インタフェース
１５４ａ      入出力装置
１５５      通信インタフェース
１５６      バス
【図１】
2010191508.tif 000003
【図２】
2010191508.tif 000004
【図３】
2010191508.tif 000005
【図４】
2010191508.tif 000006
【図５】
2010191508.tif 000007
【図６】
2010191508.tif 000008
【図７】
2010191508.tif 000009
【図８】
2010191508.tif 000010
【図９】
2010191508.tif 000011
【図１０】
2010191508.tif 000012
【図１１】
2010191508.tif 000013
【図１２】
2010191508.tif 000014
【図１３】
2010191508.tif 000015
【図１４】
2010191508.tif 000016
【図１５】
2010191508.tif 000017
【図１６】
2010191508.tif 000018
【図１７】
2010191508.tif 000019