JP2008191963A - ソースコード検証システム、ソースコード検証方法、およびソースコード検証用プログラム - Google Patents
ソースコード検証システム、ソースコード検証方法、およびソースコード検証用プログラム Download PDFInfo
- Publication number
- JP2008191963A JP2008191963A JP2007026374A JP2007026374A JP2008191963A JP 2008191963 A JP2008191963 A JP 2008191963A JP 2007026374 A JP2007026374 A JP 2007026374A JP 2007026374 A JP2007026374 A JP 2007026374A JP 2008191963 A JP2008191963 A JP 2008191963A
- Authority
- JP
- Japan
- Prior art keywords
- function
- source code
- precondition
- reference information
- condition
- 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.)
- Pending
Links
Images
Abstract
【課題】前提条件の変更を検知して、前提条件の変更が影響するソースコード範囲のみを検証することができるようにする。
【解決手段】参照情報生成部1は、入力されるソースコード5における参照関係を示す参照情報7を生成する。変更検知部2は、ソースコード5についての前提条件6が変更されたかどうかを検知するとともに、どの条件が変更されたかを検出する。影響分析部3は、変更検知部2によって検出される前提条件6の変更箇所と、参照情報生成部1によって生成される参照情報7とから、その前提条件6の変更によって影響を受ける関数群を検出し検証対象に特定する。影響分析部3は、前提条件の変更を直接受ける関数およびその関数を直接呼び出す関数を基点関数として検出し、各基点関数について、その基点関数以下の関数呼び出し階層に位置する関数群を、その前提条件の変更によって影響を受ける関数群として検出する。
【選択図】図1
【解決手段】参照情報生成部1は、入力されるソースコード5における参照関係を示す参照情報7を生成する。変更検知部2は、ソースコード5についての前提条件6が変更されたかどうかを検知するとともに、どの条件が変更されたかを検出する。影響分析部3は、変更検知部2によって検出される前提条件6の変更箇所と、参照情報生成部1によって生成される参照情報7とから、その前提条件6の変更によって影響を受ける関数群を検出し検証対象に特定する。影響分析部3は、前提条件の変更を直接受ける関数およびその関数を直接呼び出す関数を基点関数として検出し、各基点関数について、その基点関数以下の関数呼び出し階層に位置する関数群を、その前提条件の変更によって影響を受ける関数群として検出する。
【選択図】図1
Description
本発明は、ソースコードを実際に動作させずに解析する静的解析ツールを用いてソースコードを検証するソースコード検証システム、ソースコード検証方法、およびソースコード検証用プログラムに関し、特に、ソースコードに対し与えられた前提条件に基づいてソースコードに対し検証を行うソースコード検証システム、ソースコード検証方法、およびソースコード検証用プログラムに関する。
従来のソースコード検証システムの一例が特許文献1に記載されている。特許文献1には、変更前後のソースコードの静的解析結果から、変更部分のみに対する警告文の出力を行い、不要な警告文を抑制する方法が記載されている。また、特許文献2には、データ名称、属性が変更されたプログラムのテスト必要箇所を検出する方法が記載されている。
上記で示した方法は、いずれもソースコードの変更箇所を検出してプログラム変更作業におけるテストを効率化するための方法である。しかしながら、ソースコードの検証は、ソースコード自体の誤りを検出するだけでなく、そのソースコードが仕様を満たしているかについても検証できることが好ましい。
一般に公開されている静的解析ツールの中には、仕様を満たすための条件を前提条件として入力することにより、その前提条件に基づいてソースコードの検証を行う静的解析ツールがある。例えば、”ESC/Java2”という静的解析ツールでは、Java(登録商標)のコード自体の誤りだけでなく、JML(Java Modeling Language,仕様記述言語)による記述との整合性を検査し、前提条件違反となりうるコードを検出する。
図11は、静的解析ツールにおける前提条件、およびその静的解析ツールの検証結果の例を示す説明図である。図11に示す例は、オブジェクト指向言語Javaによるソースコードに対し解析を行う静的解析ツールにおける前提条件、および検証結果の例である。図11では、ソースコード111を検証対象として、前提条件112に関して検証を行った際の検証結果113を示すとともに、前提条件112を前提条件114に変更した後の検証結果115を示している。ソースコード111は、残高を示すメンバ変数balanceおよび出金処理メソッドwithdrawおよび入金処理メソッドdepositを有するクラスAccountについて記述したソースコードである。出金処理メソッドwithdrawでは、クラスのメンバ変数balanceの値から引数amountの値を減算し、その結果をメンバ変数balanceに設定する。
前提条件112には、例えば、出金処理メソッドwithdrawの事前条件として引数amountの値が0以上であることが2行目に、事後条件としてメンバ変数balanceの値が0以上であることが3行目に設定されている。ここで、関数の事前条件とは、その関数を呼び出す前に満たしていなければならない条件をいう。また、事後条件とは、その関数が処理を終えた後に満たしていなければならない条件をいう。
静的解析ツールは、ソースコード111と前提条件112とが与えられると、検証結果113を出力する。検証結果113には、クラスAccountの8行目(出金処理メソッドwithdrawのリターン文)で、メンバ変数balanceの値が0以上である旨の事後条件が成り立たないことが起こりうるという警告が示されている。これは、引数amountの値がメンバ変数balanceの値よりも大きかった場合には、出金処理メソッドwithdrawで減算を行うと、メンバ変数balanceが負の値になるからである。
ここで、図11に示すように、出金処理メソッドwithdrawの事前条件として、引数amountの値がメンバ変数balanceの値以下であるという条件を追加する。そして、静的解析ツールは、変更後の前提条件114が与えられると、何の警告もない検証結果115を出力する。なお、前提条件を検証に利用する静的解析ツールと同様に、テストプログラムを用いて前提条件に関してソースコードをチェックすることも従来より行われている。
また、特許文献3には、仕様書データを用いてアプリケーションプログラムを自動生成するユーザインタフェースアプリケーション開発装置において、仕様書データが変更された場合の影響範囲を検出する方法が記載されている。
しかしながら、これらの従来技術には、次の問題があった。第1の問題点は、前提条件に変更がおきたことを検知しないことである。従来のソースコード検証システムの多くは、ソースファイルの更新有無によって変更を検知する等、どのコードまたはどの前提条件が変更されたかを検知する処理を保持していないからである。なお、特許文献3に記載されている方法は、実際にテストプログラムを実行した結果をもって仕様書データの変更部位を特定する方法であって、静的に差分を検出することはできない。
第2の問題点は、前提条件の変更が影響するソースコード範囲のみを検証し直せないことである。その理由は、前提条件の変更が影響する範囲を検出できる情報を管理していないからである。
なお、特許文献1や特許文献2のようなソースコードの変更に際してテストを効率化するための方法であるが、それらの方法を前提条件の変更に際して適用したとしても、その変更が影響するソースコード範囲を的確に検出できない。例えば、特許文献1に記載されている方法は、変更前と変更後とで、それぞれ全てのソースコード範囲を検証した上で、ソースコードが変更された箇所についての警告を表示しないようにしているのであって、影響範囲を検出して検証範囲を限定しているわけではない。従って、1回の検証時間は短縮されない。また、特許文献2に記載されている方法では、検出する影響範囲に漏れがでる可能性がある。例えば、外部変数が変更された場合に、その外部変数を直接に使用している関数しか検出しないため、その外部変数を引数として呼び出している関数やその外部変数が戻り値として返される関数が検出されない。
そこで、本発明は、前提条件の変更を検知して、前提条件の変更が影響するソースコード範囲のみを検証することができるソースコード検証システム、ソースコード検証方法、およびソースコード検証用プログラムを提供することを目的とする。
本発明によるソースコード検証システムは、ソースコードを実際に動作させずに解析する静的解析ツール(例えば、検証処理部4)を用いてソースコードを検証するソースコード検証システムであって、ソースコードが仕様を満たすための前提条件として、少なくとも関数に対する条件、変数に対する条件のいずれかが入力され、ソースコードにおける関数間の呼び出し関係または関数における変数への参照関係を示す情報である参照情報を生成する参照情報生成手段(例えば、参照情報生成部1)と、前提条件が変更されたことを検知する前提条件変更検知手段(例えば、変更検知部2)と、条件変更検知手段によって前提条件が変更されたことが検知された場合に、参照情報に基づいて、少なくとも変更された条件を直接うける関数およびその関数を直接呼び出している関数を、前提条件の変更によって検証が必要な関数群における基点関数として検出する検証対象検出手段(例えば、影響分析部3)とを備えたことを特徴とする。
また、ソースコード検証システムは、前提条件を示す情報を記憶する前提条件記憶手段(例えば、前提条件6を記憶するための記憶装置)を備え、前提条件変更検知手段は、過去に入力された前提条件のうち少なくとも1バージョンを前提条件記憶手段に記憶させるとともに、所定のタイミングで、前提条件記憶手段に記憶されている前提条件と、現在の前提条件とを比較することによって、前提条件の変更を検知してもよい。
また、ソースコード検証システムは、参照情報として、少なくとも他の関数または変数を参照している関数を示す情報と、その関数の参照先である関数または変数を示す情報とを対応づけて記憶する参照情報記憶手段(例えば、参照情報7を記憶するための記憶装置)を備え、前提条件記憶手段は、前提条件を示す情報として、少なくとも前提条件として与えられた条件と、当該条件の対象要素である関数または変数を示す情報とを対応づけて記憶し、検証対象検出手段は、条件変更検知手段によって前提条件が変更されたことが検知された場合に、変更された条件の対象要素である関数、または変更された条件の対象要素である変数を参照している関数と、その関数を参照している関数とを基点関数として検出してもよい。
また、参照情報生成手段は、参照情報を生成するとともに、各関数および各外部変数がどのソースファイルに記述されているかを示す格納ファイル情報を生成し、検証対象検出手段は、参照情報生成手段によって生成される参照情報および格納ファイル情報に基づいて、各基点関数以下の関数呼び出し階層に位置する各関数を記述しているソースファイルを、各基点関数の検証に必要なソースコードの範囲として検出してもよい。
また、本発明によるソースコード検証方法は、ソースコードを実際に動作させずに解析する静的解析ツールを用いてソースコードを検証するソースコード検証方法であって、ソースコードが仕様を満たすための前提条件として、少なくとも関数に対する条件、変数に対する条件のいずれかを入力し、ソースコードにおける関数間の呼び出し関係または関数における変数への参照関係を示す情報である参照情報を生成し、前提条件が変更されたことを検知し、前提条件が変更されたことが検知された場合に、参照情報に基づいて、少なくとも変更された条件を直接うける関数およびその関数を直接呼び出している関数を、前提条件の変更によって検証が必要な関数群における基点関数として検出することを特徴とする。
また、本発明によるソースコード検証用プログラムは、ソースコードを実際に動作させずに解析する静的解析ツールを用いてソースコードを検証するためのソースコード検証用プログラムであって、ソースコードが仕様を満たすための前提条件として、少なくとも関数に対する条件、変数に対する条件のいずれかが入力されるコンピュータに、ソースコードにおける関数間の呼び出し関係または関数における変数への参照関係を示す情報である参照情報を生成する処理、前提条件が変更されたことを検知する処理、および前提条件が変更されたことが検知された場合に、参照情報に基づいて、少なくとも変更された条件を直接うける関数およびその関数を直接呼び出している関数を、前提条件の変更によって検証が必要な関数群における基点関数として検出する処理を実行させることを特徴とする。
本発明によれば、前提条件変更検知手段によって前提条件が変更されたことが検知された場合に、検証対象検出手段が、参照情報生成手段によって生成される参照情報に基づいて、少なくとも変更された条件を直接うける関数およびその関数を直接呼び出している関数を、前提条件の変更によって検証が必要な関数群における基点関数として検出するので、その基点関数を静的解析ツールに与えることによって、前提条件の変更が影響するソースコード範囲のみを検証することができる。
以下、本発明の実施の形態を図面を参照して説明する。図1は、本発明によるソースコード検証システムの構成例を示すブロック図である。図1に示すソースコード検証システムは、キーボードやディスプレイ装置等の入出力装置8と、参照情報生成部1と、変更検知部2と、影響分析部3と、検証処理部4とを備えている。また、ソースコード検証システムに入力されるソースコード5と前提条件6、参照情報生成部1によって生成される参照情報7と格納ファイル情報9、および影響分析部3によって生成される基点関数リスト10やソースコード範囲11を記憶する記憶装置を備えている。なお、記憶装置は情報毎に別々の記憶装置であってもよい。
参照情報生成部1は、入力されるソースコード5について参照情報7を生成する。参照情報7とは、ソースコードにおける参照関係を示す情報である。具体的には、関数間の呼び出し関係や、外部変数への参照関係を示す情報であって、例えば、参照先関数と参照元関数とを対応づけた情報や、参照先変数と参照箇所(その変数を参照している関数等)とを対応づけた情報である。なお、外部変数への参照関係には、外部変数に値を設定している関係も含むものとする。本実施の形態では、参照情報生成部1は、参照情報7として、関数間の呼び出し関係を示す情報と、外部変数への参照関係を示す情報とを、それぞれ関数区分と変数区分の2つの要素区分に分けて生成する。また、参照情報記生成部1は、生成した参照情報7をどのソースコードについての参照情報かを識別する情報(例えば、プロジェクト名)とともに記憶装置に記憶させる。また、参照情報生成部1は、参照情報7とともに、各関数および各外部変数がどのソースファイルに記述されているかを示す格納ファイル情報9を生成する。
変更検知部2は、入力されるソースコード5についての前提条件6が変更されたかどうかを検知するとともに、どの条件が変更(追加および削除を含む)されたかを検出する。前提条件6は、ソースコードがその仕様を満たすために必要とする条件群であって、関数に関する前提条件と外部変数に関する前提条件とを含む。関数に関する前提条件には、その関数を呼び出す前に満たしていなければならない条件を示す事前条件と、その関数が処理を終えた後に満たしていなければならない条件を示す事後条件と、その関数を呼び出す前およびその関数が処理をおけた後に満たしていなければならない条件を示す不変条件とがある。また、変数に関する前提条件には、その変数への参照が行われている関数を呼び出す前およびその関数が処理をおけた後に満たしていなければならない不変条件がある。なお、変更検知部2は、ソースコード5とともに入力される前提条件6に対する処理を行うだけでなく、前提条件6を入力するための画面を表示し、ユーザの画面操作に応じて前提情報を入力するなど前提情報の入力機能を有していてもよい。
影響分析部3は、変更検知部2によって検出される前提条件6の変更箇所(変更された条件)と、参照情報生成部1によって生成される参照情報7および格納ファイル情報9とから、その前提条件6の変更によって影響を受ける関数群を検出し検証対象に特定する。影響分析部3は、具体的には、影響を受ける関数群において基点(関数呼び出しの階層上の基点)となる基点関数をリスト化した基点関数リスト10を生成する。また、各基点関数について、その基点関数以下の関数呼び出し階層に位置する関数群を含むソールファイルを、その基点関数の検証に必要なソースコードの範囲として示すソースコード範囲11を生成する。なお、検証処理部4が基点関数の情報のみでその階層下に位置する関数群やソースファイルを特定できるような場合には、ソースコード範囲11の生成は省略してもよい。
検証処理部4は、影響分析部3によって特定される検証範囲に対し、検証を行う。検証処理部4は、例えば、影響分析部3によって生成される基点関数リスト10に基づいて、基点関数リスト10で示される基点関数から、その関数呼び出し階層に従ってソースコードを検証する。なお、各基点関数以下の関数呼び出し階層に位置する関数群を含むソースコードの範囲は、ソースコード範囲11によって示される。
本実施の形態において、参照情報生成部1、変更検知部2、影響分析部3、および検証処理部4は、具体的には、CPU等のプログラムに従って動作する情報処理装置によって実現される。例えば、参照情報生成部1、変更検知部2、影響分析部3、および検証処理部4を機能として有するプログラムをユーザに提供して、ユーザがそのプログラムを所有するパーソナルコンピュータにインストールすることによっても、本システムを実施することができる。
次に、本実施の形態の動作について説明する。図2は、本実施の形態によるソースコード検証システムの動作の一例を示すフローチャートである。図2に示すように、ソースコード5が入力されると、参照情報生成部1は、ソースコード5を解析して、参照情報7と格納ファイル情報9とを生成する(ステップS201)。参照情報生成部1におけるソースコードの解析手法としては、字句解析や構文解析など既知のアルゴリズムを実行すればよい。なお、アルゴリズムの実行には”doxygen”等の一般に公開されているプログラム解析ツールやコンパイラのフロントエンド部を利用してもよい。
次に、変更検知部2は、ソースコード5についての前提条件6が変更されたかどうかを検知する(ステップS202)。変更検知部2は、例えば、検証を行ったタイミングやユーザが指定したタイミングで、そのときの前提条件6を記憶装置に記憶しておき、新たに前提条件6が入力された場合やユーザから差分検証が指示された場合に、現在の前提条件6と記憶しておいた前提条件6とを比較することによって、前提条件6の変更有無を検知する。なお、変更検知部2は、前提条件6の変更有無を検知する際に、併せてどの前提条件が変更(追加および削除を含む)されたかを検出する。前提条件6が変更されていた場合にはステップS203へ移行し、検知されていなかった場合には処理を終了する。
影響分析部3は、変更検知部2によって検出される前提条件6の変更箇所(変更された条件)と、参照情報生成部1によって生成される参照情報7および格納ファイル情報9とから、検証対象とする関数群やソースコード範囲を決定する(ステップS203)。影響分析部3は、前提条件の変更によって影響を受ける関数群を検出し、その関数群において基点(関数呼び出しの階層上の基点)となる基点関数をリスト化した基点関数リスト10を生成する。また、各基点関数について、その基点関数以下の関数呼び出し階層に位置する関数群を含むソールファイルを、その基点関数の検証に必要なソースコードの範囲として示すソースコード範囲11を生成する。なお、前提条件の変更によって影響を受ける関数群の検出方法については、後述する。
最後に、検証処理部4は、影響分析部3によって検証対象に決定された関数群やソースコード範囲のソースコードを検証して(ステップS204)、検証結果を入出力装置8に出力する。検証処理部4におけるソースコードの検証手法としては、前提条件を用いてソースコードの検証を行うテスティングや、定理証明、モデル検査等の既知のアルゴリズムを実行すればよい。なお、アルゴリズムの実行には、関数毎に前提条件についての一連のテストを行うテストプログラムや”ESC/Java2”等の一般に公開されているプログラム解析ツールを利用してもよい。
次に、手続き型言語であるC言語で記述されたソースコードの具体例を用いて、本実施の形態の動作について詳細に説明する。
図3に、ソースコード5の一例を示す。また、図4に、図3で示したソースコード5の参照関係を図示する。図3は、例えば、ソースファイルE.cに、外部変数gvarUに値を設定したり、関数funcGを呼び出したり、関数funcHを呼び出している関数funcEが記述されていることを示している。また、図4は、例えば、このソースファイルE.c内の関数funcHにおける参照関係として、関数funcHから外部変数gvarUへの参照を示す破線矢印と、関数funcHから関数funcGおよびfuncHへの呼び出しを示す実線矢印とが示されている。
図2のステップS201では、参照情報生成部1は、図3で示したような各ソースファイルに含まれる関数の呼び出しの記述(コード)や外部変数への参照の記述(コード)から、その参照関係を示す情報を生成し、参照情報7として記憶装置に記憶させる。また、各ソースファイルに含まれる関数の実体の記述から、その関数と格納先ファイル名との対応関係を示す情報を生成し、格納ファイル情報9として記憶装置に記憶させる。
図5は、参照情報7および格納ファイル情報9の一例を示す説明図である。なお、図5では、図3で示したソースコード5から生成される参照情報7および格納ファイル情報9の例を示している。図5(a)は、参照情報7の例を示す説明図である。図5(b)は、格納ファイル情報9の例を示す説明図である。なお、図5(c)は、参照情報7の他の例を示す説明図である。
参照情報生成部1は、ソースファイルを解析した結果、他の関数または外部変数を参照している関数を検出した場合には、例えば図5(a)に示すように、その関数名(参照元関数名)と、その関数が参照している先の関数名または外部変数名と、その参照先が関数か変数かを示す参照先区分とを対応づけた参照情報7を生成し、記憶装置に記憶させればよい。例えば、参照情報生成部1は、図3に示されたソースファイルA.cを解析した結果、関数funcAが関数funcBおよびfuncCを呼び出していることを検出した場合には、図5(a)の1行目および2行目に示すように、{参照区分,参照元関数名,参照先関数名}={関数,”funcA”,”funcB”}や,{関数,”funcA”,”funcC”}という参照情報7を生成し、記憶装置に記憶させればよい。また、例えば、ソースファイルE.cを解析した結果、関数funcEで変数gvarUに値を設定していることを検出した場合には、図5(a)の6行目に示すように、{参照区分,参照元関数名,参照先関数名}={外部変数,”funcE”,”gvarU”}という参照情報7を生成し、記憶装置に記憶させればよい。
なお、図5(c)に示すように、参照情報7を、関数に関する参照情報と変数に関する参照情報とに分けて格納してもよい。参照情報生成部1は、関数に関する参照情報として、参照元関数名と参照先関数名とを対応づけた情報を生成したり、外部変数に関する参照情報として、参照元関数名と参照先外部変数名とを対応づけた情報を生成し、格納すればよい。例えば、上記例の場合、{参照元関数名,参照先関数名}={”funcA”,”funcB”}や,{”funcA”,”funcC”}という参照情報を生成し、関数に関する参照情報として記憶装置に記憶させればよい。また、{参照元関数名,参照先外部変数名}={”funcE”,”gvarU”}という参照情報を生成し、外部変数に関する参照情報として記憶装置に記憶させればよい。
また、参照情報生成部1は、検査対象となりうる要素である各関数または各外部変数の所在を示すために、例えば図5(b)に示すように、関数または外部変数を含んでいるソースファイルのファイル名と、そのソースファイルが格納している要素名(関数名または外部変数名)と、その要素が関数であるか変数であるかを示す要素区分とを対応づけた参格納ファイル情報9を生成する。なお、関数または外部変数を含んでいるソースファイルとは、関数または外部変数の実体コードが記述されているソースファイルのことである。例えば、図3に示されたソースファイルA.cを解析した結果、ソースファイルA.cに関数funcAの実体コードが記述されていることを検出した場合には、{ファイル名,要素名,要素区分}={”A.c”,”funcA”,関数}とする格納ファイル情報9を生成し、記憶装置に記憶させればよい。また、例えば、ソースファイルU.cを解析した結果、ソースファイルU.cに外部変数gvarUの実体コードが記述されていることを検出した場合には、{ファイル名,要素名,要素区分}={”U.c”,”gvarU”,外部変数}とする格納ファイル情報9を生成し、記憶装置に記憶させればよい。
図2のステップS202では、変更検知部2は、前回の前提条件6と、現在の前提条件6とを比較することによって、前提条件6の変更有無を検知する。変更検知部2は、例えば、前回検証を行った際の前提条件を、図6に示すような前提条件6として記憶装置に記憶しておき、差分検証を指示された際に、現在の前提条件6と記憶しておいた前回の前提条件6とを比較する。そして、比較した結果、前提条件が変更されていた場合には、変更箇所として、その要素名を検出すればよい。なお、変更を調べるアルゴリズムは既知であり、例えば前提条件6を格納したファイルのタイムスタンプで変更の有無を検知した上で、そのファイルに記述されている各要素の差分を調べてもよい。なお、タイプスタンプを調べる”ls”やファイルの差分を調べる”diff”といったプログラムが一般に公開されており、そのプログラムを利用してもよい。
図6は、前提条件6の一例を示す説明図である。変更検知部2は、前提条件6として、例えば、図6(a)に示すように、前提条件の対象となる要素(対象要素)と、要素区分と、前提条件の種別(事前条件/事後条件/不変条件)と、条件とを対応づけた情報を記憶するようにしてもよい。例えば、図6(a)の1行目の前提条件{対象要素,要素区分,種別,条件}={”funcE”,関数,事前条件,”0 <= flag ”}は、関数funcEが呼び出された際に、当該関数funcEの引数flagの値が0以上でなければならないという事前条件を示している。また、例えば、図6(a)の3行目の前提条件{対象要素,要素区分,種別,条件}={”gvarU”,外部変数,不変条件,”gvarU != 0”}は、外部変数gvarUがこれを参照する関数が呼び出された際に0以外の値、かつその関数が処理を終えた際にも0以外の値でなければならないという不変条件が示されている。
なお、変更検知部2は、例えば、図6(b)に示すように、前提条件6を、関数に関する前提条件と外部変数に関する前提条件とに分けて記憶してもよい。このような場合には、要素区分は省略される。なお、前提条件は、背景技術で説明したように、所定の書式を定めた上で、ソースコードのコメントとして入力してもよい。そのような場合には、変更検知部2がコメントを解析して前提条件を抽出した上で、比較すればよい。
図2のステップS203では、影響分析部3は、変更検知部2によって検出された前提条件の変更要素である関数または外部変数についての参照情報7に基づき、その要素の条件が変更されたことによって影響を受ける関数群を決定する。具体的には、影響を受ける関数群における基点関数を決定する。そして、決定した基点関数についての参照情報7に基づき、基点関数以下の関数呼び出し階層に位置している関数群を抽出し、それら関数群をその前提条件の変更の影響をうける関数群であるとして、検証対象に決定する。また、格納ファイル情報9に基づき、それら関数群を含むソースファイルを決定する。なお、影響分析部3は、基点関数を決定した際に、その基点関数を示す情報を基点関数リスト10に登録する。また、ソースファイルを決定した際に、そのソースファイルを示す情報をソースコード範囲11に登録する。なお、ソースコード範囲11には、ソースファイルを示す情報だけでなく、そのソースファイルが含んでいる関数を示す情報を登録してもよい。
以降、図6(a)の1行目で示された前提条件が変更された場合を例にして、前提条件の変更によって影響を受ける関数群、すなわち、検証対象とする関数群の決定について説明する。
図7は、関数に関する前提条件の変更に係る基点関数と基点関数からの関数呼び出し階層の例を示す説明図である。図7では、関数funcEに関する前提条件が変更された場合(引出線701参照。)における影響範囲について示している。影響分析部3は、関数funcEに関する前提条件が変更されたことが変更検知部2によって検知された場合、その前提条件の変更を直接うける関数、およびその関数を直接呼び出す関数を特定し、それら関数を基点関数に決定する。ここで、関数に関する前提条件の変更を直接受ける関数とは、その前提条件の対象となる要素(関数)のことである。図7に示す例では、前提条件の変更を直接受ける関数として関数funcEが検出され、また、その関数funcEを直接呼び出す関数として関数funcBが検出される(引出線702,704参照。)。なお、関数に関する前提条件の変更の場合、前提条件の変更を直接受ける関数は1つであるが、その関数を直接呼び出す関数は1つであるとは限らない。2以上の関数から呼び出されている場合もあるし、1つの関数からも呼び出されていない場合もある。影響分析部3は、例えば、前提条件6においてその対象要素として示される関数を、前提条件の変更を直接受ける関数として検出すればよい。また、その関数が参照先要素である参照情報7においてその参照元関数で示される関数を、その関数(前提条件の変更を直接受ける関数)を直接呼び出す関数として検出すればよい。
そして、その各基点関数以下の関数呼び出し階層に位置している関数群を検証対象とする。なお、検証は基点関数毎に行う必要があるため、基点関数毎にその基点関数以下の関数呼び出し階層に位置している関数群を特定する。図7に示す例では、関数funcEの検証に必要な関数群として、関数funcE,funcG,funcH,funcIが検出される(引出線703参照。)。また、関数funcBの検証に必要な関数群として、関数funcB,funcC,funcF,funcE,funcG,funcH,funcIが検出される(引出線705参照。)。影響分析部3は、例えば、参照情報7において、基点関数を基準に、その関数が参照元関数である参照先関数で示される関数を、その関数の階層下に位置する関数として検出するとともに、さらに、検出した関数を基準にして、その関数が参照元関数である参照先関数で示される関数を、その関数の階層下に位置する関数として検出すればよい。このような動作を関数が検出されなくなるまで繰り返し行えばよい。
また、図8は、外部変数に関する前提条件の変更に係る基点関数と基点関数からの関数呼び出し階層の例を示す説明図である。図8では、外部変数gvarUに関する前提条件が変更された場合(引出線801参照。)における影響範囲について示している。影響分析部3は、外部変数gvarUに関する前提条件が変更されたことが変更検知部2によって検知された場合、その前提条件の変更を直接うける関数、およびその関数を直接呼び出す関数を特定し、それら関数を基点関数に決定する。ここで、外部変数に関する前提条件の変更を直接受ける関数とは、その前提条件の対象である外部変数を直接参照している関数である。図8に示す例では、前提条件の変更を直接受ける関数として関数funcEおよびfuncUが検出される(引出線802,803参照。)。そして、関数funcEを直接呼び出す関数として関数funcBが、関数funcUを直接呼び出す関数として関数funcXが検出される(引出線805参照。関数funcEについては図7と同様であるため図示省略している。)。なお、外部変数に関する前提条件の変更の場合には、前提条件の変更を直接受ける関数は1つであるとは限らない。影響分析部3は、例えば、その変数が参照先要素である参照情報7においてその参照元関数で示される関数を、前提条件の変更を直接受ける関数として検出すればよい。
そして、その各基点関数以下の関数呼び出し階層に位置している関数群を検証対象とする。図8に示す例では、図7と同様に、関数funcEの検証に必要な関数群として、関数funcE,funcG,funcH,funcIが検出され、また関数funcBの検証に必要な関数群として、関数funcB,funcC,funcF,funcE,funcG,funcH,funcIが検出される。また、関数funcUの検証に必要な関数群として、関数funcUが抽出される(引出線804参照)。また、関数funcXの検証に必要な関数群として、関数funcX,funcU,funcY,funcIが検出される(引出線806参照。)。なお、各基点関数以下の関数呼び出し階層に位置している関数群の検出方法は、関数に関する前提条件が変更された場合と同様である。
図9は、影響分析部3における検証対象とする関数群の決定動作(図2のステップS203)について、その具体例な処理フローの一例を示すフローチャートである。具体的に、影響分析部3は、変更が検知された前提条件毎に繰り返し処理を行うため、まず、未処理の前提条件の有無を調べ、未処理の前提条件がある場合にはその前提条件について処理を行うためステップS902に移行し、ない場合には処理を終了する(ステップS901)。
ステップS902では、前提条件の要素区分が関数であるか否かを確認する。前提条件の要素区分が関数である場合には(ステップS902のYes)、その対象要素を基点関数リスト10に登録する(ステップS903)。これは、関数に関する前提条件の変更を直接受ける関数を基点関数として検出する処理に相当する。例えば、図6(a)の1行目に示されている前提条件{対象要素,要素区分,種別,条件}={”funcE”,関数,事前条件,”0 <= flag ”}が変更箇所として検出された場合、関数funcEが検出される。
一方、前提条件の要素区分が外部変数である場合には(ステップS902のNo)、参照情報7の中から、参照先区分が外部変数であって、参照先要素がその前提条件の要素区分で示される外部変数である参照情報を選択し、その参照情報において参照元関数で示される関数を基点関数リスト10に登録する(ステップS904)。これは、外部変数に関する前提条件の変更を直接受ける関数を基点関数として検出する処理に相当する。例えば、図6(a)の3行目に示されている前提条件{対象要素,要素区分,種別,条件}={”gvarU”,外部変数,不変条件,”gvarU != 0”}が変更箇所として検出された場合、図5(a)に示す参照情報7からは、関数funcEおよびfuncUが検出され、基点関数リスト10に登録される。
次に、影響分析部3は、基点関数リスト10に登録された各基点関数について、参照情報7の中から、参照先区分が関数であって、参照先要素がその基点関数である参照情報を選択し、その参照情報において参照元関数で示される関数を基点関数リスト10に登録する(ステップS905)。これは、前提条件の変更を直接受ける関数を直接呼び出す関数を基点関数として検出する処理に相当する。例えば、関数funcEが基点関数リスト10に登録されている場合、図5(a)に示す参照情報7から、関数funcBが検出され、基点関数リスト10に登録される。また、例えば、関数funcEおよびfuncUが基点関数リスト10に登録されている場合、図5(a)に示す参照情報7から、関数funcBおよびfuncXが検出され、基点関数リスト10に登録される。
次のステップS906は、基点関数リスト10に登録した基点関数毎の繰り返し処理のための終了判定動作であり、基点関数リスト10に未処理の基点関数があるか否かを調べ、未処理の基点関数がある場合にはその基点関数について処理を行うためステップS907に移行し、ない場合には次の前提条件についての処理を行うためにステップS901に戻る。
以降、基点関数リスト10に関数funcEとfuncBの2つの関数が登録されている場合を例に説明する。
ステップS907では、格納ファイル情報9の中から、その基点関数を要素名に示している格納ファイル情報を選択し、その格納ファイル情報においてその要素の格納先ファイル名をソースコード範囲11に登録する。例えば、ソースコード範囲11を、基点関数毎に、その検証に必要な関数群の格納先ファイル名を記述するためのファイルとして生成する場合には、ファイルがなければファイルを生成した上で、そのファイルに格納先ファイル名を示す情報を記述していけばよい。例えば、基点関数funcEについての処理であれば、図5(b)に示す格納ファイル情報9からは、ソースファイルE.cが検出され、ソースコード範囲11に登録される。
次に、影響分析部3は、参照情報7から、参照先区分が関数であって参照元関数がその基点関数である参照情報を選択する(ステップS908)。例えば、基点関数funcEについての処理であれば、図5(a)に示す参照情報7からは、{参照区分,参照元関数名,参照先関数名}={関数,”funcE”,”funcG”}とする参照情報,{関数,”funcE”,”funcH”}とする参照情報が選択される。
次のステップS909は、ステップS908において選択された参照情報毎の繰り返し処理のための終了判定動作であり、ステップS908において選択された参照情報の中で未処理の参照情報があるか否かを調べ、未処理の参照情報がある場合にはその参照情報について処理を行うためステップS910に移行し、ない場合には次の基点関数についての処理を行うためステップS906に戻る。なお、ステップS910は、ステップS911〜S913よりなる再帰処理である。
以降、ステップS908において{参照区分,参照元関数名,参照先関数名}={関数,”funcE”,”funcG”}とする参照情報,{関数,”funcE”,”funcH”}とする参照情報の2つの参照情報が選択された場合を例に説明する。ここでは、まず参照情報{参照区分,参照元関数名,参照先関数名}={関数,”funcE”,”funcG”}について、ステップS910の再帰処理が呼ばれることとなる。
ステップS911では、格納ファイル情報9の中から、その参照情報において参照先関数として示されている関数を要素名に示している格納ファイル情報を選択し、その格納ファイル情報においてその要素の格納先ファイル名をソースコード範囲11に登録する。例えば、1回目の再帰処理では、参照情報{関数,”funcE”,”funcG”}に基づき、関数funcGを含んでいるソースファイルG.cが登録される。なお、次に、ステップS909から呼ばれる2回目の再帰処理では、参照情報{関数,”funcE”,”funcH”}に基づき、関数funcHを含んでいるソースファイルH.cが登録される。
次に、ステップS912では、参照情報7の中から、参照先区分が関数であって、その参照情報における参照先関数を参照元関数として示す参照情報を選択する。1回目の再帰処理では、関数funcGを参照元関数として示す参照情報は何も選択されず、2回目の再帰処理では、関数funcHを参照元関数として示す参照情報{関数,”funcH”,”funcI”}が選択される。
次のステップS913は、ステップS912において選択された参照情報毎の繰り返し処理のための終了判定動作であり、ステップS912において選択された参照情報の中で未処理の参照情報があるか否かを調べる。未処理の参照情報がある場合には、その参照情報について処理を行うため当該再帰処理を再帰呼び出ししてステップS910に移行し(図9の※1参照。)、ない場合には、当該再帰処理を終了する。なお、当該再帰処理終了後の復帰先は、当該再帰処理の呼び出し元であるため、再帰処理から呼び出されているか、外部から呼び出されているかによって異なる(図9の※2参照。)。
例えば、ステップS909からの1回目の再帰処理では、ステップS912において何も選択されないので、未処理の参照情報なしとして当該再帰処理を終了する。このときの復帰先は、ステップS909である。そして、ステップS909の判断によって、次の参照情報{関数,”funcE”,”funcH”}についての再帰処理が呼び出されることとになる。そして、ステップS909からの2回目の再帰処理では、ステップS912において、参照情報{関数,”funcH”,”funcI”}が選択されるので、選択された参照情報のうちの未処理の参照情報についての再帰処理を行わせるため、その参照情報を対象として、ステップS913から再帰処理が呼び出されることになる(ステップS913からの1回目の再帰処理)。
その後、ステップS913からの1回目の再帰処理では、ステップS911において関数funcIを含んでいるソースファイルH.cが登録される。なお、ソースファイルH.cは既に登録されているので、この登録処理は省略される。そして、ステップS912において、関数funcIを参照元関数とする参照情報は選択されず、ステップS913の判断によって、当該再帰処理(ステップS913からの1回目の再帰処理)は終了する。このときの復帰先は、ステップS908からの2回目の再帰処理におけるステップS913である。なお、ステップS908からの2回目の再帰処理において、ステップS912では、1つの参照情報しか選択されていないので、このステップS913の判断の結果、当該再帰処理は終了してステップS909に戻ることになる。
その後、ステップS913からの1回目の再帰処理では、ステップS911において関数funcIを含んでいるソースファイルH.cが登録される。なお、ソースファイルH.cは既に登録されているので、この登録処理は省略される。そして、ステップS912において、関数funcIを参照元関数とする参照情報は選択されず、ステップS913の判断によって、当該再帰処理(ステップS913からの1回目の再帰処理)は終了する。このときの復帰先は、ステップS908からの2回目の再帰処理におけるステップS913である。なお、ステップS908からの2回目の再帰処理において、ステップS912では、1つの参照情報しか選択されていないので、このステップS913の判断の結果、当該再帰処理は終了してステップS909に戻ることになる。
本例では、最終的には図10に示すソースコード範囲11を得ることになる。図10は、関数funcEに関する前提条件および外部変数gvarUに関する前提条件が変更された場合におけるソースコード範囲11の抽出結果を示している。すなわち、関数funcEに関する前提条件の変更によって検証が必要な基点関数として、関数funcE,funcBが検出される。また、外部変数gvarUに関する前提条件の変更によって検証が必要な基点関数として、関数funcE,funcB,funcU,funcXが検出される。そして、基点関数funcEの検証に必要なソースコード範囲11として、ソースファイルE.c,G.c,H.cが検出される。また、基点関数funcBの検証に必要なソースコード範囲11として、ソースファイルB.c,F.c,G.c,H.cが検出される。また、基点関数funcUの検証に必要なソースコード範囲11として、ソースファイルU.cが検出される。また、基点関数funcXの検証に必要なソースコード範囲11として、ソースファイルX.cが検出される。
以上は、手続き型言語Cの例に基づく説明であるが、オブジェクト指向言語であるJavaやC++であれば、ソースファイルをクラスに置き換え、関数をメソッドに置き換え、外部変数を公開オブジェクトや公開メンバ変数に置き換えることによって、同様の処理が可能である。
このように、本実施の形態によれば、検証の前提条件の変更が影響するソースコード範囲を、検証前に決定することができる。結果、影響するソースコード範囲だけを検証すればよく、検証時間が短縮される。なお、本発明では、ソースコードから決定した参照情報に基づいて、変更された前提条件に直接影響を受ける関数、および当該関数を参照する関数から呼び出される関数を含めた関数群を検証対象として検出しているので、前提条件の変更が影響するソースコード範囲を漏れなく決定できる。
本発明は、ソースコードを実際に動作させずに解析する静的解析ツールを用いてソースコードを検証するソースコード検証システムだけでなく、前提条件の影響範囲を出力する影響範囲出力システムとしても実施可能である。
1 参照情報生成部
2 変更検知部
3 影響分析部
4 検証処理部
2 変更検知部
3 影響分析部
4 検証処理部
Claims (6)
- ソースコードを実際に動作させずに解析する静的解析ツールを用いてソースコードを検証するソースコード検証システムであって、
前記ソースコードが仕様を満たすための前提条件として、少なくとも関数に対する条件、変数に対する条件のいずれかが入力され、
前記ソースコードにおける関数間の呼び出し関係または関数における変数への参照関係を示す情報である参照情報を生成する参照情報生成手段と、
前記前提条件が変更されたことを検知する前提条件変更検知手段と、
前記条件変更検知手段によって前提条件が変更されたことが検知された場合に、前記参照情報に基づいて、少なくとも変更された条件を直接うける関数および前記関数を直接呼び出している関数を、前記前提条件の変更によって検証が必要な関数群における基点関数として検出する検証対象検出手段とを備えた
ことを特徴とするソースコード検証システム。 - 前提条件を示す情報を記憶する前提条件記憶手段を備え、
前提条件変更検知手段は、過去に入力された前提条件のうち少なくとも1バージョンを前記前提条件記憶手段に記憶させるとともに、所定のタイミングで、前提条件記憶手段に記憶されている前提条件と、現在の前提条件とを比較することによって、前提条件の変更を検知する
請求項1に記載のソースコード検証システム。 - 参照情報として、少なくとも他の関数または変数を参照している関数を示す情報と、前記関数の参照先である関数または変数を示す情報とを対応づけて記憶する参照情報記憶手段を備え、
前提条件記憶手段は、前提条件を示す情報として、少なくとも前提条件として与えられた条件と、当該条件の対象要素である関数または変数を示す情報とを対応づけて記憶し、
検証対象検出手段は、条件変更検知手段によって前提条件が変更されたことが検知された場合に、変更された条件の対象要素である関数、または変更された条件の対象要素である変数を参照している関数と、前記関数を参照している関数とを基点関数として検出する
請求項1または請求項2に記載のソースコード検証システム - 参照情報生成手段は、参照情報を生成するとともに、各関数および各外部変数がどのソースファイルに記述されているかを示す格納ファイル情報を生成し、
検証対象検出手段は、前記参照情報生成手段によって生成される参照情報および格納ファイル情報に基づいて、各基点関数以下の関数呼び出し階層に位置する各関数を記述しているソースファイルを、各基点関数の検証に必要なソースコードの範囲として検出する
請求項1から請求項3のうちのいずれか1項に記載のソースコード検証システム - ソースコードを実際に動作させずに解析する静的解析ツールを用いてソースコードを検証するソースコード検証方法であって、
前記ソースコードが仕様を満たすための前提条件として、少なくとも関数に対する条件、変数に対する条件のいずれかを入力し、
前記ソースコードにおける関数間の呼び出し関係または関数における変数への参照関係を示す情報である参照情報を生成し、
前記前提条件が変更されたことを検知し、
前提条件が変更されたことが検知された場合に、前記参照情報に基づいて、少なくとも変更された条件を直接うける関数および前記関数を直接呼び出している関数を、前記前提条件の変更によって検証が必要な関数群における基点関数として検出する
ことを特徴とするソースコード検証方法。 - ソースコードを実際に動作させずに解析する静的解析ツールを用いてソースコードを検証するためのソースコード検証用プログラムであって、
前記ソースコードが仕様を満たすための前提条件として、少なくとも関数に対する条件、変数に対する条件のいずれかが入力されるコンピュータに、
前記ソースコードにおける関数間の呼び出し関係または関数における変数への参照関係を示す情報である参照情報を生成する処理、
前記前提条件が変更されたことを検知する処理、および
前提条件が変更されたことが検知された場合に、前記参照情報に基づいて、少なくとも変更された条件を直接うける関数および前記関数を直接呼び出している関数を、前記前提条件の変更によって検証が必要な関数群における基点関数として検出する処理
を実行させるためのソースコード検証用プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007026374A JP2008191963A (ja) | 2007-02-06 | 2007-02-06 | ソースコード検証システム、ソースコード検証方法、およびソースコード検証用プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007026374A JP2008191963A (ja) | 2007-02-06 | 2007-02-06 | ソースコード検証システム、ソースコード検証方法、およびソースコード検証用プログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2008191963A true JP2008191963A (ja) | 2008-08-21 |
Family
ID=39752004
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007026374A Pending JP2008191963A (ja) | 2007-02-06 | 2007-02-06 | ソースコード検証システム、ソースコード検証方法、およびソースコード検証用プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2008191963A (ja) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010198558A (ja) * | 2009-02-27 | 2010-09-09 | Nec Corp | モデル生成装置、モデル生成方法、ソースコード検証システムおよびプログラム |
JP2010211521A (ja) * | 2009-03-10 | 2010-09-24 | Nec Corp | 検証対象関数自動選択装置、検証対象関数自動選択方法、及び検証対象関数自動選択用プログラム |
JP2011180811A (ja) * | 2010-03-01 | 2011-09-15 | Nec Corp | コンテンツ評価装置、コンテンツ評価システム、コンテンツ評価方法、コンテンツ評価表示方法及びプログラム |
WO2012133606A1 (ja) * | 2011-03-31 | 2012-10-04 | 日立公共システムエンジニアリング株式会社 | プログラムの影響範囲設定装置、並びにこれを用いた影響範囲特定方法及び影響波及のあるプログラムの抽出方法 |
CN103186463A (zh) * | 2011-12-30 | 2013-07-03 | 阿里巴巴集团控股有限公司 | 确定软件的测试范围的方法和系统 |
JP2014052757A (ja) * | 2012-09-06 | 2014-03-20 | Mitsubishi Electric Corp | ソフトウェア設計支援装置及びソフトウェア設計支援方法 |
WO2014184896A1 (ja) * | 2013-05-15 | 2014-11-20 | 三菱電機株式会社 | プログラム解析装置、プログラム解析方法およびプログラム解析プログラム |
JP2016015175A (ja) * | 2015-10-27 | 2016-01-28 | 株式会社日立公共システム | 影響範囲調査方法及び影響範囲調査装置 |
WO2017115449A1 (ja) * | 2015-12-30 | 2017-07-06 | 三菱電機株式会社 | ソースコード比較装置およびソースコード比較プログラム |
WO2017187537A1 (ja) * | 2016-04-26 | 2017-11-02 | 三菱電機株式会社 | 依存関係抽出装置および依存関係抽出プログラム |
WO2018220923A1 (ja) * | 2017-05-30 | 2018-12-06 | オムロン株式会社 | プログラム開発支援装置、プログラム開発支援システム、プログラム開発支援方法、および、プログラム開発支援プログラム |
WO2021084735A1 (ja) * | 2019-11-01 | 2021-05-06 | 三菱電機株式会社 | ソースコード解析装置 |
-
2007
- 2007-02-06 JP JP2007026374A patent/JP2008191963A/ja active Pending
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2010198558A (ja) * | 2009-02-27 | 2010-09-09 | Nec Corp | モデル生成装置、モデル生成方法、ソースコード検証システムおよびプログラム |
JP2010211521A (ja) * | 2009-03-10 | 2010-09-24 | Nec Corp | 検証対象関数自動選択装置、検証対象関数自動選択方法、及び検証対象関数自動選択用プログラム |
JP2011180811A (ja) * | 2010-03-01 | 2011-09-15 | Nec Corp | コンテンツ評価装置、コンテンツ評価システム、コンテンツ評価方法、コンテンツ評価表示方法及びプログラム |
WO2012133606A1 (ja) * | 2011-03-31 | 2012-10-04 | 日立公共システムエンジニアリング株式会社 | プログラムの影響範囲設定装置、並びにこれを用いた影響範囲特定方法及び影響波及のあるプログラムの抽出方法 |
JP2012212281A (ja) * | 2011-03-31 | 2012-11-01 | Hitachi Government & Public Corporation System Engineering Ltd | プログラムの影響範囲設定装置、並びにこれを用いた影響範囲特定方法及び影響波及のあるプログラムの抽出方法 |
CN103186463A (zh) * | 2011-12-30 | 2013-07-03 | 阿里巴巴集团控股有限公司 | 确定软件的测试范围的方法和系统 |
JP2014052757A (ja) * | 2012-09-06 | 2014-03-20 | Mitsubishi Electric Corp | ソフトウェア設計支援装置及びソフトウェア設計支援方法 |
US9760470B2 (en) | 2013-05-15 | 2017-09-12 | Mitsubishi Electric Corporation | Device, method, and program analysis of new source code to be added to execution program to check for bug |
WO2014184896A1 (ja) * | 2013-05-15 | 2014-11-20 | 三菱電機株式会社 | プログラム解析装置、プログラム解析方法およびプログラム解析プログラム |
JP2016015175A (ja) * | 2015-10-27 | 2016-01-28 | 株式会社日立公共システム | 影響範囲調査方法及び影響範囲調査装置 |
US20190026107A1 (en) * | 2015-12-30 | 2019-01-24 | Mitsubishi Electric Corporation | Source code comparison apparatus and computer readable recording medium |
JPWO2017115449A1 (ja) * | 2015-12-30 | 2018-03-15 | 三菱電機株式会社 | ソースコード比較装置およびソースコード比較プログラム |
GB2561742A (en) * | 2015-12-30 | 2018-10-24 | Mitsubishi Electric Corp | Source code comparison device and source code comparison program |
WO2017115449A1 (ja) * | 2015-12-30 | 2017-07-06 | 三菱電機株式会社 | ソースコード比較装置およびソースコード比較プログラム |
WO2017187537A1 (ja) * | 2016-04-26 | 2017-11-02 | 三菱電機株式会社 | 依存関係抽出装置および依存関係抽出プログラム |
JPWO2017187537A1 (ja) * | 2016-04-26 | 2018-06-28 | 三菱電機株式会社 | 依存関係抽出装置および依存関係抽出プログラム |
WO2018220923A1 (ja) * | 2017-05-30 | 2018-12-06 | オムロン株式会社 | プログラム開発支援装置、プログラム開発支援システム、プログラム開発支援方法、および、プログラム開発支援プログラム |
JP2018205826A (ja) * | 2017-05-30 | 2018-12-27 | オムロン株式会社 | プログラム開発支援装置、プログラム開発支援システム、プログラム開発支援方法、および、プログラム開発支援プログラム |
US11287789B2 (en) | 2017-05-30 | 2022-03-29 | Omron Corporation | Program development support device, program development support system, program development support method, and non-transitory computer-readable recording medium |
WO2021084735A1 (ja) * | 2019-11-01 | 2021-05-06 | 三菱電機株式会社 | ソースコード解析装置 |
JPWO2021084735A1 (ja) * | 2019-11-01 | 2021-05-06 | ||
JP7237186B2 (ja) | 2019-11-01 | 2023-03-10 | 三菱電機株式会社 | ソースコード解析装置 |
US11907710B2 (en) | 2019-11-01 | 2024-02-20 | Mitsubishi Electric Corporation | Source code analysis apparatus |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2008191963A (ja) | ソースコード検証システム、ソースコード検証方法、およびソースコード検証用プログラム | |
US9389849B2 (en) | Test case pattern matching | |
US8448139B2 (en) | Automatic correction of application based on runtime behavior | |
US8589884B2 (en) | Method and system for identifying regression test cases for a software | |
US9535821B1 (en) | Displaying violated coding rules in source code | |
US20140289563A1 (en) | Automatic correction of application based on runtime behavior | |
US20210049091A1 (en) | Software visualization apparatus, software visualization method, and computer readable medium | |
JP5176478B2 (ja) | データフロー解析装置、データフロー解析方法およびデータフロー解析プログラム | |
EP3570173B1 (en) | Equivalence verification apparatus and equivalence verification program | |
JP4888790B2 (ja) | 契約定義関数検証装置、その方法及びそのプログラム | |
JP6107455B2 (ja) | テストスケジュール決定装置、プログラム | |
US9600245B2 (en) | Computer-implemented method for generating control unit program code and message management environment relating thereto | |
JP2016167180A (ja) | デバッグ支援装置、デバッグ支援システム、デバッグ支援方法、および、デバッグ支援プログラム | |
JP2016057715A (ja) | 図形式プログラム解析装置 | |
Maras et al. | Towards specifying pragmatic software reuse | |
JPWO2012049816A1 (ja) | モデル検査装置、方法及びプログラム | |
CN113326193A (zh) | 一种小程序测试方法及装置 | |
JP6006577B2 (ja) | デグレードテスト支援システム、デグレードテスト支援方法及びデグレードテスト支援プログラム | |
JP5755861B2 (ja) | テストケース生成装置、テストケース生成方法およびテストケース生成プログラム | |
JP2007213487A (ja) | アスペクト生成方法及び装置 | |
JP2014106770A (ja) | 型チェック装置、型チェック方法および型チェックプログラム | |
JP2009042951A (ja) | プログラム中のデータ抽出方法及び装置 | |
JP2013206310A (ja) | モデル検査装置、モデル検査方法、およびプログラム | |
JP5343840B2 (ja) | プログラムの解析装置及び解析方法 | |
US20230418597A1 (en) | Call graph generation apparatus, call graph generation method and program |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20110328 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20110621 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20111018 |