JP5321286B2 - プログラムモデル検査方法、プログラムモデル検査プログラム - Google Patents
プログラムモデル検査方法、プログラムモデル検査プログラム Download PDFInfo
- Publication number
- JP5321286B2 JP5321286B2 JP2009152826A JP2009152826A JP5321286B2 JP 5321286 B2 JP5321286 B2 JP 5321286B2 JP 2009152826 A JP2009152826 A JP 2009152826A JP 2009152826 A JP2009152826 A JP 2009152826A JP 5321286 B2 JP5321286 B2 JP 5321286B2
- Authority
- JP
- Japan
- Prior art keywords
- function
- execution
- state
- program
- upper limit
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Description
本発明は、プログラムモデル検査の検査時間を削減するプログラムモデル検査方法、プログラムモデル検査プログラムに関する。
プログラムモデル検査は、対象プログラムの規模が大きくなるにつれて検査時間が増大する。つまり、対象のプログラムの規模が大きくなると探索する状態遷移グラフが巨大になり、探索時間が膨大になる。
そこで、従来は関数の実行回数に制限を設けることで現実的な時間で計算可能な規模に探索範囲を抑える方法が用いられている。例えば、実行する関数を選択する際、その状態に至る関数実行系列のなかでN回呼び出だされた関数は除外するという制限をいれて規模を抑える技術が知られている。
また以下の2つの例はプログラムモデル検査の例ではないが、関数の実行回数を制限することで処理すべき規模を抑えた技術の例である。例えば、人手によるシミュレーションベクトルの作り直しやソフトウェアの作り直しを必要とせずに、不要なシミュレーションの繰返しを避けることが可能な論理検証の高速化手法が知られている。すなわち、シミュレータのシミュレーションモデルがメインルーチンを動作させることによってソフトウェアのシミュレーションを行い。トレーサがシミュレーションモデルによるメインルーチンの動作をトレースし、同じルーチンが繰返し行われることを検出すると、そのルーチンの代行をエージェントに指示する。エージェントはそのルーチンを代行して実行し、その結果をシミュレーションモデルに渡す。
また、プログラムのテスト方法において、テスト対象プログラムに含まれる頻出経路の繰り返しの計測を抑止し、無用なオーバーヘッドを回避する方法が知られている。すなわち、情報処理装置のカバレジ計測制御プログラムは、計測対象プログラムの実行によって通過した各命令あるいは少なくとも分岐命令の通過回数がその測定上限回数に達したか否か判定する。カバレジ計測プログラムは、その命令が測定回数に達していない場合に呼び出され、その命令の通過回数を更新する。
しかしながら、プログラムモデル検査で関数の実行回数を制限して検査を実施した場合、ある状態から実行する関数の選択順の違いによって、探索の結果できあがる状態遷移グラフが異なる場合がある。例えば、ある状態から2つの関数が実行可能な場合において、一方の関数を先に探索するとすべての関数を実行できるが、他方の関数を先に実行して探索すると一方の関数と他方の関数以外の関数を呼び出す前に実行回数の制限により探索が終了してしまうという場合がある。
プログラムモデル検査で関数の実行回数を制限して検査を実施する状態遷移図と表を図21に示す。図21のA、B、Cに示す例では、実行可能な関数として開始関数、商品選択関数、入力完了関数、購入関数があり、各関数に実行回数の制限回数として1回が予め設定されているとする。
まず、図21のAでは初期状態において(1)開始関数が実行されると状態1に遷移し、開始関数に関連付けて実行回数1が記録される(Aの表参照)。次に、図21のBでは状態1において、(2)商品選択関数が実行され状態2に移行し、商品選択関数に関連付けて実行回数1が記録される(Bの表参照)。次に、状態2において商品選択関数を実行しようとした場合、既に商品選択関数は実行されているため、予め設定した制限回数1回に基づいて商品選択関数の実行を制限されてしまう。よって、図21のBの状態2では入力完了関数を選択し状態3に遷移する。状態3では購入関数を選択して実行する。
図21のCに示す例では、初期状態において(1)開始関数が実行して状態1に遷移し、状態1において(3)入力完了関数を実行して状態4に遷移する。このとき開始関数と入力完了関数に関連付けられて実行回数1が記録される(Cの表参照)。この場合、開始関数と入力完了関数は、予め設定した制限回数1回に基づいて開始関数と入力完了関数の実行を制限されてしまうため、(4)商品選択関数を選択し状態2に遷移する。しかし、状態2に遷移したときには開始関数、入力完了関数、商品選択関数は既に1回実行されているため状態3に移行することができなくなる(Cの表参照)。すなわち、制限回数により状態3に遷移しても購入関数が実行することができないため、検査対象の関数が実行されないまま探索が終了してしまい検査を十分に行えない。
上記のような実情に鑑みてなされたものであり、プログラムモデル検査の探索順序に起因して検査対象の関数が実行されなくなる現象を回避し、関数の実行回数の制限を安全に行うことができ、プログラムモデル検査の実行時間を削減するプログラムモデル検査方法、プログラムモデル検査プログラムを提供することを目的とする。
プログラムモデル検査において、複数の関数実行系列を備える検査対象プログラムにおける各状態から実行可能な関数のうち、該関数実行系列内での実行回数が実行回数上限値未満のものを実行する。現在の状態から実行可能な関数の実行回数が、上記実行回数上限値以上である場合に、該関数の実行を抑止して該関数実行系列の検査を終了し、該関数を該現在の状態に関連付けて実行を抑止する関数を定義した実行抑止関数テーブルに記録する。他の関数実行系列において、現在の状態への遷移がすでに行われているとき、上記実行抑止関数テーブルに該現在の状態と該現在の状態から実行可能な関数との組み合わせがあるか否かを判定し、判定において上記組み合わせがある場合にのみ該関数を実行する。
また、実行抑止関数テーブルにおいて、予め設定した数以上の状態と関連付けられている関数が検出されたときに、該関数の上記実行回数上限値を増加させる。
プログラムモデル検査の探索順序に起因して検査対象の関数が実行されなくなる現象を回避し、関数の実行回数の制限を安全に行うことができ、プログラムモデル検査の実行時間を削減することができる。
以下図面に基づいて、本発明の実施形態について詳細に説明する。
(実施例1)
(構成)
図1はプログラムモデル検査装置の一例について示した図である。図1はプログラムモデル検査を実施するときに用いる構成例を示す図である。ここで、プログラムモデル検査は、テスト対象システムの振舞いを設計書・仕様書から取り出し、モデル検査の専用言語で記述したソフトウェア(擬似システム)を作成し、当該擬似システムにテストデータを入力することで実施するテストである。プログラムモデル検査を行うためには一般に対象プログラムを動かすドライバとデータベースやネットワークなどの外部環境を抽象化するためのスタブが必要となる。
(実施例1)
(構成)
図1はプログラムモデル検査装置の一例について示した図である。図1はプログラムモデル検査を実施するときに用いる構成例を示す図である。ここで、プログラムモデル検査は、テスト対象システムの振舞いを設計書・仕様書から取り出し、モデル検査の専用言語で記述したソフトウェア(擬似システム)を作成し、当該擬似システムにテストデータを入力することで実施するテストである。プログラムモデル検査を行うためには一般に対象プログラムを動かすドライバとデータベースやネットワークなどの外部環境を抽象化するためのスタブが必要となる。
プログラムモデル検査装置5は、ドライバ1を介してクライアントの代わりに検査対象プログラム2に対してユーザ操作を模倣した入力データ6を検査対象プログラム2に入力して、検査対象プログラム2とデータベーススタブ3とネットワークスタブ4に対して網羅的な検査を行う。そして、プログラムモデル検査装置5は、検査結果がプロパティ7に格納されている内容(機能仕様)を満たしているかをチェックして判定を行う。
なお、プログラムモデル検査装置5は、上記説明したプログラムモデル検査を実行するソフトウェアを、コンピュータ(PCなど)にインストールした装置でもよい。
なお、プログラムモデル検査装置5は、上記説明したプログラムモデル検査を実行するソフトウェアを、コンピュータ(PCなど)にインストールした装置でもよい。
図2はプログラムモデル検査装置5の構成を示す図である。プログラムモデル検査装置5は、プログラム制御部21、プログラム実行部22、実行可能関数絞込部23、記録部24を備えている。なお、プログラム制御部21、プログラム実行部22、実行可能関数絞込部23は、CPUやプログラマブルなデバイスを用いて実現することもできる。また、プログラム制御部21、プログラム実行部22、実行可能関数絞込部23の機能を実現するソフトウェアを、コンピュータ(PCなど)にインストールしたものでもよい。また、記録部24はCPUに内蔵されているメモリでもよいし外部に設けた記録装置などであってもよい。
プログラム制御部21は、検査対象プログラムから内部状態と実行可能関数を取得し、実行可能関数絞込部23に実行可能関数の絞込みを指示し、絞り込んだ実行選択肢テーブル26の中から関数を一つ選択し、プログラム実行部22にその関数での実行を指示する。
プログラム実行部22は、プログラム制御部21により指示された関数によりプログラムを実行する。
実行可能関数絞込部23は、実行系列テーブル27を参照して実行回数が上限に到達した関数を実行選択肢テーブル26から削除し、実行抑止関数テーブル29に追加する。また、別の実行系列において実行回数の上限に到達せずに実行抑止関数テーブル29に記録されている関数は実行抑止関数テーブル29から削除し、実行選択肢テーブル26に追加する。
実行可能関数絞込部23は、実行系列テーブル27を参照して実行回数が上限に到達した関数を実行選択肢テーブル26から削除し、実行抑止関数テーブル29に追加する。また、別の実行系列において実行回数の上限に到達せずに実行抑止関数テーブル29に記録されている関数は実行抑止関数テーブル29から削除し、実行選択肢テーブル26に追加する。
記録部24は、状態遷移グラフ管理テーブル25、実行選択肢テーブル26、実行系列テーブル27、実行回数テーブル28、実行抑止関数テーブル29を有している。
状態遷移グラフ管理テーブル25は、状態遷移グラフを「遷移元状態」「実行関数」「遷移先状態」により示すテーブルである。状態遷移グラフ管理テーブル25の「遷移元状態」にはプログラムの関数が実行されるたびに遷移元のプログラムの状態を示す識別番号などが記録され、「実行関数」には実行した関数を識別するために関数名などが記録され、「遷移先状態」には現在のプログラムの状態が記録される。なお、「遷移元状態」「実行関数」「遷移先状態」は、プログラム制御部21により「遷移元状態」に関連付けて「実行関数」と「遷移先状態」が記録される。
状態遷移グラフ管理テーブル25は、状態遷移グラフを「遷移元状態」「実行関数」「遷移先状態」により示すテーブルである。状態遷移グラフ管理テーブル25の「遷移元状態」にはプログラムの関数が実行されるたびに遷移元のプログラムの状態を示す識別番号などが記録され、「実行関数」には実行した関数を識別するために関数名などが記録され、「遷移先状態」には現在のプログラムの状態が記録される。なお、「遷移元状態」「実行関数」「遷移先状態」は、プログラム制御部21により「遷移元状態」に関連付けて「実行関数」と「遷移先状態」が記録される。
検査対象プログラムを商品注文システムとし、図3のAに示す表示画面から商品を購入する例を用いて状態遷移グラフの生成について説明する。
商品注文システムは、PCなどのディスプレイに表示され商品購入画面31の入力ボックス32に、購入する商品に対応する商品コードを入力して商品を注文するものとする。商品注文システムは、商品コード入力後、ユーザが「商品選択」ボタン33を画面上で押下(選択)すると、「入力完了」ボタン34、「入力変更」ボタン35がアクティブ状態になる。この状態で「入力完了」ボタン34を画面上で押下(選択)すると購入する商品が決定され、「購入」ボタン36がアクティブ状態になり、「購入」ボタン36を画面上で押下(選択)すると、ネットワークを介して注文が発注される。「入力変更」ボタン35を画面上で押下(選択)すると、再度商品コードを入力する状態に遷移する。
商品注文システムは、PCなどのディスプレイに表示され商品購入画面31の入力ボックス32に、購入する商品に対応する商品コードを入力して商品を注文するものとする。商品注文システムは、商品コード入力後、ユーザが「商品選択」ボタン33を画面上で押下(選択)すると、「入力完了」ボタン34、「入力変更」ボタン35がアクティブ状態になる。この状態で「入力完了」ボタン34を画面上で押下(選択)すると購入する商品が決定され、「購入」ボタン36がアクティブ状態になり、「購入」ボタン36を画面上で押下(選択)すると、ネットワークを介して注文が発注される。「入力変更」ボタン35を画面上で押下(選択)すると、再度商品コードを入力する状態に遷移する。
なお、商品購入画面31により入力された情報(商品コード、「商品選択」ボタン33、「入力完了」ボタン34、「入力変更」ボタン35、「購入」ボタン36、が選択されたときにシステムに入力される情報など)によって決まるシステム内部の状態を内部状態という。
図3のBに上記説明した商品注文システムの状態遷移を示し、図3のCに商品注文システムの状態遷移グラフ管理テーブル25を示す。
図3のBに示す状態遷移の例であれば、初期状態において「開始」が実行され、現在の状態である「状態1」に遷移する。このとき、状態遷移グラフ管理テーブル25には「遷移元状態」に「初期状態」、「実行関数」に「開始」、「遷移先状態」に「状態1」が記録される。
図3のBに示す状態遷移の例であれば、初期状態において「開始」が実行され、現在の状態である「状態1」に遷移する。このとき、状態遷移グラフ管理テーブル25には「遷移元状態」に「初期状態」、「実行関数」に「開始」、「遷移先状態」に「状態1」が記録される。
ここで、「状態1」が示す状態とは、ディスプレイに商品購入画面31が表示され、入力ボックス32から購入する商品に対応する商品コードが入力可能になり、商品コードを入力すると「商品選択」ボタン33と「入力完了」ボタン34を選択することが可能な状態である。
次に、「状態1」に示す状態からは、「商品選択」ボタン33を選択して「状態2」に遷移する場合と、「入力完了」ボタン34して「状態5」に遷移する場合が考えられる。そのため、図3のCの例では、「遷移元状態」の「状態1」に関連付けて「実行関数」に「商品選択」が記録され、「遷移先状態」に「状態2」が記録される。さらに、「遷移元状態」の「状態1」に関連付けて「実行関数」に「入力完了」が記録され、「遷移先状態」に「状態5」が記録される。また、「遷移元状態」の「状態2」〜「状態5」についても同様に、「遷移元状態」に関連付けて「実行関数」「遷移先状態」の内容が記録される。
なお、本例では、記録する内容を「初期状態」「開始」「状態1」などと便宜上記載するが、実際の「遷移元状態」「遷移先状態」に対応するセルには「初期状態」「状態1」・・・などに対応する識別番号またはコードなどが記録される。また、「実行関数」にはプログラムソースで使用されている関数名などを用いる。
実行選択肢テーブル26は、現在の状態を記録する「状態」と、現在の「状態」と関連付けて、現在の状態において実行可能な関数の関数名を記録する「選択肢」を有している。また、実行選択肢テーブル26の「状態」と「選択肢」には、それぞれ状態の識別番号と実行可能な関数の関数名がプログラム制御部21により関連付けられて記録される。
実行系列テーブル27は、初期状態から現在の状態までの関数の実行系列を記録する。実行系列テーブル27は、遷移元の状態を識別する識別番号などを記録する「遷移元状態」と、実行した関数の関数名を記録する「実行関数」と、遷移先の状態を識別する識別番号などを記録する「遷移先状態」を有している。そして、実行系列テーブル27の「遷移元状態」「実行関数」「遷移先状態」に、遷移元状態の識別番号と関連付けて実行可能な関数の関数名と遷移先状態の識別番号がプログラム制御部21により記録される。
実行回数テーブル28は、現在の実行系列において各関数の実行された回数を記録する。実行回数テーブル28は、関数の関数名を記録する「関数」と、対象の関数が実行された回数を記録する「実行回数」を有し、「関数」「実行回数」に、実行した関数の関数名と関連付けて対象の関数が実行された回数が、実行可能関数絞込部23により記録される。
実行抑止関数テーブル29は、各状態において実行回数制約によって実行しなかった関数を記録する。実行抑止関数テーブル29は、現在の状態を識別する識別番号などを記録する「状態」と、選択肢として除外した関数の関数名を記録する「抑止関数」を有する。また、「状態」「実行回数」に、現在の状態の識別番号と関連付けて選択肢として除外した関数の関数名が、実行可能関数絞込部23により記録される。
(動作説明)
プログラムモデル検査において、プログラム制御部21が、プログラムモデル検査を実行した検査対象プログラムの関数の実行後の状態を、現在の状態まで記録部に記録する。そして、実行可能関数絞込部23が、各状態において関数を実行した回数が予め設定された実行回数上限値以上であるとき、関数が実行を抑止する抑止関数であると判定し、抑止関数を上記状態に関連付けて記録部の実行抑止関数テーブルに記録する。また、関数の実行後の現在の状態がすでに実行済みであるとき、実行抑止関数テーブルの抑止関数と状態に基づいて、該現在の状態において実行可能な関数の実行を抑止したか否かを判定する、実行抑止再評価を行う。
プログラムモデル検査において、プログラム制御部21が、プログラムモデル検査を実行した検査対象プログラムの関数の実行後の状態を、現在の状態まで記録部に記録する。そして、実行可能関数絞込部23が、各状態において関数を実行した回数が予め設定された実行回数上限値以上であるとき、関数が実行を抑止する抑止関数であると判定し、抑止関数を上記状態に関連付けて記録部の実行抑止関数テーブルに記録する。また、関数の実行後の現在の状態がすでに実行済みであるとき、実行抑止関数テーブルの抑止関数と状態に基づいて、該現在の状態において実行可能な関数の実行を抑止したか否かを判定する、実行抑止再評価を行う。
そして、現在の状態から実行可能な関数を抽出し、抽出した関数を実行した回数が予め設定された実行回数上限値より小であり、実行が抑止されている関数を検出して、現在の状態から検出した関数のうちひとつをプログラム実行部21が実行する。
図4にプログラム制御部21の動作を示す図を示す(プログラム制御処理)。
ステップS1では、初期状態から次の状態への遷移するときに、プログラム制御部21が検査対象プログラム2に対してプログラムモデル検査を実行した現在の内部状態を抽出して記録部24に記録する。
ステップS1では、初期状態から次の状態への遷移するときに、プログラム制御部21が検査対象プログラム2に対してプログラムモデル検査を実行した現在の内部状態を抽出して記録部24に記録する。
例えば、上記商品注文システム31が、図5のAに示す初期状態で開始関数が実行され状態1に遷移する場合、プログラム制御部21により初期状態で実行可能な関数の情報、入力されたデータなどが、初期状態に対応する内部状態として抽出され、記録部24に記録される。
ステップS2では、プログラム制御部21が現在の状態から実行可能な関数を検出し、現在の状態と関連付けて実行選択肢テーブル26に記録する。
例えば、上記説明した商品注文システムにプログラムモデル検査を行い、現在の状態が図5のAに示す初期状態の場合、プログラム制御部21が「初期状態」に対応する内部状態から実行可能な関数である開始関数を検出する。そして、実行選択肢テーブル26の「選択肢」に「初期状態」に関連付けて開始関数に対応する「開始」を記録する(図5のB)。
例えば、上記説明した商品注文システムにプログラムモデル検査を行い、現在の状態が図5のAに示す初期状態の場合、プログラム制御部21が「初期状態」に対応する内部状態から実行可能な関数である開始関数を検出する。そして、実行選択肢テーブル26の「選択肢」に「初期状態」に関連付けて開始関数に対応する「開始」を記録する(図5のB)。
また、後述するステップS10から移行してきた場合、例えば現在の状態が図5のAに示す状態1の場合、プログラム制御部21が「状態1」に対応する内部状態から実行可能な関数である入力選択関数、商品選択関数を検出する。そして、実行選択肢テーブル26の「選択肢」に「状態1」に関連付けて入力選択関数、商品選択関数に対応する「商品選択」「入力完了」を記録する(図5のC)。
ステップS3では、プログラム制御部21が状態遷移グラフ管理テーブル25を参照して、既に実行ずみの状態か、すなわち過去に検査した関数実行系列において該状態への遷移済みかを判定し、実行ずみでなければステップS4に移行し、実行ずみであればステップS5に移行する。
例えば、状態遷移グラフ管理テーブル25の「遷移元状態」と現在の状態を比較して、一致するものがあるかを検索する。一致する場合、実行ずみであるとしてステップS5に移行する。一致するものがない場合は実行ずみでないとしてステップS4に移行する。
ステップS4(実行可能関数絞込処理)では実行可能関数絞込部23が選択肢の絞込みをする。実行可能関数絞込部23が、プログラムモデル検査時に実行された各関数の実行回数と、予め設定した実行回数上限値を比較して、実行回数上限値に達している関数を検出する。次に、該当する関数をキーにして実行選択肢テーブル26の「選択肢」から対応する関数を検出し、該「選択肢」に関連付けられた「状態」と該「選択肢」の内容を削除する。なお、選択肢の絞込み(実行可能関数絞込処理)の詳細については後述する。
ステップS5(実行抑止再評価処理)では、実行可能関数絞込部23が関数の実行を抑止したかを判定して、判定結果に基づいて実行選択肢テーブル26、実行抑止関数テーブル29を制御する。なお、実行抑止再評価(実行抑止再評価処理)の詳細については後述する。
ステップS6では、プログラム制御部21が現在の状態に対応する実行可能な関数(選択肢)が残っているかを判定し、残っていればステップS7に移行し、残っていなければステップS11に移行する。
例えば、プログラム制御部21が現在の状態をキーにして実行選択肢テーブル26の「状態」を検索して、対応する状態があれば選択肢が残っているのでステップS7に移行し、対応する状態がなければ選択肢が残っていないのでステップS11に移行する。
ステップS7では、プログラム制御部21が現在の状態に対応する実行可能な関数(選択肢)のうちから任意の1つの関数を選択し、選択した関数を実行選択肢テーブル26から削除する。
例えば、図5のCに示した実行選択肢テーブル26のような場合、「状態1」に対応付けられた「入力完了」「商品選択」があるので、どちらか一方の関数を選択して選択した関数を実行する指示を、プログラム制御部21からプログラム実行部22にする。その後、例えば「商品選択」を選択したのであれば入力完了関数に対応する状態「状態1」を実行選択肢テーブル26から削除する。
ステップS8では、プログラム制御部21から検査対象プログラムを実行する指示をプログラム実行部22が受信し、検査対象プログラム2を実行する。
ステップS9では、ステップS8で実行した検査対象プログラム2により変化した現在の内部状態を記録部24に記録する。図6のAに示すように状態1から商品選択関数を実行することにより状態2に遷移した場合、状態2に対応する内部状態(入力データ、実行可能な関数、表示画面情報など)を記録部24に記録する。
ステップS9では、ステップS8で実行した検査対象プログラム2により変化した現在の内部状態を記録部24に記録する。図6のAに示すように状態1から商品選択関数を実行することにより状態2に遷移した場合、状態2に対応する内部状態(入力データ、実行可能な関数、表示画面情報など)を記録部24に記録する。
ステップS10では、プログラム制御部21が状態遷移グラフ管理テーブル25と実行系列テーブル27に、一つ前の状態を示す「遷移元状態」、選択した関数に対応する「実行関数」、現在の状態に対応する「遷移先状態」を記録する。
図6のBの場合、初期状態から状態1に遷移するとき、プログラム制御部21により実行系列テーブル27の「遷移元状態」に初期状態に対応する「初期状態」が、「実行関数」に開始関数に対応する「開始」が、「遷移先状態」に現在の状態に対応する「状態1」が、記録される。また、状態1から状態2に遷移するとき、プログラム制御部21により実行系列テーブル27の「遷移元状態」に状態1に対応する「状態1」、「実行関数」に商品選択関数に対応する「商品選択」、「遷移先状態」に現在の状態に対応する「状態2」が、記録される。
ステップS10の処理を完了するとステップS2に移行する。また、ステップ3でステップS5に移行し、ステップS5の処理によりステップS6に移行する場合は、上記ステップS6以降の処理を行い、ステップS11に移行する場合には以下の処理を行う。
ステップS11では、プログラム制御部21が実行系列テーブル27から現在の状態が遷移元になっている行を削除する。図7のAに示すように状態2において商品選択をしても状態2に戻るような場合、プログラム制御部21が図7のBに示すように「状態2」「商品選択」「状態2」から構成される行を削除する。なお、現在の状態が遷移元になっているとは、プログラムで使用する変数の値が変わらない場合などである。
ステップS12では、プログラム制御部21が一つ前の状態を現在の状態にする。図7のBの場合、一つ前の状態が「状態2」であるので「状態2」の状態に遷移する。
ステップS13では、プログラム制御部21が現在の状態に実行可能な関数(選択肢)が残っているかを判定し、残っていればステップS7に移行し、残っていなければS14に移行する。例えば、図7のAの場合であれば、状態2において入力完了関数に対応する「入力完了」が、図7のCの実行選択肢テーブル26に記録されているのでステップS7に移行する。
ステップS13では、プログラム制御部21が現在の状態に実行可能な関数(選択肢)が残っているかを判定し、残っていればステップS7に移行し、残っていなければS14に移行する。例えば、図7のAの場合であれば、状態2において入力完了関数に対応する「入力完了」が、図7のCの実行選択肢テーブル26に記録されているのでステップS7に移行する。
ステップS14では、プログラム制御部21が現在の状態が初期状態(実行選択肢テーブル26が空)かを判定し、初期状態であればプログラムモデル検査を終了し、初期状態でない場合はステップS11に移行する。
(実行可能関数絞込処理の説明)
実行可能関数絞込部23の実行回数による選択肢の絞込みの動作について説明する。図8のAは、実行可能関数絞込部23の実行回数による選択肢の絞込みのフローを示す図である。
実行可能関数絞込部23の実行回数による選択肢の絞込みの動作について説明する。図8のAは、実行可能関数絞込部23の実行回数による選択肢の絞込みのフローを示す図である。
ステップS21では、実行可能関数絞込部23が実行系列テーブル27から各実行関数が呼び出された回数を集計して、実行回数テーブル28を更新する。
例えば、実行系列テーブル27の更新は次のように行われる。まず、図9の初期状態から状態1に遷移し現在の状態が状態1のとき、実行系列テーブル27の「実行関数」には「開始」のみが記録されている。実行可能関数絞込部23は、実行回数テーブル28の「関数」に「開始」を記録するとともに、「開始」に対応する開始関数が1回実行されたことを実行回数テーブル28の「実行回数」に記録する。
例えば、実行系列テーブル27の更新は次のように行われる。まず、図9の初期状態から状態1に遷移し現在の状態が状態1のとき、実行系列テーブル27の「実行関数」には「開始」のみが記録されている。実行可能関数絞込部23は、実行回数テーブル28の「関数」に「開始」を記録するとともに、「開始」に対応する開始関数が1回実行されたことを実行回数テーブル28の「実行回数」に記録する。
次に、図9に示す状態1から状態5に入力完了関数を選択して遷移すると、実行系列テーブル27の「実行関数」には「開始」に加え「入力完了」が記録されるため、実行可能関数絞込部23は、実行回数テーブル28の「関数」に「入力完了」を記録する。また、「入力完了」が1回実行されたことを実行回数テーブル28の「実行回数」に記録する。
次に、図9に示す状態5から状態2に商品選択関数を選択して遷移すると、実行系列テーブル27の「実行関数」にさらに「商品選択」が加えて記録されるため、実行可能関数絞込部23は、実行回数テーブル28の「関数」に「商品選択」を記録する。また、「入力完了」が1回実行されたことを実行回数テーブル28の「実行回数」に記録する。
上記のように実行回数テーブル28を更新することにより、現在の状態が状態2に至ったとき、実行回数テーブル28が図8のCに示すように、「開始」「入力完了」「商品選択」に対応する実行回数にそれぞれ「1」「1」「1」が記録される。
ステップS22では、実行可能関数絞込部23が実行選択肢テーブル26から現在の状態に対応する行を1つ選択する。
ステップS23では、実行可能関数絞込部23がステップS22で選択した行の「選択肢」に記録されている関数をキーに実行回数テーブル28から、その関数の実行回数を取得する。
ステップS23では、実行可能関数絞込部23がステップS22で選択した行の「選択肢」に記録されている関数をキーに実行回数テーブル28から、その関数の実行回数を取得する。
ステップS24では、実行可能関数絞込部23がステップS22で選択した関数の実行回数が、予め設定した指定回数(実行回数上限値)以上であるかを判定する。指定回数以上であればステップS25に移行し、指定回数に達していなければステップS27に移行する。
ステップS25では、実行可能関数絞込部23が実行抑止関数テーブル29に現在の状態と選択肢から除外した関数を記録する。
ステップS26では、実行可能関数絞込部23が実行選択肢テーブル26からステップS22で選択した行を削除する。
ステップS26では、実行可能関数絞込部23が実行選択肢テーブル26からステップS22で選択した行を削除する。
ステップS27では、実行可能関数絞込部23が実行選択肢テーブル26の現在の状態に対応する全ての行を処理したかを判定する。
例えば、図9の状態2に遷移すると、実行選択肢テーブル26の記録内容は図8のDに示すような状態になる。ステップS22では、実行可能関数絞込部23が図8のDの実行選択肢テーブル26から状態2に対応する「状態2」「入力完了」または「状態2」「商品選択」を有する行のどちらかを選択する。本例では「状態2」「入力完了」を選択する。
例えば、図9の状態2に遷移すると、実行選択肢テーブル26の記録内容は図8のDに示すような状態になる。ステップS22では、実行可能関数絞込部23が図8のDの実行選択肢テーブル26から状態2に対応する「状態2」「入力完了」または「状態2」「商品選択」を有する行のどちらかを選択する。本例では「状態2」「入力完了」を選択する。
ステップS23では、実行可能関数絞込部23が「入力完了」をキーにして、実行回数テーブル28の「入力完了」に対応する「実行回数」に記録されている「1」を取得する。ステップS24では、「入力完了」に対応する実行回数「1」と予め設定されている実行回数上限値「1」を比較し、実行回数が実行回数上限値に達しているためステップS25に移行する。ステップS25では、実行可能関数絞込部23が、入力完了関数が既に実行された関数であると判断して、実行選択肢テーブル26から「状態2」「入力完了」の行を削除する。ステップS26では、実行可能関数絞込部23が実行抑止関数テーブル29の「状態」「抑止関数」に対応する箇所に「状態2」「入力完了」をそれぞれ記録する。ステップS27では、実行可能関数絞込部23が実行選択肢テーブル26の現在の状態に対応するすべての行を処理したかを判定する。本例では実行選択肢テーブル26にまだ「状態2」「商品選択」があるためステップS22に移行する。
実行選択肢テーブル26の「状態2」「商品選択」についても、上記と同じようにステップS22〜S27の処理を行う。その結果、実行抑止関数テーブル29、実行選択肢テーブル26が図8のE、Fに示すように更新され、実行可能関数絞込処理を終了する。
なお、図9の「×」は抑止された関数であることを示す。
なお、図9の「×」は抑止された関数であることを示す。
(実行可能関数絞込処理の実行抑止再評価の説明)
図10は、図4のステップS5(実行可能関数絞込処理)の動作を示すフロー図である。
図4のステップS3において、状態遷移グラフ管理テーブル25に記録されている状態のためステップS5に移行したとき、ステップS31〜S38の処理を行う。
図10は、図4のステップS5(実行可能関数絞込処理)の動作を示すフロー図である。
図4のステップS3において、状態遷移グラフ管理テーブル25に記録されている状態のためステップS5に移行したとき、ステップS31〜S38の処理を行う。
図11を用いて実行可能関数絞込処理の実行抑止再評価の説明をする。図11は、ステップS5に移行したとき、初期状態−状態5−状態2に至るプログラムモデル検査を実施し、その後バックトラックして状態1において商品選択関数を実行し状態2へ遷移したことを示す図である。
ステップS31では、実行可能関数絞込部23が実行抑止関数テーブル29に現在の状態に対応する行があるか判定する。実行抑止関数テーブル29に現在の状態があればステップS32に移行し、なければ図4のステップS11に移行する。
例えば、現在の状態が状態2であれば、実行可能関数絞込部23が図11のBの実行抑止関数テーブル29の「状態」に「状態2」があるかを検索する。図11のBの実行抑止関数テーブル29には「状態2」があるためステップS32に移行する。
ステップS32では、ステップ4と同じように実行可能関数絞込部23が実行回数による選択肢の絞込みを行う。
図12のAは、実行回数により関数の実行抑止を行った状態に再度到達した場合の実行可能関数絞込部23の実行回数による選択肢の絞込みのフローを示す図である。
図12のAは、実行回数により関数の実行抑止を行った状態に再度到達した場合の実行可能関数絞込部23の実行回数による選択肢の絞込みのフローを示す図である。
ステップS21では、実行可能関数絞込部23が、図12のBの実行系列テーブル27から各実行関数が呼び出された回数を集計して図12のCの実行回数テーブル28を更新する。状態2において実行された関数は、図12のBの実行系列テーブル27に記録された「開始」「商品選択」に対応付けられた関数である。図12のCの実行回数テーブル28には、「開始」「商品選択」がそれぞれ1回実行されているので「実行回数」にそれぞれ「1」が記録される。
ステップS22では、実行可能関数絞込部23が現在の状態で実行可能な関数(選択肢)を実行選択肢テーブル26から1つ選択する。本例では、状態2に対応する選択肢として実行選択肢テーブル26に「入力完了」「商品選択」があるため、「状態2」「商品選択」を有する行を選択する。
ステップS23では、ステップS22で選択した行の選択肢をキーに実行回数テーブル28から、その関数の実行回数を取得する。
ステップS24では、実行可能関数絞込部23がステップS22で選択した関数の実行回数が、予め設定した指定回数(実行回数上限値)以上であるかを判定する。本例では、実行回数上限値「1」に商品選択関数の実行回数「1」が達しているためステップS25に移行し、達していなければステップS27に移行する。
ステップS24では、実行可能関数絞込部23がステップS22で選択した関数の実行回数が、予め設定した指定回数(実行回数上限値)以上であるかを判定する。本例では、実行回数上限値「1」に商品選択関数の実行回数「1」が達しているためステップS25に移行し、達していなければステップS27に移行する。
ステップS25では、実行可能関数絞込部23が実行抑止関数テーブル29に現在の状態と選択肢「商品選択」を記録する。
ステップS26では、実行可能関数絞込部23が実行選択肢テーブル26からステップS22で選択した行を削除する。
ステップS26では、実行可能関数絞込部23が実行選択肢テーブル26からステップS22で選択した行を削除する。
ステップS25、S26の処理をした結果、実行抑止関数テーブル29、実行選択肢テーブル26は、図12のE、Fに示すような状態になる。
ステップS27では、実行可能関数絞込部23が実行選択肢テーブル26の現在の状態に対応する全ての行を処理したかを判定する。本例では、実行選択肢テーブル26の「状態2」「入力完了」が残っているのでステップS22に移行する。
ステップS27では、実行可能関数絞込部23が実行選択肢テーブル26の現在の状態に対応する全ての行を処理したかを判定する。本例では、実行選択肢テーブル26の「状態2」「入力完了」が残っているのでステップS22に移行する。
ステップS22に移行した後、実行選択肢テーブル26の「状態2」「入力完了」についても、上記と同じようにステップS22〜S27の処理を行う。ステップS27において実行選択肢テーブル26の全ての行に対して処理を行えば、実行可能関数絞込処理を終了して図10のAのステップS33に移行する。
ステップS33では、実行可能関数絞込部23が実行抑止関数テーブル29に現在の状態に対応する行があるか判定し、現在の状態に対応する行があればステップS34に移行し、なければステップS6に移行する。本例では、図12のEに示されているように現在の実行抑止関数テーブル29には、現在の状態である状態2に対応する「状態2」「入力完了」を有する行と「状態2」「商品選択」を有する行があるのでステップS34に移行する。
ステップS34では、実行可能関数絞込部23が実行選択肢テーブル26から現在の状態に対応する行を1つ選択する。本例では、図12のFに示されるように現在の実行選択肢テーブル26から現在の状態である状態2に対応する「状態2」「入力完了」を選択する。
ステップS35では、実行可能関数絞込部23がステップS34で選択した行の選択肢と現在の状態に対応する行が実行抑止関数テーブル29にあるか判定し、ある場合にはステップS36に移行し、ない場合はステップS37に移行する。本例では、図12のFに示したように現在の実行選択肢テーブル26に、現在の状態である状態2に対応する「状態2」「入力完了」が、現在の実行抑止関数テーブル29にあるためステップS36に移行する。
ステップS36では、実行可能関数絞込部23が対応する実行抑止関数テーブル29の行を削除する。本例では、図12のEに示す実行抑止関数テーブル29から「状態2」「入力完了」を有する行を削除する。その結果、図13に示すように実行抑止関数テーブル29が更新される。
ステップS37では、実行可能関数絞込部23が選択した実行選択肢テーブル26の行を削除する。つまり、抑止されていないので既にこの状態から実行済みであると判断できるため実行選択肢テーブル26から「状態2」「入力完了」を有する行を削除する。
ステップS38では、実行可能関数絞込部23が実行選択肢テーブル26の全ての行の処理をしたか判定し、全ての行に対して処理が終了すれば図4のステップS6に移行し、未処理の行が残っていればステップS34に移行する。
上記のように実行可能関数絞込処理をすることで、プログラムモデル検査中の関数の実行系列において、同じ関数の予め設定した回数以上の呼出を抑止することができる。且つ、実行可能関数絞込処理と実行抑止再評価をすることにより、抑止した関数を実行すべきかを実行済み状態到達時に再度評価することで、関数の選択順序の違いによる探索結果の違いをなくし、関数の実行を過剰に抑止することなくモデル検査の探索範囲を抑えることができる。
よって、大規模なプログラムに対するプログラムモデル検査が現実的な時間で実施できるようになる。
よって、大規模なプログラムに対するプログラムモデル検査が現実的な時間で実施できるようになる。
(実施例2)
実施例2は、実行可能関数絞込処理を実施する際に、関数ごとに実行回数の実行回数上限値を設定するものである。関数ごとに予め実行回数上限値を記録実行回数上限テーブルに記録し、関数ごとに予め実行回数上限値に基づいて、現在の状態における実行可能な関数の実行を抑止するか否かを判定する。
実施例2は、実行可能関数絞込処理を実施する際に、関数ごとに実行回数の実行回数上限値を設定するものである。関数ごとに予め実行回数上限値を記録実行回数上限テーブルに記録し、関数ごとに予め実行回数上限値に基づいて、現在の状態における実行可能な関数の実行を抑止するか否かを判定する。
図14は実施例2におけるプログラムモデル検査装置40の構成を示す図である。実施例2では、プログラムモデル検査装置40の記録部24に実行回数上限テーブル41を有し、実行可能関数絞込部23が実行回数上限値を取得して、関数ごとの実行回数が最適になるように設定する。
実行回数上限テーブル41は、プログラムモデル検査で実行される関数に対応する関数名などを記録する「関数」、関数ごとに実行回数の上限値を設定する「実行回数上限」を有している。なお、「実行回数上限」への上限値の入力はユーザが行う。
図15のAに実施例2の動作を示すフロー図を示す。ステップS21〜S23では実施例1と同じように処理を行う。
ステップS41では、実行可能関数絞込部23がステップS22で選択した関数の上限を実行回数上限テーブル41から取得する。例えば、図15のBに示すように実行回数上限テーブル41に、「関数」として「開始」「入力完了」・・・「終了」、「実行回数上限」として「開始」「入力完了」・・・「終了」に対応する「1」「3」・・・「1」が記録されているとする。ステップS23で「入力完了」の実行回数が取得されていれば、実行可能関数絞込部23が実行回数上限テーブル41の「入力完了」に対応する実行回数上限値を取得する。
ステップS41では、実行可能関数絞込部23がステップS22で選択した関数の上限を実行回数上限テーブル41から取得する。例えば、図15のBに示すように実行回数上限テーブル41に、「関数」として「開始」「入力完了」・・・「終了」、「実行回数上限」として「開始」「入力完了」・・・「終了」に対応する「1」「3」・・・「1」が記録されているとする。ステップS23で「入力完了」の実行回数が取得されていれば、実行可能関数絞込部23が実行回数上限テーブル41の「入力完了」に対応する実行回数上限値を取得する。
ステップS24では、ステップS41で取得した実行回数と実行回数上限値を比較して、実行回数が実行回数上限値以上であるかを判定する。実行回数が実行回数上限値以上であればステップS25に移行し、実行回数上限値より小さければステップS27に移行する。なお、図15のBに示されている「無制限」ついては上限値がないことを意味しており、必ずステップS25に移行し、購入関数が指定された場合は何度でも実行する。
ステップS25以降は、実施例1と同じように処理を行う。
上記のように実行回数上限値を関数ごとに設定することにより、関数実行抑止を制御できるので、目的の関数の動作を詳しく調べることができる。
上記のように実行回数上限値を関数ごとに設定することにより、関数実行抑止を制御できるので、目的の関数の動作を詳しく調べることができる。
(実施例3)
実施例3は、プログラムモデル検査終了後、実行抑止関数テーブル29にm箇所以上の状態で抑止された関数がある場合、実行回数上限テーブル41の中の対応する関数の実行回数上限値を増やして、再度プログラムモデル検査を実行するものである。なお、mは1以上の整数である。
実施例3は、プログラムモデル検査終了後、実行抑止関数テーブル29にm箇所以上の状態で抑止された関数がある場合、実行回数上限テーブル41の中の対応する関数の実行回数上限値を増やして、再度プログラムモデル検査を実行するものである。なお、mは1以上の整数である。
図16は、実施例3におけるプログラムモデル検査装置50の構成を示す図である。実施例3のプログラムモデル検査装置50は、実施例2の機能にさらに、記録部24の実行回数上限テーブル41を制御するとともに、再度プログラムモデル検査の実行を指示するモデル検査再実行部51を備える。
モデル検査再実行部51は、実行抑止関数テーブル29にm箇所以上の状態で抑止された関数がある場合、実行回数上限テーブル41の中の対応する関数の実行回数上限値を予め設定した値に更新する。また、モデル検査再実行部51は、更新した実行回数上限テーブル41を利用して再度プログラムモデル検査を実行する指示をプログラム実行部22に通知する。
図17に実施例3の動作を示すフロー図を示す(モデル検査再実行処理)。
ステップS51では、1回目のプログラムモデル検査が完了したことを、モデル検査再実行部51が検知する。
ステップS51では、1回目のプログラムモデル検査が完了したことを、モデル検査再実行部51が検知する。
ステップS52では、モデル検査再実行部51が実行抑止関数テーブル29の「抑止関数」に基づいて抑止された関数ごとの集計を行い、集計の結果、予め設定した値よりm箇所以上の状態で抑止されている関数を検出する。
ステップS53では、モデル検査再実行部51が実行回数上限テーブル41の該当する関数の実行回数上限値を変更する。
ステップS52、S53の動作について図18、19を用いて説明する。
ステップS52、S53の動作について図18、19を用いて説明する。
例えば、1回目のプログラムモデル検査を行ったとき、図18のAに示すような状態遷移をしたとし、1回目のプログラムモデル検査が完了した時点の実行抑止関数テーブル29の記録内容が図18のBに示されるようになったとする。また、図18のBの実行抑止関数テーブル29の結果を得たときの実行回数上限テーブル41が図18のCに示す設定であったとする。なお、図18のA、B、Cに示される「a」「b」「c」は関数を示している。
図18のBにおいて、モデル検査再実行部51が実行抑止関数テーブル29の「抑止関数」に記録されているa関数に基づいて「状態2」「状態5」においてa関数が抑止されていることを検出する。モデル検査再実行部51が、a関数が2箇所の状態で抑止されているため、a関数に関連付けて「2」を記録する。
次に、モデル検査再実行部51が、予め設定されている実行回数上限値に加算する値である「1」とa関数に対応する実行回数上限値を「1」を加算して「2」を算出する。そして、図19のCに示すように実行回数上限テーブル41のa関数に対応する実行回数上限値を「1」から「2」に変更する。
なお、本例では実行回数上限値に加算する値は「1」にしているが限定されるものではなく、ユーザが設定してもよい。
なお、本例では実行回数上限値に加算する値は「1」にしているが限定されるものではなく、ユーザが設定してもよい。
ステップS53では、モデル検査再実行部51が実行回数上限テーブル41の実行回数上限値の変更が完了したことを検知して、2回目のプログラムモデル検査を実行する指示を通知する。
プログラムモデル検査装置50はプログラムモデル検査を実行する。その結果、図19のAに示すように、状態2、状態5から状態3に移行し、状態3から状態4(d関数を実行)に移行し、状態4から終了(e関数を実行)する新しい状態遷移についてプログラムモデル検査を実行することができる。
ステップS54では、プログラムモデル検査装置50が2回目のプログラムモデル検査が完了する。
ステップS54では、プログラムモデル検査装置50が2回目のプログラムモデル検査が完了する。
上記のように実行回数上限テーブル41の実行回数上限値を、実行抑止関数テーブル29の抑止関数ごとの集計結果に基づいて行うことにより、1回目(図18のA、B)と2回目(図19のA、B)に示すように実行回数上限値の設定に起因した、検査対象の関数が実行されなくなる現象を避けることができる。そのため、実行回数の制限を安全に行うことができる。また、全ての実行系列のなかで、実行回数制限数までの実行が保証される。
(本実施例がコンピュータプログラムとして実現される場合の構成)
図20は、上記実施形態の装置を実現できるコンピュータのハードウェア構成の一例を示す図である。
コンピュータのハードウェア90は、CPU91、記録部92(24)(ROM、RAM、ハードディスクドライブなど)、記録媒体読取装置93、入出力インタフェース94(入出力I/F)、通信インタフェース95(通信I/F)などを備えている。また、上記各構成部はバス96によってそれぞれ接続されている。
図20は、上記実施形態の装置を実現できるコンピュータのハードウェア構成の一例を示す図である。
コンピュータのハードウェア90は、CPU91、記録部92(24)(ROM、RAM、ハードディスクドライブなど)、記録媒体読取装置93、入出力インタフェース94(入出力I/F)、通信インタフェース95(通信I/F)などを備えている。また、上記各構成部はバス96によってそれぞれ接続されている。
CPU91は、記録部92に格納されている上記説明したプログラムモデル検査を実行するプログラム実行処理と、プログラム制御処理、実行可能関数絞込処理、実行抑止再評価処理、モデル検査再実行処理(図4、8、10、12、15、17に示した処理)を実行する。
記録部92は、CPU91が実行するプログラムやデータが記録されている。また、ワークエリアなどとして使用される。
記録媒体読取装置93は、CPU91の制御にしたがって記録媒体93aに対するデータのリード/ライトを制御する。そして、記録媒体93a、記録媒体読取装置93の制御で書き込まれたデータを記憶したり、記録媒体93aに記憶されたデータを読み取らせたりする。また、着脱可能な記録媒体93aは、コンピュータで読み取り可能な記録媒体として、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置(HDD)などがある。光ディスクには、DVD(Digital Versatile Disc)、DVD−RAM(Random Access Memory)、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
記録媒体読取装置93は、CPU91の制御にしたがって記録媒体93aに対するデータのリード/ライトを制御する。そして、記録媒体93a、記録媒体読取装置93の制御で書き込まれたデータを記憶したり、記録媒体93aに記憶されたデータを読み取らせたりする。また、着脱可能な記録媒体93aは、コンピュータで読み取り可能な記録媒体として、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置(HDD)などがある。光ディスクには、DVD(Digital Versatile Disc)、DVD−RAM(Random Access Memory)、CD−ROM(Compact Disc Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。光磁気記録媒体には、MO(Magneto-Optical disk)などがある。
入出力インタフェース94には、入出力装置94a(マウス、キーボード、ディスプレイなど)が接続され、ユーザが入力した情報を受信し、バス96を介してCPU91に送信する。また、CPU91からの命令に従ってディスプレイの画面上に操作情報などを表示する。
通信インタフェース95は、必要に応じ、他のコンピュータとの間のLAN接続やインターネット接続や無線接続のためのインタフェースである。また、他の装置に接続され、外部装置からのデータの入出力を制御する。
このようなハードウェア構成を有するコンピュータを1台または2台以上用いることによって、上記説明した各種処理機能(実施例で説明した処理(フローチャートなど))が実現される。その場合システムが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体93aに記録しておくことができる。
プログラムを流通させる場合には、例えば、そのプログラムが記録されたDVD、CD−ROMなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
また、本発明は、上記実施の形態に限定されるものでなく、本発明の要旨を逸脱しない範囲内で種々の改良、変更が可能である。
1 ドライバ、
2 検査対象プログラム、
3 データベーススタブ、
4 ネットワークスタブ、
5 プログラムモデル検査装置、
6 入力データ、
7 プロパティ、
21 プログラム制御部、
22 プログラム実行部、
23 実行可能関数絞込部、
24 記録部、
25 状態遷移グラフ管理テーブル、
26 実行選択肢テーブル、
27 実行系列テーブル、
28 実行回数テーブル、
29 実行抑止関数テーブル、
40 プログラムモデル検査装置、
41 実行回数上限テーブル、
50 プログラムモデル検査装置、
51 モデル検査再実行部、
90 ハードウェア、
91 CPU、
92 記録部、
93 記録媒体読取装置、
93a 記録媒体、
94 入出力インタフェース、
94a 入出力装置、
95 通信インタフェース、
96 バス、
2 検査対象プログラム、
3 データベーススタブ、
4 ネットワークスタブ、
5 プログラムモデル検査装置、
6 入力データ、
7 プロパティ、
21 プログラム制御部、
22 プログラム実行部、
23 実行可能関数絞込部、
24 記録部、
25 状態遷移グラフ管理テーブル、
26 実行選択肢テーブル、
27 実行系列テーブル、
28 実行回数テーブル、
29 実行抑止関数テーブル、
40 プログラムモデル検査装置、
41 実行回数上限テーブル、
50 プログラムモデル検査装置、
51 モデル検査再実行部、
90 ハードウェア、
91 CPU、
92 記録部、
93 記録媒体読取装置、
93a 記録媒体、
94 入出力インタフェース、
94a 入出力装置、
95 通信インタフェース、
96 バス、
Claims (3)
- プログラムモデル検査装置が、複数の関数実行系列を備える検査対象プログラムにおける各状態から実行可能な関数のうち、該関数実行系列内での実行回数が実行回数上限値未満のものを実行する、プログラムモデル検査方法であって、
前記プログラムモデル検査装置が、
現在の状態から実行可能な関数の実行回数が、前記実行回数上限値以上である場合に、該関数の実行を抑止して該関数実行系列の検査を終了し、該関数を該現在の状態に関連付けて実行を抑止する関数を定義した実行抑止関数テーブルに記録するステップと、
他の関数実行系列において、現在の状態への遷移がすでに行われているとき、前記実行抑止関数テーブルに該現在の状態と該現在の状態から実行可能な関数との組み合わせがあるか否かを判定する判定ステップと、
前記判定ステップにおいて前記組み合わせがある場合にのみ該関数を実行するステップと、
を実行することを特徴とするプログラムモデル検査方法。 - 前記実行抑止関数テーブルにおいて、予め設定した数以上の状態と関連付けられている関数が検出されたときに、該関数の前記実行回数上限値を増加させるステップをさらに実行することを特徴とする請求項1に記載のプログラムモデル検査方法。
- 複数の関数実行系列を備える検査対象プログラムにおける各状態から実行可能な関数のうち、該関数実行系列内での実行回数が実行回数上限値未満のものを実行する、プログラムモデル検査プログラムであって、
コンピュータに、
現在の状態から実行可能な関数の実行回数が、前記実行回数上限値以上である場合に、該関数の実行を抑止して該関数実行系列の検査を終了し、該関数を該現在の状態に関連付けて実行を抑止する関数を定義した実行抑止関数テーブルに記録する処理と、
他の関数実行系列において、現在の状態への遷移がすでに行われているとき、前記実行抑止関数テーブルに該現在の状態と該現在の状態から実行可能な関数との組み合わせがあるか否かを判定する判定処理と、
前記判定処理において前記組み合わせがある場合にのみ該関数を実行する処理と、
を実行させることを特徴とするプログラムモデル検査プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009152826A JP5321286B2 (ja) | 2009-06-26 | 2009-06-26 | プログラムモデル検査方法、プログラムモデル検査プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2009152826A JP5321286B2 (ja) | 2009-06-26 | 2009-06-26 | プログラムモデル検査方法、プログラムモデル検査プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2011008628A JP2011008628A (ja) | 2011-01-13 |
JP5321286B2 true JP5321286B2 (ja) | 2013-10-23 |
Family
ID=43565181
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2009152826A Expired - Fee Related JP5321286B2 (ja) | 2009-06-26 | 2009-06-26 | プログラムモデル検査方法、プログラムモデル検査プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP5321286B2 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5987189B2 (ja) * | 2012-09-24 | 2016-09-07 | 三菱電機株式会社 | テストケース自動生成装置及びテストケース自動生成プログラム |
CN111566625B (zh) * | 2018-01-17 | 2024-01-09 | 三菱电机株式会社 | 测试用例生成装置、测试用例生成方法和计算机能读取的记录介质 |
WO2020194455A1 (ja) | 2019-03-25 | 2020-10-01 | 三菱電機株式会社 | テストケース生成装置、テストケース生成方法、およびテストケース生成プログラム |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004005399A (ja) * | 2002-04-05 | 2004-01-08 | Sharp Corp | ソフトウェアのテスト方法および装置 |
JP4701025B2 (ja) * | 2005-07-08 | 2011-06-15 | 株式会社アイ・エル・シー | デバッグ支援システム、デバッグ支援方法、デバッグ支援ターゲットプログラム |
-
2009
- 2009-06-26 JP JP2009152826A patent/JP5321286B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2011008628A (ja) | 2011-01-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP4941040B2 (ja) | テスト仕様書生成プログラム、およびテスト仕様書生成装置 | |
US20080155515A1 (en) | Method and System for Graphical User Interface Testing | |
JP5198132B2 (ja) | 状態遷移テスト支援装置、状態遷移テスト支援プログラム、および状態遷移テスト支援方法 | |
JP2006350686A (ja) | 命令セット・シミュレータ生成装置及びシミュレータ生成方法 | |
JP4657912B2 (ja) | 設計装置および設計方法とそのプログラム | |
CN106484389A (zh) | 动作流分段管理 | |
JP5321286B2 (ja) | プログラムモデル検査方法、プログラムモデル検査プログラム | |
US20130326466A1 (en) | Human Readable Software Program Test Step | |
JP6120607B2 (ja) | 要件検出装置及び要件検出プログラム | |
JP2008305019A (ja) | シミュレーション装置及びシミュレーション方法及びプログラム | |
JP2013003854A (ja) | テストデータ生成プログラム、テストデータ生成方法、テストデータ生成装置 | |
WO2013058252A1 (ja) | モデル検査支援方法、モデル検査支援プログラム、およびモデル検査支援装置 | |
JP7380851B2 (ja) | テストスクリプト生成装置、テストスクリプト生成方法及びプログラム | |
JP5176869B2 (ja) | テストケース生成プログラムとテストケース生成装置およびテストケース生成方法 | |
JP2013148968A (ja) | テストデータ生成装置、テストデータ生成プログラムおよびテストデータ生成方法 | |
WO2012053392A1 (ja) | ソフトウェアプロダクトライン開発支援装置、その方法およびそのプログラム | |
US6745374B2 (en) | Algorithms for determining path coverages and activity | |
JP2019091130A (ja) | 質問提示制御プログラム、検索方法、および検索装置 | |
KR102417677B1 (ko) | 회로 검증을 위한 유사 회로 검색 장치 및 방법 | |
JP6702036B2 (ja) | 検索プログラム、検索方法および検索装置 | |
JP5417359B2 (ja) | 文書評価支援システム、及び文書評価支援方法 | |
JP5918102B2 (ja) | 解析システム、解析装置、解析方法及び解析プログラム | |
JP6066690B2 (ja) | ソフトウェア開発支援装置、ソフトウェア開発支援方法、および、プログラム | |
US20230129842A1 (en) | Questionnaire data analysis method and information processing apparatus | |
JP6959513B2 (ja) | 解析装置および解析方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20120309 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20130612 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20130618 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20130701 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |