JPWO2018154657A1 - 等価性検証装置および等価性検証プログラム - Google Patents

等価性検証装置および等価性検証プログラム Download PDF

Info

Publication number
JPWO2018154657A1
JPWO2018154657A1 JP2019500911A JP2019500911A JPWO2018154657A1 JP WO2018154657 A1 JPWO2018154657 A1 JP WO2018154657A1 JP 2019500911 A JP2019500911 A JP 2019500911A JP 2019500911 A JP2019500911 A JP 2019500911A JP WO2018154657 A1 JPWO2018154657 A1 JP WO2018154657A1
Authority
JP
Japan
Prior art keywords
function
verification
equivalence
source code
func
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
JP2019500911A
Other languages
English (en)
Other versions
JP6567212B2 (ja
Inventor
三喜也 吉田
三喜也 吉田
誠 磯田
誠 磯田
一樹 米持
一樹 米持
伊藤 益夫
益夫 伊藤
まどか 馬場
まどか 馬場
玲哉 野口
玲哉 野口
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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
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 Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Publication of JPWO2018154657A1 publication Critical patent/JPWO2018154657A1/ja
Application granted granted Critical
Publication of JP6567212B2 publication Critical patent/JP6567212B2/ja
Active 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/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • 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/3648Software debugging using additional hardware
    • 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/3624Software debugging by performing operations on the source code, e.g. via a compiler
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/72Code refactoring

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

等価性検証部(130)は、変更前ソースコードに含まれる関数と変更後ソースコードに含まれる関数との組である対応組毎に、対応組に含まれる関数同士が等価であるか等価性検証によって判定する。部分検証判定部(150)は、不等価である対応組毎に、対応組が、不等価関数が呼び出される不等価パスと非不等価関数が呼び出される非不等価パスとの両方が含まれる関数を含んだ部分検証組であるか判定する。部分検証部(160)は、部分検証組毎に、不等価パスを除外して等価性検証を行うことによって、部分検証組に含まれる関数同士が部分等価であるか判定する。

Description

本発明は、関数同士の等価性を検証する技術に関するものである。
ソフトウェアの多機能化および電子化によって、ソフトウェアは複雑化および大規模化の一途をたどっている。このような状況下において、ソフトウェア開発の生産性の向上を図る必要がある。
例えば、ソフトウェアの差分派生開発において、品質の維持および開発工数の削減を実現するソフトウェア開発ツールが適用される。
ソフトウェアの差分派生開発において、リファクタリングと呼ばれる手法がある。リファクタリングは、ソフトウェアの論理的な演算内容を変更せずにソフトウェアの内部構成を変えることによって、ソフトウェアの品質を改善するための手法である。
リファクタリングでは、ソースコードの変更が伴う。そのため、ソースコードの変更により不具合が発生し、論理的な演算内容が意図せずして変更される可能性がある。
そのため、ソフトウェアの差分派生開発において、ソフトウェアの変更前後の検証が要求される。
非特許文献1では、レガシーコードとSimulinkとを用いて生成されたソースコードを対象として、「等価性検証」に関する手法が開示されている。
「等価」は、2つのソースコードの論理的な演算内容が一致すること、つまり同じ入力値に対して同じ出力値が得られることを意味する。
「等価性検証」は、2つのソースコードが等価であるか否かを検証することである。
非特許文献1では、2つのソースコードに対して、ソースコードに含まれる関数の呼び出し関係を表現するためにコールグラフが生成される。そして、コールグラフが用いられて、関数名および呼出関係が一致している関数同士の関連付けと関数単位での等価性検証とが行われる。
等価性検証は末端の関数から順に行われる。等価の条件は、2つのソースコードが同じ入力値に対して実行された場合に2つのソースコードで同じ出力値が得られることである。等価性検証では、入力値に対する出力値が2つのソースコードで一致することが全ての入力値について網羅的に解析され、関数単位で等価性が判定される。
特許文献1では、ソースコードにおいて分岐文からの分岐先のブロックに対して振る舞いを表すタグが埋め込まれる。そして、検証対象とする振る舞いが指定され、検証すべきブロックを通過するための変数(または式)の値の範囲がブロックに埋め込まれたタグと指定された振る舞いとに基づいて特定される。特定された値の範囲を検証範囲とすることで、特定の振る舞いに関連したソースコードのみを検証することができる。
特開2010−204954号公報
Rupak Majumdar, "Compositional Equivalence Checking for Models and Code of Control Systems," 52nd IEEE Conference on Decision and Control, December 2013.
非特許文献1では、全ての入力値において入力値に対する出力値が一致することが条件となる。そのため、関数内で通過するパスによって等価性が異なる場合においても、関数が不等価であると判定される。したがって、関数が不等価であると判定された原因を解析するための範囲が広く、人手による不具合解析にかかる時間を削減することができない。
例えば、関数Aと関数Aとの等価性を判定する。特定条件が満たされる場合、関数Aでは関数Bが呼び出され、関数Aでは関数Bと等価な関数Bが呼び出される。したがって、特定条件が満たされる場合に関しては、関数Aと関数Aとは等価である。特定条件が満たされない場合、関数Aでは関数Cが呼び出され、関数Aでは関数Cと等価でない関数Bが呼び出される。したがって、特定条件が満たされない場合に関しては、関数Aと関数Aとは等価である。
非特許文献1では、特定条件が満たされる場合に等価であっても特定条件が満たされない場合に等価でなければ、不等価と判定される。したがって、関数Aと関数Aとは不等価と判定される。
特許文献1では、変数が多数ある場合または式が複雑な場合、特定のブロックを通過するための値の範囲が一意に定まらないことがある。そのため、特許文献1の適用範囲は限定される。
本発明は、関数同士が部分等価であるか判定できるようにすることを目的とする。
本発明の等価性検証装置は、
変更前ソースコードに含まれる関数と変更後ソースコードに含まれる関数との組である対応組毎に、対応組に含まれる関数同士が等価であるか等価性検証によって判定する等価性検証部と、
不等価である対応組毎に、対応組が、不等価関数が呼び出される不等価パスと非不等価関数が呼び出される非不等価パスとの両方が含まれる関数を含んだ部分検証組であるか判定する部分検証判定部と、
部分検証組毎に、前記不等価パスを除外して前記等価性検証を行うことによって、部分検証組に含まれる関数同士が部分等価であるか判定する部分検証部とを備える。
本発明によれば、関数同士が部分等価であるか判定することができる。
実施の形態1における等価性検証装置100の構成図。 実施の形態1における等価性検証方法のフローチャート。 実施の形態1における変更前ソースコード210を示す図。 実施の形態1における変更後ソースコード220を示す図。 実施の形態1における変更前コールグラフ231を示す図。 実施の形態1における変更後コールグラフ232を示す図。 実施の形態1における関数対応表233を示す図。 実施の形態1における等価性判定表240を示す図。 実施の形態1における検証処理(S140)のフローチャート。 実施の形態1における検証ファイル250を示す図。 実施の形態1における等価性判定表240を示す図。 実施の形態1における等価性判定表240を示す図。 実施の形態1における変更前ソースコード210(ステップS143の前)を示す図。 実施の形態1における変更前ソースコード210(ステップS143の後)を示す図。 実施の形態1における変更後ソースコード220(ステップS143の前)を示す図。 実施の形態1における変更後ソースコード220(ステップS143の後)を示す図。 実施の形態1における識別子対応表260(ステップS144の前)を示す図。 実施の形態1における識別子対応表260(ステップS144の後)を示す図。 実施の形態1における部分等価検証(S200)のフローチャート。 実施の形態1における部分検証判定(S210)のフローチャート。 実施の形態1における部分検証(S220)のフローチャート。 実施の形態1における検証ファイル250(ステップS221の後)を示す図。 実施の形態1における等価性判定表240(ステップS232の後)を示す図。 実施の形態1における変更前ソースコード210(ステップS143の後)を示す図。 実施の形態1における変更後ソースコード220(ステップS143の後)を示す図。 実施の形態1における識別子対応表260(ステップS144の後)を示す図。 実施の形態1における検証ファイル250(ステップS221の後)を示す図。 実施の形態1における検証ファイル250(ステップS223の後)を示す図。 実施の形態1における等価性判定表240(ステップS232の後)を示す図。 実施の形態2における等価性検証装置100の構成図。 実施の形態2におけるパス検証方法のフローチャート。 実施の形態2におけるコールグラフ図270を示す図。 実施の形態2における第3分岐箇所識別子の抽出(S310)のフローチャート。 実施の形態2におけるパス判定表280(ステップS310の後)を示す図。 実施の形態2におけるパス判定表280(パス検証の後)を示す図。 実施の形態における等価性検証装置100のハードウェア構成図。
実施の形態および図面において、同じ要素および対応する要素には同じ符号を付している。同じ符号が付された要素の説明は適宜に省略または簡略化する。図中の矢印はデータの流れ又は処理の流れを主に示している。
実施の形態1.
関数同士が部分等価であるか判定するための形態について、図1から図29に基づいて説明する。
***構成の説明***
図1に基づいて、等価性検証装置100の構成を説明する。
等価性検証装置100は、プロセッサ901とメモリ902と補助記憶装置903と入出力インタフェース904といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
プロセッサ901は、演算処理を行うIC(Integrated Circuit)であり、他のハードウェアを制御する。例えば、プロセッサ901は、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、またはGPU(Graphics Processing Unit)である。
メモリ902は揮発性の記憶装置である。メモリ902は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ902はRAM(Random Access Memory)である。メモリ902に記憶されたデータは必要に応じて補助記憶装置903に保存される。
補助記憶装置903は不揮発性の記憶装置である。例えば、補助記憶装置903は、ROM(Read Only Memory)、HDD(Hard Disk Drive)、またはフラッシュメモリである。補助記憶装置903に記憶されたデータは必要に応じてメモリ902にロードされる。
入出力インタフェース904は入力装置および出力装置が接続されるポートである。例えば、入出力インタフェース904はUSB端子であり、入力装置はキーボードおよびマウスであり、出力装置はディスプレイである。USBはUniversal Serial Busの略称である。
等価性検証装置100は、コールグラフ生成部110と制御部120と等価性検証部130と識別子設定部140と部分検証判定部150と部分検証部160といったソフトウェア要素を備える。ソフトウェア要素はソフトウェアで実現される要素である。
補助記憶装置903には、コールグラフ生成部110と制御部120と等価性検証部130と識別子設定部140と部分検証判定部150と部分検証部160としてコンピュータを機能させるための等価性検証プログラムが記憶されている。等価性検証プログラムは、メモリ902にロードされて、プロセッサ901によって実行される。
さらに、補助記憶装置903にはOS(Operating System)が記憶されている。OSの少なくとも一部は、メモリ902にロードされて、プロセッサ901によって実行される。
つまり、プロセッサ901は、OSを実行しながら、等価性検証プログラムを実行する。
等価性検証プログラムを実行して得られるデータは、メモリ902、補助記憶装置903、プロセッサ901内のレジスタまたはプロセッサ901内のキャッシュメモリといった記憶装置に記憶される。
メモリ902はデータを記憶する記憶部191として機能する。但し、他の記憶装置が、メモリ902の代わりに、又は、メモリ902と共に、記憶部191として機能してもよい。
入出力インタフェース904は、入力を受け付ける受付部192として機能する。さらに、入出力インタフェース904は、画像などを表示する表示部193として機能する。
等価性検証装置100は、プロセッサ901を代替する複数のプロセッサを備えてもよい。複数のプロセッサは、プロセッサ901の役割を分担する。
等価性検証プログラムは、磁気ディスク、光ディスクまたはフラッシュメモリ等の不揮発性の記憶媒体にコンピュータ読み取り可能に記憶することができる。不揮発性の記憶媒体は、一時的でない有形の媒体である。
***動作の説明***
等価性検証装置100の動作は等価性検証方法に相当する。また、等価性検証方法の手順は等価性検証プログラムの手順に相当する。
図2に基づいて、等価性検証方法を説明する。
ステップS101において、受付部192は、変更前ソースコードと変更後ソースコードとを受け付ける。記憶部191は、受け付けられた変更前ソースコードと変更後ソースコードとを記憶する。
変更前ソースコードは、変更前のソフトウェアにおけるソースコードである。例えば、変更前ソースコードは従来作成したソースコードである。
変更後ソースコードは、変更後のソフトウェアにおけるソースコードである。例えば、変更後ソースコードは、変更前ソースコードを基にリファクタリングを実施することによって得られたソースコードである。
図3に、変更前ソースコード210を示す。変更前ソースコード210は、変更前ソースコードの具体例である。
変更前ソースコード210は、6つの関数(Func_F_x、Func_E_x、Func_D_x、Func_C_x、Func_B_x、Func_A_x)を含んでいる。
図4に、変更後ソースコード220を示す。変更後ソースコード220は、変更後ソースコードの具体例である。
変更後ソースコード220は、5つの関数(Func_E_y、Func_D_y、Func_C_y、Func_B_y、Func_A_y)を含んでいる。
変更前ソースコード210および変更後ソースコード220において、コロンおよび三点リーダは記載の省略を意味する。
図2に戻り、ステップS110から説明を続ける。
ステップS110において、コールグラフ生成部110は、変更前ソースコードと変更後ソースコードとを解析することによって、変更前コールグラフと変更後コールグラフとを生成する。記憶部191は、変更前コールグラフと変更後コールグラフとを記憶する。
変更前コールグラフは、変更前ソースコードのコールグラフである。
変更後コールグラフは、変更後ソースコードのコールグラフである。
コールグラフは、関数間の呼び出し関係を示すデータであり、従来技術によって生成することが可能である。
例えば、コールグラフ生成部110は、変更前ソースコードを入力としてegyptを実行することによって、変更前コールグラフを生成する。また、コールグラフ生成部110は、変更後ソースコードを入力としてegyptを実行することによって、変更後コールグラフを生成する。egyptは、コールグラフを生成するための既存のツールである。
図5に、変更前コールグラフ231を示す。変更前コールグラフ231は、図3の変更前ソースコード210を入力としてegyptを実行することによって得られる変更前コールグラフである。
変更前コールグラフ231は、Func_A_xからFunc_B_xとFunc_C_xとが呼ばれ、Func_B_xからFunc_D_xとFunc_E_xとが呼ばれ、Func_C_xからFunc_F_xが呼ばれることを示している。
図6に、変更後コールグラフ232を示す。変更後コールグラフ232は、図4の変更後ソースコード220を入力としてegyptを実行することによって得られる変更後コールグラフである。
変更後コールグラフ232は、Func_A_yからFunc_B_yとFunc_C_yとが呼ばれ、Func_B_yからFunc_D_yとFunc_E_yとが呼ばれることを示している。
図2に戻り、ステップS120から説明を続ける。
ステップS120において、受付部192は、関数対応表を受け付ける。そして、記憶部191は、受け付けられた関数対応表を記憶する。
関数対応表は、変更前関数と変更後関数との対応関係を示すデータである。
変更前関数は、変更前ソースコードに含まれる関数である。
変更後関数は、変更後ソースコードに含まれる関数である。
特に、関数対応表は、変更前関数または変更後関数の逆呼び出し順に、変更前関数と変更後関数との対応関係を示す。
逆呼び出し順とは、呼び出し順の逆順である。
呼び出し順とは、呼び出し関係において上位から下位への順である。呼び出し関係における上位は呼び出し元の関数であり、呼び出し関係における下位は呼び出し先の関数である。
呼び出し順における最終の関数、つまり、逆呼び出し順における先頭の関数を、末端の関数という。
例えば、関数対応表は以下のような手順で受け付けられる。
まず、表示部193は、変更前コールグラフをディスプレイに表示する。
次に、検証者は、変更前コールグラフを参照し、変更前関数の逆呼び出し順を判断する。
次に、検証者は、変更前仕様書と変更後仕様書とを参照し、変更前関数の逆呼び出し順に変更前関数に対応する変更後関数を判断する。
次に、検証者は、入力装置を操作して、関数対応表を等価性検証装置100に入力する。
そして、受付部192は、入力された関数対応表を受け付ける。
図7に、関数対応表233を示す。関数対応表233は、図3の変更前ソースコード210と図4の変更後ソースコード220とに対応する関数対応表である。
関数対応表233は、変更前ソースコード210に含まれる関数と変更後ソースコード220に含まれる関数とを互いに対応付けている。
変更前関数の欄は変更前ソースコード210に含まれる関数の名称を示し、変更後関数の欄は変更後ソースコード220に含まれる関数の名称を示している。ハイフンは該当する関数が無いことを意味する。
変更前関数の欄において、変更前ソースコード210に含まれる関数の名称は、逆呼び出し順に並べられている。
関数対応表233の第1行は、Func_F_xに対応する変更後関数が無いことを示している。また、関数対応表233の第2行から第6行は、Func_#_xとFunc_#_yとが互いに対応することを示している。「#」はA、B、C、DまたはEを表す。
末端の変更前関数はFunc_F_xである。
図2に戻り、ステップS131から説明を続ける。
ステップS131において、制御部120は未選択の変更前関数を1つ選択する。具体的には、制御部120は、末端の変更前関数から順に選択する。例えば、制御部120は、関数対応表に示される順に変更前関数を1つ選択する。
ステップS132およびステップS133の説明において、選択された変更前関数は、ステップS131で選択された変更前関数を意味する。
ステップS132において、制御部120は、関数対応表を用いて、選択された変更前関数に対応する変更後関数が有るか判定する。
具体的には、制御部120は、選択された変更前関数の名称を含む行を関数対応表233から選択し、選択された行に変更後関数の名称が有るか判定する。選択された行に変更後関数の名称が有れば、選択された変更前関数に対応する変更後関数が有る。
選択された変更前関数がFunc_B_xである場合、制御部120は、図7の関数対応表233から第5行を選択する。選択された第5行には変更後関数の名称(Func_B_y)が有る。したがって、制御部120は、選択された変更前関数に対応する変更後関数が有ると判定する。
選択された変更前関数がFunc_F_xである場合、制御部120は、図7の関数対応表233から第1行を選択する。選択された第1行には変更後関数の名称が無い。したがって、制御部120は、選択された変更前関数に対応する変更後関数が無いと判定する。
選択された変更前関数に対応する変更後関数が有る場合、処理はステップS140に進む。
選択された変更前関数に対応する変更後関数が無い場合、処理はステップS133に進む。
以降の説明において、選択された変更前関数と選択された変更前関数に対応する変更後関数との組を対応組という。また、対応組に含まれる関数を対象関数という。
ステップS133において、制御部120は、選択された変更前関数を等価性判定表に不等価関数として登録する。
不等価関数は、不等価である対応組に含まれる関数、つまり、不等価である対象関数である。
等価性判定表は、対象関数の等価性などを管理するためのデータである。
図8に、等価性判定表240を示す。
図8の等価性判定表240は、Func_F_xが不等価関数として登録されたときの等価性判定表である。
等価性判定表240は、対象関数と反例と等価性と変更前ソースコードと変更後ソースコードとのそれぞれの欄を有している。
対象関数の欄は、対象関数を示す。Func_FはFunc_F_xを識別する。
等価性の欄は、対象関数同士の等価性を示す。
反例の欄と変更前ソースコードの欄と変更後ソースコードの欄とのそれぞれに記された斜線は、一方の対象関数に対応する他方の対象関数が無いことを意味する。
反例と変更前ソースコードと変更後ソースコードとのそれぞれの欄については後述する。
図2に戻り、ステップS140を説明する。
ステップS140において、等価性検証装置100は、対応組に対する全等価検証および部分等価検証を行う。
全等価検証は、2つの関数が全等価であるか否かを判定するための処理である。
全等価は、全ての入力値において2つの関数が等価であることを意味する。
等価は、2つの関数に同じ入力値が与えられた場合に一方の関数の出力値が他方の関数の出力値と一致することを意味する。言い換えると、等価は、2つのソースコードの論理的な演算内容が一致すること、つまり同じ入力値に対してソースコードを実行したときに同じ出力値が得られることである。
部分等価検証は、2つの関数が部分等価であるか否かを判定するための処理である。
部分等価は、一部の入力値において2つの関数が等価であることを意味する。言い換えると、部分等価は、全ての入力値ではなく、一部の入力値において、ソースコードを実行した際に出力値が常に一致することである。
ステップS140の詳細については後述する。
ステップS133またはステップS140の後、処理はステップS134に進む。
ステップS134において、制御部120は、未選択の変更前関数が有るから判定する。
未選択の変更前関数が有る場合、処理はステップS131に進む。
未選択の変更前関数が無い場合、処理は等価性検証方法は終了する。
図9に基づいて、検証処理(S140)の手順を説明する。
ステップS141およびステップS142は全等価検証に相当する。
ステップS141において、等価性検証部130は、検証ファイルを生成する。
検証ファイルは、等価性検証の入力となるデータである。
等価性検証は、2つの関数の等価性を検証するための処理である。つまり、等価性検証は、2つの関数が等価であるか否かを判定するための処理である。
具体的には、等価性検証部130は、入力一致文と呼び出し文と出力一致文とを生成し、各々の文をファイルに記載する。これによって得られるファイルが検証ファイルである。
入力一致文は、一方の対象関数の入力値が他方の対象関数の入力値と一致するという事前条件を示す文である。入力一致文によって、両方の対象関数に同じ入力値が与えられる。
呼び出し文は、対象関数を呼び出して実行するための文である。
出力一致文は、一方の対象関数の出力値が他方の対象関数の出力値と一致するという事後条件を示す文である。
図10に、検証ファイル250を示す。
検証ファイル250は、Func_B_xおよびFunc_B_yが対象関数である場合の検証ファイルである。
検証ファイル250は、入力一致文251と2つの呼び出し文(252、253)と出力一致文254とを含んでいる。
入力一致文251は、input_xがinput_yと一致するという事前条件を示している。input_xはFunc_B_xの入力値であり、input_yはFunc_B_yの入力値である。
呼び出し文252によって、input_xを入力値としてFunc_B_xが呼び出されて実行される。Func_B_xの出力値はoutput_xに設定される。
呼び出し文253によって、input_yを入力値としてFunc_B_yが呼び出されて実行される。Func_B_yの出力値はoutput_yに設定される。
出力一致文254は、output_xがoutput_yと一致するという事後条件を示している。
二重斜線付きの文字列はコメントである。
ステップS142において、等価性検証部130は、検証ファイルを用いて等価性検証を行う。
具体的には、等価性検証部130は、検証ファイルと変更前ソースコードと変更後ソースコードとを入力として等価性検証を行う。等価性検証は従来の技術である。
等価性検証によって、検証ファイルの記載に従って変更前ソースコードと変更後ソースコードとが実行され、実行結果に基づいて変更前ソースコートと変更後ソースコードとの等価性が検証される。
例えば、等価性検証部130は、CBMC(Bounded Model Checking for C/C++)と呼ばれるツールを実行することによって、等価性検証を行う。
そして、等価性検証部130は、等価性検証の結果を等価性判定表に登録する。
図11に、等価性判定表240を示す。
図11の等価性判定表240は、ステップS142においてFunc_Bに対する等価性検証が行われる直前の等価性判定表である。Func_BはFunc_B_xおよびFunc_B_yを識別する。
対象関数の欄において、Func_EはFunc_E_xおよびFunc_E_yを識別し、Func_DはFunc_D_xおよびFunc_D_yを識別し、Func_CはFunc_C_xおよびFunc_C_yを識別する。
呼び出し関係においてFunc_F、Func_E、Func_DおよびFunc_CはFunc_Bの下位の関数であるので、Func_F、Func_E、Func_DおよびFunc_Cは検証済みである。そのため、等価性判定表240には、Func_F、Func_E、Func_DおよびFunc_Cの等価性に関する情報が登録されている。
図12に、等価性判定表240を示す。
図12の等価性判定表240は、ステップS142においてFunc_Bに対する等価性検証が行われた場合の等価性判定表である。
等価性判定表240において、Func_Bに対する等価性検証の結果として、反例の欄に0が登録されている。
反例の欄は、一方の対象関数の出力値が他方の対象関数の出力値と一致しない場合の入力値を示す。但し、反例の欄には、入力値と出力値との両方または出力値のみが登録されてもよい。
反例の欄において、三点リーダは記載の省略を意味し、ハイフンは該当する値が無いことを意味する。
Func_Bに対する等価性の欄、変更前ソースコードの欄および変更後ソースコードの欄は、まだ空欄である。但し、Func_Bに対する等価性の欄に、暫定的に不等価が登録されてもよい。
図9に戻り、ステップS143から説明を続ける。
ステップS143において、識別子設定部140は、変更前ソースコードの中の対象関数と変更後ソースコードの中の対象関数とのそれぞれに、分岐箇所識別子を設定する。
分岐箇所識別子は、分岐箇所を識別する識別子である。
具体的には、識別子設定部140は、変更前ソースコードと変更後ソースコードとのそれぞれのソースコードに対して以下のように分岐箇所識別子を設定する。
まず、識別子設定部140は、ソースコードから対象関数を選択する。
次に、識別子設定部140は、対象関数から分岐文を見つける。分岐文は、条件によってパスを分岐するための文である。具体的な分岐文はif文およびelse文である。パスは、ソースコードにおける処理経路である。
次に、識別子設定部140は、対象関数の先頭と分岐文とのそれぞれを分岐箇所として、分岐箇所毎に分岐箇所識別子を生成する。
次に、識別子設定部140は、分岐箇所識別子毎に更新文を生成する。更新文は、分岐箇所識別子の値を更新する文である。
そして、識別子設定部140は、分岐箇所毎に更新文を追加する。
図13に、変更前ソースコード210を示す。
図13の変更前ソースコード210は、Func_B_xが対象関数である場合において、ステップS143が実行される直前の変更前ソースコード210である。
呼び出し関係においてFunc_B_xよりも下位の関数であるFunc_F_x、Func_E_x、Func_D_xおよびFunc_C_xには、更新文(211〜214)が追加されている。
変更前ソースコード210において、countN_xが分岐箇所識別子である。Nは整数を意味する。
図14に、変更前ソースコード210を示す。
図14の変更前ソースコード210は、Func_B_xが対象関数である場合において、ステップS143が実行された直後の変更前ソースコード210である。
Func_B_xには、3つの更新文(215〜216)が追加されている。
図15に、変更後ソースコード220を示す。
図15の変更後ソースコード220は、Func_B_yが対象関数である場合において、ステップS143が実行される直前の変更後ソースコード220である。
呼び出し関係においてFunc_B_yよりも下位の関数であるFunc_E_y、Func_D_yおよびFunc_C_yには、更新文(221〜223)が追加されている。
変更後ソースコード220において、countN_yが分岐箇所識別子である。Nは整数を意味する。
図16に、変更後ソースコード220を示す。
図16の変更後ソースコード220は、Func_B_yが対象関数である場合において、ステップS143が実行された直後の変更後ソースコード220である。
Func_B_yには、3つの更新文(224〜226)が追加されている。
図9に戻り、ステップS144から説明を続ける。
ステップS144において、識別子設定部140は、対象関数の中の呼び出し先関数毎に呼び出し先関数に対応付けて分岐箇所識別子を識別子対応表に登録する。
呼び出し先関数は、呼び出される関数である。対象関数の中の呼び出し先関数は、対象関数から呼び出される関数である。
識別子対応表は、呼び出し先関数と分岐箇所識別子との対応関係を管理するためのデータである。
具体的には、識別子設定部140は分岐箇所識別子を以下のように登録する。
まず、識別子設定部140は、ソースコードの中の対象関数から呼び出し文を抽出し、呼び出し文から関数名を抽出する。抽出される関数名で識別される関数が呼び出し先関数である。
次に、識別子設定部140は、呼び出し文から対象関数の先頭に向けてソースコードを参照し、最初に見つかる分岐箇所識別子を抽出する。抽出される分岐箇所識別子は、呼び出し先関数に対応する分岐箇所識別子である。
そして、識別子設定部140は、呼び出し先関数の関数名と呼び出し先関数に対応する分岐箇所識別子とを識別子対応表に登録する。
図17に、識別子対応表260を示す。
図17の識別子対応表260は、Func_B_xおよびFunc_B_yが対象関数である場合において、ステップS144が実行される直前の識別子対応表260である。
識別子対応表260は、対象関数と変更前ソースコードと変更後ソースコードとのそれぞれの欄を有する。変更前ソースコードと変更後ソースコードとのそれぞれの欄には、分岐箇所識別子の欄と呼び出し先関数の欄とが含まれる。
図13に示すように、Func_C_xの中の呼び出し先関数はFunc_F_xである。そのため、図17に示すように、Func_Cに対応する変更前ソースコードの欄において、呼び出し先関数の欄にFunc_F_xが登録されている。
図13に示すように、Func_F_xに対応する分岐箇所識別子はcount4_xである。そのため、図17に示すように、Func_Fに対応する変更前ソースコードの欄において、分岐箇所識別子の欄にcount4_xが登録されている。
図18に、識別子対応表260を示す。
図18の識別子対応表260は、Func_B_xおよびFunc_B_yが対象関数である場合において、ステップS144が実行された直後の識別子対応表260である。
図14に示すように、Func_B_xの中の呼び出し先関数はFunc_D_xおよびFunc_E_xである。そのため、図18に示すように、Func_Bに対応する変更前ソースコードの欄において、呼び出し先関数の欄にFunc_D_xおよびFunc_E_xが登録されている。
図14に示すように、Func_D_xに対応する分岐箇所識別子はcount6_xであり、Func_E_xに対応する分岐箇所識別子はcount7_xである。そのため、図18に示すように、Func_Dに対応する変更前ソースコードの欄において、分岐箇所識別子の欄にcount6_xが登録されている。さらに、Func_Eに対応する変更前ソースコードの欄において、分岐箇所識別子の欄にcount7_xが登録されている。
図16に示すように、Func_B_yの中の呼び出し先関数はFunc_D_yおよびFunc_E_yである。そのため、図18に示すように、Func_Bに対応する変更後ソースコードの欄において、呼び出し先関数の欄にFunc_D_yおよびFunc_E_yが登録されている。
図16に示すように、Func_D_yに対応する分岐箇所識別子はcount5_yであり、Func_E_yに対応する分岐箇所識別子はcount6_yである。そのため、図18に示すように、Func_Dに対応する変更後ソースコードの欄において、分岐箇所識別子の欄にcount5_yが登録されている。さらに、Func_Eに対応する変更後ソースコードの欄において、分岐箇所識別子の欄にcount6_yが登録されている。
図9に戻り、ステップS145から説明を続ける。
ステップS145において、等価性検証部130は、ステップS142での等価性検証の結果が等価であるか判定する。
等価性検証の結果が等価である場合、処理はステップS146に進む。
等価性検証の結果が等価でない場合、処理はステップS200に進む。
ステップS146において、等価性検証部130は、等価性判定表に対象関数を等価関数として登録する。
等価関数は、全等価である対応組に含まれる関数、つまり、全等価である対象関数である。
ステップS200において、等価性検証装置100は、対応組に対する部分等価検証を行う。つまり、等価性検証装置100は、対象関数同士が部分等価であるか否かを判定する。
図19に基づいて、部分等価検証(S200)の手順を説明する。
ステップS210において、部分検証判定部150は、不等価パスと非不等価パスとの両方が対象関数に含まれるか判定する。
但し、対象関数は変更前関数または変更後関数を意味する。つまり、ステップS210では、変更前関数と変更後関数との少なくとも一方に不等価パスと非不等価パスとの両方が含まれるか判定される。
不等価パスは、不等価関数が呼び出されるパスである。
非不等価パスは、非不等価関数が呼び出されるパスである。
非不等価関数は、不等価関数ではない関数である。具体的には、非不等価関数は、等価関数および部分等価関数である。
部分等価関数は、部分等価である対応組に含まれる関数、つまり、部分等価である対象関数である。
不等価パスと非不等価パスとの両方が含まれる対象関数を含んだ対応組を部分検証組という。
不等価パスと非不等価パスとの両方が対象関数に含まれる場合、つまり、対応組が部分検証組である場合、処理はステップS220に進む。
不等価パスと非不等価パスとのいずれかが対象関数に含まれない場合、つまり、対応組が部分検証組でない場合、処理はステップS233に進む。
図20に基づいて、部分検証判定(S210)の手順を説明する。
ステップS211において、部分検証判定部150は、対象関数が複数の呼び出し先関数を呼び出す関数であるか判定する。
具体的には、部分検証判定部150は、識別子対応表260を用いて以下のように判定を行う。
まず、部分検証判定部150は、識別子対応表260を参照し、対象関数に対応付けられた呼び出し先関数の数を数える。
そして、部分検証判定部150は、対象関数に対応付けられた呼び出し先関数の数が2以上であるか判定する。
対象関数に対応付けられた呼び出し先関数の数が2以上である場合、対象関数が複数の呼び出し先関数を呼び出す関数である。
対象関数が複数の呼び出し先関数を呼び出す関数である場合、処理はステップS212に進む。
対象関数が複数の呼び出し先関数を呼び出す関数ではない場合、処理はステップS215に進む。
対象関数がFuncB_xである場合、図18の識別子対応表260において、対象関数に対応付けられた呼び出し先関数(Func_D_x、Func_E_x)の数は2である。
対象関数がFuncB_yである場合、図18の識別子対応表260において、対象関数に対応付けられた呼び出し先関数(Func_D_y、Func_E_y)の数は2である。
したがって、対応組がFunc_B_xとFunc_B_yとの組である場合、処理はステップS212に進む。
ステップS212において、部分検証判定部150は、不等価関数と非不等価関数との両方が複数の呼び出し先関数に含まれるか判定する。
具体的には、部分検証判定部150は、識別子対応表260と等価性判定表240とを用いて以下のように判定を行う。
まず、部分検証判定部150は、識別子対応表260を参照し、対象関数に対応付けられた複数の呼び出し先関数を特定する。
次に、部分検証判定部150は、等価性判定表240を参照し、複数の呼び出し先関数に対応する複数の等価性を特定する。
そして、部分検証判定部150は、複数の等価性の少なくともいずれかが不等価であり、且つ、複数の等価性の少なくともいずれかが等価または部分等価であるか判定する。
複数の等価性の少なくともいずれかが不等価であり、且つ、複数の等価性の少なくともいずれかが等価または部分等価である場合、不等価関数と非不等価関数との両方が複数の呼び出し先関数に含まれる。
不等価関数と非不等価関数との両方が複数の呼び出し先関数に含まれる場合、処理はステップS213に進む。
不等価関数と非不等価関数との一方が複数の呼び出し先関数に含まれない場合、処理はステップS215に進む。
対象関数がFuncB_xである場合、図18の識別子対応表260において、対象関数に対応付けられた呼び出し先関数はFunc_D_xおよびFunc_E_xである。図12の等価性判定表240において、Func_D_xの等価性は等価であり、Func_E_xの等価性は不等価である。
対象関数がFuncB_yである場合、図18の識別子対応表260において、対象関数に対応付けられた呼び出し先関数はFunc_D_yおよびFunc_E_yである。図12の等価性判定表240において、Func_D_yの等価性は等価であり、Func_E_yの等価性は不等価である。
したがって、対応組がFunc_B_xとFunc_B_yとの組である場合、処理はステップS213に進む。
ステップS213において、部分検証判定部150は、不等価関数の分岐箇所識別子が非不等価関数の分岐箇所識別子と異なるか判定する。
不等価関数の分岐箇所識別子は、不等価関数が呼び出される箇所に対応する分岐箇所識別子である。
非不等価関数の分岐箇所識別子は、非不等価関数が呼び出される箇所に対応する分岐箇所識別子である。
具体的には、部分検証判定部150は、識別子対応表260を用いて以下のように判定を行う。
まず、部分検証判定部150は、不等価関数毎に不等価関数に対応付けられた分岐箇所識別子を識別子対応表260から抽出する。抽出される分岐箇所識別子が不等価関数の分岐箇所識別子である。
さらに、部分検証判定部150、非不等価関数毎に非不等価関数に対応付けられた分岐箇所識別子を識別子対応表260から抽出する。抽出される分岐箇所識別子が非不等価関数の分岐箇所識別子である。
そして、部分検証判定部150は、不等価関数と非不等価関数との組毎に不等価関数の分岐箇所識別子を非不等価関数の分岐箇所識別子と比較する。
少なくともいずれかの組で不等価関数の分岐箇所識別子が非不等価関数の分岐箇所識別子と一致しない場合、不等価関数に対応する分岐箇所識別子が非不等価関数に対応する分岐箇所と異なる。
不等価関数に対応する分岐箇所識別子が非不等価関数に対応する分岐箇所と異なる場合、処理はステップS214に進む。
不等価関数に対応する分岐箇所識別子が非不等価関数に対応する分岐箇所と一致する場合、処理はステップS215に進む。
ステップS214において、部分検証判定部150は、不等価パスと非不等価パスとの両方が対象関数に含まれると判定する。
ステップS215において、部分検証判定部150は、不等価パスと非不等価パスとの一方が対象関数に含まれないと判定する。
図19に戻り、ステップS220から説明を続ける。
ステップS220において、部分検証部160は、不等価パスを除外して対象組に対する等価性検証を行う。つまり、部分検証部160は、非不等価パスにおいて対象関数同士が等価であるか否かを判定する。
図21に基づいて、部分検証(S220)の手順を説明する。
ステップS221において、部分検証部160は、第1除外制御文を検証ファイルに追加する。
第1除外制御文は、第1不等価パスを除外するための文である。
第1不等価パスは、対象関数の中の不等価パスである。
第1不等価パスで呼び出される不等価関数を第1不等価関数という。
具体的には、部分検証部160は第1除外制御文を以下のように追加する。
まず、部分検証部160は第1除外制御文を生成する。
第1除外制御文は、第1分岐箇所識別子の値が更新前の値(初期値)と一致するか判定する文である。第1分岐箇所識別子の値が更新前の値と一致しない場合、第1不等価パスを通る条件となる入力は等価検証から除外される。
第1分岐箇所識別子は、第1不等価関数の分岐箇所識別子、つまり、第1不等価関数が呼び出される箇所に対応する分岐箇所識別子である。
次に、部分検証部160は、対象関数を呼び出す呼び出し文を検証ファイルから選択する。
そして、部分検証部160は、選択された呼び出し文の後に第1除外制御文を追加する。
図22に、ステップS221の後の検証ファイル250を示す。
検証ファイル250は、呼び出し文252の後に第1除外制御文255を含んでいる。さらに、検証ファイル250は、呼び出し文253の後に第1除外制御文256を含んでいる。
第1除外制御文255により、count7_xの値が更新前の値と一致するか判定される。count7_xは、Func_E_xの分岐箇所識別子である(図18参照)。Func_E_xは、Func_B_xの呼び出し先関数であり(図18参照)、不等価関数である(図12参照)。第1不等価関数が呼ばれていた場合、count7_xの値は0から1に更新されている。このとき、count7_xの値は等価性判定範囲外(図22参照)である。つまり、第1除外制御文255による判定結果は不一致である。そのため、count7_xに対応する入力は等価検証から除外される。
第1除外制御文256により、count6_yの値が更新前の値と一致するか判定される。count6_yは、Func_E_yの分岐箇所識別子である(図18参照)。Func_E_yは、Func_B_yの呼び出し先関数であり(図18参照)、不等価関数である(図12参照)。第1不等価関数が呼ばれていた場合、count6_yの値は0から1に更新されている。このとき、count6_yの値は等価性判定範囲外(図22参照)である。つまり、第1除外制御文256による判定結果は不一致である。そのため、count6_yに対応する入力は等価検証から除外される。
図21に戻り、ステップS222から説明を続ける。
ステップS222において、部分検証部160は、対象関数が部分等価関数を呼び出す関数であるか判定する。
つまり、部分検証部160は、対象関数から呼び出される複数の呼び出し先関数の中に部分等価関数が有るか判定する。
具体的には、部分検証部160は、識別子対応表260と等価性判定表240とを用いて以下のように判定を行う。
まず、部分検証部160は、識別子対応表260を参照し、対象関数に対応付けられた複数の呼び出し先関数を特定する。
次に、部分検証部160は、等価性判定表240を参照し、複数の呼び出し先関数に対応する複数の等価性を特定する。
そして、部分検証部160は、複数の等価性の少なくともいずれかが部分等価であるか判定する。
複数の等価性の少なくともいずれかが部分等価である場合、対象関数が部分等価関数を呼び出す関数である。
対象関数が部分等価関数を呼び出す関数である場合、処理はステップS223に進む。
対象関数が部分等価関数を呼び出す関数でない場合、処理はステップS224に進む。
Func_B_xの呼び出し先関数はFunc_D_xおよびFunc_E_xである(図18参照)。Func_D_xとFunc_E_xとのいずれの等価性も部分等価でない(図12参照)。そのため、Func_B_xは部分等価関数を呼び出す関数ではない。
Func_B_yの呼び出し先関数はFunc_D_yおよびFunc_E_yである(図18参照)。Func_D_yとFunc_E_yとのいずれの等価性も部分等価でない(図12参照)。そのため、Func_B_yは部分等価関数を呼び出す関数ではない。
したがって、対応組がFunc_B_xとFunc_B_yとを含んだ組である場合、処理はステップS224に進む。
ステップS223において、部分検証部160は、第2除外制御文を検証ファイルに追加する。
第2除外制御文は、第2不等価パスを除外するための文である。
第2不等価パスは、対象関数から呼び出される部分等価関数の中の不等価パスである。
第2不等価パスで呼び出される不等価関数を第2不等価関数という。
具体的には、部分検証部160は第2除外制御文を以下のように追加する。
まず、部分検証部160は第2除外制御文を生成する。
第2除外制御文は、第2分岐箇所識別子の値が更新前の値(初期値)と一致するか判定する文である。第2分岐箇所識別子の値が更新前の値と一致しない場合、第2不等価パスを通る条件となる入力は等価検証から除外される。
第2分岐箇所識別子は、第2不等価関数の分岐箇所識別子、つまり、第2不等価関数が呼び出される箇所に対応する分岐箇所識別子である。
次に、部分検証部160は、部分等価関数を呼び出す呼び出し文を検証ファイルから選択する。
そして、部分検証部160は、選択された呼び出し文の後に第2除外制御文を追加する。
ステップS224において、部分検証部160は、検証ファイルと変更前ソースコードと変更後ソースコードとを用いて等価性検証を行う。
等価性検証を行う方法は、図9のステップS142における方法と同じである。
図19に戻り、ステップS231から説明を続ける。
ステップS231において、部分検証部160は、ステップS220での等価性検証の結果が等価であるか判定する。
等価性検証の結果が等価である場合、処理はステップS232に進む。
等価性検証の結果が等価でない場合、処理はステップS233に進む。
ステップS232において、部分検証部160は、等価性判定表に対象関数を部分等価関数として登録する。
さらに、部分検証部160は、第1不等価関数の分岐箇所識別子と第2不等価関数の分岐箇所識別子とを等価性判定表に登録する。
図23に、等価性判定表240を示す。
図23の等価性判定表240は、Func_B_xおよびFunc_B_yが部分等価関数である場合の等価性判定表240である。
Func_Bに対応する等価性の欄には部分等価が登録されている。
変更前ソースコードの欄は、対象関数である変更前関数用の欄である。
変更後ソースコードの欄は、対象関数である変更後関数用の欄である。
変更前ソースコードと変更後ソースコードとのそれぞれの欄は、第1不等価関数の分岐箇所識別子および第2不等価関数の分岐箇所識別子を示す。ハイフンは第1不等価関数および第2不等価関数が無いことを意味する。
Func_B_xの第1不等価関数はFunc_E_xである(図18および図12参照)。Func_E_xの分岐箇所識別子はcount7_xである(図18参照)。そのため、Func_Bに対応する変更前ソースコードの欄にはcount7_xが登録されている。
Func_B_yの第1不等価関数はFunc_E_yである(図18および図12参照)。Func_E_yの分岐箇所識別子はcount6_yである(図18参照)。そのため、Func_Bに対応する変更後ソースコードの欄にはcount6_yが登録されている。
ステップS233において、部分検証部160は、等価性判定表に対象関数を不等価関数として登録する。
以下に、対象関数が部分等価関数を呼び出す関数であるためステップS223(図21参照)が実行される具体例を説明する。
対象関数は、Func_A_xおよびFunc_A_yである。
図24に、変更前ソースコード210を示す。
図24の変更前ソースコード210は、Func_A_xが対象関数である場合において、ステップS143(図9参照)が実行された直後の変更前ソースコード210である。
Func_A_xには、3つの更新文(218、219、2110)が追加されている。
図25に、変更後ソースコード220を示す。
図25の変更後ソースコード220は、Func_A_yが対象関数である場合において、ステップS143(図9参照)が実行された直後の変更後ソースコード220である。
Func_A_yには、3つの更新文(227〜229)が追加されている。
図26に、識別子対応表260を示す。
図26の識別子対応表260は、Func_A_xおよびFunc_A_yが対象関数である場合において、ステップS144(図9参照)が実行された直後の識別子対応表260である。
図24に示すように、Func_A_xの中の呼び出し先関数はFunc_B_xおよびFunc_C_xである。そのため、図26に示すように、Func_Aに対応する変更前ソースコードの欄において、呼び出し先関数の欄にFunc_B_xおよびFunc_C_xが登録されている。
図24に示すように、Func_B_xに対応する分岐箇所識別子はcount9_xであり、Func_C_xに対応する分岐箇所識別子はcount10_xである。そのため、図26に示すように、Func_Bに対応する変更前ソースコードの欄において、分岐箇所識別子の欄にcount9_xが登録されている。さらに、Func_Cに対応する変更前ソースコードの欄において、分岐箇所識別子の欄にcount10_xが登録されている。
図25に示すように、Func_A_yの中の呼び出し先関数はFunc_B_yおよびFunc_C_yである。そのため、図26に示すように、Func_Aに対応する変更後ソースコードの欄において、呼び出し先関数の欄にFunc_B_yおよびFunc_C_yが登録されている。
図25に示すように、Func_B_yに対応する分岐箇所識別子はcount8_yであり、Func_C_yに対応する分岐箇所識別子はcount9_yである。そのため、図26に示すように、Func_Bに対応する変更後ソースコードの欄において、分岐箇所識別子の欄にcount8_yが登録されている。さらに、Func_Cに対応する変更後ソースコードの欄において、分岐箇所識別子の欄にcount9_yが登録されている。
図27に、ステップS221(図21参照)の後の検証ファイル250を示す。
検証ファイル250は、呼び出し文252の後に第1除外制御文255を含んでいる。さらに、検証ファイル250は、呼び出し文253の後に第1除外制御文256を含んでいる。
第1除外制御文255により、count10_xの値が更新前の値と一致するか判定される。count10_xは、Func_C_xの分岐箇所識別子である(図26参照)。Func_C_xは、Func_A_xの呼び出し先関数であり(図26参照)、不等価関数である(図23参照)。
第1除外制御文256により、count9_yの値が更新前の値と一致するか判定される。count9_yは、Func_C_yの分岐箇所識別子である(図26参照)。Func_C_yは、Func_A_yの呼び出し先関数であり(図26参照)、不等価関数である(図23参照)。
ステップS222(図21参照)において、部分検証部160は、対象関数が部分等価関数を呼び出す関数であるか判定する。
Func_A_xの呼び出し先関数はFunc_B_xおよびFunc_C_xである(図26参照)。Func_B_xの等価性は部分等価である(図23参照)。そのため、Func_A_xは部分等価関数を呼び出す関数である。
Func_A_yの呼び出し先関数はFunc_B_yおよびFunc_C_yである(図26参照)。Func_B_yの等価性も部分等価である(図23参照)。そのため、Func_A_yは部分等価関数を呼び出す関数である。
したがって、対応組がFunc_A_xとFunc_A_yとを含んだ組である場合、処理はステップS223に進む。
ステップS223(図21参照)において、部分検証部160は、第2除外制御文を検証ファイルに追加する。
図28に、ステップS223(図21参照)の後の検証ファイル250を示す。
検証ファイル250は、呼び出し文252の後に第2除外制御文257を含んでいる。さらに、検証ファイル250は、呼び出し文253の後に第2除外制御文258を含んでいる。
第2除外制御文257により、count7_xの値が更新前の値と一致するか判定される。count7_xは、Func_E_xの分岐箇所識別子である(図26参照)。Func_E_xは、Func_B_xの呼び出し先関数であり(図26参照)、不等価関数である(図23参照)。Func_B_xは、Func_A_xの呼び出し先関数であり(図26参照)、部分等価関数である(図23参照)。第2不等価関数が呼ばれていた場合、count7_xの値は0から1に更新されている。このとき、count7_xの値は等価性判定範囲外(図28参照)である。つまり、第2除外制御文257による判定結果は不一致である。そのため、count7_xに対応する入力は等価検証から除外される。
第2除外制御文258により、count6_yの値が更新前の値と一致するか判定される。count6_yは、Func_E_yの分岐箇所識別子である(図26参照)。Func_E_yは、Func_B_yの呼び出し先関数であり(図26参照)、不等価関数である(図23参照)。Func_B_yは、Func_A_yの呼び出し先関数であり(図26参照)、部分等価関数である(図23参照)。第2不等価関数が呼ばれていた場合、count6_yの値は0から1に更新されている。このとき、count6_yの値は等価性判定範囲外(図28参照)である。つまり、第2除外制御文258による判定結果は不一致である。そのため、count6_yに対応する入力は等価検証から除外される。
図29に、等価性判定表240を示す。
図29の等価性判定表240は、Func_A_xおよびFunc_A_yが部分等価関数である場合の等価性判定表240である。
Func_Aに対応する等価性の欄には部分等価が登録されている。
Func_A_xの第1不等価関数はFunc_C_xである(図26および図23参照)。Func_C_xの分岐箇所識別子はcount10_xである(図26参照)。そのため、Func_Aに対応する変更前ソースコードの欄にはcount10_xが登録されている。
Func_A_xの第2不等価関数はFunc_E_xである(図26および図23参照)。Func_E_xの分岐箇所識別子はcount7_xである(図26参照)。そのため、Func_Aに対応する変更前ソースコードの欄にはcount7_xが登録されている。
同様に、Func_Aに対応する変更後ソースコードの欄には、count9_yおよびcount6_yが登録されている。
***実施の形態1の効果***
等価性検証装置100は、対象関数内の呼び出し先関数の等価性結果を利用して、不等価な呼び出し先関数を通過するパスを除外した状態で等価性検証を行う。これにより、不等価でないと判定される範囲が拡大される。その結果、不等価な原因、つまり、不具合の原因を解析するための範囲が狭まり、人手による解析時間が短縮される。
実施の形態2.
始点関数から終点関数までの呼び出しパスが不等価パスであるか判定するための形態について、主に実施の形態1と異なる点を図30から図34に基づいて説明する。
***構成の説明***
図30に基づいて、等価性検証装置100の構成を説明する。
等価性検証装置100は、コールグラフ生成部110と制御部120と等価性検証部130と識別子設定部140と部分検証判定部150と部分検証部160との他に、パス検証部170をソフトウェア要素として備える。
等価性検証プログラムは、コールグラフ生成部110と制御部120と等価性検証部130と識別子設定部140と部分検証判定部150と部分検証部160とパス検証部170としてコンピュータを機能させる。
***動作の説明***
図31に基づいて、パス検証方法を説明する。
パス検証方法は、変更前ソースコードと変更後ソースコードとの一方を対象にして行われる。以下、変更後ソースコードを対象として、パス検証方法を説明する。
ステップS301において、受付部192は、始点関数識別子と終点関数識別子とを受け付ける。
始点関数識別子は、始点関数として指定された関数の識別子である。
終点関数識別子は、終点関数として指定された関数の識別子である。
始点関数から終点関数までのパスを呼び出しパスという。
呼び出しパスは、始点関数から終点関数までの関数の呼び出し順を示す。
例えば、始点関数識別子および終点関数識別子は以下のような手順で受け付けられる。
まず、パス検証部170は、変更後コールグラフ232を入力としてGraphvizを実行することによって、コールグラフ図を生成する。
Graphvizは、コールグラフ図を生成するためのツールである。
コールグラフ図は、コールグラフが示す呼び出し関係を表す図である。
次に、表示部193は、コールグラフ図をディスプレイに表示する。
次に、検証者は、コールグラフ図を参照し、始点関数と終点関数とを決定し、始点関数識別子と終点関数識別子とを等価性検証装置100に入力する。終点関数識別子の入力が省略された場合、末端の関数の識別子が終点関数識別子として入力されたものとする。
そして、受付部192は、入力された始点関数識別子と終点関数識別子とを受け付ける。
図32に、コールグラフ図270を示す。
コールグラフ図270は、図6の変更後コールグラフ232に対応するコールグラフ図である。
図31に戻り、ステップS310から説明を続ける。
ステップS310において、パス検証部170は、呼び出しパス毎に第3分岐箇所識別子を抽出する。
第3分岐箇所識別子は、呼び出しパスに含まれる呼び出し先関数の分岐箇所識別子である。呼び出し先関数の分岐箇所識別子は、呼び出し先関数が呼び出される箇所に対応する分岐箇所識別子である。
図33に基づいて、第3分岐箇所識別子の抽出(S310)を説明する。
ステップS311において、パス検証部170は、始点関数から順に関数を1つ選択する。
ステップS312からステップS315までの説明において、対象関数は、ステップS311で選択された関数を意味する。
ステップS312において、パス検証部170は、対象関数が複数の呼び出し先関数を呼び出す関数であるか判定する。
具体的には、パス検証部170は、識別子対応表260を用いて以下のように判定を行う。
まず、パス検証部170は、識別子対応表260を参照し、対象関数に対応付けられた呼び出し先関数の数を数える。
そして、パス検証部170は、対象関数に対応付けられた呼び出し先関数の数が2以上であるか判定する。
対象関数に対応付けられた呼び出し先関数の数が2以上である場合、対象関数が複数の呼び出し先関数を呼び出す関数である。
対象関数が複数の呼び出し先関数を呼び出す関数である場合、処理はステップS313に進む。
対象関数が複数の呼び出し先関数を呼び出す関数ではない場合、処理はステップS316に進む。
図26の識別子対応表260において、Func_A_yに対応する呼び出し先関数は、Func_B_yとFunc_C_yとの2つである。
したがって、対象関数がFunc_A_yである場合、処理はステップS313に進む。
ステップS313において、パス検証部170は、複数の呼び出し先関数に対応する複数の第3分岐箇所識別子が全て同じであるか判定する。
具体的には、パス検証部170は、識別子対応表260を用いて以下のように判定を行う。
まず、パス検証部170は、呼び出し先関数毎に呼び出し先関数に対応する分岐箇所識別子を識別子対応表260から抽出する。
そして、パス検証部170は、抽出された全ての分岐箇所識別子が同じであるか判定する。
複数の呼び出し先関数に対応する複数の分岐箇所識別子が全て同じである場合、処理はステップS316に進む。
複数の呼び出し先関数に対応する複数の分岐箇所識別子の少なくともいずれかが他の分岐箇所識別子と異なる場合、処理はステップS314に進む。
図26の識別子対応表260において、Func_B_yの分岐箇所識別子はcount8_yであり、Func_C_yの分岐箇所識別子はcount9_yである。
したがって、複数の呼び出し先関数がFunc_B_yおよびFunc_C_yである場合、処理はステップS314に進む。
ステップS314において、パス検証部170は、複数の呼び出しパスをパス判定表に登録する。
パス判定表は、呼び出しパス毎の等価性および第3分岐箇所識別子を管理するためのデータである。
具体的には、パス検証部170は複数の呼び出しパスを以下のように登録する。
パス検証部170は、対象関数を含んだ呼び出しパスがパス判定表に登録されているか判定する。
対象関数を含んだ呼び出しパスがパス判定表に登録されている場合、パス検証部170は、対象関数を含んだ呼び出しパスを複製することによって、複数の呼び出し先関数と同じ数の呼び出しパスをパス判定表に登録する。そして、パス検証部170は、それぞれの呼び出しパスに異なる呼び出し先関数を登録する。
対象関数を含んだ呼び出しパスがパス判定表に登録されていない場合、パス検証部170は、呼び出し先関数毎に対象関数と呼び出し先関数とを示す呼び出しパスをパス判定表に登録する。そして、パス検証部170は、それぞれの呼び出しパスに異なる呼び出し先関数を登録する。
ステップS315において、パス検証部170は、複数の分岐箇所識別子をパス判定表に登録する。登録される複数の分岐箇所識別子のそれぞれが第3分岐箇所識別子である。
具体的には、パス検証部170は、ステップS314で登録された呼び出しパス毎に、呼び出し先関数の分岐箇所識別子を識別子対応表260から抽出し、抽出された分岐箇所識別子をパス検証部170に登録する。
ステップS316において、パス検証部170は、未選択の関数が有るか判定する。
未選択の関数が有る場合、処理はステップS311に進む。
未選択の関数が無い場合、第3分岐箇所識別子の抽出(S310)は終了する。
図34に、パス判定表280を示す。
図34のパス判定表280は、図32のコールグラフ図270に対応するパス判定表であり、ステップS310(図31参照)の後のパス判定表である。
始点関数は、Func_A_yであり、終点関数はFunc_C_Y、Func_D_YおよびFunc_E_Yである。
No.1の呼び出しパスにおける呼び出し先関数はFunc_B_yおよびFunc_D_yである。Func_B_yの分岐箇所識別子はcount8_yであり、FuncD_yの分岐箇所識別子はcount5_yである(図26参照)。したがって、No.1の呼び出しパスの第3分岐箇所識別子はcount8_yおよびcount5_yである。
No.2の呼び出しパスにおける呼び出し先関数はFunc_B_yおよびFunc_E_yである。Func_B_yの分岐箇所識別子はcount8_yであり、FuncE_yの分岐箇所識別子はcount6_yである(図26参照)。したがって、No.2の呼び出しパスの第3分岐箇所識別子はcount8_yおよびcount6_yである。
No.3の呼び出しパスにおける呼び出し先関数はFunc_C_yである。Func_C_yの分岐箇所識別子はcount9_yである(図26参照)。したがって、No.3の呼び出しパスの第3分岐箇所識別子はcount9_yである。
図31に戻り、ステップS321から説明を続ける。
ステップS321において、パス検証部170は、未選択の呼び出しパスを1つ選択する。
ステップS322からステップS324までの説明において、呼び出しパスは、ステップS321で選択された呼び出しパスを意味する。
ステップS322において、パス検証部170は、呼び出しパスの第3分岐箇所識別子の少なくともいずれかが、始点関数の第1分岐箇所識別子と始点関数の第2分岐箇所識別子とのいずれかと一致するか判定する。
具体的には、パス検証部170は以下のように判定を行う。
まず、パス検証部170は、呼び出しパスの第3分岐箇所識別子をパス判定表280の中の分岐箇所識別子の欄から抽出する。
次に、パス検証部170は、始点関数の第1分岐箇所識別子と始点関数の第2分岐箇所識別子とを等価性判定表240の中の変更後ソースコードの欄から抽出する。
次に、パス検証部170は、呼び出しパスの第3分岐箇所識別子毎に第3分岐箇所識別子を始点関数の第1分岐箇所識別子と始点関数の第2分岐箇所識別子とのそれぞれと比較する。
そして、パス検証部170は、比較結果に基づいて、呼び出しパスの第3分岐箇所識別子の少なくともいずれかが、始点関数の第1分岐箇所識別子と始点関数の第2分岐箇所識別子とのいずれかと一致するか判定する。
呼び出しパスの第3分岐箇所識別子の少なくともいずれかが、始点関数の第1分岐箇所識別子と始点関数の第2分岐箇所識別子とのいずれかと一致するか場合、処理はステップS323に進む。
呼び出しパスの全ての第3分岐箇所識別子が、始点関数の第1分岐箇所識別子と始点関数の第2分岐箇所識別子とのいずれとも一致しない場合、処理はステップS324に進む。
図34のパス判定表280において、No.1の呼び出しパスの第3分岐箇所識別子はcount8_yおよびcount5_yである。
始点関数であるFunc_A_yの第1分岐箇所識別子および第2分岐箇所識別子は、count6_yおよびcount9_yである(図29参照)。
この場合、全ての第3分岐箇所識別子が第1分岐箇所識別子と第2分岐箇所識別子とのいずれとも一致しないため、処理はステップS324に進む。
図34のパス判定表280において、No.2の呼び出しパスの第3分岐箇所識別子はcount8_yおよびcount6_yである。
始点関数であるFunc_A_yの第1分岐箇所識別子および第2分岐箇所識別子は、count6_yおよびcount9_yである(図29参照)。
この場合、第3分岐箇所識別子と第1分岐箇所識別子との間でcount6_yが共通するため、処理はステップS323に進む。
図34のパス判定表280において、No.3の呼び出しパスの第3分岐箇所識別子はcount9_yである。
始点関数であるFunc_A_yの第1分岐箇所識別子および第2分岐箇所識別子は、count6_yおよびcount9_yである(図29参照)。
この場合、第3分岐箇所識別子と第2分岐箇所識別子との間でcount9_yが共通するため、処理はステップS323に進む。
ステップS323において、パス検証部170は、呼び出しパスをパス判定表に不等価パスとして登録する。
ステップS324において、パス検証部170は、呼び出しパスをパス判定表に等価パスとして登録する。
ステップS325において、パス検証部170は、未選択の呼び出しパスが有るか判定する。
未選択の呼び出しパスが有る場合、処理はステップS321に進む。
未選択の呼び出しパスが無い場合、パス検証方法の処理は終了する。
図35に、パス検証方法によって得られるパス判定表280を示す。
パス判定表280において、No.1の呼び出しパスは不等価関数が呼び出されない等価パスであり、No.2の呼び出しパスおよびNo.3の呼び出しパスは不等価関数が呼び出される不等価パスである。
***実施の形態2の効果***
実施の形態1の結果を利用して呼び出しパスの等価性を検証することができる。これにより、不等価でないと判定されるパス(等価パス)の範囲が拡大される。その結果、例えば、等価パスにおいて機能テストケースの生成および出力期待値の指定を省略することが可能となる。そして、検証に要する工数が削減される。
***実施の形態の補足***
実施の形態において、等価性検証装置100の機能はハードウェアで実現してもよい。
図36に、等価性検証装置100の機能がハードウェアで実現される場合の構成を示す。
等価性検証装置100は処理回路990を備える。処理回路990はプロセッシングサーキットリともいう。
処理回路990は、コールグラフ生成部110と制御部120と等価性検証部130と識別子設定部140と部分検証判定部150と部分検証部160とパス検証部170と記憶部191とを実現する専用の電子回路である。
例えば、処理回路990は、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックIC、GA、ASIC、FPGAまたはこれらの組み合わせである。GAはGate Arrayの略称であり、ASICはApplication Specific Integrated Circuitの略称であり、FPGAはField Programmable Gate Arrayの略称である。
等価性検証装置100は、処理回路990を代替する複数の処理回路を備えてもよい。複数の処理回路は、処理回路990の役割を分担する。
実施の形態は、好ましい形態の例示であり、本発明の技術的範囲を制限することを意図するものではない。実施の形態は、部分的に実施してもよいし、他の形態と組み合わせて実施してもよい。フローチャート等を用いて説明した手順は、適宜に変更してもよい。
100 等価性検証装置、110 コールグラフ生成部、120 制御部、130 等価性検証部、140 識別子設定部、150 部分検証判定部、160 部分検証部、170 パス検証部、191 記憶部、192 受付部、193 表示部、210 変更前ソースコード、211〜219 更新文、2110 更新文、220 変更後ソースコード、221〜229 更新文、231 変更前コールグラフ、232 変更後コールグラフ、233 関数対応表、240 等価性判定表、250 検証ファイル、251 入力一致文、252 呼び出し文、253 呼び出し文、254 出力一致文、255 第1除外制御文、256 第1除外制御文、257 第2除外制御文、258 第2除外制御文、260 識別子対応表、270 コールグラフ図、280 パス判定表、901 プロセッサ、902 メモリ、903 補助記憶装置、904 入出力インタフェース、990 処理回路。

Claims (9)

  1. 変更前ソースコードに含まれる関数と変更後ソースコードに含まれる関数との組である対応組毎に、対応組に含まれる関数同士が等価であるか等価性検証によって判定する等価性検証部と、
    不等価である対応組毎に、対応組が、不等価関数が呼び出される不等価パスと非不等価関数が呼び出される非不等価パスとの両方が含まれる関数を含んだ部分検証組であるか判定する部分検証判定部と、
    部分検証組毎に、前記不等価パスを除外して前記等価性検証を行うことによって、部分検証組に含まれる関数同士が部分等価であるか判定する部分検証部と
    を備える等価性検証装置。
  2. 前記等価性検証装置は、前記変更前ソースコードと前記変更後ソースコードとに対してそれぞれのソースコードの中にある分岐箇所毎に分岐箇所識別子を生成する識別子設定部を備え、
    前記部分検証判定部は、前記変更前ソースコードと前記変更後ソースコートとの少なくとも一方において前記不等価関数が呼び出される箇所に対応する分岐箇所識別子と前記不等価関数ではない関数が呼び出される箇所に対応する分岐箇所識別子とが一致しない場合に、前記対応組が前記部分検証組であると判定する
    請求項1に記載の等価性検証装置。
  3. 前記等価性検証部は、前記等価性検証の入力となる検証ファイルを生成し、前記検証ファイルを用いて前記等価性検証を行い、
    前記部分検証部は、前記対応組に含まれる関数の中の不等価パスである第1不等価パスを除外するための第1除外制御文を前記検証ファイルに追加し、前記第1除外制御文が追加された後の検証ファイルを用いて前記等価性検証を行う
    請求項1に記載の等価性検証装置。
  4. 前記等価性検証装置は、前記変更前ソースコードと前記変更後ソースコードとに対してそれぞれのソースコードの中にある分岐箇所毎に分岐箇所識別子の値を更新する更新文を追加する識別子設定部を備え、
    前記等価性検証部は、前記対応組に含まれる関数を呼び出す呼び出し文を含んだファイルを前記検証ファイルとして生成し、
    前記部分検証部は、前記不等価関数が呼び出される箇所に対応する分岐箇所識別子の値が更新前の値と一致するか判定する文を前記呼び出し文の後に前記第1除外制御文として追加し、前記更新文が追加された後の変更前ソースコードと前記更新文が追加された後の変更後ソースコードと前記第1除外制御文が追加された後の検証ファイルとを用いて前記等価性検証を行う
    請求項3に記載の等価性検証装置。
  5. 前記等価性検証部は、前記等価性検証の入力となる検証ファイルを生成し、前記検証ファイルを用いて前記等価性検証を行い、
    前記部分検証部は、前記対応組に含まれる関数の中の不等価パスである第1不等価パスを除外するための第1除外制御文を前記検証ファイルに追加し、前記対応組が前記部分検証組であり且つ前記部分検証組に含まれる関数が部分等価関数を呼び出す関数である場合、前記部分等価関数の中の不等価パスである第2不等価パスを除外するための第2除外制御文を前記検証ファイルに追加し、前記検証ファイルを用いて前記等価性検証を行う
    請求項1に記載の等価性検証装置。
  6. 前記等価性検証装置は、前記変更前ソースコードと前記変更後ソースコードとに対してそれぞれのソースコードの中にある分岐箇所毎に分岐箇所識別子の値を更新する更新文を追加する識別子設定部を備え、
    前記等価性検証部は、前記対応組に含まれる関数を呼び出す呼び出し文を含んだファイルを前記検証ファイルとして生成し、
    前記部分検証部は、前記第1不等価パスで呼び出される不等価関数である第1不等価関数が呼び出される箇所に対応する第1分岐箇所識別子の値が更新前の値と一致するか判定する文を前記呼び出し文の後に前記第1除外制御文として追加し、前記第2不等価パスで呼び出される不等価関数である第2不等価関数が呼び出される箇所に対応する第2分岐箇所識別子の値が更新前の値と一致するか判定する文を前記呼び出し文の後に前記第2除外制御文として追加し、前記変更前ソースコードと前記変更後ソースコードと前記検証ファイルとを用いて前記等価性検証を行う
    請求項5に記載の等価性検証装置。
  7. 始点関数識別子と終点関数識別子とを受け付ける受付部と、
    前記始点関数識別子で識別される始点関数から前記終点関数識別子で識別される終点関数までの呼び出しパスが不等価パスであるか判定するパス検証部を備える
    請求項6に記載の等価性検証装置。
  8. 前記パス検証部は、前記呼び出しパスに含まれる呼び出し先関数毎に呼び出し先関数が呼び出される箇所に対応する分岐箇所識別子である第3分岐箇所識別子を抽出し、少なくともいずれかの第3分岐箇所識別子が前記始点関数の前記第1分岐箇所識別子と前記始点関数の前記第2分岐箇所識別子とのいずれかと一致するか判定し、少なくともいずれかの第3分岐箇所識別子が前記始点関数の前記第1分岐箇所識別子と前記始点関数の前記第2分岐箇所識別子とのいずれかと一致する場合に前記呼び出しパスが不等価パスであると判定する
    請求項7に記載の等価性検証装置。
  9. 変更前ソースコードに含まれる関数と変更後ソースコードに含まれる関数との組である対応組毎に、対応組に含まれる関数同士が等価であるか等価性検証によって判定する等価性検証処理と、
    不等価である対応組毎に、対応組が、不等価関数が呼び出される不等価パスと非不等価関数が呼び出される非不等価パスとの両方が含まれる関数を含んだ部分検証組であるか判定する部分検証判定処理と、
    部分検証組毎に、前記不等価パスを除外して前記等価性検証を行うことによって、部分検証組に含まれる関数同士が部分等価であるか判定する部分検証処理と
    をコンピュータに実行させるための等価性検証プログラム。
JP2019500911A 2017-02-22 2017-02-22 等価性検証装置および等価性検証プログラム Active JP6567212B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2017/006598 WO2018154657A1 (ja) 2017-02-22 2017-02-22 等価性検証装置および等価性検証プログラム

Publications (2)

Publication Number Publication Date
JPWO2018154657A1 true JPWO2018154657A1 (ja) 2019-06-27
JP6567212B2 JP6567212B2 (ja) 2019-08-28

Family

ID=63253555

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019500911A Active JP6567212B2 (ja) 2017-02-22 2017-02-22 等価性検証装置および等価性検証プログラム

Country Status (4)

Country Link
US (1) US10915427B2 (ja)
EP (1) EP3570173B1 (ja)
JP (1) JP6567212B2 (ja)
WO (1) WO2018154657A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113360182B (zh) * 2021-06-04 2022-12-09 建信金融科技有限责任公司 系统性能诊断的方法和装置
US20230315412A1 (en) * 2022-03-30 2023-10-05 Microsoft Technology Licensing, Llc Scalable behavioral interface specification checking
US11803371B1 (en) * 2022-10-21 2023-10-31 Aurora Labs Ltd. Symbol-matching between software versions

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015029154A1 (ja) * 2013-08-28 2015-03-05 株式会社日立製作所 ソースコード等価性検証装置、および、ソースコード等価性検証方法

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060041873A1 (en) * 2004-08-19 2006-02-23 Cisco Technology, Inc. Computer system and method for verifying functional equivalence
US8683441B2 (en) * 2006-01-11 2014-03-25 International Business Machines Corporation Software equivalence checking
JP5365846B2 (ja) 2009-03-03 2013-12-11 日本電気株式会社 プログラム検証装置、プログラム検証方法、及び検証機能実行用プログラム
US8612951B2 (en) * 2009-04-21 2013-12-17 Oracle International Corporation Method of determining which computer program functions are changed by an arbitrary source code modification
JP5464031B2 (ja) 2010-04-23 2014-04-09 日本電気株式会社 プログラム検証装置、方法及びプログラム
JP2011248561A (ja) 2010-05-26 2011-12-08 Hitachi Ltd 情報変換方法、プログラム、情報変換装置および情報変換システム
US9459986B2 (en) * 2013-08-28 2016-10-04 International Business Machines Corporation Automatic generation of analysis-equivalent application constructs
JP6248008B2 (ja) 2014-07-29 2017-12-13 日立オートモティブシステムズ株式会社 ソフトウェア検証システムおよび制御装置
US20200034280A1 (en) * 2017-04-19 2020-01-30 Mitsubishi Electric Corporation Equivalence verification device and computer readable medium

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015029154A1 (ja) * 2013-08-28 2015-03-05 株式会社日立製作所 ソースコード等価性検証装置、および、ソースコード等価性検証方法

Also Published As

Publication number Publication date
WO2018154657A1 (ja) 2018-08-30
US10915427B2 (en) 2021-02-09
EP3570173A4 (en) 2020-01-08
EP3570173A1 (en) 2019-11-20
JP6567212B2 (ja) 2019-08-28
US20190370151A1 (en) 2019-12-05
EP3570173B1 (en) 2021-10-06

Similar Documents

Publication Publication Date Title
JP2017534944A (ja) 条件付き検証規則
Denti et al. ASGAL: aligning RNA-Seq data to a splicing graph to detect novel alternative splicing events
JP2017010476A (ja) 類似判定装置、類似判定方法及び類似判定プログラム
JP6567212B2 (ja) 等価性検証装置および等価性検証プログラム
US20210049091A1 (en) Software visualization apparatus, software visualization method, and computer readable medium
US20080177527A1 (en) Simulation system, simulation method and simulation program
US10628140B2 (en) Program code generation apparatus
JP6419667B2 (ja) テストdbデータ生成方法及び装置
WO2018150507A1 (ja) テストケース選択装置およびテストケース選択プログラム
US6643769B1 (en) System and method for enabling selective execution of computer code
US20150082278A1 (en) Clone detection method and clone function commonalizing method
JPWO2014112303A1 (ja) データ更新漏れ検査装置、データ更新漏れ検査方法、データ更新漏れ検査プログラム
JP6369269B2 (ja) 検証支援装置、検証支援方法およびコンピュータプログラム
JP5811859B2 (ja) ソースコードの静的解析装置、システム、方法、及びそのためのプログラム
JP2016128941A (ja) 出力判定装置、出力判定方法、出力判定プログラム、及び、静的解析装置
JP6320269B2 (ja) ソフトウェア試験支援装置およびソフトウェア試験支援プログラム
WO2016189721A1 (ja) ソースコード評価装置及びソースコード評価方法及びソースコード評価プログラム
US11137988B2 (en) Program code generation device and computer readable medium
US20150199183A1 (en) Program analysis apparatus and program analysis method
JP2015191492A (ja) 変数チェック方法
Malburg et al. Mutation based feature localization
JP7238361B2 (ja) エラー出力装置、エラー出力方法、学習装置、学習済みモデルの生成方法、プログラム、および学習済みモデル
JP2018036792A (ja) データ処理プログラム及びデータ処理方法
JP6807721B2 (ja) 状態遷移編集装置および状態遷移編集プログラム
JP2007249495A (ja) ソフトウェア検証方法、情報処理装置およびプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190319

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20190319

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20190403

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190521

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190605

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190730

R150 Certificate of patent or registration of utility model

Ref document number: 6567212

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250