JP7309099B2 - 等価性検査システムおよび等価性検査プログラム - Google Patents
等価性検査システムおよび等価性検査プログラム Download PDFInfo
- Publication number
- JP7309099B2 JP7309099B2 JP2023519108A JP2023519108A JP7309099B2 JP 7309099 B2 JP7309099 B2 JP 7309099B2 JP 2023519108 A JP2023519108 A JP 2023519108A JP 2023519108 A JP2023519108 A JP 2023519108A JP 7309099 B2 JP7309099 B2 JP 7309099B2
- Authority
- JP
- Japan
- Prior art keywords
- source code
- code
- change source
- target function
- post
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Description
また、機種の派生または仕向け地の違いによる制御ソフトウェアのバリエーションが今後急増していくことが見込まれる。
このような状況下で収益力の維持および強化を図るためには、制御ソフトウェアの開発において生産性の向上に取り組む必要がある。
また、品質の確保および開発の効率化を実現するための手法およびツールをソフトウェアの開発に適用する、という施策が考えられる。
そのためには、変更前後の2つのソースコードに対してテキストの見た目ではなく処理の内容について修正を判断することが重要である。
具体的には、変更前後で対応が付く2つの関数に同じ入力値を与えたときに常に同じ出力値が得られる場合、処理内容が論理的に同一(すなわち等価)であると判定する。そうでない場合、処理内容が論理的に異なる(すなわち不等価)であると判定する。
特許文献1は、このような状態変数を持つ2つの関数を対象に、処理内容が等価かどうか判定する技術を開示している。
また、状態変数が取る値の数すなわち状態数に依存して、解析に必要な計算機リソースの量が決まる。状態数が非常に多い状態変数が1つでもある場合、1回で解析されるステップの数が非常に多くなることがあり、必要な計算機リソースの量が非常に多くなることがある。そのため、状態数が少ない状態変数と状態数が非常に多い状態変数がソースコードに混在する場合、すべての状態変数が初期状態に戻るまでのステップ数について処理内容を解析することは困難である。
変更前ソースコードと変更後ソースコードとのそれぞれから、繰り返し呼び出される対象関数の出力値に影響を与える状態変数である影響状態変数を抽出する影響状態変数抽出部と、
前記変更前ソースコードにおいて前記対象関数が繰り返し呼び出され前記影響状態変数の値が初期値に戻り、且つ、前記変更後ソースコードにおいて前記対象関数が繰り返し呼び出され前記影響状態変数の値が初期値に戻る、という条件を満たす前記対象関数の呼び出し回数を判定ステップ数として算出する判定ステップ数算出部と、
前記変更前ソースコードの前記対象関数と前記変更後ソースコードの前記対象関数とのそれぞれを前記判定ステップ数と同じ回数繰り返し呼び出して、前記変更前ソースコードの前記対象関数と前記変更後ソースコードの前記対象関数が等価であるか判定する等価判定部と、を備える。
等価性検査システム100について、図1から図27に基づいて説明する。
等価性検査システム100は、変更前後のソフトウェア動作についての差分解析システムとして利用される。
図1に基づいて、等価性検査システム100の構成を説明する。
等価性検査システム100は、プロセッサ101とメモリ102と補助記憶装置103と通信装置104と入出力インタフェース105といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
ICは、Integrated Circuitの略称である。
CPUは、Central Processing Unitの略称である。
RAMは、Random Access Memoryの略称である。
ROMは、Read Only Memoryの略称である。
HDDは、Hard Disk Driveの略称である。
NICは、Network Interface Cardの略称である。
USBは、Universal Serial Busの略称である。
補助記憶装置103には、さらに、OSが記憶されている。OSの少なくとも一部は、メモリ102にロードされて、プロセッサ101によって実行される。
プロセッサ101は、OSを実行しながら、等価性検査プログラムを実行する。
OSは、Operating Systemの略称である。
メモリ102は記憶部190として機能する。但し、補助記憶装置103、プロセッサ101内のレジスタおよびプロセッサ101内のキャッシュメモリなどの記憶装置が、メモリ102の代わりに、又は、メモリ102と共に、記憶部190として機能してもよい。
図2において、矢印は主なデータの流れを示している。
各データの内容については後述する。
等価性検査システム100の動作の手順は等価性検査方法に相当する。また、等価性検査システム100の動作の手順は等価性検査プログラムによる処理の手順に相当する。
以下に、等価性検査方法について説明する。
関数が呼び出されたときに実行される1回分の処理を「ステップ」と称する。
関数が呼び出される回数を「ステップ数」と称する。つまり、ステップ数は関数が実行される回数に相当する。図3において、ステップ数はNである。
関数の入力となる変数を「入力変数」と称する。具体的には、入力変数は、関数の処理に必要な引数または大域変数である。
入力変数の値を「入力値」と称する。in_1からin_Nのそれぞれは、各ステップにおける入力変数inの値を表す。
関数の出力となる変数を「出力変数」と称する。具体的には、出力変数は、関数の処理の結果を表す戻り値または大域変数である。
出力変数の値を「出力値」と称する。out_1からout_Nのそれぞれは、各ステップにおける出力変数outの値を表す。
ソフトウェアの状態を表す変数を「状態変数」と称する。
状態変数の値を「状態値」と称する。st_1からst_Nのそれぞれは、各ステップの終了時における状態変数stateの値を表す。
一方、入力値および出力値は、前のステップから次のステップに引き継がれない。
図5に、変更後ソースコード202の例を示す。変更後ソースコード202は変更済みのソースコードである。図4において、変更後ソースコード202はC言語で記述されている。
変更前ソースコード201と変更後ソースコード202の間で異なる部分、つまり変更された部分に下線を付している。
func1関数とfunc2関数は、等価性検査の対象となる関数である。等価性検査の対象となる関数を「対象関数」と称する。
func1関数とfunc2関数は、main関数の中で特定の条件が満たされる間、繰り返し実行される。
対象関数は、各ステップで入力値を受け取るたびに、関数内部で実行される部分を状態値に応じて切り替える。そして、次のステップの状態値が対象関数の実行結果によって決まる。
func1関数は、2つの状態変数(state、counter)を持つ。そして、これらの状態値は、func1関数が実行されるたびに変わる。
初期状態では、状態変数stateと状態変数counterとのそれぞれの値が0である。
状態変数stateの値が0である場合にfunc1関数が実行されると、状態変数stateと状態変数counterとのそれぞれの値が1に変わる。
状態変数stateの値が1である場合にfunc1関数が実行されると、状態変数stateと状態変数counterとのそれぞれの値が2に変わる。
状態変数stateの値が2である場合にfunc1関数が実行されると、状態変数stateの値が0に変わり、状態変数counterの値が3に変わる。
状態変数counterは、func1関数の呼び出し回数という統計情報を記録するための変数である。func1関数が呼び出されるたびに、状態変数counterの値に1が加算される。
初期状態では、状態変数numの値が1である。
func2関数が実行されるたびに、状態変数numの値に1が加算される。但し、状態変数numの値が1000000000である場合にfunc1関数が実行されると、状態変数numの値が1に戻る。
func1関数は、状態変数stateの値に対応する処理の内容によって出力値を決める。
状態変数stateの値が0である場合、func1関数の入力値inに対して出力値はin+1で表される。
状態変数stateの値が1である場合、func1関数の入力値inに対して出力値はin+2で表される。
状態変数stateの値が2である場合、func1関数の入力値inに対して出力値はin+3で表される。
状態変数numの値が1000000000である場合、func2関数の入力値inに対して出力値はin+1で表される。
状態変数numの値が1000000000でない場合、func2関数の入力値inに対して出力値はin+numで表される。
変更後ソースコード202では、変更前ソースコード201に対して、func1関数とfunc2関数とのそれぞれの出力値が変更されている。
func1関数において、状態変数stateの値が2である場合、func1関数の入力値inに対して出力値はin+5で表される。
func2関数において、状態変数numの値が1000000000である場合、func2関数の入力値inに対して出力値はin+2で表される。
ステップS110からステップS140は、対象関数ごとに実行される。
変更前ソースコード201から抽出される影響状態変数を変更前影響状態変数211と称する。
変更後ソースコード202から抽出される影響状態変数を変更後影響状態変数212と称する。
影響状態変数は、対象関数の出力値に影響を与える状態変数である。
ステップS111からステップS114は、変更前ソースコード201を解析して実行される。
ステップS115からステップS118は、変更後ソースコード202を解析して実行される。
具体的には、対象関数が変数から値を読み込む場合、影響状態変数抽出部110は、その変数を入力変数として抽出する。
例えば、影響状態変数抽出部110は、対象関数の引数を入力変数として抽出する。また、影響状態変数抽出部110は、代入演算子「=」の右側にある大域変数を入力変数として抽出する。
具体的には、対象関数が変数に値を書き込む場合、影響状態変数抽出部110は、その変数を出力変数として抽出する。
例えば、影響状態変数抽出部110は、対象関数の戻り値を出力変数として抽出する。また、影響状態変数抽出部110は、代入演算子「=」の左側にある大域変数を出力変数として抽出する。
影響部分は、対象関数の出力変数の値に影響を与える部分である。
例えば、影響状態変数抽出部110は、プログラムスライシングを用いて、変更前ソースコード201から影響部分を抽出する。
関数外スコープ変数は、対象関数の関数外スコープを有する変数であり、対象関数の外から参照することが可能である。例えば、大域変数は関数外スコープ変数である。
残りの関数外スコープ変数が変更前影響状態変数211となる。
抽出方法は、ステップS111における方法と同じである。
抽出方法は、ステップS112における方法と同じである。
抽出方法は、ステップS113における方法と同じである。
残りの関数外スコープ変数が変更後影響状態変数212となる。
まず、影響状態変数抽出部110は、変更前ソースコード201と変更後ソースコード202とのそれぞれのfunc1関数から、引数inを入力変数として抽出し、return文で指定された戻り値を出力変数として抽出する。
また、影響状態変数抽出部110は、変更前ソースコード201と変更後ソースコード202とのそれぞれのfunc2関数から、引数inを入力変数として抽出し、return文で指定された戻り値を出力変数として抽出する。
次に、影響状態変数抽出部110は、変更前ソースコード201と変更後ソースコード202とのそれぞれから、func1関数およびfunc2関数の出力変数の値に影響を与える部分(影響部分)を抽出する。
図8に、影響部分203を示す。影響部分203は、図4の変更前ソースコード201から抽出された影響部分である。
図9に、影響部分204を示す。影響部分204は、図5の変更後ソースコード202から抽出された影響部分である。
そして、影響状態変数抽出部110は、変更前ソースコード201と変更後ソースコード202とのそれぞれの影響部分から、func1関数に対する影響状態変数stateと、func2関数に対する影響状態変数numと、を抽出する。
ステップS120において、判定ステップ数算出部120は、変更前ソースコード201と変更後ソースコード202とのそれぞれの対象関数に対する影響状態変数に基づいて、判定ステップ数220を算出する。
判定ステップ数220は、変更前ソースコード201の対象関数と変更後ソースコード202の対象関数が等価であるか判定するために、変更前ソースコード201の対象関数と変更後ソースコード202の対象関数とが呼び出され実行される回数である。
条件(1)は、変更前ソースコード201において、対象関数が繰り返し呼び出され影響状態変数の値が初期値に戻る、という条件である。
条件(2)は、変更後ソースコード202において、対象関数が繰り返し呼び出され影響状態変数の値が初期値に戻る、という条件である。
ステップS121において、判定ステップ数算出部120は、変更前ソースコード201を解析することによって、変更前ソースコード201の対象関数の戻りステップ数を算出する。
戻りステップ数は、対象関数が繰り返し呼び出され影響状態変数の値が初期値に戻るときの対象関数の呼び出し回数(実行回数)である。
戻りステップ数を算出する方法について後述する。
算出される最小公倍数が判定ステップ数220となる。
ステップs121において、判定ステップ数算出部120は、後述する算出コードの解析に使用できる計算機リソースの量に基づいて、上限ステップ数を決定する。
上限ステップ数は、計算機リソースを解放せずに対象関数を実行する回数の上限である。
算出コードは、戻りステップ数を算出するためのソースコードであり、算出ラッパーともいう。
具体的には、1回目の算出コードと2回目以降の算出コードが生成される。
図13に、算出コード222の例を示す。算出コード222は、func2関数のための1回目の算出コードの例である。
算出コード221と算出コード222とのそれぞれには、コード(0)からコード(3)が記述されている。上限ステップ数Xは1000である。
コード(0)は、影響状態変数の初期値を保存するためのコードである。影響状態変数の初期値は、対象関数が初めて呼び出されるときの影響状態変数の値である。
コード(1)は、上限ステップ数と同じ回数、対象関数を呼び出すためのコードである。この場合、対象関数を読み出す処理が1000ステップ分、記述される。
コード(2)は、上限ステップ数と同じ回数分、事後条件が満たされるか判定するためのコードである。影響状態変数の値が初期値と等しい、という条件が事後条件となる。この場合、事後条件の判定処理が1000ステップ分、記述される。
コード(3)は、上限ステップ数の終了時における影響状態変数の値を記録するためのコードである。上限ステップ数のステップの終了時における影響状態変数の値を、最終ステップの状態値と称する。
ステップs123において、判定ステップ数算出部120は、1回目の算出コードの解析のために計算機リソースを確保する。
例えば、判定ステップ数算出部120は、有界モデル検査を用いて、算出コードを解析する。
1回目のステップs124では、1回目の算出コードが使用される。
2回目以降のステップs124では、2回目以降の算出コードが使用される。
上限ステップ数までのいずれかのステップで影響状態変数の値が初期値に戻った場合、処理はステップs128に進む。
上限ステップ数までのいずれかのステップで影響状態変数の値が初期値に戻らなかった場合、処理はステップs126に進む。
FAILUREは、影響状態変数の値が初期値と異なることを意味する。
SUCCESSは、影響状態変数の値が初期値と等しいことを意味する。
解析結果223は、func1関数の影響状態変数の値が第3ステップで初期値に戻ることを示している。
この場合、ステップs125の後、処理はステップs129に進む。
解析結果224は、func2関数の影響状態変数の値が第1000ステップまでに初期値に戻らないことを示している。
この場合、ステップs125の後、処理はステップs126に進む。
ステップs126において、判定ステップ数算出部120は、1回目の算出コード(または2回目以降の算出コード)の解析のために確保された計算機リソースを一旦解放する。
なお、最終ステップの状態値は、解放される計算機リソース以外の記憶領域に記録されている。
ステップs127の後、処理はステップs124に進む。
2回目以降の算出コードには、最終ステップの状態値を引き継ぎためのコードが加えられる。
図13の算出コード222に対して、コード(0)が変更されており、コード(4)が追加されている。
コード(0)では、影響状態変数「num」を用いずに影響状態変数の初期値「1」が保存される。
コード(4)は、最終ステップの状態値を引き継ぐためのコードである。最終ステップの状態値が影響状態変数numに設定される。state_last_stepは、最終ステップの状態値を表す。
ステップs128において、判定ステップ数算出部120は、影響状態変数の値が初めて初期値に戻ったときのステップ数を戻りステップ数と判定する。これにより、戻りステップ数が求まる。
図17の解析結果226が得られた場合、判定ステップ数算出部120は、func2関数の戻りステップ数を1000000000(=X×1000000)と判定する。上限ステップ数Xは1000である。
上限ステップ数Xは、算出コードの1回の解析に使用できる計算機リソースの量に基づいて決定される。
算出コードが1回解析されるごとに、対象関数はX回呼び出される。
算出コードが1回解析されるごとに、計算機リソースは、一旦解放され、再び確保される。
算出コードが1回解析されるごとに、最終ステップの状態値が引き継がれる。
ステップS130において、判定コード生成部130は、判定ステップ数220に基づいて、判定コード230を生成する。
判定コード230は、変更前ソースコード201の対象関数と変更後ソースコード202の対象関数とのそれぞれを判定ステップ数220と同じ回数繰り返し呼び出して、変更前ソースコード201の対象関数と変更後ソースコード202の対象関数が等価であるか判定するためのソースコードである。
ステップS131において、判定コード生成部130は、変更前ソースコード201と変更後ソースコード202との間で名前の衝突をなくすために、変更前ソースコード201と変更後ソースコード202とを編集する。
これにより、変更前ソースコード231と変更後ソースコード232が生成される。
変更前ソースコード231は、編集済みの変更前ソースコード201である。
変更後ソースコード232は、編集済みの変更後ソースコード202である。
具体的には、判定コード生成部130は、変更前ソースコード201と変更後ソースコード202との間で異なる接頭辞または接尾辞を、関数名と大域変数名とのそれぞれに付ける。
図21に、変更後ソースコード232の例を示す。
変更前ソースコード231では、関数名「main」「func1」「func2」と大域変数名「state」「counter」とのそれぞれに接尾辞「_1」が付いている。
変更後ソースコード232では、関数名「main」「func1」「func2」と大域変数名「state」「counter」とのそれぞれに接尾辞「_2」が付いている。
これにより、変更前ソースコード231と変更後ソースコード232との間で、関数名および大域変数名が区別され、名前の衝突がなくなる。
ステップS132において、判定コード生成部130は、判定ヘッダ233を生成する。
判定ヘッダ233は、変更前ソースコード231の対象関数と変更後ソースコード232の対象関数が等価であるか判定するために必要な宣言が記述されたヘッダである。
具体的には、判定コード生成部130は、変更前ソースコード231の対象関数のプロトタイプ宣言と、変更後ソースコード232の対象関数のプロトタイプ宣言と、を判定ヘッダ233に記述する。また、判定コード生成部130は、必要に応じて、変更前ソースコード231の大域変数のextern宣言と変更後ソースコード232の大域変数のextern宣言など、を判定ヘッダ233に記述する。
判定ヘッダ233には、変更前ソースコード231の対象関数「func1_1」「func2_1」の宣言と、変更後ソースコード232の対象関数「func1_2」「func2_2」の宣言と、が記述されている。
ステップS133において、判定コード生成部130は、判定ラッパー234を生成する。
判定ラッパー234は、変更前ソースコード231の対象関数と変更後ソースコード232の対象関数が等価であるか判定するために必要な処理が記述されたラッパーである。
具体的には、判定コード生成部130は、コード(A)からコード(C)を判定ラッパー234に記述する。
コード(A)は、前提条件を指定するためのコードである。判定ステップ数220分の全てのステップで変更前ソースコード231の対象関数の入力値と変更後ソースコード232の対象関数の入力値が等しい、という条件が前提条件となる。
コード(B)は、変更前ソースコード231の対象関数と変更後ソースコード232の対象関数とのそれぞれを、判定ステップ数220と同じ回数繰り返し呼び出すためのコードである。
コード(C)は、事後条件が満たされるか判定するためのコードである。判定ステップ数220分の全てのステップで変更前ソースコード231の対象関数の出力値と変更後ソースコード232の対象関数の出力値が等しい、という条件が事後条件となる。
判定ステップ数STEPは3である。
コード(A)では、3ステップ分の前提条件が指定されている。
コード(B)では、func1関数(func1_1、func1_2)が3回呼び出される。
コード(C)では、3ステップ分の事後条件が判定される。
ステップS140において、等価判定部140は、判定コード230を使って、変更前ソースコード201の対象関数と変更後ソースコード202の対象関数が等価であるか判定する。
ステップS141において、等価判定部140は、判定コード230を解析して判定ラッパー234の処理を実行する。
例えば、等価判定部140は、有界モデル検査を用いて、判定コード230を解析する。
判定コード230の解析結果は、判定ラッパー234の処理結果に相当する。
判定結果240は、変更前ソースコード201の対象関数と変更後ソースコード202の対象関数が等価であるかを示す。また、判定結果240は、変更前ソースコード201の対象関数と変更後ソースコード202の対象関数が不等価になるステップ(不等価ステップ)を示す。
判定ステップ数220は3である。SUCCESSは、変更前後で出力値が等しいことを意味する。FAILUREは、変更前後で出力値が異なることを意味する。
第1ステップと第2ステップでは変更前後でfunc1関数の出力値が等しいが、第3ステップでは変更前後でfunc1関数の出力値が異なる。
そのため、変更前後のfunc1関数は不等価であり、不等価ステップは第3ステップである。
判定ステップ数220は1000000000である。
第1000000000ステップにおいて、変更前後でfunc2関数の出力値が異なる。
そのため、変更前後のfunc2関数は不等価であり、不等価ステップは第1000000000ステップである。
また、利用者は、判定結果240を参照することにより、変更後の対象関数に対して修正の要否および修正の内容を判断することができる。
実施の形態1により、対象関数の出力値の計算に影響を与えない状態変数を除外して影響を与える状態変数のみに絞って処理内容を解析することができる。また、等価性検査のための解析を複数回に分割し、分割された解析の間で計算機リソースの解放および再確保を繰り返すことで、状態数が非常に多い状態変数を持つ変更前後の対象関数の処理内容が等価かどうか判定することができる。
図27に基づいて、等価性検査システム100のハードウェア構成を説明する。
等価性検査システム100は処理回路109を備える。
処理回路109は、影響状態変数抽出部110と判定ステップ数算出部120と判定コード生成部130と等価判定部140とを実現するハードウェアである。
処理回路109は、専用のハードウェアであってもよいし、メモリ102に格納されるプログラムを実行するプロセッサ101であってもよい。
ASICは、Application Specific Integrated Circuitの略称である。
FPGAは、Field Programmable Gate Arrayの略称である。
等価性検査システム100の要素である「部」は、「処理」、「工程」、「回路」または「サーキットリ」と読み替えてもよい。
Claims (10)
- 変更前ソースコードと変更後ソースコードとのそれぞれから、繰り返し呼び出される対象関数の出力値に影響を与える状態変数である影響状態変数を抽出する影響状態変数抽出部と、
前記変更前ソースコードにおいて前記対象関数が繰り返し呼び出され前記影響状態変数の値が初期値に戻り、且つ、前記変更後ソースコードにおいて前記対象関数が繰り返し呼び出され前記影響状態変数の値が初期値に戻る、という条件を満たす前記対象関数の呼び出し回数を判定ステップ数として算出する判定ステップ数算出部と、
前記変更前ソースコードの前記対象関数と前記変更後ソースコードの前記対象関数とのそれぞれを前記判定ステップ数と同じ回数繰り返し呼び出して、前記変更前ソースコードの前記対象関数と前記変更後ソースコードの前記対象関数が等価であるか判定する等価判定部と、
を備える等価性検査システム。 - 前記影響状態変数抽出部は、
前記変更前ソースコードと前記変更後ソースコードとのそれぞれの前記対象関数から、入力変数と出力変数とを抽出し、
前記変更前ソースコードと前記変更後ソースコードとのそれぞれから、前記対象関数の前記出力変数の値に影響を与える影響部分を抽出し、
前記変更前ソースコードと前記変更後ソースコードとのそれぞれの前記影響部分から、前記対象関数の関数外スコープを有する変数を関数外スコープ変数として抽出し、
前記変更前ソースコードと前記変更後ソースコードとのそれぞれの前記関数外スコープ変数から前記対象関数の前記入力変数と前記対象関数の前記出力変数を除外し、
前記変更前ソースコードと前記変更後ソースコードとのそれぞれの残りの前記関数外スコープが、前記影響状態変数となる
請求項1に記載の等価性検査システム。 - 前記判定ステップ数算出部は、
前記変更前ソースコードと前記変更後ソースコードとのそれぞれに対して、前記対象関数が繰り返し呼び出され前記影響状態変数の値が前記初期値に戻るときの前記対象関数の呼び出し回数を戻りステップ数として算出し、
前記変更前ソースコードの前記対象関数の前記戻りステップ数と前記変更後ソースコードの前記対象関数の前記戻りステップ数の最小公倍数を前記判定ステップ数として算出する
請求項1または請求項2に記載の等価性検査システム。 - 前記判定ステップ数算出部は、前記戻りステップ数を算出するための算出コードを生成し、前記算出コードを解析して前記算出コードの処理を実行し、前記算出コードの解析結果に基づいて前記戻りステップ数を判定する
請求項3に記載の等価性検査システム。 - 前記算出コードは、上限ステップ数と同じ回数、前記対象関数を呼び出すための第1コードと、前記上限ステップ数と同じ回数分、前記影響状態変数の値が前記初期値と等しいという事後条件を判定するための第2コードと、を含む
請求項4に記載の等価性検査システム。 - 前記判定ステップ数算出部は、前記算出コードとして、1回目の算出コードと2回目以降の算出コードを生成し、
前記1回目の前記算出コードは、前記第1コードと、前記第2コードと、前記上限ステップ数の終了時における前記影響状態変数の値を最終ステップの状態値として記録するための第3コードと、を含み、
前記2回目以降の前記算出コードは、前記影響状態変数に前記最終ステップの前記状態値を設定するための第4コードと、前記第1コードと、前記第2コードと、前記第3コードと、を含み、
前記判定ステップ数算出部は、前記1回目の前記算出コードを解析して前記戻りステップ数が求まらなかった場合、前記1回目の前記算出コードの解析のために確保された計算機リソースを解放し、前記2回目の前記算出コードの解析のために前記計算機リソースを確保し、前記2回目以降の前記算出コードを解析して前記戻りステップ数を求める
請求項5に記載の等価性検査システム。 - 前記等価性検査システムは、
前記変更前ソースコードの前記対象関数と前記変更後ソースコードの前記対象関数とのそれぞれを前記判定ステップ数と同じ回数繰り返し呼び出すための判定コードを生成する判定コード生成部を備え、
前記等価判定部は、前記判定コードを解析して前記判定コードの処理を実行し、前記変更前ソースコードの前記対象関数と前記変更後ソースコードの前記対象関数が等価であるか前記判定コードの解析結果に基づいて判定する
請求項1から請求項6のいずれか1項に記載の等価性検査システム。 - 前記判定コード生成部は、名前の衝突をなくした編集済みの前記変更前ソースコードと編集済みの前記変更後ソースコードと、編集済みの前記変更前ソースコードの前記対象関数と編集済みの前記変更後ソースコードの前記対象関数とのそれぞれの宣言が記述された判定ヘッダと、編集済みの前記変更前ソースコードの前記対象関数と編集済みの前記変更後ソースコードの前記対象関数とのそれぞれを前記判定ステップ数と同じ回数繰り返し呼び出すための判定ラッパーと、を前記判定コードとして生成する
請求項7に記載の等価性検査システム。 - 前記判定ラッパーは、前記判定ステップ数と同じ回数分の全てのステップで編集済みの前記変更前ソースコードの前記対象関数の入力値と編集済みの前記変更後ソースコードの前記対象関数の入力値が等しいという前提条件を指定するためのコードAと、編集済みの前記変更前ソースコードの前記対象関数と編集済みの前記変更後ソースコードの前記対象関数とのそれぞれを前記判定ステップ数と同じ回数繰り返し呼び出すためのコードBと、前記判定ステップ数と同じ回数分の全てのステップで編集済みの前記変更前ソースコードの前記対象関数の出力値と編集済みの前記変更後ソースコードの前記対象関数の出力値が等しいという事後条件を判定するためのコードCと、を含む
請求項8に記載の等価性検査システム。 - 変更前ソースコードと変更後ソースコードとのそれぞれから、繰り返し呼び出される対象関数の出力値に影響を与える状態変数である影響状態変数を抽出する影響状態変数抽出処理と、
前記変更前ソースコードにおいて前記対象関数が繰り返し呼び出され前記影響状態変数の値が初期値に戻り、且つ、前記変更後ソースコードにおいて前記対象関数が繰り返し呼び出され前記影響状態変数の値が初期値に戻る、という条件を満たす前記対象関数の呼び出し回数を判定ステップ数として算出する判定ステップ数算出処理と、
前記変更前ソースコードの前記対象関数と前記変更後ソースコードの前記対象関数とのそれぞれを前記判定ステップ数と同じ回数繰り返し呼び出して、前記変更前ソースコードの前記対象関数と前記変更後ソースコードの前記対象関数が等価であるか判定する等価判定処理と、
をコンピュータに実行させるための等価性検査プログラム。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/JP2021/018051 WO2022239148A1 (ja) | 2021-05-12 | 2021-05-12 | 等価性検査システムおよび等価性検査プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JPWO2022239148A1 JPWO2022239148A1 (ja) | 2022-11-17 |
JP7309099B2 true JP7309099B2 (ja) | 2023-07-14 |
Family
ID=84028025
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2023519108A Active JP7309099B2 (ja) | 2021-05-12 | 2021-05-12 | 等価性検査システムおよび等価性検査プログラム |
Country Status (2)
Country | Link |
---|---|
JP (1) | JP7309099B2 (ja) |
WO (1) | WO2022239148A1 (ja) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009134360A (ja) | 2007-11-28 | 2009-06-18 | Nec Corp | モデル検査システム、モデル検査方法およびモデル検査用プログラム |
WO2018193548A1 (ja) | 2017-04-19 | 2018-10-25 | 三菱電機株式会社 | 等価性検証装置および等価性検証プログラム |
-
2021
- 2021-05-12 WO PCT/JP2021/018051 patent/WO2022239148A1/ja active Application Filing
- 2021-05-12 JP JP2023519108A patent/JP7309099B2/ja active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2009134360A (ja) | 2007-11-28 | 2009-06-18 | Nec Corp | モデル検査システム、モデル検査方法およびモデル検査用プログラム |
WO2018193548A1 (ja) | 2017-04-19 | 2018-10-25 | 三菱電機株式会社 | 等価性検証装置および等価性検証プログラム |
Also Published As
Publication number | Publication date |
---|---|
WO2022239148A1 (ja) | 2022-11-17 |
JPWO2022239148A1 (ja) | 2022-11-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7270764B2 (ja) | 人工知能チップ検証 | |
US9367658B2 (en) | Method and apparatus for designing and generating a stream processor | |
US8601436B2 (en) | Simulation-based interface testing automation system and method for robot software components | |
KR20090017598A (ko) | 소프트웨어를 분석하기 위한 방법 및 시스템 | |
CN111104335B (zh) | 一种基于多层次分析的c语言缺陷检测方法及装置 | |
JP2022505340A (ja) | データ引数を動的に識別し、ソースコードを計装するためのシステムと方法 | |
US8387001B2 (en) | Method for finding an impact on a computer generated code | |
JP6342129B2 (ja) | 混合モードプログラムのソースコードエラー位置検出装置及び方法 | |
CN113497809B (zh) | 基于控制流和数据流分析的mips架构漏洞挖掘方法 | |
US10133871B1 (en) | Method and system for identifying functional attributes that change the intended operation of a compiled binary extracted from a target system | |
US7721250B2 (en) | System and method for interactive and integrated software development process and phases | |
US11030074B2 (en) | Code update based on detection of change in runtime code during debugging | |
US10402309B2 (en) | Code coverage tracking for a microcontroller program | |
CN112948828A (zh) | 一种二进制程序恶意代码检测方法、终端设备及存储介质 | |
US11294653B2 (en) | Methods and systems of disassembling executable code | |
CN115935631A (zh) | 用于车机设备的测试系统和方法、存储介质 | |
US20080127118A1 (en) | Method and system for dynamic patching of software | |
JPH0748182B2 (ja) | プログラム・エラー検出方法 | |
CN113836023B (zh) | 一种基于体系结构交叉检查的编译器安全性测试方法 | |
CN113377586B (zh) | 一种服务器自动化检测方法、装置及存储介质 | |
JP7215501B2 (ja) | 依存関係検出装置および依存関係検出方法 | |
JP7309099B2 (ja) | 等価性検査システムおよび等価性検査プログラム | |
CN116228515A (zh) | 硬件加速系统、方法及相关装置 | |
CN112380541A (zh) | 智能合约的漏洞的检测方法、装置及计算机设备 | |
KR20210147354A (ko) | 소스 코드 자동 머지 방법 및 그 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20230324 |
|
A871 | Explanation of circumstances concerning accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A871 Effective date: 20230324 |
|
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: 20230606 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20230704 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 7309099 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |