(57)【要約】【課題】プログラムモデル検査の順序に起因して検査対象の関数が実行されなくなる現象を回避し、関数の実行回数の制限を安全に行うことができ、プログラムモデル検査の実行時間を削減するプログラムモデル検査を提供する。【解決手段】プログラムモデル検査装置が、現在の状態から実行可能な関数の実行回数が、実行回数上限値以上である場合に、該関数の実行を抑止して該関数実行系列の検査を終了し、該関数を該現在の状態に関連付けて実行を抑止する関数を定義した実行抑止関数テーブルに記録するステップと、他の関数実行系列において、現在の状態への遷移がすでに行われているとき、実行抑止関数テーブルに該現在の状態と該現在の状態から実行可能な関数との組み合わせがあるか否かを判定する判定ステップと、判定ステップにおいて組み合わせがある場合にのみ該関数を実行するステップと、を実行するプログラムモデル検査である。【選択図】図２
2011008628.tif 000002
【特許請求の範囲】
【請求項１】
プログラムモデル検査装置が、複数の関数実行系列を備える検査対象プログラムにおける各状態から実行可能な関数のうち、該関数実行系列内での実行回数が実行回数上限値未満のものを実行する、プログラムモデル検査方法であって、
前記プログラムモデル検査装置が、
現在の状態から実行可能な関数の実行回数が、前記実行回数上限値以上である場合に、該関数の実行を抑止して該関数実行系列の検査を終了し、該関数を該現在の状態に関連付けて実行を抑止する関数を定義した実行抑止関数テーブルに記録するステップと、
他の関数実行系列において、現在の状態への遷移がすでに行われているとき、前記実行抑止関数テーブルに該現在の状態と該現在の状態から実行可能な関数との組み合わせがあるか否かを判定する判定ステップと、
前記判定ステップにおいて前記組み合わせがある場合にのみ該関数を実行するステップと、
を実行することを特徴とするプログラムモデル検査方法。
【請求項２】
前記実行抑止関数テーブルにおいて、予め設定した数以上の状態と関連付けられている関数が検出されたときに、該関数の前記実行回数上限値を増加させるステップをさらに実行することを特徴とする請求項１に記載のプログラムモデル検査方法。
【請求項３】
複数の関数実行系列を備える検査対象プログラムにおける各状態から実行可能な関数のうち、該関数実行系列内での実行回数が実行回数上限値未満のものを実行する、プログラムモデル検査プログラムであって、
コンピュータに、
現在の状態から実行可能な関数の実行回数が、前記実行回数上限値以上である場合に、該関数の実行を抑止して該関数実行系列の検査を終了し、該関数を該現在の状態に関連付けて実行を抑止する関数を定義した実行抑止関数テーブルに記録する処理と、
他の関数実行系列において、現在の状態への遷移がすでに行われているとき、前記実行抑止関数テーブルに該現在の状態と該現在の状態から実行可能な関数との組み合わせがあるか否かを判定する判定処理と、
前記判定処理において前記組み合わせがある場合にのみ該関数を実行する処理と、
を実行させることを特徴とするプログラムモデル検査プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムモデル検査の検査時間を削減するプログラムモデル検査方法、プログラムモデル検査プログラムに関する。
【背景技術】
【０００２】
プログラムモデル検査は、対象プログラムの規模が大きくなるにつれて検査時間が増大する。つまり、対象のプログラムの規模が大きくなると探索する状態遷移グラフが巨大になり、探索時間が膨大になる。
【０００３】
そこで、従来は関数の実行回数に制限を設けることで現実的な時間で計算可能な規模に探索範囲を抑える方法が用いられている。例えば、実行する関数を選択する際、その状態に至る関数実行系列のなかでＮ回呼び出だされた関数は除外するという制限をいれて規模を抑える技術が知られている。
【０００４】
また以下の２つの例はプログラムモデル検査の例ではないが、関数の実行回数を制限することで処理すべき規模を抑えた技術の例である。例えば、人手によるシミュレーションベクトルの作り直しやソフトウェアの作り直しを必要とせずに、不要なシミュレーションの繰返しを避けることが可能な論理検証の高速化手法が知られている。すなわち、シミュレータのシミュレーションモデルがメインルーチンを動作させることによってソフトウェアのシミュレーションを行い。トレーサがシミュレーションモデルによるメインルーチンの動作をトレースし、同じルーチンが繰返し行われることを検出すると、そのルーチンの代行をエージェントに指示する。エージェントはそのルーチンを代行して実行し、その結果をシミュレーションモデルに渡す。
【０００５】
また、プログラムのテスト方法において、テスト対象プログラムに含まれる頻出経路の繰り返しの計測を抑止し、無用なオーバーヘッドを回避する方法が知られている。すなわち、情報処理装置のカバレジ計測制御プログラムは、計測対象プログラムの実行によって通過した各命令あるいは少なくとも分岐命令の通過回数がその測定上限回数に達したか否か判定する。カバレジ計測プログラムは、その命令が測定回数に達していない場合に呼び出され、その命令の通過回数を更新する。
【０００６】
しかしながら、プログラムモデル検査で関数の実行回数を制限して検査を実施した場合、ある状態から実行する関数の選択順の違いによって、探索の結果できあがる状態遷移グラフが異なる場合がある。例えば、ある状態から２つの関数が実行可能な場合において、一方の関数を先に探索するとすべての関数を実行できるが、他方の関数を先に実行して探索すると一方の関数と他方の関数以外の関数を呼び出す前に実行回数の制限により探索が終了してしまうという場合がある。
【０００７】
プログラムモデル検査で関数の実行回数を制限して検査を実施する状態遷移図と表を図２１に示す。図２１のＡ、Ｂ、Ｃに示す例では、実行可能な関数として開始関数、商品選択関数、入力完了関数、購入関数があり、各関数に実行回数の制限回数として１回が予め設定されているとする。
【０００８】
まず、図２１のＡでは初期状態において（１）開始関数が実行されると状態１に遷移し、開始関数に関連付けて実行回数１が記録される(Ａの表参照)。次に、図２１のＢでは状態１において、（２）商品選択関数が実行され状態２に移行し、商品選択関数に関連付けて実行回数１が記録される(Ｂの表参照)。次に、状態２において商品選択関数を実行しようとした場合、既に商品選択関数は実行されているため、予め設定した制限回数１回に基づいて商品選択関数の実行を制限されてしまう。よって、図２１のＢの状態２では入力完了関数を選択し状態３に遷移する。状態３では購入関数を選択して実行する。
【０００９】
図２１のＣに示す例では、初期状態において（１）開始関数が実行して状態１に遷移し、状態１において（３）入力完了関数を実行して状態４に遷移する。このとき開始関数と入力完了関数に関連付けられて実行回数１が記録される(Ｃの表参照)。この場合、開始関数と入力完了関数は、予め設定した制限回数１回に基づいて開始関数と入力完了関数の実行を制限されてしまうため、（４）商品選択関数を選択し状態２に遷移する。しかし、状態２に遷移したときには開始関数、入力完了関数、商品選択関数は既に１回実行されているため状態３に移行することができなくなる(Ｃの表参照)。すなわち、制限回数により状態３に遷移しても購入関数が実行することができないため、検査対象の関数が実行されないまま探索が終了してしまい検査を十分に行えない。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開２０００−２０３４６号公報
【特許文献２】特開２００５−３３９２０４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
上記のような実情に鑑みてなされたものであり、プログラムモデル検査の探索順序に起因して検査対象の関数が実行されなくなる現象を回避し、関数の実行回数の制限を安全に行うことができ、プログラムモデル検査の実行時間を削減するプログラムモデル検査方法、プログラムモデル検査プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
プログラムモデル検査において、複数の関数実行系列を備える検査対象プログラムにおける各状態から実行可能な関数のうち、該関数実行系列内での実行回数が実行回数上限値未満のものを実行する。現在の状態から実行可能な関数の実行回数が、上記実行回数上限値以上である場合に、該関数の実行を抑止して該関数実行系列の検査を終了し、該関数を該現在の状態に関連付けて実行を抑止する関数を定義した実行抑止関数テーブルに記録する。他の関数実行系列において、現在の状態への遷移がすでに行われているとき、上記実行抑止関数テーブルに該現在の状態と該現在の状態から実行可能な関数との組み合わせがあるか否かを判定し、判定において上記組み合わせがある場合にのみ該関数を実行する。
【００１３】
また、実行抑止関数テーブルにおいて、予め設定した数以上の状態と関連付けられている関数が検出されたときに、該関数の上記実行回数上限値を増加させる。
【発明の効果】
【００１４】
プログラムモデル検査の探索順序に起因して検査対象の関数が実行されなくなる現象を回避し、関数の実行回数の制限を安全に行うことができ、プログラムモデル検査の実行時間を削減することができる。
【図面の簡単な説明】
【００１５】
【図１】プログラムモデル検査装置の構成の一例について示した図である。
【図２】実施例１のプログラムモデル検査装置の構成を示す図である。
【図３】Ａは商品注文システムの表示画面を示す図である。Ｂは商品注文システムの状態遷移を示す図である。Ｃは商品注文システムの状態遷移グラフ管理テーブルの一例を示す図である。
【図４】プログラム制御部の動作を示す図を示す（プログラム制御処理）。
【図５】Ａは初期状態で開始関数が実行され状態１に遷移する場合の状態遷移を示す図である。Ｂは初期状態の実行選択肢テーブルを示す図である。Ｃは状態１の実行選択肢テーブルを示す図である。
【図６】Ａは初期状態で開始関数が実行され状態１に遷移し、状態１から商品選択関数を実行することにより状態２に遷移した場合の状態遷移を示す図である。Ｂは状態１、２の実行系列テーブルを示す図である。
【図７】Ａは状態２において商品選択をしても状態２に戻るような状態遷移を示す図である。Ｂは実行系列テーブルを示す図である。Ｃは実行選択肢テーブルを示す図である。
【図８】Ａは実行可能関数絞込部による実行回数による選択肢の絞込みのフローを示す図である。Ｂは実行系列テーブルを示す図である。Ｃは実行回数テーブルを示す図である。Ｄ、Ｆは実行選択肢テーブルを示す図である。Ｅは実行抑止関数テーブルを示す図である。
【図９】実行可能関数絞込処理を説明するための状態遷移の例を示す図である。
【図１０】実行可能関数絞込処理の動作を示すフロー図である。
【図１１】実行可能関数絞込処理を説明するための状態遷移の例を示す図である。
【図１２】Ａは実行回数により関数の実行抑止を行った状態に再度到達した場合の実行可能関数絞込部の実行回数による選択肢の絞込みのフローを示す図である。Ｂは実行系列テーブルを示す図である。Ｃは実行回数テーブルを示す図である。Ｄ、Ｆは実行選択肢テーブルを示す図である。Ｅは実行抑止関数テーブルを示す図である。
【図１３】実行抑止関数テーブルを示す図である。
【図１４】実施例２のプログラムモデル検査装置の構成を示す図である。
【図１５】Ａは実施例２の動作を示すフロー図を示す。Ｂは実行回数上限テーブルを示す図である。
【図１６】実施例３のプログラムモデル検査装置の構成を示す図である。
【図１７】実施例３の動作を示すフロー図である（モデル検査再実行処理）。
【図１８】Ａは１回目の状態遷移を示す図である。Ｂは実行抑止関数テーブルを示す図である。Ｃは実行回数上限テーブルを示す図である。
【図１９】Ａは２回目の状態遷移を示す図である。Ｂは実行抑止関数テーブルを示す図である。Ｃは実行回数上限テーブルを示す図である。
【図２０】実施形態の装置を実現できるコンピュータのハードウェア構成の一例を示す図である。
【図２１】Ａ〜Ｃはプログラムモデル検査で関数の実行回数を制限して検査を実施する従来例を示す遷移図と表である。
【発明を実施するための形態】
【００１６】
以下図面に基づいて、本発明の実施形態について詳細に説明する。
（実施例１）
（構成）
図１はプログラムモデル検査装置の一例について示した図である。図１はプログラムモデル検査を実施するときに用いる構成例を示す図である。ここで、プログラムモデル検査は、テスト対象システムの振舞いを設計書・仕様書から取り出し、モデル検査の専用言語で記述したソフトウェア（擬似システム）を作成し、当該擬似システムにテストデータを入力することで実施するテストである。プログラムモデル検査を行うためには一般に対象プログラムを動かすドライバとデータベースやネットワークなどの外部環境を抽象化するためのスタブが必要となる。
【００１７】
プログラムモデル検査装置５は、ドライバ１を介してクライアントの代わりに検査対象プログラム２に対してユーザ操作を模倣した入力データ６を検査対象プログラム２に入力して、検査対象プログラム２とデータベーススタブ３とネットワークスタブ４に対して網羅的な検査を行う。そして、プログラムモデル検査装置５は、検査結果がプロパティ７に格納されている内容（機能仕様）を満たしているかをチェックして判定を行う。
なお、プログラムモデル検査装置５は、上記説明したプログラムモデル検査を実行するソフトウェアを、コンピュータ（ＰＣなど）にインストールした装置でもよい。
【００１８】
図２はプログラムモデル検査装置５の構成を示す図である。プログラムモデル検査装置５は、プログラム制御部２１、プログラム実行部２２、実行可能関数絞込部２３、記録部２４を備えている。なお、プログラム制御部２１、プログラム実行部２２、実行可能関数絞込部２３は、ＣＰＵやプログラマブルなデバイスを用いて実現することもできる。また、プログラム制御部２１、プログラム実行部２２、実行可能関数絞込部２３の機能を実現するソフトウェアを、コンピュータ（ＰＣなど）にインストールしたものでもよい。また、記録部２４はＣＰＵに内蔵されているメモリでもよいし外部に設けた記録装置などであってもよい。
【００１９】
プログラム制御部２１は、検査対象プログラムから内部状態と実行可能関数を取得し、実行可能関数絞込部２３に実行可能関数の絞込みを指示し、絞り込んだ実行選択肢テーブル２６の中から関数を一つ選択し、プログラム実行部２２にその関数での実行を指示する。
【００２０】
プログラム実行部２２は、プログラム制御部２１により指示された関数によりプログラムを実行する。
実行可能関数絞込部２３は、実行系列テーブル２７を参照して実行回数が上限に到達した関数を実行選択肢テーブル２６から削除し、実行抑止関数テーブル２９に追加する。また、別の実行系列において実行回数の上限に到達せずに実行抑止関数テーブル２９に記録されている関数は実行抑止関数テーブル２９から削除し、実行選択肢テーブル２６に追加する。
【００２１】
記録部２４は、状態遷移グラフ管理テーブル２５、実行選択肢テーブル２６、実行系列テーブル２７、実行回数テーブル２８、実行抑止関数テーブル２９を有している。
状態遷移グラフ管理テーブル２５は、状態遷移グラフを「遷移元状態」「実行関数」「遷移先状態」により示すテーブルである。状態遷移グラフ管理テーブル２５の「遷移元状態」にはプログラムの関数が実行されるたびに遷移元のプログラムの状態を示す識別番号などが記録され、「実行関数」には実行した関数を識別するために関数名などが記録され、「遷移先状態」には現在のプログラムの状態が記録される。なお、「遷移元状態」「実行関数」「遷移先状態」は、プログラム制御部２１により「遷移元状態」に関連付けて「実行関数」と「遷移先状態」が記録される。
【００２２】
検査対象プログラムを商品注文システムとし、図３のＡに示す表示画面から商品を購入する例を用いて状態遷移グラフの生成について説明する。
商品注文システムは、ＰＣなどのディスプレイに表示され商品購入画面３１の入力ボックス３２に、購入する商品に対応する商品コードを入力して商品を注文するものとする。商品注文システムは、商品コード入力後、ユーザが「商品選択」ボタン３３を画面上で押下（選択）すると、「入力完了」ボタン３４、「入力変更」ボタン３５がアクティブ状態になる。この状態で「入力完了」ボタン３４を画面上で押下（選択）すると購入する商品が決定され、「購入」ボタン３６がアクティブ状態になり、「購入」ボタン３６を画面上で押下（選択）すると、ネットワークを介して注文が発注される。「入力変更」ボタン３５を画面上で押下（選択）すると、再度商品コードを入力する状態に遷移する。
【００２３】
なお、商品購入画面３１により入力された情報（商品コード、「商品選択」ボタン３３、「入力完了」ボタン３４、「入力変更」ボタン３５、「購入」ボタン３６、が選択されたときにシステムに入力される情報など）によって決まるシステム内部の状態を内部状態という。
【００２４】
図３のＢに上記説明した商品注文システムの状態遷移を示し、図３のＣに商品注文システムの状態遷移グラフ管理テーブル２５を示す。
図３のＢに示す状態遷移の例であれば、初期状態において「開始」が実行され、現在の状態である「状態１」に遷移する。このとき、状態遷移グラフ管理テーブル２５には「遷移元状態」に「初期状態」、「実行関数」に「開始」、「遷移先状態」に「状態１」が記録される。
【００２５】
ここで、「状態１」が示す状態とは、ディスプレイに商品購入画面３１が表示され、入力ボックス３２から購入する商品に対応する商品コードが入力可能になり、商品コードを入力すると「商品選択」ボタン３３と「入力完了」ボタン３４を選択することが可能な状態である。
【００２６】
次に、「状態１」に示す状態からは、「商品選択」ボタン３３を選択して「状態２」に遷移する場合と、「入力完了」ボタン３４して「状態５」に遷移する場合が考えられる。そのため、図３のＣの例では、「遷移元状態」の「状態１」に関連付けて「実行関数」に「商品選択」が記録され、「遷移先状態」に「状態２」が記録される。さらに、「遷移元状態」の「状態１」に関連付けて「実行関数」に「入力完了」が記録され、「遷移先状態」に「状態５」が記録される。また、「遷移元状態」の「状態２」〜「状態５」についても同様に、「遷移元状態」に関連付けて「実行関数」「遷移先状態」の内容が記録される。
【００２７】
なお、本例では、記録する内容を「初期状態」「開始」「状態１」などと便宜上記載するが、実際の「遷移元状態」「遷移先状態」に対応するセルには「初期状態」「状態１」・・・などに対応する識別番号またはコードなどが記録される。また、「実行関数」にはプログラムソースで使用されている関数名などを用いる。
【００２８】
実行選択肢テーブル２６は、現在の状態を記録する「状態」と、現在の「状態」と関連付けて、現在の状態において実行可能な関数の関数名を記録する「選択肢」を有している。また、実行選択肢テーブル２６の「状態」と「選択肢」には、それぞれ状態の識別番号と実行可能な関数の関数名がプログラム制御部２１により関連付けられて記録される。
【００２９】
実行系列テーブル２７は、初期状態から現在の状態までの関数の実行系列を記録する。実行系列テーブル２７は、遷移元の状態を識別する識別番号などを記録する「遷移元状態」と、実行した関数の関数名を記録する「実行関数」と、遷移先の状態を識別する識別番号などを記録する「遷移先状態」を有している。そして、実行系列テーブル２７の「遷移元状態」「実行関数」「遷移先状態」に、遷移元状態の識別番号と関連付けて実行可能な関数の関数名と遷移先状態の識別番号がプログラム制御部２１により記録される。
【００３０】
実行回数テーブル２８は、現在の実行系列において各関数の実行された回数を記録する。実行回数テーブル２８は、関数の関数名を記録する「関数」と、対象の関数が実行された回数を記録する「実行回数」を有し、「関数」「実行回数」に、実行した関数の関数名と関連付けて対象の関数が実行された回数が、実行可能関数絞込部２３により記録される。
【００３１】
実行抑止関数テーブル２９は、各状態において実行回数制約によって実行しなかった関数を記録する。実行抑止関数テーブル２９は、現在の状態を識別する識別番号などを記録する「状態」と、選択肢として除外した関数の関数名を記録する「抑止関数」を有する。また、「状態」「実行回数」に、現在の状態の識別番号と関連付けて選択肢として除外した関数の関数名が、実行可能関数絞込部２３により記録される。
【００３２】
（動作説明）
プログラムモデル検査において、プログラム制御部２１が、プログラムモデル検査を実行した検査対象プログラムの関数の実行後の状態を、現在の状態まで記録部に記録する。そして、実行可能関数絞込部２３が、各状態において関数を実行した回数が予め設定された実行回数上限値以上であるとき、関数が実行を抑止する抑止関数であると判定し、抑止関数を上記状態に関連付けて記録部の実行抑止関数テーブルに記録する。また、関数の実行後の現在の状態がすでに実行済みであるとき、実行抑止関数テーブルの抑止関数と状態に基づいて、該現在の状態において実行可能な関数の実行を抑止したか否かを判定する、実行抑止再評価を行う。
【００３３】
そして、現在の状態から実行可能な関数を抽出し、抽出した関数を実行した回数が予め設定された実行回数上限値より小であり、実行が抑止されている関数を検出して、現在の状態から検出した関数のうちひとつをプログラム実行部２１が実行する。
【００３４】
図４にプログラム制御部２１の動作を示す図を示す（プログラム制御処理）。
ステップＳ１では、初期状態から次の状態への遷移するときに、プログラム制御部２１が検査対象プログラム２に対してプログラムモデル検査を実行した現在の内部状態を抽出して記録部２４に記録する。
【００３５】
例えば、上記商品注文システム３１が、図５のＡに示す初期状態で開始関数が実行され状態１に遷移する場合、プログラム制御部２１により初期状態で実行可能な関数の情報、入力されたデータなどが、初期状態に対応する内部状態として抽出され、記録部２４に記録される。
【００３６】
ステップＳ２では、プログラム制御部２１が現在の状態から実行可能な関数を検出し、現在の状態と関連付けて実行選択肢テーブル２６に記録する。
例えば、上記説明した商品注文システムにプログラムモデル検査を行い、現在の状態が図５のＡに示す初期状態の場合、プログラム制御部２１が「初期状態」に対応する内部状態から実行可能な関数である開始関数を検出する。そして、実行選択肢テーブル２６の「選択肢」に「初期状態」に関連付けて開始関数に対応する「開始」を記録する（図５のＢ）。
【００３７】
また、後述するステップＳ１０から移行してきた場合、例えば現在の状態が図５のＡに示す状態１の場合、プログラム制御部２１が「状態１」に対応する内部状態から実行可能な関数である入力選択関数、商品選択関数を検出する。そして、実行選択肢テーブル２６の「選択肢」に「状態１」に関連付けて入力選択関数、商品選択関数に対応する「商品選択」「入力完了」を記録する（図５のＣ）。
【００３８】
ステップＳ３では、プログラム制御部２１が状態遷移グラフ管理テーブル２５を参照して、既に実行ずみの状態か、すなわち過去に検査した関数実行系列において該状態への遷移済みかを判定し、実行ずみでなければステップＳ４に移行し、実行ずみであればステップＳ５に移行する。
【００３９】
例えば、状態遷移グラフ管理テーブル２５の「遷移元状態」と現在の状態を比較して、一致するものがあるかを検索する。一致する場合、実行ずみであるとしてステップＳ５に移行する。一致するものがない場合は実行ずみでないとしてステップＳ４に移行する。
【００４０】
ステップＳ４（実行可能関数絞込処理）では実行可能関数絞込部２３が選択肢の絞込みをする。実行可能関数絞込部２３が、プログラムモデル検査時に実行された各関数の実行回数と、予め設定した実行回数上限値を比較して、実行回数上限値に達している関数を検出する。次に、該当する関数をキーにして実行選択肢テーブル２６の「選択肢」から対応する関数を検出し、該「選択肢」に関連付けられた「状態」と該「選択肢」の内容を削除する。なお、選択肢の絞込み（実行可能関数絞込処理）の詳細については後述する。
【００４１】
ステップＳ５（実行抑止再評価処理）では、実行可能関数絞込部２３が関数の実行を抑止したかを判定して、判定結果に基づいて実行選択肢テーブル２６、実行抑止関数テーブル２９を制御する。なお、実行抑止再評価（実行抑止再評価処理）の詳細については後述する。
【００４２】
ステップＳ６では、プログラム制御部２１が現在の状態に対応する実行可能な関数（選択肢）が残っているかを判定し、残っていればステップＳ７に移行し、残っていなければステップＳ１１に移行する。
【００４３】
例えば、プログラム制御部２１が現在の状態をキーにして実行選択肢テーブル２６の「状態」を検索して、対応する状態があれば選択肢が残っているのでステップＳ７に移行し、対応する状態がなければ選択肢が残っていないのでステップＳ１１に移行する。
【００４４】
ステップＳ７では、プログラム制御部２１が現在の状態に対応する実行可能な関数（選択肢）のうちから任意の１つの関数を選択し、選択した関数を実行選択肢テーブル２６から削除する。
【００４５】
例えば、図５のＣに示した実行選択肢テーブル２６のような場合、「状態１」に対応付けられた「入力完了」「商品選択」があるので、どちらか一方の関数を選択して選択した関数を実行する指示を、プログラム制御部２１からプログラム実行部２２にする。その後、例えば「商品選択」を選択したのであれば入力完了関数に対応する状態「状態１」を実行選択肢テーブル２６から削除する。
【００４６】
ステップＳ８では、プログラム制御部２１から検査対象プログラムを実行する指示をプログラム実行部２２が受信し、検査対象プログラム２を実行する。
ステップＳ９では、ステップＳ８で実行した検査対象プログラム２により変化した現在の内部状態を記録部２４に記録する。図６のＡに示すように状態１から商品選択関数を実行することにより状態２に遷移した場合、状態２に対応する内部状態（入力データ、実行可能な関数、表示画面情報など）を記録部２４に記録する。
【００４７】
ステップＳ１０では、プログラム制御部２１が状態遷移グラフ管理テーブル２５と実行系列テーブル２７に、一つ前の状態を示す「遷移元状態」、選択した関数に対応する「実行関数」、現在の状態に対応する「遷移先状態」を記録する。
【００４８】
図６のＢの場合、初期状態から状態１に遷移するとき、プログラム制御部２１により実行系列テーブル２７の「遷移元状態」に初期状態に対応する「初期状態」が、「実行関数」に開始関数に対応する「開始」が、「遷移先状態」に現在の状態に対応する「状態１」が、記録される。また、状態１から状態２に遷移するとき、プログラム制御部２１により実行系列テーブル２７の「遷移元状態」に状態１に対応する「状態１」、「実行関数」に商品選択関数に対応する「商品選択」、「遷移先状態」に現在の状態に対応する「状態２」が、記録される。
【００４９】
ステップＳ１０の処理を完了するとステップＳ２に移行する。また、ステップ３でステップＳ５に移行し、ステップＳ５の処理によりステップＳ６に移行する場合は、上記ステップＳ６以降の処理を行い、ステップＳ１１に移行する場合には以下の処理を行う。
【００５０】
ステップＳ１１では、プログラム制御部２１が実行系列テーブル２７から現在の状態が遷移元になっている行を削除する。図７のＡに示すように状態２において商品選択をしても状態２に戻るような場合、プログラム制御部２１が図７のＢに示すように「状態２」「商品選択」「状態２」から構成される行を削除する。なお、現在の状態が遷移元になっているとは、プログラムで使用する変数の値が変わらない場合などである。
【００５１】
ステップＳ１２では、プログラム制御部２１が一つ前の状態を現在の状態にする。図７のＢの場合、一つ前の状態が「状態２」であるので「状態２」の状態に遷移する。
ステップＳ１３では、プログラム制御部２１が現在の状態に実行可能な関数（選択肢）が残っているかを判定し、残っていればステップＳ７に移行し、残っていなければＳ１４に移行する。例えば、図７のＡの場合であれば、状態２において入力完了関数に対応する「入力完了」が、図７のＣの実行選択肢テーブル２６に記録されているのでステップＳ７に移行する。
【００５２】
ステップＳ１４では、プログラム制御部２１が現在の状態が初期状態（実行選択肢テーブル２６が空）かを判定し、初期状態であればプログラムモデル検査を終了し、初期状態でない場合はステップＳ１１に移行する。
【００５３】
（実行可能関数絞込処理の説明）
実行可能関数絞込部２３の実行回数による選択肢の絞込みの動作について説明する。図８のＡは、実行可能関数絞込部２３の実行回数による選択肢の絞込みのフローを示す図である。
【００５４】
ステップＳ２１では、実行可能関数絞込部２３が実行系列テーブル２７から各実行関数が呼び出された回数を集計して、実行回数テーブル２８を更新する。
例えば、実行系列テーブル２７の更新は次のように行われる。まず、図９の初期状態から状態１に遷移し現在の状態が状態１のとき、実行系列テーブル２７の「実行関数」には「開始」のみが記録されている。実行可能関数絞込部２３は、実行回数テーブル２８の「関数」に「開始」を記録するとともに、「開始」に対応する開始関数が１回実行されたことを実行回数テーブル２８の「実行回数」に記録する。
【００５５】
次に、図９に示す状態１から状態５に入力完了関数を選択して遷移すると、実行系列テーブル２７の「実行関数」には「開始」に加え「入力完了」が記録されるため、実行可能関数絞込部２３は、実行回数テーブル２８の「関数」に「入力完了」を記録する。また、「入力完了」が１回実行されたことを実行回数テーブル２８の「実行回数」に記録する。
【００５６】
次に、図９に示す状態５から状態２に商品選択関数を選択して遷移すると、実行系列テーブル２７の「実行関数」にさらに「商品選択」が加えて記録されるため、実行可能関数絞込部２３は、実行回数テーブル２８の「関数」に「商品選択」を記録する。また、「入力完了」が１回実行されたことを実行回数テーブル２８の「実行回数」に記録する。
【００５７】
上記のように実行回数テーブル２８を更新することにより、現在の状態が状態２に至ったとき、実行回数テーブル２８が図８のＣに示すように、「開始」「入力完了」「商品選択」に対応する実行回数にそれぞれ「１」「１」「１」が記録される。
【００５８】
ステップＳ２２では、実行可能関数絞込部２３が実行選択肢テーブル２６から現在の状態に対応する行を１つ選択する。
ステップＳ２３では、実行可能関数絞込部２３がステップＳ２２で選択した行の「選択肢」に記録されている関数をキーに実行回数テーブル２８から、その関数の実行回数を取得する。
【００５９】
ステップＳ２４では、実行可能関数絞込部２３がステップＳ２２で選択した関数の実行回数が、予め設定した指定回数（実行回数上限値）以上であるかを判定する。指定回数以上であればステップＳ２５に移行し、指定回数に達していなければステップＳ２７に移行する。
【００６０】
ステップＳ２５では、実行可能関数絞込部２３が実行抑止関数テーブル２９に現在の状態と選択肢から除外した関数を記録する。
ステップＳ２６では、実行可能関数絞込部２３が実行選択肢テーブル２６からステップＳ２２で選択した行を削除する。
【００６１】
ステップＳ２７では、実行可能関数絞込部２３が実行選択肢テーブル２６の現在の状態に対応する全ての行を処理したかを判定する。
例えば、図９の状態２に遷移すると、実行選択肢テーブル２６の記録内容は図８のＤに示すような状態になる。ステップＳ２２では、実行可能関数絞込部２３が図８のＤの実行選択肢テーブル２６から状態２に対応する「状態２」「入力完了」または「状態２」「商品選択」を有する行のどちらかを選択する。本例では「状態２」「入力完了」を選択する。
【００６２】
ステップＳ２３では、実行可能関数絞込部２３が「入力完了」をキーにして、実行回数テーブル２８の「入力完了」に対応する「実行回数」に記録されている「１」を取得する。ステップＳ２４では、「入力完了」に対応する実行回数「１」と予め設定されている実行回数上限値「１」を比較し、実行回数が実行回数上限値に達しているためステップＳ２５に移行する。ステップＳ２５では、実行可能関数絞込部２３が、入力完了関数が既に実行された関数であると判断して、実行選択肢テーブル２６から「状態２」「入力完了」の行を削除する。ステップＳ２６では、実行可能関数絞込部２３が実行抑止関数テーブル２９の「状態」「抑止関数」に対応する箇所に「状態２」「入力完了」をそれぞれ記録する。ステップＳ２７では、実行可能関数絞込部２３が実行選択肢テーブル２６の現在の状態に対応するすべての行を処理したかを判定する。本例では実行選択肢テーブル２６にまだ「状態２」「商品選択」があるためステップＳ２２に移行する。
【００６３】
実行選択肢テーブル２６の「状態２」「商品選択」についても、上記と同じようにステップＳ２２〜Ｓ２７の処理を行う。その結果、実行抑止関数テーブル２９、実行選択肢テーブル２６が図８のＥ、Ｆに示すように更新され、実行可能関数絞込処理を終了する。
なお、図９の「×」は抑止された関数であることを示す。
【００６４】
（実行可能関数絞込処理の実行抑止再評価の説明）
図１０は、図４のステップＳ５（実行可能関数絞込処理）の動作を示すフロー図である。
図４のステップＳ３において、状態遷移グラフ管理テーブル２５に記録されている状態のためステップＳ５に移行したとき、ステップＳ３１〜Ｓ３８の処理を行う。
【００６５】
図１１を用いて実行可能関数絞込処理の実行抑止再評価の説明をする。図１１は、ステップＳ５に移行したとき、初期状態−状態５−状態２に至るプログラムモデル検査を実施し、その後バックトラックして状態１において商品選択関数を実行し状態２へ遷移したことを示す図である。
【００６６】
ステップＳ３１では、実行可能関数絞込部２３が実行抑止関数テーブル２９に現在の状態に対応する行があるか判定する。実行抑止関数テーブル２９に現在の状態があればステップＳ３２に移行し、なければ図４のステップＳ１１に移行する。
【００６７】
例えば、現在の状態が状態２であれば、実行可能関数絞込部２３が図１１のＢの実行抑止関数テーブル２９の「状態」に「状態２」があるかを検索する。図１１のＢの実行抑止関数テーブル２９には「状態２」があるためステップＳ３２に移行する。
【００６８】
ステップＳ３２では、ステップ４と同じように実行可能関数絞込部２３が実行回数による選択肢の絞込みを行う。
図１２のＡは、実行回数により関数の実行抑止を行った状態に再度到達した場合の実行可能関数絞込部２３の実行回数による選択肢の絞込みのフローを示す図である。
【００６９】
ステップＳ２１では、実行可能関数絞込部２３が、図１２のＢの実行系列テーブル２７から各実行関数が呼び出された回数を集計して図１２のＣの実行回数テーブル２８を更新する。状態２において実行された関数は、図１２のＢの実行系列テーブル２７に記録された「開始」「商品選択」に対応付けられた関数である。図１２のＣの実行回数テーブル２８には、「開始」「商品選択」がそれぞれ１回実行されているので「実行回数」にそれぞれ「１」が記録される。
【００７０】
ステップＳ２２では、実行可能関数絞込部２３が現在の状態で実行可能な関数（選択肢）を実行選択肢テーブル２６から１つ選択する。本例では、状態２に対応する選択肢として実行選択肢テーブル２６に「入力完了」「商品選択」があるため、「状態２」「商品選択」を有する行を選択する。
【００７１】
ステップＳ２３では、ステップＳ２２で選択した行の選択肢をキーに実行回数テーブル２８から、その関数の実行回数を取得する。
ステップＳ２４では、実行可能関数絞込部２３がステップＳ２２で選択した関数の実行回数が、予め設定した指定回数（実行回数上限値）以上であるかを判定する。本例では、実行回数上限値「１」に商品選択関数の実行回数「１」が達しているためステップＳ２５に移行し、達していなければステップＳ２７に移行する。
【００７２】
ステップＳ２５では、実行可能関数絞込部２３が実行抑止関数テーブル２９に現在の状態と選択肢「商品選択」を記録する。
ステップＳ２６では、実行可能関数絞込部２３が実行選択肢テーブル２６からステップＳ２２で選択した行を削除する。
【００７３】
ステップＳ２５、Ｓ２６の処理をした結果、実行抑止関数テーブル２９、実行選択肢テーブル２６は、図１２のＥ、Ｆに示すような状態になる。
ステップＳ２７では、実行可能関数絞込部２３が実行選択肢テーブル２６の現在の状態に対応する全ての行を処理したかを判定する。本例では、実行選択肢テーブル２６の「状態２」「入力完了」が残っているのでステップＳ２２に移行する。
【００７４】
ステップＳ２２に移行した後、実行選択肢テーブル２６の「状態２」「入力完了」についても、上記と同じようにステップＳ２２〜Ｓ２７の処理を行う。ステップＳ２７において実行選択肢テーブル２６の全ての行に対して処理を行えば、実行可能関数絞込処理を終了して図１０のＡのステップＳ３３に移行する。
【００７５】
ステップＳ３３では、実行可能関数絞込部２３が実行抑止関数テーブル２９に現在の状態に対応する行があるか判定し、現在の状態に対応する行があればステップＳ３４に移行し、なければステップＳ６に移行する。本例では、図１２のＥに示されているように現在の実行抑止関数テーブル２９には、現在の状態である状態２に対応する「状態２」「入力完了」を有する行と「状態２」「商品選択」を有する行があるのでステップＳ３４に移行する。
【００７６】
ステップＳ３４では、実行可能関数絞込部２３が実行選択肢テーブル２６から現在の状態に対応する行を１つ選択する。本例では、図１２のＦに示されるように現在の実行選択肢テーブル２６から現在の状態である状態２に対応する「状態２」「入力完了」を選択する。
【００７７】
ステップＳ３５では、実行可能関数絞込部２３がステップＳ３４で選択した行の選択肢と現在の状態に対応する行が実行抑止関数テーブル２９にあるか判定し、ある場合にはステップＳ３６に移行し、ない場合はステップＳ３７に移行する。本例では、図１２のＦに示したように現在の実行選択肢テーブル２６に、現在の状態である状態２に対応する「状態２」「入力完了」が、現在の実行抑止関数テーブル２９にあるためステップＳ３６に移行する。
【００７８】
ステップＳ３６では、実行可能関数絞込部２３が対応する実行抑止関数テーブル２９の行を削除する。本例では、図１２のＥに示す実行抑止関数テーブル２９から「状態２」「入力完了」を有する行を削除する。その結果、図１３に示すように実行抑止関数テーブル２９が更新される。
【００７９】
ステップＳ３７では、実行可能関数絞込部２３が選択した実行選択肢テーブル２６の行を削除する。つまり、抑止されていないので既にこの状態から実行済みであると判断できるため実行選択肢テーブル２６から「状態２」「入力完了」を有する行を削除する。
【００８０】
ステップＳ３８では、実行可能関数絞込部２３が実行選択肢テーブル２６の全ての行の処理をしたか判定し、全ての行に対して処理が終了すれば図４のステップＳ６に移行し、未処理の行が残っていればステップＳ３４に移行する。
【００８１】
上記のように実行可能関数絞込処理をすることで、プログラムモデル検査中の関数の実行系列において、同じ関数の予め設定した回数以上の呼出を抑止することができる。且つ、実行可能関数絞込処理と実行抑止再評価をすることにより、抑止した関数を実行すべきかを実行済み状態到達時に再度評価することで、関数の選択順序の違いによる探索結果の違いをなくし、関数の実行を過剰に抑止することなくモデル検査の探索範囲を抑えることができる。
よって、大規模なプログラムに対するプログラムモデル検査が現実的な時間で実施できるようになる。
【００８２】
（実施例２）
実施例２は、実行可能関数絞込処理を実施する際に、関数ごとに実行回数の実行回数上限値を設定するものである。関数ごとに予め実行回数上限値を記録実行回数上限テーブルに記録し、関数ごとに予め実行回数上限値に基づいて、現在の状態における実行可能な関数の実行を抑止するか否かを判定する。
【００８３】
図１４は実施例２におけるプログラムモデル検査装置４０の構成を示す図である。実施例２では、プログラムモデル検査装置４０の記録部２４に実行回数上限テーブル４１を有し、実行可能関数絞込部２３が実行回数上限値を取得して、関数ごとの実行回数が最適になるように設定する。
【００８４】
実行回数上限テーブル４１は、プログラムモデル検査で実行される関数に対応する関数名などを記録する「関数」、関数ごとに実行回数の上限値を設定する「実行回数上限」を有している。なお、「実行回数上限」への上限値の入力はユーザが行う。
【００８５】
図１５のＡに実施例２の動作を示すフロー図を示す。ステップＳ２１〜Ｓ２３では実施例１と同じように処理を行う。
ステップＳ４１では、実行可能関数絞込部２３がステップＳ２２で選択した関数の上限を実行回数上限テーブル４１から取得する。例えば、図１５のＢに示すように実行回数上限テーブル４１に、「関数」として「開始」「入力完了」・・・「終了」、「実行回数上限」として「開始」「入力完了」・・・「終了」に対応する「１」「３」・・・「１」が記録されているとする。ステップＳ２３で「入力完了」の実行回数が取得されていれば、実行可能関数絞込部２３が実行回数上限テーブル４１の「入力完了」に対応する実行回数上限値を取得する。
【００８６】
ステップＳ２４では、ステップＳ４１で取得した実行回数と実行回数上限値を比較して、実行回数が実行回数上限値以上であるかを判定する。実行回数が実行回数上限値以上であればステップＳ２５に移行し、実行回数上限値より小さければステップＳ２７に移行する。なお、図１５のＢに示されている「無制限」ついては上限値がないことを意味しており、必ずステップＳ２５に移行し、購入関数が指定された場合は何度でも実行する。
【００８７】
ステップＳ２５以降は、実施例１と同じように処理を行う。
上記のように実行回数上限値を関数ごとに設定することにより、関数実行抑止を制御できるので、目的の関数の動作を詳しく調べることができる。
【００８８】
（実施例３）
実施例３は、プログラムモデル検査終了後、実行抑止関数テーブル２９にｍ箇所以上の状態で抑止された関数がある場合、実行回数上限テーブル４１の中の対応する関数の実行回数上限値を増やして、再度プログラムモデル検査を実行するものである。なお、ｍは１以上の整数である。
【００８９】
図１６は、実施例３におけるプログラムモデル検査装置５０の構成を示す図である。実施例３のプログラムモデル検査装置５０は、実施例２の機能にさらに、記録部２４の実行回数上限テーブル４１を制御するとともに、再度プログラムモデル検査の実行を指示するモデル検査再実行部５１を備える。
【００９０】
モデル検査再実行部５１は、実行抑止関数テーブル２９にｍ箇所以上の状態で抑止された関数がある場合、実行回数上限テーブル４１の中の対応する関数の実行回数上限値を予め設定した値に更新する。また、モデル検査再実行部５１は、更新した実行回数上限テーブル４１を利用して再度プログラムモデル検査を実行する指示をプログラム実行部２２に通知する。
【００９１】
図１７に実施例３の動作を示すフロー図を示す（モデル検査再実行処理）。
ステップＳ５１では、１回目のプログラムモデル検査が完了したことを、モデル検査再実行部５１が検知する。
【００９２】
ステップＳ５２では、モデル検査再実行部５１が実行抑止関数テーブル２９の「抑止関数」に基づいて抑止された関数ごとの集計を行い、集計の結果、予め設定した値よりｍ箇所以上の状態で抑止されている関数を検出する。
【００９３】
ステップＳ５３では、モデル検査再実行部５１が実行回数上限テーブル４１の該当する関数の実行回数上限値を変更する。
ステップＳ５２、Ｓ５３の動作について図１８、１９を用いて説明する。
【００９４】
例えば、１回目のプログラムモデル検査を行ったとき、図１８のＡに示すような状態遷移をしたとし、１回目のプログラムモデル検査が完了した時点の実行抑止関数テーブル２９の記録内容が図１８のＢに示されるようになったとする。また、図１８のＢの実行抑止関数テーブル２９の結果を得たときの実行回数上限テーブル４１が図１８のＣに示す設定であったとする。なお、図１８のＡ、Ｂ、Ｃに示される「ａ」「ｂ」「ｃ」は関数を示している。
【００９５】
図１８のＢにおいて、モデル検査再実行部５１が実行抑止関数テーブル２９の「抑止関数」に記録されているａ関数に基づいて「状態２」「状態５」においてａ関数が抑止されていることを検出する。モデル検査再実行部５１が、ａ関数が２箇所の状態で抑止されているため、ａ関数に関連付けて「２」を記録する。
【００９６】
次に、モデル検査再実行部５１が、予め設定されている実行回数上限値に加算する値である「１」とａ関数に対応する実行回数上限値を「１」を加算して「２」を算出する。そして、図１９のＣに示すように実行回数上限テーブル４１のａ関数に対応する実行回数上限値を「１」から「２」に変更する。
なお、本例では実行回数上限値に加算する値は「１」にしているが限定されるものではなく、ユーザが設定してもよい。
【００９７】
ステップＳ５３では、モデル検査再実行部５１が実行回数上限テーブル４１の実行回数上限値の変更が完了したことを検知して、２回目のプログラムモデル検査を実行する指示を通知する。
【００９８】
プログラムモデル検査装置５０はプログラムモデル検査を実行する。その結果、図１９のＡに示すように、状態２、状態５から状態３に移行し、状態３から状態４（ｄ関数を実行）に移行し、状態４から終了（ｅ関数を実行）する新しい状態遷移についてプログラムモデル検査を実行することができる。
ステップＳ５４では、プログラムモデル検査装置５０が２回目のプログラムモデル検査が完了する。
【００９９】
上記のように実行回数上限テーブル４１の実行回数上限値を、実行抑止関数テーブル２９の抑止関数ごとの集計結果に基づいて行うことにより、１回目（図１８のＡ、Ｂ）と２回目（図１９のＡ、Ｂ）に示すように実行回数上限値の設定に起因した、検査対象の関数が実行されなくなる現象を避けることができる。そのため、実行回数の制限を安全に行うことができる。また、全ての実行系列のなかで、実行回数制限数までの実行が保証される。
【０１００】
（本実施例がコンピュータプログラムとして実現される場合の構成）
図２０は、上記実施形態の装置を実現できるコンピュータのハードウェア構成の一例を示す図である。
コンピュータのハードウェア９０は、ＣＰＵ９１、記録部９２（２４）（ＲＯＭ、ＲＡＭ、ハードディスクドライブなど）、記録媒体読取装置９３、入出力インタフェース９４（入出力Ｉ／Ｆ）、通信インタフェース９５（通信Ｉ／Ｆ）などを備えている。また、上記各構成部はバス９６によってそれぞれ接続されている。
【０１０１】
ＣＰＵ９１は、記録部９２に格納されている上記説明したプログラムモデル検査を実行するプログラム実行処理と、プログラム制御処理、実行可能関数絞込処理、実行抑止再評価処理、モデル検査再実行処理（図４、８、１０、１２、１５、１７に示した処理）を実行する。
【０１０２】
記録部９２は、ＣＰＵ９１が実行するプログラムやデータが記録されている。また、ワークエリアなどとして使用される。
記録媒体読取装置９３は、ＣＰＵ９１の制御にしたがって記録媒体９３ａに対するデータのリード／ライトを制御する。そして、記録媒体９３ａ、記録媒体読取装置９３の制御で書き込まれたデータを記憶したり、記録媒体９３ａに記憶されたデータを読み取らせたりする。また、着脱可能な記録媒体９３ａは、コンピュータで読み取り可能な記録媒体として、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）などがある。光ディスクには、ＤＶＤ(Digital Versatile Disc)、ＤＶＤ−ＲＡＭ(Random Access Memory)、ＣＤ−ＲＯＭ(Compact Disc Read Only Memory)、ＣＤ−Ｒ(Recordable)／ＲＷ(ReWritable)などがある。光磁気記録媒体には、ＭＯ(Magneto-Optical disk)などがある。
【０１０３】
入出力インタフェース９４には、入出力装置９４ａ（マウス、キーボード、ディスプレイなど）が接続され、ユーザが入力した情報を受信し、バス９６を介してＣＰＵ９１に送信する。また、ＣＰＵ９１からの命令に従ってディスプレイの画面上に操作情報などを表示する。
【０１０４】
通信インタフェース９５は、必要に応じ、他のコンピュータとの間のＬＡＮ接続やインターネット接続や無線接続のためのインタフェースである。また、他の装置に接続され、外部装置からのデータの入出力を制御する。
【０１０５】
このようなハードウェア構成を有するコンピュータを１台または２台以上用いることによって、上記説明した各種処理機能（実施例で説明した処理（フローチャートなど））が実現される。その場合システムが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体９３ａに記録しておくことができる。
【０１０６】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１０７】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【０１０８】
また、本発明は、上記実施の形態に限定されるものでなく、本発明の要旨を逸脱しない範囲内で種々の改良、変更が可能である。
【符号の説明】
【０１０９】
１  ドライバ、
２  検査対象プログラム、
３  データベーススタブ、
４  ネットワークスタブ、
５  プログラムモデル検査装置、
６  入力データ、
７  プロパティ、
２１  プログラム制御部、
２２  プログラム実行部、
２３  実行可能関数絞込部、
２４  記録部、
２５  状態遷移グラフ管理テーブル、
２６  実行選択肢テーブル、
２７  実行系列テーブル、
２８  実行回数テーブル、
２９  実行抑止関数テーブル、
４０  プログラムモデル検査装置、
４１  実行回数上限テーブル、
５０  プログラムモデル検査装置、
５１  モデル検査再実行部、
９０  ハードウェア、
９１  ＣＰＵ、
９２  記録部、
９３  記録媒体読取装置、
９３ａ  記録媒体、
９４  入出力インタフェース、
９４ａ  入出力装置、
９５  通信インタフェース、
９６  バス、
【図１】
2011008628.tif 000003
【図２】
2011008628.tif 000004
【図３】
2011008628.tif 000005
【図４】
2011008628.tif 000006
【図５】
2011008628.tif 000007
【図６】
2011008628.tif 000008
【図７】
2011008628.tif 000009
【図８】
2011008628.tif 000010
【図９】
2011008628.tif 000011
【図１０】
2011008628.tif 000012
【図１１】
2011008628.tif 000013
【図１２】
2011008628.tif 000014
【図１３】
2011008628.tif 000015
【図１４】
2011008628.tif 000016
【図１５】
2011008628.tif 000017
【図１６】
2011008628.tif 000018
【図１７】
2011008628.tif 000019
【図１８】
2011008628.tif 000020
【図１９】
2011008628.tif 000021
【図２０】
2011008628.tif 000022
【図２１】
2011008628.tif 000023