Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP6419357B2 - ソースコード比較装置およびソースコード比較プログラム - Google Patents
[go: Go Back, main page]

JP6419357B2 - ソースコード比較装置およびソースコード比較プログラム - Google Patents

ソースコード比較装置およびソースコード比較プログラム Download PDF

Info

Publication number
JP6419357B2
JP6419357B2 JP2017558840A JP2017558840A JP6419357B2 JP 6419357 B2 JP6419357 B2 JP 6419357B2 JP 2017558840 A JP2017558840 A JP 2017558840A JP 2017558840 A JP2017558840 A JP 2017558840A JP 6419357 B2 JP6419357 B2 JP 6419357B2
Authority
JP
Japan
Prior art keywords
detailed
condition
function
source code
list
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
Application number
JP2017558840A
Other languages
English (en)
Other versions
JPWO2017115449A1 (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 JPWO2017115449A1 publication Critical patent/JPWO2017115449A1/ja
Application granted granted Critical
Publication of JP6419357B2 publication Critical patent/JP6419357B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Prevention of errors by analysis, debugging or testing of software
    • G06F11/3604Analysis of software for verifying properties of programs
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/33Intelligent editors
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; 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)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Library & Information Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Stored Programmes (AREA)

Description

本発明は、ソフトウェアが変更される場合に変更の影響が及ぶ箇所を特定するための技術に関するものである。
ソフトウェアが変更されると、変更された箇所とは別の箇所に変更の影響が及ぶ場合がある。変更の影響が及ぶ箇所についての修正漏れは、障害を作り込む要因となりうる。そのため、変更の影響が及ぶ箇所を特定する必要がある。
大規模なソフトウェアの開発において、大量のソースコードの中から、変更の影響が及ぶ箇所を目視で探索することは非効率的であるため、目視による探索は作業工数の増加に繋がる。また、目視による探索では変更の影響が及ぶ箇所を見落し易く、見落とした箇所の修正漏れが発生する。つまり、目視による探索は、障害の作り込みの要因となりうる。したがって、変更の影響が及ぶ箇所を効率的かつ網羅的に特定することが求められる。
特許文献1には、関数と変数との依存関係を利用して変更影響箇所を抽出する手法が記載されている。具体的には、依存強度に重みをつけて変更影響範囲を抽出する手法が記載されている。
しかし、特許文献1に記載の手法では、依存関係がある関数のうちの変更の影響を受ける関数については、関数内の記述を目視で確認する必要がある。
特許文献2および特許文献3には、実行経路を利用して変更影響箇所を抽出する手法が記載されている。
具体的には、特許文献2には、各実行経路における出力項目の値域の変化を用いて、変更の影響を受けるテストケースを検出する手法が記載されている。
また、特許文献3には、各実行経路における入力項目の値域の変化を用いて、変更の影響を受けるテストケースを検出する手法が記載されている。
しかし、特許文献2または特許文献3に記載の手法では、変更影響箇所を関数粒度で特定することはできても、変更影響箇所を行単位で抽出することはできない。
特開2013−125466号 特開2015−090616号 特開2014−191652号
TechMatrix Corporation、"Lattix−アーキテクチャ分析ツール−"、インターネット(URL:https://www.techmatrix.co.jp/QUALITY/LATTIX/)、2015年12月2日検索
本発明は、ソフトウェアが変更される場合に変更の影響が及ぶ箇所を特定できるようにすることを目的とする。
本発明のソースコード比較装置は、
変更前のソースコードと変更後のソースコードとに対して、ソースコードに含まれる関数と関数が呼び出されたときに成り立つ呼出条件との組毎に、関数に含まれる実行文と、呼出条件の下で実行文が実行される前に成り立つ詳細事前条件と、呼出条件の下で実行文が実行された後に成り立つ詳細事後条件と、が互いに対応付けられた詳細条件リストを生成する詳細解析部と、
変更前のソースコードに対して生成された詳細条件リストである変更前の詳細条件リストと、変更後のソースコードに対して生成された詳細条件リストである変更後の詳細条件リストとに基づいて、変更前のソースコードと変更後のソースコードとの間で詳細事前条件と詳細事後条件との少なくともいずれかが異なる実行文を特定する情報を含んだ変動リストを生成する比較部とを備える。
本発明によれば、変更前のソースコードと変更後のソースコードとの間で詳細事前条件と詳細事後条件との少なくともいずれかが異なる実行文を、変更の影響が及ぶ箇所として特定することができる。
実施の形態1におけるソースコード比較装置100の構成図。 実施の形態1におけるソースコード比較方法のフローチャート。 実施の形態1における解析処理(S200)のフローチャート。 実施の形態1における変更前のソースコード101を示す図。 実施の形態1における変更前の簡略条件ファイル191を示す図。 実施の形態1における変更前のfunc関数の簡略条件リスト192を示す図。 実施の形態1におけるエントリ解析処理(S220)のフローチャート。 実施の形態1における依存リスト193を示す図。 実施の形態1におけるエントリ関数リスト194を示す図。 実施の形態1における詳細解析処理(S230)のフローチャート。 実施の形態1における再帰解析処理(S300)のフローチャート。 実施の形態1における直前評価処理(S310)のフローチャート。 実施の形態1における直前評価処理(S310)を実行後の作業事前条件PREVおよび作業事後条件AFTERの一例を示す図。 実施の形態1における変数評価処理(S320)のフローチャート。 実施の形態1における変数評価処理(S320)を実行後の作業事前条件PREVおよび作業事後条件AFTERの一例を示す図。 実施の形態1における再帰評価処理(S330)のフローチャート。 実施の形態1における再帰評価処理(S330)を実行後の作業事前条件PREVおよび作業事後条件AFTERの一例を示す図。 実施の形態1における矛盾評価処理(S340)のフローチャート。 実施の形態1における矛盾評価処理(S340)を実行後の作業事前条件PREVおよび作業事後条件AFTERの一例を示す図。 実施の形態1における変更前の詳細条件ファイル195の構成を示す図。 実施の形態1における変更前のinvoke関数(void)の詳細条件リスト196を示す図。 実施の形態1における変更前のfunc関数(x=0)の詳細条件リスト196を示す図。 実施の形態1における変更前のarraySize関数(x=0)の詳細条件リスト196を示す図。 実施の形態1における変更前のarraySize関数(x=1)の詳細条件リスト196を示す図。 実施の形態1における変更前のarraySize関数(x=2)の詳細条件リスト196を示す図。 実施の形態1における変更前のarraySize関数(x=3)の詳細条件リスト196を示す図。 実施の形態1における変更前のarraySize関数(x=4)の詳細条件リスト196を示す図。 実施の形態1における比較処理(S130)のフローチャート。 実施の形態1における変更前の結合条件ファイル197を示す図。 実施の形態1における変更前のfunc関数の結合条件リスト198を示す図。 実施の形態1における変更後のソースコード101を示す図。 実施の形態1における変更後の結合条件ファイル197を示す図。 実施の形態1における変更後のfunc関数の結合条件リスト198を示す図。 実施の形態1における変動リスト199を示す図。 実施の形態2におけるソースコード比較装置100の構成図。 実施の形態2における再帰解析処理(S300)のフローチャート。 実施の形態2における除外リスト103を示す図。 実施の形態2における変更前のinvoke関数(void)の詳細条件リスト196を示す図。 実施の形態2における変更前のfunc関数(x=0)の詳細条件リスト196を示す図。 実施の形態3におけるソースコード比較装置100の構成図。 実施の形態3における再帰解析処理(S300)のフローチャート。 実施の形態3における追加評価処理(S350)のフローチャート。 実施の形態3における追加リスト104を示す図。 実施の形態3における変更前のinvoke関数(void)の詳細条件リスト196を示す図。 実施の形態3における変更前のfunc関数(x=0)の詳細条件リスト196を示す図。 実施の形態におけるソースコード比較装置100のハードウェア構成図。
実施の形態1.
変更前のソースコードと変更後のソースコードとを比較するソースコード比較装置100について、図1から図34に基づいて説明する。
***構成の説明***
図1に基づいて、ソースコード比較装置100の構成について説明する。
ソースコード比較装置100は、プロセッサ901とメモリ902と補助記憶装置903といったハードウェアを備えるコンピュータである。プロセッサ901は、信号線を介して他のハードウェアと接続されている。
プロセッサ901は、プロセッシングを行うIC(Integrated Circuit)であり、他のハードウェアを制御する。具体的には、プロセッサ901は、CPU、DSPまたはGPUである。CPUはCentral Processing Unitの略称であり、DSPはDigital Signal Processorの略称であり、GPUはGraphics Processing Unitの略称である。
メモリ902は揮発性の記憶装置である。メモリ902は、主記憶装置またはメインメモリとも呼ばれる。具体的には、メモリ902はRAM(Random Access Memory)である。
補助記憶装置903は不揮発性の記憶装置である。具体的には、補助記憶装置903は、ROM、HDDまたはフラッシュメモリである。ROMはRead Only Memoryの略称であり、HDDはHard Disk Driveの略称である。
ソースコード比較装置100は、簡略解析部110とエントリ解析部120と詳細解析部130と比較部140といった「部」を機能構成の要素として備える。「部」の機能はソフトウェアで実現される。「部」の機能については後述する。
補助記憶装置903には、「部」の機能を実現するプログラムが記憶されている。「部」の機能を実現するプログラムは、メモリ902にロードされて、プロセッサ901によって実行される。
さらに、補助記憶装置903にはOS(Operating System)が記憶されている。OSの少なくとも一部は、メモリ902にロードされて、プロセッサ901によって実行される。
つまり、プロセッサ901は、OSを実行しながら、「部」の機能を実現するプログラムを実行する。
「部」の機能を実現するプログラムを実行して得られるデータは、メモリ902、補助記憶装置903、プロセッサ901内のレジスタまたはプロセッサ901内のキャッシュメモリといった記憶装置に記憶される。これらの記憶装置は、データを記憶する記憶部として機能する。
なお、ソースコード比較装置100が複数のプロセッサ901を備えて、複数のプロセッサ901が「部」の機能を実現するプログラムを連携して実行してもよい。
メモリ902には、ソースコード比較装置100で使用、生成、入出力または送受信されるデータが記憶される。
具体的には、メモリ902には次のようなデータが記憶される。メモリ902には、変更前のソースコード101および変更後のソースコード101が記憶される。メモリ902には、変更前のソースコード101に対応する簡略条件ファイル191と依存リスト193とエントリ関数リスト194と詳細条件ファイル195と結合条件ファイル197が記憶される。メモリ902には、変更後のソースコード101に対応する簡略条件ファイル191と依存リスト193とエントリ関数リスト194と詳細条件ファイル195と結合条件ファイル197が記憶される。メモリ902には変動リスト199が記憶される。メモリ902に記憶されるデータの内容については後述する。
プロセッサ901とメモリ902と補助記憶装置903とをまとめたハードウェアを「プロセッシングサーキットリ」という。
「部」は「処理」または「工程」に読み替えてもよい。「部」の機能はファームウェアで実現してもよい。
「部」の機能を実現するプログラムは、磁気ディスク、光ディスクまたはフラッシュメモリ等の不揮発性の記憶媒体に記憶することができる。
***動作の説明***
ソースコード比較装置100の動作はソースコード比較方法に相当する。また、ソースコード比較方法の手順はソースコード比較プログラムの手順に相当する。
図2に基づいて、ソースコード比較方法について説明する。
ステップS110は、変更前のソースコード101に対する解析処理(S200)である。
ステップS110において、ソースコード比較装置100は、変更前のソースコード101に対して、解析処理(S200)を行う。
ソースコード101は関数102毎のソースコードを含んでいる。つまり、ソースコード101は複数の関数102を含んでいる。関数102は1つ以上の命令文を含んでいる。
図3に基づいて、解析処理(S200)を説明する。
ステップS210は簡略解析処理である。
ステップS210において、簡略解析部110は、ソースコード101に基づいて、簡略条件ファイル191を生成する。
簡略条件ファイル191は、ソースコード101に含まれる関数102毎の簡略条件リスト192を含んだファイルである。
簡略条件リスト192は、関数102に含まれる実行文と、実行文が実行される前に成り立つ簡略事前条件と、実行文が実行された後に成り立つ簡略事後条件と、が互いに対応付けられたリストである。
実行文は、関数102に含まれる命令文のうちの処理の内容が指定された命令文である。具体的には、演算式が指定された演算文、変数に値を代入するための代入文および関数を呼び出すための呼び出し文といった命令文が実行文である。一方、変数を定義するための定義文および処理の流れを制御するための制御文といった命令文は実行文ではない。但し、制御文の中で指定された演算文、代入文および呼び出し文は実行文である。具体的な制御文はFOR文およびIF文などである。FOR文は、同じ内容の処理を繰り返すためのループ文の1つである。IF文は、条件に応じて処理を分岐するための条件分岐文の1つある。
具体的には、簡略解析部110は、ホーア論理または抽象解釈に基づいたアルゴリズムでソースコード101を処理することによって、簡略条件ファイル191を生成する。ホーア論理および抽象解釈は、事前条件および事後条件を求める手法である。
図4に示すソースコード101に対して簡略解析処理(S210)が実行された場合、図5および図6に示すような簡略条件ファイル191が生成される。
図4のソースコード101は、invoke関数とfunc関数とarraySize関数とのそれぞれの変更前のソースコードを含んでいる。
図5の簡略条件ファイル191は、invoke関数とfunc関数とarraySize関数とのそれぞれの簡略条件リスト192を含んでいる。func関数の簡略条件リスト192の全体は、図6に示している。
簡略条件リスト192の第1列は、実行文を識別する番号を示している。ソースコード101の図には、この番号を付している。
簡略条件リスト192の第2列は、実行文を示している。
簡略条件リスト192の第3列は、事前条件と事後条件とを区別している。
簡略条件リスト192の第4列は、事前条件または事後条件を示している。事前条件および事後条件は、1つの条件式または複数の条件式の結合で表される。事前条件および事後条件を表す1つの条件式または複数の条件式の結合は、論理式ともいう。
簡略条件リスト192における事前条件および事後条件は、簡略事前条件および簡略事後条件に相当する。
図3に戻り、ステップS220を説明する。
ステップS220はエントリ解析処理である。
ステップS220において、エントリ解析部120は、ソースコード101からエントリ関数を特定してエントリ関数リスト194を生成する。
エントリ関数リスト194は、エントリ関数を示すファイルである。エントリ関数は、少なくともいずれかの関数を呼び出すがいずれの関数からも呼び出されない関数である。
図7に基づいて、エントリ解析処理(S220)を説明する。
ステップS221において、エントリ解析部120は、依存リスト193を生成する。
依存リスト193は、関数を呼び出す関数である依存元関数と依存元関数から呼び出される関数である依存先関数とを互いに対応付けたリストである。
具体的には、エントリ解析部120は、関数102毎に次のような処理を行うことによって、依存リスト193を生成する。
まず、エントリ解析部120は、関数102のソースコードに対して構文解析および文字解析を行うことによって、関数102のソースコードから呼び出し文を抽出する。
次に、エントリ解析部120は、抽出した呼び出し文に対して構文解析および文字解析を行うことによって、抽出した呼び出し文によって呼び出される関数を特定する。
そして、エントリ解析部120は、関数102を依存元関数として依存リスト193に登録し、特定した関数を依存先関数として依存リスト193に登録する。
なお、販売されているツールがエントリ解析部120として用いられてもよい。具体的なツールは、[非特許文献1]に挙げたウェブページで紹介されているツールである。このツールは、ソースコードが入力されると依存リストを生成して出力する。
図4のソースコード101に対してステップS221の処理が行われることによって、図8の依存リスト193が生成される。
図7に戻り、ステップS222から説明を続ける。
ステップS222において、エントリ解析部120は、依存リスト193を複製する。複製された依存リスト193はエントリ関数リスト194の元になる。
ステップS223において、エントリ解析部120は、複製された依存リスト193から、未選択の依存元関数を1つ選択する。
具体的には、エントリ解析部120は、複製された依存リスト193の先頭から順番に依存元関数を1つずつ選択する。
ステップS224において、エントリ解析部120は、選択された依存元関数と同じ名称の依存先関数が複製された依存リスト193に含まれているか判定する。
選択された依存元関数と同じ名称の依存先関数が複製された依存リスト193に含まれている場合、処理はステップS225に進む。
選択された依存元関数と同じ名称の依存先関数が複製された依存リスト193に含まれていない場合、処理はステップS226に進む。
ステップS225において、エントリ解析部120は、選択された依存元関数を含んだ行を、複製された依存リスト193から削除する。
ステップS226において、エントリ解析部120は、未選択の依存元関数があるか判定する。
未選択の依存元関数がある場合、処理はステップS223に戻る。
未選択の依存元関数がない場合、処理はステップS227に進む。
ステップS227において、エントリ解析部120は、複製された依存リスト193から、依存先関数の列を削除する。
ステップS228において、エントリ解析部120は、依存元関数の欄の名称をエントリ関数に変更する。
図8の依存リスト193に対してステップS222からステップS228までの処理が行われることによって、図9のエントリ関数リスト194が生成される。
図3に戻り、ステップS230を説明する。
ステップS230は詳細解析処理である。
ステップS230において、詳細解析部130は、ソースコード101と簡略条件ファイル191とエントリ関数リスト194とに基づいて、詳細条件ファイル195を生成する。
詳細条件ファイル195は、ソースコード101に含まれる関数102と関数102が呼び出されるときに成り立つ呼出条件との組毎の詳細条件リスト196を含んだファイルである。
詳細条件リスト196は、関数102に含まれる実行文と、呼出条件の下で実行文が実行される前に成り立つ詳細事前条件と、呼出条件の下で実行文が実行された後に成り立つ詳細事後条件と、が互いに対応付けられたリストである。
図10に基づいて、詳細解析処理(S230)を説明する。
ステップS231において、詳細解析部130は、エントリ関数リスト194から、未選択のエントリ関数を1つ選択する。
具体的には、詳細解析部130は、エントリ関数リスト194の先頭から順番にエントリ関数を1つずつ選択する。
ステップS300は再帰解析処理である。
ステップS300において、詳細解析部130は、エントリ関数を最初の対象関数にして、エントリ関数の詳細条件リスト196と、エントリ関数の実行に伴って呼び出される関数の詳細条件リスト196とを生成する。
再帰解析処理(S300)については別途説明する。
ステップS232において、詳細解析部130は、未選択のエントリ関数があるか判定する。
未選択のエントリ関数がある場合、処理はステップS231に戻る。
未選択のエントリ関数がない場合、詳細解析処理(S230)は終了する。
図11に基づいて、再帰解析処理(S300)を説明する。
ステップS301において、詳細解析部130は、対象関数が呼び出されたときに成り立つ呼出条件を特定する。対象関数は、詳細条件リスト196が生成される対象となる関数102である。
具体的な呼出条件は、当該関数に引数として渡される値および当該関数で使用されるグローバル変数に設定される値である。
対象関数がエントリ関数である場合、詳細解析部130は、エントリ関数のソースコードを構文解析および文字解析することによって、エントリ関数の呼出条件を特定する。
対象関数がエントリ関数以外の関数である場合、詳細解析部130は、当該関数を呼び出す呼び出し文を構文解析および文字解析することによって、当該関数に引数として渡される値を、当該関数の呼出条件として特定する。さらに、詳細解析部130は、当該関数および当該呼び出し文を含んだ関数を構文解析および文字解析することによって、当該関数で使用されるグローバル変数に設定される値を、当該関数の呼出条件として特定する。
ステップS302において、詳細解析部130は、対象関数とステップS301で特定した呼出条件との組に対応する詳細条件リスト196が生成済みであるか判定する。
当該組に対応する詳細条件リスト196が生成済みである場合、再帰解析処理(S300)は終了する。
当該組に対応する詳細条件リスト196が生成済みでない場合、処理はステップS303に進む。
ステップS303において、詳細解析部130は、対象関数とステップS301で特定した呼出条件との組に対応付けて、空の詳細条件リスト196を生成する。
具体的には、詳細解析部130は、対象関数の名称と対象関数に引数として渡される値との組に対応付けて、空の詳細条件リスト196を生成する。
ステップS304において、詳細解析部130は、対象関数の簡略条件リスト192から、実行文を実行される順に選択する。選択される実行文を対象文とする。
具体的には、詳細解析部130は、対象関数の簡略条件リスト192の先頭から順に、実行文を1つずつ対象文として選択する。
ステップS305において、詳細解析部130は、対象関数の簡略条件リスト192から、対象文の簡略事前条件と対象文の簡略事後条件とを取得する。
そして、詳細解析部130は、対象文の簡略事前条件を作業事前条件PREVに設定し、対象文の簡略事後条件を作業事後条件AFTERに設定する。
作業事前条件PREVは、対象関数と当該呼出条件との組に対応する詳細条件リスト196に登録される対象文の詳細事前条件が設定される変数である。
作業事後条件AFTERは、対象関数と当該呼出条件との組に対応する詳細条件リスト196に登録される対象文の詳細事後条件が設定される変数である。
ステップS310は直前評価処理である。
ステップS310において、詳細解析部130は、対象文の前に実行される実行文である直前文が対象関数に含まれる場合、直前文の詳細事後条件を、対象関数と当該呼出条件との組に対応する詳細条件リスト196から取得する。そして、詳細解析部130は、直前文の詳細事後条件を作業事前条件PREVに追加する。
直前評価処理(S310)の詳細については別途説明する。
ステップS320は変数評価処理である。
ステップS320において、詳細解析部130は、特定の要素を含んだ条件が作業事前条件PREVまたは作業事後条件AFTERに含まれる場合、当該要素を、対象関数の呼出条件に含まれる値または直前文の詳細事後条件に含まれる値に置き換える。特定の要素とは、対象関数の呼出条件に含まれる値または直前文の詳細事後条件に含まれる値に置き換えられる要素である。
変数評価処理(S320)の詳細については別途説明する。
ステップS330は再帰評価処理である。
ステップS330において、詳細解析部130は、対象文が関数を呼び出すための実行文である場合、対象文によって呼び出される関数である呼び出し先関数について詳細条件リスト196を生成する。そして、詳細解析部130は、呼び出し先関数の詳細条件リスト196に基づいて呼び出し先関数が実行された後に成り立つ条件を特定し、特定した条件に作業事後条件AFTERに設定されている条件を置き換える。
再帰評価処理(S330)の詳細については別途説明する。
ステップS340は矛盾評価処理である。
ステップS340において、詳細解析部130は、作業事前条件PREVに矛盾があるか判定する。作業事前条件PREVに矛盾があると判定した場合、詳細解析部130は、作業事前条件PREVに設定された条件と作業事後条件AFTERに設定された条件とを削除する。
矛盾評価処理(S340)の詳細については別途説明する。
ステップS306において、詳細解析部130は、作業事前条件PREVに設定されている条件を、対象文の詳細事前条件として、ステップS303で生成された詳細条件リスト196に登録する。
さらに、詳細解析部130は、作業事後条件AFTERに設定されている条件を、対象文の詳細事後条件として、ステップS303で生成された詳細条件リスト196に登録する。
ステップS307において、詳細解析部130は、対象文として選択されていない実行文があるか判定する。
対象文として選択されていない実行文がある場合、処理はステップS304に戻る。
対象文として選択されていない実行文がない場合、再帰解析処理(S300)は終了する。
図12に基づいて、直前評価処理(S310)を説明する。
ステップS311において、詳細解析部130は、対象関数に対象文に対する直前文があるか判定する。
具体的には、詳細解析部130は、対象関数のソースコードに対して構文解析および文字解析を行うことにより、対象関数に対象文に対する直前文があるか判定する。
対象文の直前が条件分岐文のブロックである場合、複数の直前文が存在する。具体的には、対象文の直前がIF文のブロックである場合、TRUE経路の最終の実行文と、ELSE経路の最終の実行文とが、直前文になる。TRUE経路とは、IF文で指定された条件が成り立つ場合に実行される処理である。ELSE経路とは、IF文で指定された条件が成り立たない場合に実行される処理である。
対象関数に対象文に対する直前文がある場合、処理はステップS312に進む。
対象関数に対象文に対する直前文がない場合、処理はステップS316に進む。
ステップS312において、詳細解析部130は、直前条件PAFTERに無条件φを設定する。
直前条件PAFTERは、直前文の詳細事後条件が設定される変数である。
無条件φは、成り立つ特定の条件がないことを意味する。
ステップS313において、詳細解析部130は、未選択の直前文を1つ選択する。
ステップS314において、詳細解析部130は、対象関数と当該呼出条件との組に対応する詳細条件リスト196から、選択した直前文の詳細事後条件を取得する。
そして、詳細解析部130は、取得された詳細事後条件を直前条件PAFTERに追加する。具体的には、詳細解析部130は、直前条件PAFTERに設定されている条件に、和集合を意味する記号と、取得された詳細事後条件とを付けたす。
取得された詳細事後条件が追加された後の直前条件PAFTERは、直前条件PAFTERに設定されていた条件と取得された詳細事後条件との和集合である。
ステップS315において、詳細解析部130は、未選択の直前文があるか判定する。
未選択の直前文がある場合、処理はステップS313に戻る。
未選択の直前文がない場合、処理はステップS317に進む。
ステップS316において、詳細解析部130は、直前条件PAFTERに対象関数の呼出条件を設定する。
ステップS317において、詳細解析部130は、直前条件PAFTERが無条件φであるか判定する。
直前条件PAFTERが無条件φでない場合、処理はステップS318に進む。
直前条件PAFTERが無条件φである場合、処理はステップS319に進む。
ステップS318において、詳細解析部130は、直前条件PAFTERを対象文の作業事前条件PREVに追加する。具体的には、詳細解析部130は、対象文の作業事前条件PREVに設定されている条件に、積集合を意味する記号と、直前条件PAFTERに設定されている条件とを付け足す。
直前条件PAFTERが追加された後の作業事前条件PREVは、作業事前条件PREVに設定されていた条件と直前条件PAFTERに設定されていた条件との積集合である。
ステップS319において、詳細解析部130は、対象文の作業事前条件PREVと対象文の作業事後条件AFTERとを無条件φに更新する。
図6に示したfunc関数の簡略条件リスト192のうちの(4)の実行文を対象文として、直前評価処理(S310)が実行された後の作業事前条件PREVおよび作業事後条件AFTERを、図13に示す。func関数の呼出条件は「x=0」である。(4)の実行文の直前文は(2)の実行文である。図13の下線部分が、直前文の詳細事後条件として追加された条件である。
図14に基づいて、変数評価処理(S320)を説明する。
ステップS321において、詳細解析部130は、特定の条件が対象文の作業事前条件PREVまたは作業事後条件AFTERに含まれるか判定する。
特定の条件とは、特定の要素を含んだ条件である。
特定の要素とは、対象関数の呼出条件に含まれる値または直前文の詳細事後条件に含まれる値に置き換えられる要素である。
具体的には、詳細解析部130は以下のようにして判定を行う。
詳細解析部130は、対象関数と当該呼出条件との組に対応する詳細条件リスト196から、直前文の詳細事後条件を取得する。
そして、詳細解析部130は、対象文の作業事前条件PREVまたは作業事後条件AFTERに含まれる条件毎に次のような処理を行う。
詳細解析部130は、条件を表す条件式の左辺に含まれる変数を取得し、取得した変数と同じ名称の変数が左辺に含まれる条件式を、対象関数の呼出条件および直前文の詳細事後条件から検索する。
当該条件式が対象関数の呼出条件または直前文の詳細事後条件に含まれる場合、詳細解析部130は、特定の条件が対象文の作業事前条件PREVまたは作業事後条件AFTERに含まれる、と判定する。
特定の要素を含んだ条件が作業事前条件PREVまたは作業事後条件AFTERに含まれる場合、処理はステップS322に進む。
特定の要素を含んだ条件が作業事前条件PREVまたは作業事後条件AFTERに含まれない場合、変数評価処理(S320)は終了する。
ステップS322において、詳細解析部130は、特定の要素を、対象関数の呼出条件に含まれる値または直前文の詳細事後条件に含まれる値に置き換える。
特定の条件の右辺にある変数または不定値が特定の要素となる。不定値は変数が取り得る全ての値である。簡略条件リスト192または詳細条件リスト196の図に記されたundefinedは不定値を意味している。
対象関数の呼出条件または直前文の詳細事後条件に含まれる値のうちステップS321で検索された当該条件式の右辺にある値が、特定の要素を置き換える値となる。
図6に示したfunc関数の簡略条件リスト192のうちの(1)の実行文を対象文として、変数評価処理(S320)が行われた後の作業事前条件PREVおよび作業事後条件AFTERを、図15に示す。図15の下線部分が置き換えられた部分である。
図4において、invoke関数から呼び出されるfunc関数の引数xの値は0である。つまり、func関数の呼出条件の1つは「x=0」である。そのため、図6の(1)において特定の条件に相当する「x=undefined」は、図15において「x=0」に置き換えられる。「x=undefined」において、「x」が特定の条件の左辺に含まれる変数に相当し、「undefined」が特定の要素に相当する。
図16に基づいて、再帰評価処理(S330)を説明する。
ステップS331において、詳細解析部130は、対象文が呼び出し文であるか判定する。呼び出し文は、関数を呼び出すための実行文である。
具体的には、詳細解析部130は、対象文を構文解析することにより、対象文の構文が呼び出し文の構文であるか判定する。対象文の構文が呼び出し文の構文である場合、詳細解析部130は、対象文が呼び出し文であると判定する。
対象文が呼び出し文である場合、処理はステップS332に進む。
対象文が呼び出し文でない場合、再帰評価処理(S330)は終了する。
ステップS332において、詳細解析部130は、対象文で呼び出される関数である呼び出し先関数を新たな対象関数として、再帰解析処理(S300)を行う。
この再帰解析処理(S300)により、呼び出し先関数と対象文における呼び出し先関数の引数との組に対応する詳細条件リスト196が生成される。
ステップS333において、詳細解析部130は、ステップS332で生成された詳細条件リスト196に基づいて、呼び出し先関数が実行された後に成り立つ条件を特定する。そして、詳細解析部130は、対象文の作業事後条件AFTERに設定されている条件を、特定した条件に置き換える。
具体的には、詳細解析部130は以下のような処理を行う。
まず、詳細解析部130は、ステップS332で生成された詳細条件リスト196に含まれる最終の実行文がreturn文であるか判定する。当該最終の実行文がreturn文である場合、return文の詳細事後条件から、呼び出し先関数の戻り値を取得する。
次に、詳細解析部130は、ステップS332で生成された詳細条件リスト196から、呼び出し先関数の最終の実行文の詳細事後条件を取得する。
そして、詳細解析部130は、対象文の作業事後条件AFTERに設定されている条件を、呼び出し先関数の戻り値と呼び出し先関数の最終の実行文の詳細事後条件との積集合に置き換える。
図5に示したinvoke関数の簡略条件リスト192のうちの(1)の実行文を対象文として、再帰評価処理(S330)が行われた後の作業事前条件PREVおよび作業事後条件AFTERを、図17に示す。図17の下線部分が置き換えられた部分である。
図5の(1)において、対象文は「c=func(c)」であり、対象文の簡略事前条件は「c=0」である。この場合、呼び出し先関数はfunc関数であり、呼出条件は「c=0」である。この呼出条件でfunc関数が実行された場合、func関数のreturn文で得られる戻り値は「c=1」である。そのため、図17において、作業事後条件AFTERは、「c=1」を含んだ条件に置き換えられている。図17の作業事後条件AFTERにおいて、「c=1∩」の後ろに含まれる条件が、func関数の最終の実行文(return文)の詳細事後条件である。
図18に基づいて、矛盾評価処理(S340)を説明する。
ステップS341において、詳細解析部130は、対象文の作業事前条件PREVに矛盾があるか判定する。
具体的には、詳細解析部130は、同じ名称の変数が左辺の要素として含まれる条件式が作業事前条件PREVに複数あるか判定する。同じ名称の変数が左辺の要素として含まれる条件式が作業事前条件PREVに複数ある場合、詳細解析部130は、当該複数の条件式の演算子および右辺を比較する。そして、演算子および右辺が合致しない場合、詳細解析部130は、作業事前条件PREVに矛盾があると判定する。
対象文の作業事前条件PREVに矛盾がある場合、処理はS342に進む。
対象文の作業事前条件PREVに矛盾がない場合、矛盾評価処理(S340)は終了する。
図19に、矛盾がある作業事前条件PREVの例を示す。
図19において、作業事前条件PREVには、変数xが左辺の要素として含まれる条件式が2つある。一方の条件式は「x≠0」であり、他方の条件式は「x=0」であり、両方の条件式は論理積で結合されている。つまり、両方の条件式を結合して得られる条件式は「x=0∩x≠0」である。一方の条件式の演算子および右辺は「≠0」であり、他方の条件式の演算子および右辺は「=0」であるため、両者は合致しない。したがって、この作業事前条件PREVには矛盾がある、という判定がなされる。
図18に戻り、ステップS342を説明する。
ステップS342において、詳細解析部130は、対象文の作業事前条件PREVに設定されている条件と、対象文の作業事後条件AFTERに設定されている条件とのそれぞれを、無条件φに更新する。対象文の作業事前条件PREVが矛盾しているということは、対象関数が実行されても対象文には到達しないためである。
上記において、解析処理(S200)の詳細について説明した。
解析処理(S200)により、ソースコード101に含まれる関数と関数の呼出条件との組毎の詳細条件リスト196が生成される。
図4に示した変更前のソースコード101に対して解析処理(S200)を行うことによって得られる詳細条件ファイル195の構成を、図20に示す。
図20において、詳細条件ファイル195は、invoke関数と呼出条件(void)との組に対応する詳細条件リスト196を含んでいる。また、詳細条件ファイル195は、func関数と呼出条件(x=0)との組に対応する詳細条件リスト196を含んでいる。さらに、詳細条件ファイル195は、arraySize関数と呼出条件(x=0〜4)との組に対応する詳細条件リスト196を含んでいる。「0〜4」は、呼出条件となる引数の値域である。値域は、取り得る値の範囲である。
図21に、invoke関数と呼出条件(void)との組に対応する詳細条件リスト196を示す。
図22に、func関数と呼出条件(x=0)との組に対応する詳細条件リスト196を示す。
図23に、arraySize関数と呼出条件(x=0)との組に対応する詳細条件リスト196を示す。
図24に、arraySize関数と呼出条件(x=1)との組に対応する詳細条件リスト196を示す。
図25に、arraySize関数と呼出条件(x=2)との組に対応する詳細条件リスト196を示す。
図26に、arraySize関数と呼出条件(x=3)との組に対応する詳細条件リスト196を示す。
図27に、arraySize関数と呼出条件(x=4)との組に対応する詳細条件リスト196を示す。
詳細条件リスト196の第1列は、実行文を識別する番号を示している。
詳細条件リスト196の第2列は、実行文を示している。
詳細条件リスト196の第3列は、事前条件と事後条件とを区別している。
詳細条件リスト196の第4列は、事前条件または事後条件を示している。詳細条件リスト196における事前条件および事後条件は、詳細事前条件および詳細事後条件に相当する。
図2に戻り、ステップS120から説明を続ける。
ステップS120は、変更後のソースコード101に対する解析処理(S200)である。
ステップS120において、ソースコード比較装置100は、変更後のソースコード101に対して、解析処理(S200)を行う。
ステップS130は比較処理である。
ステップS130において、比較部140は、変更前の詳細条件リスト196と、変更後の詳細条件リスト196とに基づいて、変動リスト199を生成する。
変更前の詳細条件リスト196は、変更前のソースコード101に対して生成された詳細条件リスト196である。
変更後の詳細条件リスト196は、変更後のソースコード101に対して生成された詳細条件リスト196である。
変動リスト199は、変更前のソースコード101と変更後のソースコード101との間で詳細事前条件と詳細事後条件との少なくともいずれかが異なる実行文を特定する情報を含んだリストである。
図28に基づいて、比較処理(S130)を説明する。
ステップS131において、比較部140は、変更前のソースコード101および変更後のソースコード101から、未選択の関数を1つ選択する。
ステップS132において、比較部140は、選択した関数の変更前の詳細条件リスト196を結合して、選択した関数の変更前の結合条件リスト198を生成する。
さらに、比較部140は、選択した関数の変更後の詳細条件リスト196を結合して、選択した関数の変更後の結合条件リスト198を生成する。
結合条件リスト198は、ソースコード101に含まれる関数毎に、関数に含まれる実行文と、実行文が実行される前に成り立つ結合事前条件と、実行文が実行された後に成り立つ結合事後条件と、が互いに対応付けられたリストである。
具体的には、比較部140は、詳細条件リスト196に含まれる実行文毎に、詳細事前条件の和集合と詳細事後条件の和集合とを生成する。そして、比較部140は、実行文毎の詳細事前条件の和集合を実行文毎の結合事前条件として結合条件リスト198に登録し、実行文毎の詳細事後条件の和集合を実行文毎の結合事後条件として結合条件リスト198に登録する。
図21〜図27の詳細条件リスト196から得られる結合条件リスト198を含んだ結合条件ファイル197を、図29に示す。
図29の結合条件ファイル197は、invoke関数とfunc関数とarraySize関数とのそれぞれの結合条件リスト198を含んでいる。func関数の結合条件リスト198の全体は、図30に示している。invoke関数の結合条件リスト198の中身は、invoke関数と呼出条件(void)との組に対応する詳細条件リスト196の中身と同じである。func関数の結合条件リスト198の中身は、func関数と呼出条件(x=0)との組に対応する詳細条件リスト196の中身と同じである。
結合条件リスト198の第1列は、実行文を識別する番号を示している。
結合条件リスト198の第2列は、実行文を示している。
結合条件リスト198の第3列は、事前条件と事後条件とを区別している。
結合条件リスト198の第4列は、事前条件または事後条件を示している。結合条件リスト198における事前条件および事後条件は、結合事前条件および結合事後条件に相当する。
図31に、変更後のソースコード101を示す。図31のソースコード101において、下線が引かれた部分が変更された部分である。
図31のソースコード101を基にして得られる結合条件ファイル197を、図32に示す。
図32の結合条件ファイル197は、invoke関数とfunc関数とarraySize関数とのそれぞれの結合条件リスト198を含んでいる。func関数の結合条件リスト198の全体は、図33に示している。
図28に戻り、ステップS133から説明を続ける。
ステップS133において、比較部140は、変更前の結合条件リスト198または変更後の結合条件リスト198から、未選択の実行文を1つ選択する。
ステップS134において、比較部140は、選択した実行文の結合事前条件と結合事後条件とを、変更前の結合条件リスト198と変更後の結合条件リスト198とのそれぞれから取得する。
そして、比較部140は、比較部140は、変更前の結合条件リスト198から取得した結合事前条件と、変更後の結合条件リスト198から取得した結合事前条件とを比較する。さらに、比較部140は、変更前の結合条件リスト198から取得した結合事後条件と、変更後の結合条件リスト198から取得した結合事後条件とを比較する。
ステップS135において、比較部140は、比較した結合事前条件が不一致であるか判定する。さらに、比較部140は、比較した結合事後条件が不一致であるか判定する。
比較した結合事前条件と比較した結合事後条件との少なくともいずれかが不一致である場合、処理はステップS136に進む。
比較した結合事前条件と比較した結合事後条件とのいずれも不一致でない場合、処理はステップS137に進む。
ステップS136において、比較部140は、選択した実行文に関する情報を変動リスト199に追加する。
図29の結合条件ファイル197に含まれる結合条件リスト198と図32の結合条件ファイル197に含まれる結合条件リスト198とを比較して得られる変動リスト199を、図34に示す。
図34において、変動リスト199は、ファイル名の欄と、行番号の欄と、変更前の事前条件の欄と、変更後の事前条件の欄と、変更前の事後条件の欄と、変更後の事後条件の欄とを備えている。
ファイル名の欄は、当該実行文を含んだ関数のソースコードが記載されたファイルの名称を示す。
行番号の欄は、当該関数の変更後のソースコードにおいて当該実行文が記載されている行の番号を示す。
変更前の事前条件の欄は、当該実行文の変更前の結合事前条件を示す。
変更後の事前条件の欄は、当該実行文の変更後の結合事前条件を示す。
変更前の事後条件の欄は、当該実行文の変更前の結合事後条件を示す。
変更後の事後条件の欄は、当該実行文の変更後の結合事後条件を示す。
図28に戻り、ステップS137から説明を続ける。
ステップS137において、比較部140は、未選択の実行文があるか判定する。
未選択の実行文がある場合、処理はステップS133に戻る。
未選択の実行文がない場合、処理はステップS138に進む。
ステップS138において、比較部140は、未選択の関数があるか判定する。
未選択の関数がある場合、処理はステップS131に戻る。
未選択の関数がない場合、比較処理(S130)は終了する。
***実施の形態1の効果***
ソフトウェアが変更される場合に変更の影響が及ぶ箇所を、関数単位ではなく実行文単位および行単位で、目視ではなく自動で特定することができる。
実施の形態2.
除外の対象となる変数を含んだ条件を詳細事前条件および詳細事後条件から除外する形態について、図35から図39に基づいて説明する。但し、実施の形態1と重複する説明は省略または簡略する。
***構成の説明***
図35に基づいて、ソースコード比較装置100の構成について説明する。
ソースコード比較装置100の構成は、実施の形態1と同じである。
但し、メモリ902には、除外リスト103が記憶される。
除外リスト103は、除外の対象となる変数のリストである。
***動作の説明***
ソースコード比較方法の処理の流れは、実施の形態1と同じである。
但し、再帰解析処理(S300)の一部が、実施の形態1と異なる。
図36に基づいて、再帰解析処理(S300)を説明する。
再帰解析処理(S300)は、ステップS308を含んでいる。他のステップは、実施の形態1と同じである。
ステップS308において、詳細解析部130は、対象関数の詳細条件リスト196に含まれる詳細事前条件および詳細事後条件から、除外の対象となる変数を含んだ条件を除外する。
具体的には、詳細解析部130は、除外リスト103に示される変数毎に以下の処理を行う。除外リスト103に示される変数を除外変数という。
詳細解析部130は、除外変数を含んだ詳細事前条件および除外変数を含んだ詳細事後条件を、詳細条件リスト196から検索する。詳細事前条件と詳細事後条件とを総称して、詳細条件という。詳細条件は、1つ以上の条件式で構成される。複数の条件式は、論理和を意味する結合記号(∪)または論理積を意味する結合記号(∩)を用いて結合される。
除外変数を含んだ詳細条件が見つかった場合、詳細解析部130は、当該詳細条件に含まれる条件式を結合記号を区切りにして分離することによって、除外変数を含んだ条件式を特定する。
そして、詳細解析部130は、特定した条件式と特定した条件式の前に付されている記号とを、除外変数を含んだ詳細条件から削除する。
図37に、除外リスト103を示す。
図37の除外リスト103において、除外変数は「array」である。
図21の詳細条件リスト196から除外変数(array)を含んだ条件を除外して得られる詳細条件リスト196を、図38に示す。
図22の詳細条件リスト196から除外変数を含んだ条件を除外して得られる詳細条件リスト196を、図39に示す。
図21および図38はinvoke関数の詳細条件リスト196であり、図22および図39はfunc関数の詳細条件リスト196である。
invoke関数から呼び出されるfunc関数の詳細条件リスト196から除外変数を含んだ条件が除外されることに伴って、func関数の呼び出し元であるinvoke関数の詳細条件リスト196から除外変数を含んだ条件が除外される。
***実施の形態2の効果***
詳細条件リスト196に含まれる事前条件および事後条件を簡潔にすることができる。これに伴い、変動リスト199に含まれる事前条件および事後条件が簡潔になる。その結果、変更の影響が及ぶ箇所を特定する精度が向上する。
グローバル変数の中には、特定の関数からのみ参照される変数、または、値の一時格納場所として利用されるものがある。これらのグローバル変数が事前条件および事後条件に含まれる場合、変動リスト199において、事前条件の論理式記述および事後条件の論理式記述が多くなる。そして、不要なグローバル変数の値域の変動が変更影響箇所として表れる可能性がある。
一方、実施の形態2では、特定のグローバル変数が事前条件および事後条件から除外されるため、変動リスト199において、事前条件の論理式記述および事後条件の論理式記述が削減される。これにより、特定される変更影響範囲の精度を高めることができる。
実施の形態3.
追加の対象となる標準関数についての引数の条件を詳細事後条件に追加する形態について、図40から図45に基づいて説明する。但し、実施の形態1と重複する説明は省略または簡略する。
***構成の説明***
図40に基づいて、ソースコード比較装置100の構成について説明する。
ソースコード比較装置100の構成は、実施の形態1と同じである。
但し、メモリ902には、追加リスト104が記憶される。
追加リスト104は、追加の対象となる標準関数のリストである。
標準関数は、ソースコード101に含まれる関数とは別の関数であって、標準で用意されている関数である。具体的な標準関数は、動的にメモリを確保するためのmalloc関数である。
***動作の説明***
ソースコード比較方法の処理の流れは、実施の形態1と同じである。
但し、再帰解析処理(S300)の一部が、実施の形態1と異なる。
図41に基づいて、再帰解析処理(S300)を説明する。
再帰解析処理(S300)は、ステップS350を含んでいる。他のステップは、実施の形態1と同じである。
ステップS350は追加評価処理である。
ステップS350において、詳細解析部130は、対象文が、追加の対象となる標準関数を呼び出すための実行文である場合、標準関数の引数について成り立つ条件を、対象文の作業事後条件AFTERに追加する。
図42に基づいて、追加評価処理(S350)を説明する。
ステップS351において、詳細解析部130は、対象文が追加関数文であるか判定する。追加関数文は、追加の対象となる標準関数である追加関数を呼び出すための実行文である。
具体的には、詳細解析部130は、追加リスト104に示される標準関数の名称が対象文に含まれるか判定する。追加リスト104に示される標準関数の名称が対象文に含まれる場合、詳細解析部130は、対象文が追加関数文である、と判定する。
対象文が追加関数文である場合、処理はステップS352に進む。
対象文が追加関数文でない場合、追加評価処理(S350)は終了する。
ステップS352において、詳細解析部130は、対象文と対象文の作業事前条件PREVとに基づいて、追加関数の引数について成り立つ条件を特定する。
そして、詳細解析部130は、特定した条件を、対象文の作業事後条件AFTERに追加する。
具体的には、詳細解析部130は以下のような処理を行う。
詳細解析部130は、対象文から追加関数の引数を取得する。
追加関数の引数が変数である場合、詳細解析部130は、その変数を左辺の要素として含んだ条件式が、対象文の作業事前条件PREVに含まれるか判定する。
当該条件式が対象文の作業事前条件PREVに含まれる場合、詳細解析部130は、追加関数の引数である変数を当該条件式の右辺の値に置き換える。
次に、詳細解析部130は、追加関数の引数である変数または値が指定された追加条件を生成する。
次に、詳細解析部130は、対象文の作業事後条件AFTERに設定されている条件と追加条件との積集合を生成する。
そして、詳細解析部130は、対象文の作業事後条件AFTERに設定されている条件を、生成した積集合に置き換える。
図43に、追加リスト104を示す。
図43の追加リスト104において、追加関数は「malloc」である。
図21の詳細条件リスト196に追加関数(malloc)の引数についての条件を追加して得られる詳細条件リスト196を、図44に示す。図44の詳細条件リスト196において、下線の部分が追加された条件を示す部分である。
図22の詳細条件リスト196に追加関数の引数についての条件を追加して得られる詳細条件リスト196を、図45に示す。図45の詳細条件リスト196において、下線の部分が追加された条件を示す部分である。
図21および図44はinvoke関数の詳細条件リスト196であり、図22および図45はfunc関数の詳細条件リスト196である。
invoke関数から呼び出されるfunc関数の詳細条件リスト196に追加関数の引数についての条件が追加されることに伴って、func関数の呼び出し元であるinvoke関数の詳細条件リスト196に追加関数の引数についての条件が追加される。
***実施の形態3の効果***
詳細条件リスト196に含まれる事前条件および事後条件を拡張することができる。これに伴い、変動リスト199に含まれる事前条件および事後条件が拡張される。その結果、変更の影響が及ぶ箇所を特定する精度が向上する。
ドライバまたはAPI(Application Program Interface)などのように、呼出しパラメータの値域によって振る舞いが異なる関数がある。そのような関数が呼び出されるときの引数の値域が事前条件および事後条件に含まれない場合、関数の値域の変動が変更影響箇所として特定されない可能性がある。
一方、実施の形態3では、特定の関数の引数が事前条件および事後条件に追加されるため、変動リスト199において、事前条件の論理式記述および事後条件の論理式記述が拡張される。これにより、特定される変更影響範囲の精度を高めることができる。
***実施の形態の補足***
各実施の形態において、ソースコード比較装置100の機能はハードウェアで実現してもよい。
図46に、ソースコード比較装置100の機能がハードウェアで実現される場合の構成を示す。
ソースコード比較装置100は処理回路990を備える。処理回路990はプロセッシングサーキットリともいう。
処理回路990は、各実施の形態で説明した「部」の機能を実現する専用の電子回路である。この「部」には記憶部も含まれる。
具体的には、処理回路990は、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックIC、GA、ASIC、FPGAまたはこれらの組み合わせである。GAはGate Arrayの略称であり、ASICはApplication Specific Integrated Circuitの略称であり、FPGAはField Programmable Gate Arrayの略称である。
なお、ソースコード比較装置100が複数の処理回路990を備えて、複数の処理回路990が「部」の機能を連携して実現してもよい。
ソースコード比較装置100の機能は、ソフトウェアとハードウェアとの組み合わせで実現してもよい。つまり、「部」の一部をソフトウェアで実現し、「部」の残りをハードウェアで実現してもよい。
各実施の形態は、好ましい形態の例示であり、本発明の技術的範囲を制限することを意図するものではない。各実施の形態は、部分的に実施してもよいし、他の形態と組み合わせて実施してもよい。
フローチャート等を用いて説明した手順は、各実施の形態における方法およびプログラムの手順の一例である。
100 ソースコード比較装置、101 ソースコード、102 関数、103 除外リスト、104 追加リスト、110 簡略解析部、120 エントリ解析部、130 詳細解析部、140 比較部、191 簡略条件ファイル、192 簡略条件リスト、193 依存リスト、194 エントリ関数リスト、195 詳細条件ファイル、196 詳細条件リスト、197 結合条件ファイル、198 結合条件リスト、199 変動リスト、900 コンピュータ、901 プロセッサ、902 メモリ、903 補助記憶装置、990 処理回路。

Claims (10)

  1. 変更前のソースコードと変更後のソースコードとに対して、ソースコードに含まれる関数と関数が呼び出されたときに成り立つ呼出条件との組毎に、関数に含まれる実行文と、呼出条件の下で実行文が実行される前に成り立つ詳細事前条件と、呼出条件の下で実行文が実行された後に成り立つ詳細事後条件と、が互いに対応付けられた詳細条件リストを生成する詳細解析部と、
    変更前のソースコードに対して生成された詳細条件リストである変更前の詳細条件リストと、変更後のソースコードに対して生成された詳細条件リストである変更後の詳細条件リストとに基づいて、変更前のソースコードと変更後のソースコードとの間で詳細事前条件と詳細事後条件との少なくともいずれかが異なる実行文を特定する情報を含んだ変動リストを生成する比較部と
    を備えるソースコード比較装置。
  2. 前記ソースコード比較装置は、
    変更前のソースコードと変更後のソースコードとに対して、ソースコードに含まれる関数毎に、関数に含まれる実行文と、実行文が実行される前に成り立つ簡略事前条件と、実行文が実行された後に成り立つ簡略事後条件と、が互いに対応付けられた簡略条件リストを生成する簡略解析部を備え、
    前記詳細解析部は、
    変更前のソースコードと、変更前のソースコードに対して生成された簡略条件リストである変更前の簡略条件リストとに基づいて、変更前の詳細条件リストを生成し、
    変更後のソースコードと、変更後のソースコードに対して生成された簡略条件リストである変更後の簡略条件リストとに基づいて、変更後の詳細条件リストを生成する
    請求項1に記載のソースコード比較装置。
  3. 前記詳細解析部は、
    詳細条件リストが生成される対象となる関数である対象関数が呼び出されるときに成り立つ呼出条件を特定し、
    対象関数の簡略条件リストから、実行文を、実行される順に対象文として選択し、
    対象関数の簡略条件リストから、対象文の簡略事前条件と対象文の簡略事後条件とを、対象関数と当該呼出条件との組に対応する詳細条件リストに登録される対象文の詳細事前条件と対象文の詳細事後条件として取得し、
    対象文の前に実行される実行文である直前文が対象関数に含まれる場合、直前文の詳細事後条件を対象関数と当該呼出条件との組に対応する詳細条件リストから取得して、直前文の詳細事後条件を対象文の詳細事前条件に追加する
    請求項2に記載のソースコード比較装置。
  4. 前記詳細解析部は、
    対象関数の呼出条件に含まれる値または直前文の詳細事後条件に含まれる値に置き換えられる要素を含んだ条件が対象文の詳細事前条件または対象文の詳細事後条件に含まれる場合、当該要素を対象関数の呼出条件に含まれる値または直前文の詳細事後条件に含まれる値に置き換える
    請求項3に記載のソースコード比較装置。
  5. 前記詳細解析部は、
    対象文が関数を呼び出すための実行文である場合、対象文によって呼び出される関数である呼び出し先関数について詳細条件リストを生成し、呼び出し先関数の詳細条件リストに基づいて呼び出し先関数が実行された後に成り立つ条件を特定し、特定した条件に対象文の詳細事後条件を置き換える
    請求項3に記載のソースコード比較装置。
  6. 前記詳細解析部は、
    対象文が、追加の対象となる標準関数を呼び出すための実行文である場合、前記標準関数の引数について成り立つ条件を、対象文の詳細事後条件に追加する
    請求項3に記載のソースコード比較装置。
  7. 前記詳細解析部は、
    対象文の詳細事前条件に矛盾があるか判定し、対象文の詳細事前条件に矛盾があると判定した場合、対象文の詳細事前条件として求められた条件と対象文の詳細事後条件として求められた条件とを削除する
    請求項3に記載のソースコード比較装置。
  8. 前記ソースコード比較装置は、
    少なくともいずれかの関数を呼び出すがいずれの関数からも呼び出されない関数であるエントリ関数を特定するエントリ解析部を備え、
    前記詳細解析部は、
    前記エントリ関数を最初の対象関数にして、前記エントリ関数の詳細条件リストと、前記エントリ関数の実行に伴って呼び出される関数の詳細条件リストとを生成する
    請求項3に記載のソースコード比較装置。
  9. 前記詳細解析部は、除外の対象となる変数を含んだ条件を、詳細事前条件および詳細事後条件から除外する
    請求項1に記載のソースコード比較装置。
  10. 変更前のソースコードと変更後のソースコードとに対して、ソースコードに含まれる関数と関数が呼び出されたときに成り立つ呼出条件との組毎に、関数に含まれる実行文と、呼出条件の下で実行文が実行される前に成り立つ詳細事前条件と、呼出条件の下で実行文が実行された後に成り立つ詳細事後条件と、が互いに対応付けられた詳細条件リストを生成する詳細解析処理と、
    変更前のソースコードに対して生成された詳細条件リストである変更前の詳細条件リストと、変更後のソースコードに対して生成された詳細条件リストである変更後の詳細条件リストとに基づいて、変更前のソースコードと変更後のソースコードとの間で詳細事前条件と詳細事後条件との少なくともいずれかが異なる実行文を特定する情報を含んだ変動リストを生成する比較処理と
    をコンピュータに実行させるためのソースコード比較プログラム。
JP2017558840A 2015-12-30 2015-12-30 ソースコード比較装置およびソースコード比較プログラム Active JP6419357B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2015/086586 WO2017115449A1 (ja) 2015-12-30 2015-12-30 ソースコード比較装置およびソースコード比較プログラム

Publications (2)

Publication Number Publication Date
JPWO2017115449A1 JPWO2017115449A1 (ja) 2018-03-15
JP6419357B2 true JP6419357B2 (ja) 2018-11-07

Family

ID=59224895

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017558840A Active JP6419357B2 (ja) 2015-12-30 2015-12-30 ソースコード比較装置およびソースコード比較プログラム

Country Status (4)

Country Link
US (1) US20190026107A1 (ja)
JP (1) JP6419357B2 (ja)
GB (1) GB2561742A (ja)
WO (1) WO2017115449A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US12386615B2 (en) * 2022-12-20 2025-08-12 Red Hat, Inc. Executing a continuous integration pipeline based on a type of change to source code

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0686916A1 (en) * 1994-06-07 1995-12-13 Digital Equipment Corporation Method and apparatus for testing software
US7275239B2 (en) * 2003-02-10 2007-09-25 International Business Machines Corporation Run-time wait tracing using byte code insertion
US7526755B2 (en) * 2003-10-08 2009-04-28 Microsoft Corporation Plug-in pre- and postconditions for static program analysis
JP2008191963A (ja) * 2007-02-06 2008-08-21 Nec Corp ソースコード検証システム、ソースコード検証方法、およびソースコード検証用プログラム
JP5072889B2 (ja) * 2009-03-16 2012-11-14 株式会社東芝 事前条件生成装置および事後条件生成装置、ならびにこれらの方法
US20160062876A1 (en) * 2014-09-03 2016-03-03 Ajit Kumar Narayanan Automated software change monitoring and regression analysis
US9335979B1 (en) * 2014-09-15 2016-05-10 The Mathworks, Inc. Data type visualization
US9378115B2 (en) * 2014-09-18 2016-06-28 Sap Se Base line for code analysis
US9703552B2 (en) * 2014-12-18 2017-07-11 International Business Machines Corporation Assertions based on recently changed code

Also Published As

Publication number Publication date
GB201808455D0 (en) 2018-07-11
US20190026107A1 (en) 2019-01-24
JPWO2017115449A1 (ja) 2018-03-15
GB2561742A (en) 2018-10-24
WO2017115449A1 (ja) 2017-07-06

Similar Documents

Publication Publication Date Title
US9389849B2 (en) Test case pattern matching
US11740876B2 (en) Method and system for arbitrary-granularity execution clone detection
US12229040B2 (en) Generative artificial intelligence driven software fixing
US10423522B2 (en) System and method for detecting an error in software
US20210049091A1 (en) Software visualization apparatus, software visualization method, and computer readable medium
US9483384B2 (en) Generation of software test code
JP2008191963A (ja) ソースコード検証システム、ソースコード検証方法、およびソースコード検証用プログラム
US10628140B2 (en) Program code generation apparatus
JP2019029015A (ja) インタラクティブなソフトウェアプログラムの修復
US20160246709A1 (en) Source code unit testing using an indexing tool
US20220237057A1 (en) Code consolidation system
JP6419357B2 (ja) ソースコード比較装置およびソースコード比較プログラム
US11656869B2 (en) Using big code to construct code conditional truth tables
US10474443B2 (en) Code lineage tool
US9489284B2 (en) Debugging method and computer program product
US20150220425A1 (en) Test context generation
US20190377667A1 (en) Test case selection apparatus and computer readable medium
WO2019142266A1 (ja) テストケース生成装置、テストケース生成方法およびテストケース生成プログラム
US12386615B2 (en) Executing a continuous integration pipeline based on a type of change to source code
US12399805B2 (en) Method and system for providing delta code coverage information for work items
US11740895B2 (en) Generation of software program repair explanations
CN120447958B (zh) 一种基于低代码平台的逻辑检查方法、装置及计算机设备
JP7469999B2 (ja) 検索装置、検索方法、および検索プログラム
US10481880B2 (en) Code lineage tool
JP2018049492A (ja) 解析装置、解析プログラムおよび解析方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20171127

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20181009

R150 Certificate of patent or registration of utility model

Ref document number: 6419357

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250