JP2007011690A - プログラムの検証プログラム、プログラムの検証装置、プログラムの検証方法 - Google Patents

プログラムの検証プログラム、プログラムの検証装置、プログラムの検証方法 Download PDF

Info

Publication number
JP2007011690A
JP2007011690A JP2005191687A JP2005191687A JP2007011690A JP 2007011690 A JP2007011690 A JP 2007011690A JP 2005191687 A JP2005191687 A JP 2005191687A JP 2005191687 A JP2005191687 A JP 2005191687A JP 2007011690 A JP2007011690 A JP 2007011690A
Authority
JP
Japan
Prior art keywords
program
change
verification
function
model
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.)
Granted
Application number
JP2005191687A
Other languages
English (en)
Other versions
JP4414373B2 (ja
Inventor
Kazumichi Morizawa Rafael
カズミチ モリザワ ラファエル
Shinya Kuwamura
慎哉 桑村
Tsuneo Nakada
恒夫 中田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2005191687A priority Critical patent/JP4414373B2/ja
Priority to US11/237,663 priority patent/US7844953B2/en
Publication of JP2007011690A publication Critical patent/JP2007011690A/ja
Application granted granted Critical
Publication of JP4414373B2 publication Critical patent/JP4414373B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3632Software debugging of specific synchronisation aspects

Abstract

【課題】 並行・並列プログラムの対話的デバッグ作業を可能にするための効率的な検証を行うプログラムの検証プログラム、プログラムの検証装置、プログラムの検証方法を提供する。
【解決手段】 変更前の検証対象プログラムと変更後の検証対象プログラムから、変更が施された関数と、変更の影響を受ける共有変数を用いた関数とを検出すると共に、変更の影響を受ける部分、制御構造部分、それ以外の部分を検出する検出ステップと、検出ステップの検出結果に基づいてモデルを生成するモデル生成ステップと、変更前の検証対象プログラムのモデルと変更後の検証対象プログラムのモデルを比較することにより、変更後の検証対象プログラムの検証を行う検証ステップとをコンピュータに実行させる。
【選択図】 図1

Description

本発明は、並行プログラムまたは並列プログラムの検証を行うためのプログラムの検証プログラム、プログラムの検証装置、プログラムの検証方法に関するものである。
並行プログラムや並列プログラムは、複数のプロセス(スレッド)で構成される。これらのプロセスは、実行中に同一の共有リソース(共有変数)を参照したり、書き換えたりする。複数のプロセスによる共有リソースの自由な参照や書き換えを許すと、設計者の意図とは異なる結果がプログラムにより出力される可能性がある。
ここで、並列プログラムの具体例を用いて説明する。この例における並列プログラムは、共有変数sharedの定義、関数Process01、関数Process02から構成される。図32は、並列プログラムにおける共有変数の定義の一例を示すソースコードである。また、図33は、並列プログラムにおける関数Process01の一例を示すソースコードである。また、図34は、並列プログラムにおける関数Process02の一例を示すソースコードである。2つのプロセスである関数Process01、関数Process02は、共有変数sharedを共有する。この並列プログラムは、関数Process01、関数Process02は、並列に動作し、関数a(1),b(0)が交互に呼び出される仕様である。第1の並列プログラムのトレースの一例として、次のトレースが起こり得る。
1.Process01.shared参照(shared==0)
2.Process01.shared=1
3.Process02.shared参照(shared==1)
4.Process02.shared=0
5.Process02.b(0)
6.Process01.a(0)
このトレースの例では、関数aと関数bの実行順番が逆転し、引数は共に0となり、仕様を満たさないことから、不具合である。
このような不具合を防ぐために、MUTEXロックやセマフォア等の同期機構が使われる。例えば、MUTEXロックを使ってプログラムを修正することができる。同期機構を使うことにより、1つのプロセスが共有リソースへの参照や書き込みを行うとき、別のプロセスが干渉しないことから、設計された順番通りに逐次実行される。図35は、並列プログラムにおける関数Process01の修正結果の一例を示すソースコードである。図36は、並列プログラムにおける関数Process02の修正結果の一例を示すソースコードである。この例では、ロックlに保護されている部分(lockの呼び出しからunlockの呼び出しまでの間)は、逐次実行される。
なお、本発明の関連ある従来技術として、例えば、下記に示す特許文献1が知られている。この並列プログラム動作解析方法は、並列計算機上で動作する並列プログラムについて、並列プログラムを構成する各プログラムの状態遷移を表示すると共に、不具合の原因の特定を支援するものである。
特開平8−328897号公報
しかしながら、上述した同期機構を多用すると逐次に実行される部分が増えることにより、プログラムの並列性が活かされず、性能の観点からは望ましくない。また、多くの場合、同期機構の実行にオーバヘッドが存在するため、性能低下の要因となる。
但し、多くのケースでは、並列・並行プログラムの実行には仮定が設けられる。その仮定を考慮してプログラムを変更すると、一部の同期を緩和することができる。同期を緩和した結果、プロセスが並行または並列に実行できる時間が増えて、プログラム全体の実行速度が向上する。正しく動作するように並列・並行プログラムの速度を改善するためには、変更前と変更後のプログラムの結果を比較しながら行う作業が必要であり、この作業を行うためには、デバッガのような対話的なツールが必要となる。特に、並行・並列プログラムの同期が原因となる不具合の特定は、難しい作業である。
通常の逐次プログラムのデバッガでは、デバッグ対象プログラムに対するテストデータを決めておき、設計者がステップ実行しながら実行結果を観測する。並行・並列プログラムにおいて、多くの場合、実行結果はテストデータに依存するだけでなく、各プロセスの共有リソースへアクセスするタイミングにも依存する。しかしながら、通常の逐次プログラム用のデバッガはタイミングを考慮していないため、並行・並列プログラムのデバッグに向いていない。
この問題に対して、並行・並列プログラムに特化したデバッガは存在する。このデバッガは、並行・並列に動作するプロセスの実行タイミングを変更しながら、テストデータを流す方式を採用している。しかし、プロセスのあらゆる実行タイミングを試行するため、デバッグ時間が非常に長くなってしまう。
また、並行・並列プログラムのデバッグには、モデルチェックを代表とする形式的検証技術が使われている。ここで、通常のモデルチェックの手順について説明する。変更前の正しく動作するプログラム全体のモデル、例えば、FSM(Finite State Machine:有限状態機械)を予め作成する。プログラムの変更後、再度、変更後のプログラムのモデルを作成し、両方のモデルについて等価性検証等の技術を用いて比較する。しかしながら、プログラムの規模が大きい場合、モデル作成は非常に時間がかかると共に、モデルの比較も非常に時間がかかる。従って、一般的なプログラムの対話的デバッグ作業は困難であった。
本発明は上述した問題点を解決するためになされたものであり、並行・並列プログラムの対話的デバッグ作業を可能にするための効率的な検証を行うプログラムの検証プログラム、プログラムの検証装置、プログラムの検証方法を提供することを目的とする。
上述した課題を解決するため、本発明は、複数の関数を含んで構成される並行プログラムまたは並列プログラムを検証対象プログラムとし、該検証対象プログラムを変更した場合における該変更後の検証対象プログラムの検証をコンピュータに実行させるプログラムの検証プログラムであって、前記検証対象プログラムの変更前後における該検証対象プログラムから、前記変更が施された関数と、前記変更の影響を受ける共有変数が用いられる関数とを検出すると共に、前記変更が施された関数における前記変更が施された部分及び前記変更の影響を受ける共有変数を用いた関数における変更の影響を受ける部分である第1の部分と、プログラム処理の制御に関する部分である制御構造部分と、前記制御構造部分と前記第1の部分以外の部分である第2の部分を検出する検出ステップと、前記検出ステップにより検出された前記制御構造部分と前記第1の部分と前記第2の部分に基づいて、前記変更前の検証対象プログラムのモデルと前記変更後の検証対象プログラムのモデルを生成するモデル生成ステップと、前記モデル生成ステップにより生成された前記変更前の検証対象プログラムのモデルと前記変更後の検証対象プログラムのモデルを比較することにより、前記変更後の検証対象プログラムの検証を行う検証ステップとをコンピュータに実行させるものである。
また、本発明に係るプログラムの検証プログラムにおいて、前記検出ステップは、変更の影響を受ける共有変数が出現する部分と該共有変数のロックの部分を前記第1の部分とすることを特徴とするものである。
また、本発明に係るプログラムの検証プログラムにおいて、前記検出ステップは、前記検証対象プログラムにおいて前記第1の部分にマークを付加することを特徴とするものである。
また、本発明に係るプログラムの検証プログラムにおいて、前記モデル生成ステップは、前記第1の部分と前記第2の部分の基本ブロックを状態に割り付け、前記制御構造部分に基づいて遷移を表すことにより、有限状態機械をモデルとして生成することを特徴とするものである。
また、本発明に係るプログラムの検証プログラムにおいて、前記モデル生成ステップは、前記モデルにおいて、前記第1の部分を含まない複数の状態をまとめて1つの状態とすることを特徴とするものである。
また、本発明に係るプログラムの検証プログラムにおいて、前記検証ステップは、まず、前記変更が施された関数について変更前のモデルと変更後のモデルの比較を行い、該比較の結果が一致しない場合、前記変更が施された関数のモデルと前記変更の影響を受ける共有変数を用いた関数のモデルの状態の積で得られるモデルについて、変更前のモデルと変更後のモデルの比較を行うことにより、前記変更後の検証対象プログラムの検証を行うことを特徴とするものである。
また、本発明に係るプログラムの検証プログラムにおいて、前記検証ステップは、変更前の検証対象プログラムのモデルと変更後の検証対象プログラムのモデルが一致しない場合、所定の不具合となる状態を検出し、該状態を表示することを特徴とするものである。
また、本発明に係るプログラムの検証プログラムにおいて、前記検証ステップは、変更前の検証対象プログラムのモデルと変更後の検証対象プログラムのモデルが一致しない場合、所定の不具合となる状態を検出し、該状態に至る実行順序を検出し、該実行順序を表示することを特徴とするものである。
また、本発明に係るプログラムの検証プログラムにおいて、前記検証ステップは、ルールベースチェックまたはモデルチェックを用いて、変更後の検証対象プログラムの検証を行うことを特徴とするものである。
また、本発明は、複数の関数を含んで構成される並行プログラムまたは並列プログラムを検証対象プログラムとし、該検証対象プログラムを変更した場合における該変更後の検証対象プログラムの検証を行うプログラムの検証装置であって、前記検証対象プログラムの変更前後における該検証対象プログラムから、前記変更が施された関数と、前記変更の影響を受ける共有変数が用いられる関数とを検出すると共に、前記変更が施された関数における前記変更が施された部分及び前記変更の影響を受ける共有変数を用いた関数における変更の影響を受ける部分である第1の部分と、プログラム処理の制御に関する部分である制御構造部分と、前記制御構造部分と前記第1の部分以外の部分である第2の部分を検出する検出部と、前記検出部により検出された前記制御構造部分と前記第1の部分と前記第2の部分に基づいて、前記変更前の検証対象プログラムのモデルと前記変更後の検証対象プログラムのモデルを生成するモデル生成部と、前記モデル生成部により生成された前記変更前の検証対象プログラムのモデルと前記変更後の検証対象プログラムのモデルを比較することにより、前記変更後の検証対象プログラムの検証を行う検証部とを備えたものである。
また、本発明に係るプログラムの検証装置において、前記検出部は、変更の影響を受ける共有変数が出現する部分と該共有変数のロックの部分を前記第1の部分とすることを特徴とするものである。
また、本発明に係るプログラムの検証装置において、前記検出部は、前記検証対象プログラムにおいて前記第1の部分にマークを付加し、前記モデル生成部は、前記マークを検出することにより前記第1の部分と前記第2の部分への分類を行うことを特徴とするものである。
また、本発明に係るプログラムの検証装置において、前記モデル生成部は、前記第1の部分と前記第2の部分の基本ブロックを状態に割り付け、前記制御構造部分に基づいて遷移を表すことにより、有限状態機械をモデルとして生成することを特徴とするものである。
また、本発明に係るプログラムの検証装置において、前記モデル生成部は、前記モデルにおいて、前記第1の部分を含まない複数の状態をまとめて1つの状態とすることを特徴とするものである。
また、本発明に係るプログラムの検証装置において、前記検証部は、まず、前記変更が施された関数について変更前のモデルと変更後のモデルの比較を行い、該比較の結果が一致しない場合、前記変更が施された関数のモデルと前記変更の影響を受ける共有変数を用いた関数のモデルの状態の積で得られるモデルについて、変更前のモデルと変更後のモデルの比較を行うことにより、前記変更後の検証対象プログラムの検証を行うことを特徴とするものである。
また、本発明に係るプログラムの検証装置において、前記検証部は、変更前の検証対象プログラムのモデルと変更後の検証対象プログラムのモデルが一致しない場合、所定の不具合となる状態を検出し、該状態を表示することを特徴とするものである。
また、本発明に係るプログラムの検証装置において、前記検証部は、変更前の検証対象プログラムのモデルと変更後の検証対象プログラムのモデルが一致しない場合、所定の不具合となる状態を検出し、該状態に至る実行順序を検出し、該実行順序を表示することを特徴とするものである。
また、本発明に係るプログラムの検証装置において、前記検証部は、ルールベースチェックまたはモデルチェックを用いて、変更後の検証対象プログラムの検証を行うことを特徴とするものである。
また、本発明は、並行プログラムまたは並列プログラムを検証対象プログラムとし、変更が施された検証対象プログラムの検証を行うプログラムの検証方法であって、前記変更前の検証対象プログラムと前記変更後の検証対象プログラムから、前記変更が施された関数と、前記変更の影響を受ける共有変数を用いた関数とを検出すると共に、検出した関数から前記変更の影響を受ける部分である第1の部分を検出する検出ステップと、前記検出ステップにより検出された各関数から、制御構造、第1の部分、前記制御構造と前記第1の部分以外の部分である第2の部分に分類し、該分類に基づいて前記変更前の検証対象プログラムのモデルと前記変更後の検証対象プログラムのモデルを生成するモデル生成ステップと、前記モデル生成ステップにより生成された、前記変更前の検証対象プログラムのモデルと前記変更後の検証対象プログラムのモデルを比較することにより、前記変更後の検証対象プログラムの検証を行う検証ステップとを実行するものである。
本発明によれば、並行・並列プログラムの検証に要する時間を大幅に短縮することにより、対話的デバッグ作業が可能になり、並行・並列プログラムの開発効率を大幅に向上させることができる。
以下、本発明の実施の形態について図面を参照しつつ説明する。
実施の形態1.
本実施の形態では、同期機構としてMUTEXロックを用い、プログラムの変更により、データ競合が起こる場合について説明する。
図1は、本発明に係るプログラムの検証装置の構成の一例を示すブロック図である。この検証装置は、変更検出部11、ソースコード分類部12、モデル生成部13、検証部14を備える。
ここで、検証装置の動作の説明のために、並列プログラムの具体例である第1の検証対象プログラムを用いて説明する。この第1の検証対象プログラムのソースコードは、共有変数の定義、関数Process1、関数Process2から成る。図2は、第1の検証対象プログラムにおける共有変数の定義を示すソースコードである。また、図3は、第1の検証対象プログラムにおける変更前の関数Process1を示すソースコードである。また、図4は、第1の検証対象プログラムにおける関数Process2を示すソースコードである。また、図5は、第1の検証対象プログラムにおける変更後の関数Process1を示すソースコードである。このように関数Process1を変更した場合、関数Process1と関数Process2の間で共有変数shared1に対するデータ競合が起こる。
図6は、本発明に係るプログラムの検証装置の動作の一例を示すフローチャートである。
まず、変更検出部11は、変更前プログラムと変更後プログラムを読み込んで、それらの差分を確認する変更検出処理を行う(S11)。
図7は、本発明に係る変更検出処理の動作の一例を示すフローチャートである。まず、変更検出部11は、変更前プログラムと変更後プログラムを比較し、変更された関数J、変更に影響を受けた共有変数集合Vを特定する(S21)。次に、変更検出部11は、変更後の関数Jにおいて共有変数集合Vの出現する部分とロックの部分にマークを付加する(S22)。次に、変更検出部11は、変更前の関数Jにおいて共有変数集合Vの出現する部分とロックの部分にマークを付加する(S23)。次に、変更検出部11は、他の関数の中から共有変数集合Vが出現する関数Kを特定する(S24)。次に、変更検出部11は、関数Kにおいて共有変数集合Vの出現する部分とロックの部分にマークを付加する(S25)。次に、変更検出部11は、マークが付いた関数集合を出力し(S26)、このフローを終了する。
ここで、変更検出処理の具体例について説明する。図8は、第1の検証対象プログラムにおける変更後の関数Process1の変更検出処理の結果の一例を示すソースコードである。ここで、まず、変更検出部11は、変更された関数が関数Process1のみであると特定し、関数Process1の変更箇所を特定し、特定した箇所に“//1”から“//6”までのマークを付加する。次に、変更検出部11は、変更箇所で用いられている共有変数がshared1であると特定する。
図9は、第1の検証対象プログラムにおける変更前の関数Process1の変更検出処理の結果の一例を示すソースコードである。次に、変更前のProcess1におけるshared1の出現箇所を特定し、特定した箇所に“//S”のマークを付加する。図10は、第1の検証対象プログラムにおける関数Process2の変更検出処理の結果の一例を示すソースコードである。次に、変更検出部11は、変数shared1を使う別のプロセスを検索し、関数Process2を特定し、関数Process1におけるshared1の出現箇所を特定し、特定した箇所に“//S”のマークを付加する。この結果、変更検出部11の出力は、変更前の関数Process1、変更後の関数Process1、関数Process2の関数集合であり、変更が施された部分や変更に影響を受けた部分にマークが付加されたソースコードである。
次に、ソースコード分類部12は、制御構造、変更の影響を受ける部分、それ以外の部分の分類を行う(S12)。ソースコード分類部12は、対象となる関数において、制御構造とマークが付いている文を残した上で、基本ブロック単位で文をまとめる。基本ブロックとは、コンパイラ技術に使われる定義であり、制御フローの入口と出口がそれぞれ1つしかないブロックを指す。
図11は、本発明に係るソースコード分類処理の動作の一例を示すフローチャートである。まず、ソースコード分類部12は、変更検出部11の出力である関数集合からある関数jを取り出す(S31)。次に、ソースコード分類部12は、関数jから制御構造を抽出し、新しい抽出関数j’に出力する(S32)。次に、ソースコード分類部12は、関数jからマークが付いている部分を抽出し、抽出関数j’に出力する(S33)。次に、ソースコード分類部12は、関数jからマークが付いていない部分を基本ブロック単位にまとめて抽出し、抽出関数j’に出力する(S34)。次に、ソースコード分類部12は、関数集合に未処理の関数が残っているか否かの判断を行う(S35)。関数が残っている場合(S35,Y)、処理S31へ戻る。一方、関数が残っていない場合(S35,N)、抽出関数j’の集合を抽出関数集合として出力し(S36)、このフローを終了する。
ここで、ソースコード分類処理の具体例について説明する。図12は、第1の検証対象プログラムにおける変更前の関数Process1のソースコード分類処理の結果の一例を示すソースコードである。変更前の関数Process1の基本ブロックは、擬似関数AA()、擬似関数BB()、擬似関数CC()、擬似関数DD()、擬似関数EE()としてまとめられる。図13は、第1の検証対象プログラムにおける関数Process2のソースコード分類処理の結果の一例を示すソースコードである。関数Process2の基本ブロックは、擬似関数XX()、擬似関数ZZ()としてまとめられる。
図14は、第1の検証対象プログラムにおける変更後の関数Process1のソースコード分類処理の結果の一例を示すソースコードである。ここで、変更後の関数Process1の基本ブロックは、関数a()と関数b()を擬似関数A()、関数d()を擬似関数B()、関数e()を擬似関数C()、関数l.lock()から関数f()までを擬似関数D()、関数h()を擬似関数E()としてまとめられる。
次に、モデル生成部13は、ソースコード分類処理の結果をモデルに変換する(S13)。モデルの種類は、後述する検証処理で用いる技術により異なるが、本実施の形態では、検証処理にモデルチェックを用い、モデルとしてFSMを用いる。モデル生成部13は、ソースコード分類処理の結果のうち、基本ブロック単位または共有変数を参照するブロック単位で状態を割り付け、更に状態最適化を行う。状態最適化は、マークが付いた部分が含まれない状態を1つの状態にまとめるものであり、State Minimizationアルゴリズムの応用により実現可能である。
図15は、本発明に係るモデル生成処理の動作の一例を示すフローチャートである。まず、モデル生成部13は、ソースコード分類部12の出力である抽出関数集合からある抽出関数j’を取り出す(S41)。次に、モデル生成部13は、ロックで保護されている部分を基本ブロックと見なす(S42)。次に、モデル生成部13は、抽出関数j’の制御構造を辿り、基本ブロックを1つ取り出す(S43)。次に、モデル生成部13は、基本ブロック内にマークが付いた部分が存在するか否かの判断を行う(S44)。マークが付いた部分が存在する場合(S44,Y)、モデル生成部13は、基本ブロックからマークが付いた部分を分離し、1つの状態に割り付け(S45)、残った部分をそれぞれ1つの状態に割り付け(S46)、処理S48へ移行する。一方、マークが付いた部分が存在しない場合(S44,N)、モデル生成部13は、基本ブロックを1つの状態に割り付け(S47)、処理S48へ移行する。
次に、処理S48において、モデル生成部13は、未処理の基本ブロックが残っているか否かの判断を行う(S48)。未処理の基本ブロックが残っている場合(S48,Y)、処理S43へ戻る。一方、未処理の基本ブロックが残っていない場合(S48,N)、モデル生成部13は、状態最適化を行う(S49)。次に、モデル生成部13は、抽出関数集合に未処理の抽出関数が残っているか否かの判断を行う(S50)。未処理の抽出関数が残っている場合(S50,Y)、処理S41へ戻る。一方、未処理の抽出関数が残っていない場合(S50,N)、モデル生成部13は、状態最適化の結果をFSMモデル集合として出力し(S51)、このフローを終了する。
ここで、モデル生成処理の具体例について説明する。まず、処理S48までの状態割り付けの結果について説明する。図16は、第1の検証対象プログラムにおける変更後の関数Process1のモデル生成処理の状態割り付けの結果の一例を示すモデルである。ここで、モデル生成部13は、擬似関数A(),関数c()を状態A、擬似関数B()を状態B、擬似関数C()を状態C、擬似関数D()を状態D、擬似関数E()を状態E、“//1”,“//2”,“//3”を状態N123、“//4”,“//5”,“//6”を状態N456として、それぞれ割り付ける。次に、処理S49の状態最適化の結果について説明する。図17は、第1の検証対象プログラムにおける変更後の関数Process1のモデル生成処理の結果の一例を示すモデルである。ここで、状態A、状態B,状態C,状態Dは、1つの基本ブロックとなり、かつ、その中にマークが付いた部分が存在しないため、状態A’に統合される。
同様に、モデル生成部13は、変更前の関数Process1と関数Process2に対してモデル生成処理を行う。図18は、第1の検証対象プログラムにおける変更前の関数Process1のモデル生成処理の状態割り付けの結果の一例を示すモデルである。擬似関数AA()、擬似関数BB()、擬似関数CC()、擬似関数DD()、擬似関数EE()は、それぞれ状態AA、状態BB、状態CC、状態DD、状態EEに割り付けられ、マーク“//S”の付いた部分は状態N1に割り付けられる。図19は、第1の検証対象プログラムにおける変更前の関数Process1のモデル生成処理の結果の一例を示すモデルである。状態AA、状態BB、状態CC、状態DDは、1つの基本ブロックとなり、かつ、その中にマークが付いた部分が存在しないため、状態AA’に統合される。
図20は、第1の検証対象プログラムにおける関数Process2のモデル生成処理の結果の一例を示すモデルである。擬似関数XX()、擬似関数ZZ()は、それぞれ状態XX、状態ZZに割り付けられ、マーク“//S”の付いた部分は状態N2に割り付けられる。状態最適化による変化はない。
次に、検証部14は、モデル生成処理の結果を用いて検証処理を行う(S14)。検証処理の方法として、モデルチェック、ルールベースチェック等があるが、本実施の形態では、検証処理にモデルチェックを用いる。
図21は、本発明に係る検証処理の動作の一例を示すフローチャートである。まず、検証部14は、モデル生成部13の出力であるFSMモデル集合のうち変更された関数に対してモデルチェックを行い(S61)、モデルが一致したか否かの判断を行う(S62)。モデルが一致した場合(S62,Y)、処理S68へ移行する。一方、モデルが一致しない場合(S62,N)、検証部14は、検証する関数の範囲を拡大し、モデルチェックを行い(S63)、モデルが一致したか否かの判断を行う(S64)。モデルが一致した場合(S64,Y)、処理S68へ移行する。一方、モデルが一致しない場合(S64,N)、検証部14は、問題箇所を表示し(S66)、可能であればプログラムの動作に対する制約を付加し、必要があれば設計者の指示に従ってassertionの挿入を行い(S67)、処理S63へ戻る。また、処理S68において、検証部14は、変更による問題がないことを表示し(S68)、このフローを終了する。
検証処理においてはまず、変更が施された関数について変更前のモデルと変更後のモデルの比較を行い、モデルチェックを行う。検証処理の結果、モデルが一致した場合、変更された箇所は変更前と同じ振る舞いをする保証があることから、プログラム全体として不具合は起こらないと保証できる。また、モデルが一致しない場合、不具合が起こる可能性があり、検証する関数の範囲を広げ、変更された関数以外に変更検出処理で検出された関数を含めて検証を行う。その結果、不具合が発見されなければ、プログラム全体として不具合は起きないと保証できる。
ここで、検証の範囲を広げ、並行・並列に動作する複数の関数の相互影響を表すためには、各関数のモデルの半順序関係を考慮して状態の積を作成する。この状態の積に対して範囲を広げた検証を行う。状態の積を求めるアルゴリズムは従来に定義されているものを使う。例えば、Berard, B., Bidoit, M., Finkel, A., Laroussinie, F., Petit, A., Petrucci, L., Schnoebelen, P. "Systems and Software Verification Model-Checking Techniques and Tools", Springer-Verlag, 2001 にアルゴリズムの詳しい説明が掲載されている。
また、検証処理により問題点が発見された場合、処理S66において不具合が起こる原因を示すために、例えば実行順序を出力するトレース生成処理が有効な手段である。図22は、本発明に係るトレース生成処理の動作の一例を示すフローチャートである。トレース生成処理における入力は、FSMと検証するプロパティである。本実施の形態において、検証するプロパティは、デッドロックまたはデータ競合が存在するか否かの確認である。まず、検証部14は、FSMにおいて検証するプロパティを満足する状態を、初期状態から順に探索し(S71)、検証するプロパティを満足する状態が存在するか否かの判断を行う(S72)。検証するプロパティを満足する状態が存在しない場合(S72,N)、検証部14は、モデルにデッドロックやデータ競合は起きないと判断し(S73)、このフローを終了する。一方、検証するプロパティを満足する状態が存在する場合(S72,Y)、検証部14は、初期状態から検証するプロパティを満足する状態までの実行順序をトレースとして出力し(S75)、このフローを終了する。
また、再度、広範囲の検証を行う場合、処理S63において設計者はプログラムの動作上の制約を設定してから検証を行うことができる。ここで、設計者がソースコードにassertionとして入力することにより、デバッグ終了後、テストを行うときに制約が守られていない場合、その箇所の検出が容易となる。
ここで、検証処理の具体例について説明する。この例では、まず、変更前と変更後の関数Process1のモデルを比較する。結果はモデルと一致しないことから、不具合が起こる可能性があり、関数Process1の変更によって影響を受ける可能性のある関数Process2を含めて再度検証処理を行う。その結果、不具合が起こることが検出されると共に、次の実行順序で不具合が起こることが検出され、検証部14により表示される。
XX→A’→N123→E→N2→N456→ZZ
変更前の関数Process1において、変数shared1の読み出し(関数gの呼び出し)と書き込みは、ロックに保護されているので関数Process2に割り込まれることはない。また、関数Process2においてロックによる保護が実行されるとき、共有変数shared1は、必ず関数Process1の関数gが呼ばれた後に値がインクリメントされたものになっている。
一方、変更後の関数Process1を用いる不具合の実行順序の場合、状態N123(関数gの呼び出し)と状態N456(変数shared1の書き込み)は、それぞれロックに保護されており、その間に関数Process2の状態N2(ロックに保護されている領域)が実行される。状態N2が実行されるとき、変数shared1の値はインクリメントされていない。従って、変更前の挙動と異なり、不具合が起こる。
上記の不具合に対して、設計者が制約を設けて不具合を解消できることが可能である。このプログラムの場合は、例えば関数Process1が状態N123、状態E、状態N456にいる間は、関数Process2の状態N2の割り込みを禁止すれば、不具合は起こらない。
実施の形態2.
本実施の形態では、共有変数へのアクセスを調停する同期機構の順番が変わってデッドロックが起こる場合について説明する。
検証装置の構成は実施の形態1と同様である。また、検証装置の動作の説明のために、並列プログラムの具体例である第2の検証対象プログラムを用いて説明する。この第2の検証対象プログラムのソースコードは、共有変数の定義、関数Process3、関数Process4から成る。図23は、第2の検証対象プログラムにおける共有変数の定義を示すソースコードである。また、図24は、第2の検証対象プログラムにおける関数Process3を示すソースコードである。また、図25は、第2の検証対象プログラムにおける変更前の関数Process4を示すソースコードである。
図26は、第2の検証対象プログラムにおける変更後の関数Process4を示すソースコードである。図に示すように関数Process4は、ロックの順序を変更した。この変更により、関数Process3と関数Process4が共有変数をアクセスする際にロックをかける順序は、それぞれ異なる。
図27は、第2の検証対象プログラムにおける変更後の関数Process4のソースコード分類処理の結果の一例を示すソースコードである。次に、モデル生成処理により、擬似関数D()は状態Dに、擬似関数F()は状態Fに割り付けられる。ここでは、ロックに保護されている領域(“//E”のマークが付いた領域)は、基本ブロックと見なされ、状態展開処理が実行される。つまり、本実施の形態においては、モデル生成処理における処理S45の代わりに次に述べる状態展開処理を行う。
図28は、本発明に係る状態展開処理の動作の一例を示すフローチャートである。まず、モデル生成部13は、処理S45によりマークが付いて分離された基本ブロックの一部において、複数のロックが存在するか否かの判断を行う(S81)。複数のロックが存在しない場合(S81,N)、処理S45と同様、モデル生成部13は、マークが付いた状態を1つの状態に割り付け(S82)、変更したFSMモデルを出力し(S83)、このフローを終了する。一方、複数のロックが存在する場合(S81,Y)、モデル生成部13は、各ロックが取り得る状態をFSMの状態に割り付け(S85)、ロックに保護されている演算を1つの状態に割り付け(S86)、ロックと演算の状態遷移を元の基本ブロックの制御フローに合わせ(S87)、変更したFSMモデルを出力し(S88)、このフローを終了する。
処理S83では、ロックが取り得る状態にFSMの状態を割り付ける。その結果、次の4つの状態が割り付けられる。
状態N10.演算する前にロックmの獲得
状態N20.演算する前、かつロックmの獲得の後、ロックlの獲得
状態N30.演算した直後、ロックlの解放
状態N40.演算した後、かつロックlの解放の後、ロックmの解放
処理S84では、演算を1つの状態に割り付ける。この場合、上記の状態N20と状態N30の間に1つの状態が割り付けられ、次の5つの状態になる。
状態N10.演算する前にロックmの獲得
状態N20.演算する前、かつロックmの獲得の後、ロックlの獲得
状態N25.演算
状態N30.演算した直後、ロックlの解放
状態N40.演算した後、かつロックlの解放の後、ロックmの解放
図29は、第2の検証対象プログラムにおける変更後の関数Process4のモデル生成処理の結果の一例を示す状態遷移図である。ここで、状態L(U)はロックlがアンロックである状態、状態L(3)は関数Process3がロックlを獲得した状態、状態L(4)は関数Process4がロックlを獲得した状態、状態M(U)はロックmがアンロックである状態、状態M(3)は関数Process3がロックmを獲得した状態、状態M(4)は関数Process4がロックmを獲得した状態をそれぞれ表し、更に複数の関数を検証の対象とする場合は、各状態の積で表す。この図の状態L(U)M(4)から状態L(U)M(U)は、状態N10から状態N40に相当する。関数Process3と変更前の関数Process4のFSMも、同様の手順で得られる。図30は、第2の検証対象プログラムにおける関数Process3のモデル生成処理の結果の一例を示す状態遷移図である。図31は、第2の検証対象プログラムにおける変更前の関数Process4のモデル生成処理の結果の一例を示す状態遷移図である。
次に、検証処理の処理S61において、変更前と変更後の関数Process4を比較すると一致しない。そこで、検証する関数の範囲を広げて関数Process3を含めた検証を行う。並行に動作する関数Process3と関数Process4の影響を合わせて検証するためには、半順序関係を考慮して両関数の状態の積を作成し、その状態の積を検証する。このモデルチェックにより、以下の実行順序がデッドロックへと導くことが分かる。
A→D→L(3)M(U)→L(3)M(4)→デッドロック
デッドロックの原因は、関数Process3がロックlを獲得した後(状態L(3)M(U))、関数Process4がロックmを獲得した(状態L(3)M(4))ためである。このとき、ロックlとロックmはそれぞれ関数Process3と関数Process4に獲得されている。仮に関数Process3がロックmの獲得を試みた場合、関数Process4が既に獲得しているので処理は止まってしまう。同様に、関数Process4がロックlの獲得を試みた場合、関数Process3が既に獲得しているので処理は止まってしまう。また、この例の場合、不具合を修正するためには変更を元に戻すしかない。
以上詳述したように、本発明によれば、並行・並列プログラムの変更に影響を受ける共有リソースとロックに着目したモデルを作成することにより、検証に要する時間を大幅に短縮することができる。
更に、プログラムの検証装置を構成するコンピュータにおいて上述した各ステップを実行させるプログラムを、プログラムの検証プログラムとして提供することができる。上述したプログラムは、コンピュータにより読取り可能な記録媒体に記憶させることによって、プログラムの検証装置を構成するコンピュータに実行させることが可能となる。ここで、上記コンピュータにより読取り可能な記録媒体としては、ROMやRAM等のコンピュータに内部実装される内部記憶装置、CD−ROMやフレキシブルディスク、DVDディスク、光磁気ディスク、ICカード等の可搬型記憶媒体や、コンピュータプログラムを保持するデータベース、或いは、他のコンピュータ並びにそのデータベースや、更に回線上の伝送媒体をも含むものである。
なお、検出ステップとは、実施の形態における変更検出処理とソースコード分類処理に対応する。また、モデル生成ステップとは、実施の形態におけるとモデル生成処理に対応する。また、検証ステップとは、実施の形態における検証処理に対応する。また、検出部とは、実施の形態における変更検出部とソースコード分類部に対応する。
(付記1) 複数の関数を含んで構成される並行プログラムまたは並列プログラムを検証対象プログラムとし、該検証対象プログラムを変更した場合における該変更後の検証対象プログラムの検証をコンピュータに実行させるプログラムの検証プログラムであって、
前記検証対象プログラムの変更前後における該検証対象プログラムから、前記変更が施された関数と、前記変更の影響を受ける共有変数が用いられる関数とを検出すると共に、前記変更が施された関数における前記変更が施された部分及び前記変更の影響を受ける共有変数を用いた関数における変更の影響を受ける部分である第1の部分と、プログラム処理の制御に関する部分である制御構造部分と、前記制御構造部分と前記第1の部分以外の部分である第2の部分を検出する検出ステップと、
前記検出ステップにより検出された前記制御構造部分と前記第1の部分と前記第2の部分に基づいて、前記変更前の検証対象プログラムのモデルと前記変更後の検証対象プログラムのモデルを生成するモデル生成ステップと、
前記モデル生成ステップにより生成された前記変更前の検証対象プログラムのモデルと前記変更後の検証対象プログラムのモデルを比較することにより、前記変更後の検証対象プログラムの検証を行う検証ステップと、
をコンピュータに実行させるプログラムの検証プログラム。
(付記2) 付記1に記載のプログラムの検証プログラムにおいて、
前記検出ステップは、前記変更の影響を受ける共有変数が出現する部分と該共有変数のロックの部分を前記第1の部分とすることを特徴とするプログラムの検証プログラム。
(付記3) 付記1または付記2に記載のプログラムの検証プログラムにおいて、
前記検出ステップは、前記検証対象プログラムにおいて前記第1の部分にマークを付加することを特徴とするプログラムの検証プログラム。
(付記4) 付記1乃至付記3のいずれかに記載のプログラムの検証プログラムにおいて、
前記モデル生成ステップは、前記第1の部分と前記第2の部分の基本ブロックを状態に割り付け、前記制御構造部分に基づいて遷移を表すことにより、有限状態機械をモデルとして生成することを特徴とするプログラムの検証プログラム。
(付記5) 付記4に記載のプログラムの検証プログラムにおいて、
前記モデル生成ステップは、前記モデルにおいて、前記第1の部分を含まない複数の状態をまとめて1つの状態とすることを特徴とするプログラムの検証プログラム。
(付記6) 付記4または付記5に記載のプログラムの検証プログラムにおいて、
前記検証ステップは、まず、前記変更が施された関数について変更前のモデルと変更後のモデルの比較を行い、該比較の結果が一致しない場合、前記変更が施された関数のモデルと前記変更の影響を受ける共有変数を用いた関数のモデルの状態の積で得られるモデルについて、変更前のモデルと変更後のモデルの比較を行うことにより、前記変更後の検証対象プログラムの検証を行うことを特徴とするプログラムの検証プログラム。
(付記7) 付記1乃至付記6のいずれかに記載のプログラムの検証プログラムにおいて、
前記検証ステップは、変更前の検証対象プログラムのモデルと変更後の検証対象プログラムのモデルが一致しない場合、所定の不具合となる状態を検出し、該状態を表示することを特徴とするプログラムの検証プログラム。
(付記8) 付記1乃至付記7のいずれかに記載のプログラムの検証プログラムにおいて、
前記検証ステップは、変更前の検証対象プログラムのモデルと変更後の検証対象プログラムのモデルが一致しない場合、所定の不具合となる状態を検出し、該状態に至る実行順序を検出し、該実行順序を表示することを特徴とするプログラムの検証プログラム。
(付記9) 付記1乃至付記8のいずれかに記載のプログラムの検証プログラムにおいて、
前記検証ステップは、ルールベースチェックまたはモデルチェックを用いて、変更後の検証対象プログラムの検証を行うことを特徴とするプログラムの検証プログラム。
(付記10) 複数の関数を含んで構成される並行プログラムまたは並列プログラムを検証対象プログラムとし、該検証対象プログラムを変更した場合における該変更後の検証対象プログラムの検証を行うプログラムの検証装置であって、
前記検証対象プログラムの変更前後における該検証対象プログラムから、前記変更が施された関数と、前記変更の影響を受ける共有変数が用いられる関数とを検出すると共に、前記変更が施された関数における前記変更が施された部分及び前記変更の影響を受ける共有変数を用いた関数における変更の影響を受ける部分である第1の部分と、プログラム処理の制御に関する部分である制御構造部分と、前記制御構造部分と前記第1の部分以外の部分である第2の部分を検出する検出部と、
前記検出部により検出された前記制御構造部分と前記第1の部分と前記第2の部分に基づいて、前記変更前の検証対象プログラムのモデルと前記変更後の検証対象プログラムのモデルを生成するモデル生成部と、
前記モデル生成部により生成された前記変更前の検証対象プログラムのモデルと前記変更後の検証対象プログラムのモデルを比較することにより、前記変更後の検証対象プログラムの検証を行う検証部と、
を備えてなるプログラムの検証装置。
(付記11) 付記10に記載のプログラムの検証装置において、
前記検出部は、前記変更の影響を受ける共有変数が出現する部分と該共有変数のロックの部分を前記第1の部分とすることを特徴とするプログラムの検証装置。
(付記12) 付記10または付記11に記載のプログラムの検証装置において、
前記検出部は、前記検証対象プログラムにおいて前記第1の部分にマークを付加することを特徴とするプログラムの検証装置。
(付記13) 付記10乃至付記12のいずれかに記載のプログラムの検証装置において、
前記モデル生成部は、前記第1の部分と前記第2の部分の基本ブロックを状態に割り付け、前記制御構造部分に基づいて遷移を表すことにより、有限状態機械をモデルとして生成することを特徴とするプログラムの検証装置。
(付記14) 付記13に記載のプログラムの検証装置において、
前記モデル生成部は、前記モデルにおいて、前記第1の部分を含まない複数の状態をまとめて1つの状態とすることを特徴とするプログラムの検証装置。
(付記15) 付記13または付記14に記載のプログラムの検証装置において、
前記検証部は、まず、前記変更が施された関数について変更前のモデルと変更後のモデルの比較を行い、該比較の結果が一致しない場合、前記変更が施された関数のモデルと前記変更の影響を受ける共有変数を用いた関数のモデルの状態の積で得られるモデルについて、変更前のモデルと変更後のモデルの比較を行うことにより、前記変更後の検証対象プログラムの検証を行うことを特徴とするプログラムの検証装置。
(付記16) 付記10乃至付記15のいずれかに記載のプログラムの検証装置において、
前記検証部は、変更前の検証対象プログラムのモデルと変更後の検証対象プログラムのモデルが一致しない場合、所定の不具合となる状態を検出し、該状態を表示することを特徴とするプログラムの検証装置。
(付記17) 付記10乃至付記16のいずれかに記載のプログラムの検証装置において、
前記検証部は、変更前の検証対象プログラムのモデルと変更後の検証対象プログラムのモデルが一致しない場合、所定の不具合となる状態を検出し、該状態に至る実行順序を検出し、該実行順序を表示することを特徴とするプログラムの検証装置。
(付記18) 付記10乃至付記17のいずれかに記載のプログラムの検証装置において、
前記検証部は、ルールベースチェックまたはモデルチェックを用いて、変更後の検証対象プログラムの検証を行うことを特徴とするプログラムの検証装置。
(付記19) 複数の関数を含んで構成される並行プログラムまたは並列プログラムを検証対象プログラムとし、該検証対象プログラムを変更した場合における該変更後の検証対象プログラムの検証を行うプログラムの検証方法であって、
前記検証対象プログラムの変更前後における該検証対象プログラムから、前記変更が施された関数と、前記変更の影響を受ける共有変数が用いられる関数とを検出すると共に、前記変更が施された関数における前記変更が施された部分及び前記変更の影響を受ける共有変数を用いた関数における変更の影響を受ける部分である第1の部分と、プログラム処理の制御に関する部分である制御構造部分と、前記制御構造部分と前記第1の部分以外の部分である第2の部分を検出する検出ステップと、
前記検出ステップにより検出された前記制御構造部分と前記第1の部分と前記第2の部分に基づいて、前記変更前の検証対象プログラムのモデルと前記変更後の検証対象プログラムのモデルを生成するモデル生成ステップと、
前記モデル生成ステップにより生成された前記変更前の検証対象プログラムのモデルと前記変更後の検証対象プログラムのモデルを比較することにより、前記変更後の検証対象プログラムの検証を行う検証ステップと、
を実行するプログラムの検証方法。
(付記20) 付記19に記載のプログラムの検証方法において、
前記検出ステップは、前記変更の影響を受ける共有変数が出現する部分と該共有変数のロックの部分を前記第1の部分とすることを特徴とするプログラムの検証方法。
本発明に係るプログラムの検証装置の構成の一例を示すブロック図である。 第1の検証対象プログラムにおける共有変数の定義を示すソースコードである。 第1の検証対象プログラムにおける変更前の関数Process1を示すソースコードである。 第1の検証対象プログラムにおける関数Process2を示すソースコードである。 第1の検証対象プログラムにおける変更後の関数Process1を示すソースコードである。 本発明に係るプログラムの検証装置の動作の一例を示すフローチャートである。 本発明に係る変更検出処理の動作の一例を示すフローチャートである。 第1の検証対象プログラムにおける変更後の関数Process1の変更検出処理の結果の一例を示すソースコードである。 第1の検証対象プログラムにおける変更前の関数Process1の変更検出処理の結果の一例を示すソースコードである。 第1の検証対象プログラムにおける関数Process2の変更検出処理の結果の一例を示すソースコードである。 本発明に係るソースコード分類処理の動作の一例を示すフローチャートである。 第1の検証対象プログラムにおける変更前の関数Process1のソースコード分類処理の結果の一例を示すソースコードである。 第1の検証対象プログラムにおける関数Process2のソースコード分類処理の結果の一例を示すソースコードである。 第1の検証対象プログラムにおける変更後の関数Process1のソースコード分類処理の結果の一例を示すソースコードである。 本発明に係るモデル生成処理の動作の一例を示すフローチャートである。 第1の検証対象プログラムにおける変更後の関数Process1のモデル生成処理の状態割り付けの結果の一例を示すモデルである。 第1の検証対象プログラムにおける変更後の関数Process1のモデル生成処理の結果の一例を示すモデルである。 第1の検証対象プログラムにおける変更前の関数Process1のモデル生成処理の状態割り付けの結果の一例を示すモデルである。 第1の検証対象プログラムにおける変更前の関数Process1のモデル生成処理の結果の一例を示すモデルである。 第1の検証対象プログラムにおける関数Process2のモデル生成処理の結果の一例を示すモデルである。 本発明に係る検証処理の動作の一例を示すフローチャートである。 本発明に係るトレース生成処理の動作の一例を示すフローチャートである。 第2の検証対象プログラムにおける共有変数の定義を示すソースコードである。 第2の検証対象プログラムにおける関数Process3を示すソースコードである。 第2の検証対象プログラムにおける変更前の関数Process4を示すソースコードである。 第2の検証対象プログラムにおける変更後の関数Process4を示すソースコードである。 第2の検証対象プログラムにおける変更後の関数Process4のソースコード分類処理の結果の一例を示すソースコードである。 本発明に係る状態展開処理の動作の一例を示すフローチャートである。 第2の検証対象プログラムにおける変更後の関数Process4のモデル生成処理の結果の一例を示す状態遷移図である。 第2の検証対象プログラムにおける関数Process3のモデル生成処理の結果の一例を示す状態遷移図である。 第2の検証対象プログラムにおける変更前の関数Process4のモデル生成処理の結果の一例を示す状態遷移図である。 並列プログラムにおける共有変数の定義の一例を示すソースコードである。 並列プログラムにおける関数Process01の一例を示すソースコードである。 並列プログラムにおける関数Process02の一例を示すソースコードである。 並列プログラムにおける関数Process01の修正結果の一例を示すソースコードである。 並列プログラムにおける関数Process02の修正結果の一例を示すソースコードである。
符号の説明
11 変更検出部、12 ソースコード分類部、13 モデル生成部、14 検証部。

Claims (5)

  1. 複数の関数を含んで構成される並行プログラムまたは並列プログラムを検証対象プログラムとし、該検証対象プログラムを変更した場合における該変更後の検証対象プログラムの検証をコンピュータに実行させるプログラムの検証プログラムであって、
    前記検証対象プログラムの変更前後における該検証対象プログラムから、前記変更が施された関数と、前記変更の影響を受ける共有変数が用いられる関数とを検出すると共に、前記変更が施された関数における前記変更が施された部分及び前記変更の影響を受ける共有変数を用いた関数における変更の影響を受ける部分である第1の部分と、プログラム処理の制御に関する部分である制御構造部分と、前記制御構造部分と前記第1の部分以外の部分である第2の部分を検出する検出ステップと、
    前記検出ステップにより検出された前記制御構造部分と前記第1の部分と前記第2の部分に基づいて、前記変更前の検証対象プログラムのモデルと前記変更後の検証対象プログラムのモデルを生成するモデル生成ステップと、
    前記モデル生成ステップにより生成された前記変更前の検証対象プログラムのモデルと前記変更後の検証対象プログラムのモデルを比較することにより、前記変更後の検証対象プログラムの検証を行う検証ステップと、
    をコンピュータに実行させるプログラムの検証プログラム。
  2. 請求項1に記載のプログラムの検証プログラムにおいて、
    前記検出ステップは、変更の影響を受ける共有変数が出現する部分と該共有変数のロックの部分を前記第1の部分とすることを特徴とするプログラムの検証プログラム。
  3. 請求項1または請求項2に記載のプログラムの検証プログラムにおいて、
    前記モデル生成ステップは、前記第1の部分と前記第2の部分の基本ブロックを状態に割り付け、前記制御構造部分に基づいて遷移を表すことにより、有限状態機械をモデルとして生成することを特徴とするプログラムの検証プログラム。
  4. 複数の関数を含んで構成される並行プログラムまたは並列プログラムを検証対象プログラムとし、該検証対象プログラムを変更した場合における該変更後の検証対象プログラムの検証を行うプログラムの検証装置であって、
    前記検証対象プログラムの変更前後における該検証対象プログラムから、前記変更が施された関数と、前記変更の影響を受ける共有変数が用いられる関数とを検出すると共に、前記変更が施された関数における前記変更が施された部分及び前記変更の影響を受ける共有変数を用いた関数における変更の影響を受ける部分である第1の部分と、プログラム処理の制御に関する部分である制御構造部分と、前記制御構造部分と前記第1の部分以外の部分である第2の部分を検出する検出部と、
    前記検出部により検出された前記制御構造部分と前記第1の部分と前記第2の部分に基づいて、前記変更前の検証対象プログラムのモデルと前記変更後の検証対象プログラムのモデルを生成するモデル生成部と、
    前記モデル生成部により生成された前記変更前の検証対象プログラムのモデルと前記変更後の検証対象プログラムのモデルを比較することにより、前記変更後の検証対象プログラムの検証を行う検証部と、
    を備えてなるプログラムの検証装置。
  5. 複数の関数を含んで構成される並行プログラムまたは並列プログラムを検証対象プログラムとし、該検証対象プログラムを変更した場合における該変更後の検証対象プログラムの検証を行うプログラムの検証方法であって、
    前記検証対象プログラムの変更前後における該検証対象プログラムから、前記変更が施された関数と、前記変更の影響を受ける共有変数が用いられる関数とを検出すると共に、前記変更が施された関数における前記変更が施された部分及び前記変更の影響を受ける共有変数を用いた関数における変更の影響を受ける部分である第1の部分と、プログラム処理の制御に関する部分である制御構造部分と、前記制御構造部分と前記第1の部分以外の部分である第2の部分を検出する検出ステップと、
    前記検出ステップにより検出された前記制御構造部分と前記第1の部分と前記第2の部分に基づいて、前記変更前の検証対象プログラムのモデルと前記変更後の検証対象プログラムのモデルを生成するモデル生成ステップと、
    前記モデル生成ステップにより生成された前記変更前の検証対象プログラムのモデルと前記変更後の検証対象プログラムのモデルを比較することにより、前記変更後の検証対象プログラムの検証を行う検証ステップと、
    を実行するプログラムの検証方法。
JP2005191687A 2005-06-30 2005-06-30 プログラムの検証プログラム、プログラムの検証装置、プログラムの検証方法 Expired - Fee Related JP4414373B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2005191687A JP4414373B2 (ja) 2005-06-30 2005-06-30 プログラムの検証プログラム、プログラムの検証装置、プログラムの検証方法
US11/237,663 US7844953B2 (en) 2005-06-30 2005-09-29 Program, apparatus and method for verifying program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2005191687A JP4414373B2 (ja) 2005-06-30 2005-06-30 プログラムの検証プログラム、プログラムの検証装置、プログラムの検証方法

Publications (2)

Publication Number Publication Date
JP2007011690A true JP2007011690A (ja) 2007-01-18
JP4414373B2 JP4414373B2 (ja) 2010-02-10

Family

ID=37680415

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2005191687A Expired - Fee Related JP4414373B2 (ja) 2005-06-30 2005-06-30 プログラムの検証プログラム、プログラムの検証装置、プログラムの検証方法

Country Status (2)

Country Link
US (1) US7844953B2 (ja)
JP (1) JP4414373B2 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007249884A (ja) * 2006-03-20 2007-09-27 Fujitsu Ltd ソフトウェア検証プログラム、ソフトウェア検証装置、ソフトウェア検証方法
JP2012022536A (ja) * 2010-07-15 2012-02-02 Hitachi Ltd ソースコード検査方法およびソースコード検査装置
KR101797484B1 (ko) * 2016-06-29 2017-12-13 주식회사 티맥스 소프트 리호스팅의 테스트를 수행하기 위한 방법 및 컴퓨팅 디바이스
WO2018150504A1 (ja) * 2017-02-16 2018-08-23 三菱電機株式会社 動作検証装置、動作検証方法および動作検証プログラム
WO2022091651A1 (ja) * 2020-10-28 2022-05-05 日立Astemo株式会社 演算装置及び検査方法

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2008038389A1 (fr) * 2006-09-28 2008-04-03 Fujitsu Limited Appareil d'analyse de performance de programme
US8448130B1 (en) * 2007-08-20 2013-05-21 The Mathworks, Inc. Auto-generated code validation
KR100916329B1 (ko) * 2007-11-01 2009-09-11 한국전자통신연구원 소프트웨어 취약점 점검 장치 및 방법
US8561029B2 (en) * 2009-09-30 2013-10-15 Nec Laboratories America, Inc. Precise thread-modular summarization of concurrent programs
US8769496B2 (en) * 2010-08-13 2014-07-01 Accenture Global Services Limited Systems and methods for handling database deadlocks induced by database-centric applications
US9471583B2 (en) * 2011-09-02 2016-10-18 Intel Corporation Data race analysis with improved detection filtering
US9274767B2 (en) * 2011-12-29 2016-03-01 Ianywhere Solutions, Inc. System and method for stability guarantees in concurrent software
US9015674B2 (en) * 2012-09-28 2015-04-21 Microsoft Technology Licensing, Llc Identifying execution paths that satisfy reachability queries
IN2013MU02701A (ja) * 2013-08-19 2015-06-26 Tata Consultancy Services Ltd
US9916234B1 (en) 2015-01-21 2018-03-13 State Farm Mutual Automobile Insurance Company Systems and methods for mainframe batch testing
US10579501B2 (en) * 2018-04-04 2020-03-03 International Business Machines Corporation Testing and reproduction of concurrency issues

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04343140A (ja) 1991-05-21 1992-11-30 Hitachi Ltd コンパイラの最適化処理方法
JPH05341974A (ja) 1992-06-05 1993-12-24 Hitachi Ltd 状態遷移情報の変更評価方式
JPH08328897A (ja) 1995-05-30 1996-12-13 Hitachi Ltd 並列プログラム動作解析方法及びその装置
JP3641090B2 (ja) 1995-12-26 2005-04-20 株式会社東芝 プログラミング支援装置とその方法
US6067415A (en) * 1995-12-26 2000-05-23 Kabushiki Kaisha Toshiba System for assisting a programmer find errors in concurrent programs
US6286130B1 (en) * 1997-08-05 2001-09-04 Intel Corporation Software implemented method for automatically validating the correctness of parallel computer programs
US6530079B1 (en) * 1999-06-02 2003-03-04 International Business Machines Corporation Method for optimizing locks in computer programs
US6792580B2 (en) * 2001-01-31 2004-09-14 Kabushiki Kaisha Toshiba Method and computer program product for software/hardware language model conversion
US6904588B2 (en) * 2001-07-26 2005-06-07 Tat Consultancy Services Limited Pattern-based comparison and merging of model versions
JP4403794B2 (ja) * 2003-02-28 2010-01-27 株式会社デンソー 制御プログラムの検査方法及び検査装置及び検査プログラム
US7007251B2 (en) * 2003-11-12 2006-02-28 International Business Machines Corporation Database mining system and method for coverage analysis of functional verification of integrated circuit designs
US7366956B2 (en) * 2004-06-16 2008-04-29 Hewlett-Packard Development Company, L.P. Detecting data races in multithreaded computer programs
US7779382B2 (en) * 2004-12-10 2010-08-17 Microsoft Corporation Model checking with bounded context switches
JP4343140B2 (ja) 2005-05-10 2009-10-14 株式会社エヌ・ティ・ティ・データ 評価装置及びそのコンピュータプログラム
US20070006130A1 (en) * 2005-06-02 2007-01-04 Arnold Stamler Model oriented method of automatically detecting alterations in the design of a software system

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007249884A (ja) * 2006-03-20 2007-09-27 Fujitsu Ltd ソフトウェア検証プログラム、ソフトウェア検証装置、ソフトウェア検証方法
JP2012022536A (ja) * 2010-07-15 2012-02-02 Hitachi Ltd ソースコード検査方法およびソースコード検査装置
KR101797484B1 (ko) * 2016-06-29 2017-12-13 주식회사 티맥스 소프트 리호스팅의 테스트를 수행하기 위한 방법 및 컴퓨팅 디바이스
US10061690B2 (en) 2016-06-29 2018-08-28 TmaxSoft Co., Ltd. Computing device and method for performing test of rehosting
WO2018150504A1 (ja) * 2017-02-16 2018-08-23 三菱電機株式会社 動作検証装置、動作検証方法および動作検証プログラム
WO2022091651A1 (ja) * 2020-10-28 2022-05-05 日立Astemo株式会社 演算装置及び検査方法
JP7454700B2 (ja) 2020-10-28 2024-03-22 日立Astemo株式会社 演算装置及び検査方法

Also Published As

Publication number Publication date
JP4414373B2 (ja) 2010-02-10
US7844953B2 (en) 2010-11-30
US20070022325A1 (en) 2007-01-25

Similar Documents

Publication Publication Date Title
JP4414373B2 (ja) プログラムの検証プログラム、プログラムの検証装置、プログラムの検証方法
Khoshnood et al. ConcBugAssist: constraint solving for diagnosis and repair of concurrency bugs
US7055065B2 (en) Method, system, and computer program product for automated test generation for non-deterministic software using state transition rules
US20170010957A1 (en) Method for Multithreaded Program Output Uniqueness Testing and Proof-Generation, Based on Program Constraint Construction
JP4712583B2 (ja) ソフトウェア検証プログラム、ソフトウェア検証装置、ソフトウェア検証方法
US20190057173A1 (en) Electronic system level parallel simulation method with detection of conflicts of access to a shared memory
US9720793B2 (en) Implementing processor functional verification by generating and running constrained random irritator tests for multiple processor system and processor core with multiple threads
Helmstetter et al. Automatic generation of schedulings for improving the test coverage of systems-on-a-chip
Fezzardi et al. Trace-based automated logical debugging for high-level synthesis generated circuits
US7971163B2 (en) Property generating apparatus, property generating method and program
JP2007011605A (ja) ソフトウェア動作仕様のモデル検査支援装置およびこれを備えたモデル検査システム並びにモデル検査支援プログラム
KR20190054938A (ko) 시뮬레이션 장치, 시뮬레이션 시스템, 시뮬레이션 방법 및 시뮬레이션 프로그램
Tao An introduction to assertion-based verification
Amalfitano et al. Improving code coverage in android apps testing by exploiting patterns and automatic test case generation
JP4541196B2 (ja) 故障検出改善装置、故障検出改善プログラム、故障検出改善方法
Stocco How artificial intelligence can improve web development and testing
Da Alves et al. Fault localization in multi-threaded C programs using bounded model checking
US20160063162A1 (en) System and method using pass/fail test results to prioritize electronic design verification review
JP3675623B2 (ja) プログラム開発支援装置及び方法並びにプログラム開発支援用ソフトウェアを記録した記録媒体
JP2018032062A (ja) テスト項目生成方法、演算装置
Win et al. Using simulated execution in verifying distributed algorithms
Falk et al. A rule-based static dataflow clustering algorithm for efficient embedded software synthesis
JP2007257397A (ja) 競合状態検出処理追加プログラム、競合状態検出処理追加装置、競合状態検出処理追加方法
Zheng et al. Compositional model checking of concurrent systems
Biondi et al. Papyrus-based safety analysis automatization

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20080702

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090728

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090924

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: 20091117

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20091119

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121127

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121127

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131127

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees