JP5678689B2 - コンピュータプログラム、プログラム解析方法及びプログラム解析装置 - Google Patents

コンピュータプログラム、プログラム解析方法及びプログラム解析装置 Download PDF

Info

Publication number
JP5678689B2
JP5678689B2 JP2011016842A JP2011016842A JP5678689B2 JP 5678689 B2 JP5678689 B2 JP 5678689B2 JP 2011016842 A JP2011016842 A JP 2011016842A JP 2011016842 A JP2011016842 A JP 2011016842A JP 5678689 B2 JP5678689 B2 JP 5678689B2
Authority
JP
Japan
Prior art keywords
function
call
line
cpu
data
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.)
Expired - Fee Related
Application number
JP2011016842A
Other languages
English (en)
Other versions
JP2012155680A (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2011016842A priority Critical patent/JP5678689B2/ja
Publication of JP2012155680A publication Critical patent/JP2012155680A/ja
Application granted granted Critical
Publication of JP5678689B2 publication Critical patent/JP5678689B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Description

本発明は、プログラムの動作を解析するコンピュータプログラム、プログラム解析方法及びプログラム解析装置に関する。
開発されたプログラムは、その運用及び保守に係る歳月の経過にともない、改良、機能追加等の修正が必要になる。しかし、修正対象のソースコード、設計仕様書、要求仕様書等が手に入らない場合、プログラムの動作がわからないため、プログラムの運用及び保守は困難を極める。そこで、プログラムの動作を解析するリバースエンジニアリングが行われる(例えば、特許文献1〜5参照)。
特開平06−139224号公報 特開2005−124112号公報 特許第4288978号公報 特開2004−302751号公報 特表2001−527235号公報
しかしながら、多くの場合、リバースエンジニアリングによりプログラムの分析を行うときは、ソースコードが必要とされる。リバースエンジニアリングはオブジェクトコードをソースコードに戻す逆コンパイルを含む。しかし、逆コンパイルによってコンパイル前のソースコードを復元することは難しい。また、逆コンパイルは著作権を侵害するおそれがある。
本発明は斯かる事情に鑑みてなされたものである。その目的は、入力データの変化に基づいてプログラムに含まれる関数の動作変化を取得することが可能なコンピュータプログラム、プログラム解析方法及びプログラム解析装置を提供することである。
本願による開示の一観点は、対象プログラムを解析する処理をコンピュータに実行させるコンピュータプログラムにおいて、第1入力データ及び該第1入力データと異なる第2入力データに夫々基づく前記対象プログラムの第1駆動履歴及び第2駆動履歴を記録する記録手段に記録された該第1駆動履歴から、該対象プログラムに含まれる関数の呼び出し情報に基づいて、該関数の第1呼び出し履歴を抽出し、前記記録手段に記録された第2駆動履歴から、前記関数の呼び出し情報に基づいて、該関数の第2呼び出し履歴を抽出し、前記関数の第1及び第2呼び出し履歴に夫々基づいて、前記第1及び第2駆動履歴各々における該関数の呼び出し回数又は呼び出し箇所を取得する処理をコンピュータに実行させる。
本願による開示の一観点によれば、入力データの変化に基づいて、プログラムに含まれる関数の動作変化を取得することが可能である。
プログラム解析装置のハードウェア構成例を示すブロック図である。 データ処理の流れの一例を示すデータフロー図である。 プログラム解析処理の手順の一例を示すフローチャートである。 関数の呼び出し履歴を計側する処理の手順の一例を示すフローチャートである。 関数の呼び出し履歴を計側する処理の手順の一例を示すフローチャートである。 関数の呼び出し履歴を分析する処理の手順の一例を示すフローチャートである。 関数の呼び出し履歴を分析する処理の手順の一例を示すフローチャートである。 関数の呼び出し履歴を分析する処理の手順の一例を示すフローチャートである。 基準データである商品在庫テーブルのレコード例を示す説明図である。 変更データである商品在庫テーブルのレコード例を示す説明図である。 差分データの一例を示す説明図である。 基準データ実行履歴ファイルの内容の一例を示す説明図である。 変更データ実行履歴ファイルの内容の一例を示す説明図である。 基準データ関数別計測ファイルの内容の一例を示す説明図である。 変更データ関数別計測ファイルの内容の一例を示す説明図である。 関数別呼び出し履歴分析ファイルの内容の一例を示す説明図である。 差分リストファイルの内容の一例を示す説明図である。 基準データに基づく関数の分析情報と変更データに基づく関数の分析情報との差分を示す説明図である。 解析対象プログラムの実行履歴における関数間の構造の一例を示す説明図である。
以下、実施の形態をその図面に基づいて説明する。本願に開示するプログラム解析装置をPC(パーソナルコンピュータ)に適用した実施の形態について説明する。
なお、本発明は、以下の実施の形態に限定されるものではない。
図1は、プログラム解析装置1のハードウェア構成例を示すブロック図である。プログラム解析装置1は、CPU(Central Processing Unit)11、ROM(Read Only Memory)12、RAM(Random Access Memory)13、ハードディスク14、ディスクドライブ15、通信部16、表示部17及び操作部18を含む。プログラム解析装置1のハードウェア各部は、バス1bを介して相互に接続されている。
CPU11は、プログラム解析装置1のハードウェア各部を制御する。CPU11は、ハードディスク14に記録されたプログラム1PをRAM13に読み込み、プログラム1Pを実行する。
ROM12は、プログラム解析装置1の起動時にCPU11が実行するBIOS(Basic Input/Output System)等を記録している。
RAM13は、例えばSRAM(Static RAM)、DRAM(Dynamic RAM)であり、CPU11が実行する処理の過程で必要な作業変数、データ等を一時的に記録する。なお、RAM13は主記憶装置の一例であり、RAM13の代わりにフラッシュメモリ、メモリカード等が用いられてもよい。
ハードディスク14は、CPU11が実行するプログラム1Pを記録している。
なお、ハードディスク14は、プログラム解析装置1の内部に取り付けられるものであっても、プログラム解析装置1の外部に置かれるものであってもよい。また、ハードディスク14は補助記憶装置の一例であり、大容量の情報の記録が可能なフラッシュメモリ、CD(Compact Disc)、DVD(Digital Versatile Disk)、BD(Blu-ray Disc、登録商標)等の光ディスク1aで代替してもよい。
ディスクドライブ15は、外部の記録媒体であるCD、DVD、BD等の光ディスク1aから情報を読み込み、光ディスク1aに情報を記録する。CPU11は、操作部18からディスクドライブ15に対する光ディスク1aの排出命令を受け付けた場合、ディスクドライブ15の図示しないトレイを排出する。
通信部16は、有線又は無線通信のモデム又はLANカード等であり、インターネットNに接続されている。通信部16は、電話回線と接続することができてもよい。
表示部17は、例えば液晶ディスプレイ、有機EL(Electro-Luminescence)ディスプレイ、CRT(Cathode Ray Tube)ディスプレイ等の画面を有し、CPU11からの指示に従って、プログラム1Pに係る各種情報を表示する。
操作部18は、ユーザが各種の入力を行うキーボード、マウス、電源スイッチ、ディスクドライブ15から光ディスク1aを排出するための操作ボタン等の入力デバイスを含む。操作部18は、ユーザによる操作に基づいて入力信号を生成する。生成された入力信号は、バス1bを介してCPU11に送信される。
次に、プログラム解析装置1の動作の概略について説明する。
図2は、データ処理の流れの一例を示すデータフロー図である。対象プログラム実行部21、関数呼び出し履歴計側部22及び関数呼び出し履歴分析部23は、CPU11がハードディスク14に記録されたプログラム1Pに基づいて動作することにより実行される各機能部である。
対象プログラム実行部21は、入力データを受け付ける。プログラム解析装置1が受け付けるデータには、この入力データの他に当該入力データの値又はデータ量を変更した変更データ(第2入力データ)CDがある。そこで以後、変更データCDの元となる入力データを変更データCDと区別するために基準データSD(第1入力データ)と呼ぶ。対象プログラム実行部21は、受け付けた基準データSDに基づいて、解析対象プログラムを当該プログラムの機能単位毎に実行する。対象プログラム実行部21は、基準データSDに基づいて実行した解析対象プログラムの実行履歴を取得する。対象プログラム実行部21は、取得した解析対象プログラムの実行履歴を基準データ実行履歴ファイル(第1駆動履歴)21Fとしてハードディスク14に記録する。
対象プログラム実行部21は、基準データSDの値又はデータ量を変更した変更データCDを受け付ける。対象プログラム実行部21は、変更データCDに対しても基準データSDと同様に解析対象プログラムを機能単位毎に実行する。対象プログラム実行部21は、変更データCDに基づいて解析対象プログラムを実行し、その実行履歴を取得する。対象プログラム実行部21は、取得した実行履歴を変更データ実行履歴ファイル(第2駆動履歴)210Fとしてハードディスク14に記録する。
基準データ実行履歴ファイル21F及び変更データ実行履歴ファイル210Fには、ともに解析対象プログラムの実行履歴が行単位の文字列として記述されている。基準データ実行履歴ファイル21F及び変更データ実行履歴ファイル210Fには、呼び出された関数に関する情報が記述された行と、呼び出された関数に関する情報が記述されていない行とを含む。なお、以下では関数の呼び出しと関数の実行は同じ意味である。呼び出された関数に関する情報が記述された行には、少なくとも呼び出された関数名と、関数の呼び出し開始を示す情報又は関数の呼び出し終了を示す情報とが記述されている。関数の呼び出し開始を示す情報又は関数の呼び出し終了を示す情報の有無により、呼び出された関数に関する情報が記述された行と、呼び出された関数に関する情報が記述されていない行とを判別することができる。なお、関数の呼び出し開始及び呼び出し終了を示す情報は、呼び出し開始と呼び出し終了とを判別することができるのであれば、記号、数式、語句、文等のいずれであってもよい。
関数呼び出し履歴計側部22は、ハードディスク14から基準データ実行履歴ファイル21Fを先頭行から読み込み、関数の呼び出し回数、関数の呼び出し開始行、関数の呼び出し終了行を行番号に基づいて計測する。関数呼び出し履歴計側部22は、計測結果を基準データ関数別計測ファイル(第1呼び出し履歴)22Fとしてハードディスク14に記録する。
関数呼び出し履歴計側部22は、変更データ実行履歴ファイル210Fについても同様に関数の呼び出し回数、関数の呼び出し開始行、関数の呼び出し終了行を行番号に基づいて計測し、その計測結果を変更データ関数別計測ファイル(第2呼び出し履歴)220Fとしてハードディスク14に記録する。
なお、基準データ実行履歴ファイル21F及び変更データ実行履歴ファイル210Fには、行番号が記述されていてもよいし、記述されていなくてもよい。基準データ実行履歴ファイル21F及び変更データ実行履歴ファイル210Fに行番号が記述されている場合、関数呼び出し履歴計側部22は、当該行番号を利用して上述の計測を行う。一方、基準データ実行履歴ファイル21F及び変更データ実行履歴ファイル210Fに行番号が記述されていない場合、関数呼び出し履歴計側部22は、内部的に行番号をカウントしながら上述の計測を行う。
関数呼び出し履歴分析部23は、ハードディスク14から基準データ関数別計測ファイル22F及び変更データ関数別計測ファイル220Fを読み込む。関数呼び出し履歴分析部23は、基準データ関数別計測ファイル22Fに記録された関数の呼び出し開始行及び呼び出し終了行の行番号に基づいて、関数毎に各種の行間距離を算出する。ここでの行間距離は、行番号の差である。なお、行間距離は、行番号の差に所定数を加算又は減算したものでもよいし、行番号の差に所定数を掛けたものでもよい。
関数呼び出し履歴分析部23は、変更データ関数別計測ファイル220Fに記録された関数についても、呼び出し開始行及び呼び出し終了行の行番号に基づいて、関数毎に各種の行間距離を算出する。
関数呼び出し履歴分析部23は、基準データSD及び変更データCDに夫々対応する関数の呼び出し回数及び上記の行間距離が一覧形式に整理された情報を、関数別呼び出し履歴分析ファイル23Fとしてハードディスク14に記録する。関数呼び出し履歴分析部23は、基準データSDに対応する関数の分析情報と変更データCDに対応する関数の分析情報とを比較し、この比較結果に基づいて各関数を数種類に分類する。関数呼び出し履歴分析部23は、基準データSDと変更データCDとの差分である差分データDDを受け付ける。関数呼び出し履歴分析部23は、分類した関数を受け付けた差分データDDと対応付けた態様で差分リストファイル230Fに出力する。
図2では、基準データSDの受け付けから基準データ関数別計測ファイル22Fを出力するまでの処理フローと、変更データCDの受け付けから変更データ関数別計測ファイル220Fを出力するまでの処理フローとが並列に示されている。しかし、これらの処理フローは直列に実行されてもよい。
図2の対象プログラム実行部21が実行する処理は、外部の情報処理装置が実行してもよい。かかる場合、プログラム解析装置1は、外部の情報処理装置が生成した基準データ実行履歴ファイル21F及び変更データ実行履歴ファイル210Fをディスクドライブ15又は通信部16を介して受け付ける。あるいは、プログラム解析装置1は、フラッシュメモリ等の半導体メモリ1cを介して、基準データ実行履歴ファイル21F及び変更データ実行履歴ファイル210Fを受け付けてもよい。関数呼び出し履歴計側部22は、外部から受け付けた基準データ実行履歴ファイル21F及び変更データ実行履歴ファイル210Fを用いて、関数の呼び出し履歴を計測する。
図3は、プログラム解析処理の手順の一例を示すフローチャートである。図3は、プログラム解析処理の全体的な概要を示している。
CPU11は、基準データSD及び変更データCDを受け付ける(ステップS101)。CPU11は、受け付けた基準データSD及び変更データCDに基づいて、解析対象プログラムを実行する(ステップS102)。CPU11は、基準データSD及び変更データCDの全データに基づいて、解析対象プログラムを実行したか否か判定する(ステップS103)。CPU11は、基準データSD及び変更データCDの全データに基づいて、解析対象プログラムを実行していないと判定した場合(ステップS103:NO)、ステップS102に処理を戻す。CPU11は、基準データSD及び変更データCDの全データに基づいて、解析対象プログラムを実行したと判定した場合(ステップS103:YES)、基準データ実行履歴ファイル21F及び変更データ実行履歴ファイル210Fを作成する(ステップS104)。
CPU11は、基準データ実行履歴ファイル21F及び変更データ実行履歴ファイル210Fに基づいて、解析対象プログラムに含まれる関数の呼び出し回数、関数の呼び出し開始行及び関数の呼び出し終了行を計測する(ステップS105)。CPU11は、基準データ実行履歴ファイル21F及び変更データ実行履歴ファイル210Fの全データに基づいて、解析対象プログラムに含まれる関数の呼び出し回数等、ステップS105で計測する項目を全て計測したか否か判定する(ステップS106)。CPU11は、基準データ実行履歴ファイル21F及び変更データ実行履歴ファイル210Fの全データに基づいて、当該関数の呼び出し回数等、ステップS105で計測する項目を一つでも計測していないと判定した場合(ステップS106:NO)、ステップS105に処理を戻す。CPU11は、基準データ実行履歴ファイル21F及び変更データ実行履歴ファイル210Fの全データに基づいて、当該関数の呼び出し回数等を計測したと判定した場合(ステップS106:YES)、ステップS107に処理を進める。CPU11は、計測結果に基づいて基準データ関数別計測ファイル22F及び変更データ関数別計測ファイル220Fを作成する(ステップS107)。
CPU11は、基準データ関数別計測ファイル22F及び変更データ関数別計測ファイル220Fに基づいて、関数毎に各種の行間距離を算出し、算出した行間距離が関数の呼び出し回数と対応付けられた関数別呼び出し履歴分析ファイル23Fを作成する(ステップS108)。CPU11は、差分データDDを受け付ける(ステップS109)。CPU11は、基準データSD及び変更データCDに夫々対応する関数の分析情報を比較することにより、関数を分類し、分類結果が差分データDDと対応付けられた差分リストファイル230Fを作成し(ステップS110)、処理を終える。
上述のステップS101からステップS104までの処理は、対象プログラム実行部21が行う処理機能に該当する。ステップS105からステップS107までの処理は、関数呼び出し履歴計側部22が行う処理機能に該当する。ステップS108からステップS110までの処理は、関数呼び出し履歴分析部23が行う処理機能に該当する。
次に、プログラム解析装置1の動作について詳細に説明する。
本実施の形態では、対象プログラム実行部21が解析対象プログラムを実行する前に、入力データである基準データSDと変更データCDとを用意する必要がある。基準データSD及び変更データCDは、データベースのテーブルデータ、画面からの入力データ、ファイルのデータ等である。基準データSDは、既存の入力データでもよいし、手作業又は入力データ作成ソフト等により新規に作成されてもよい。
変更データCDは、基準データSDの値の一部若しくは全部を変更したデータ、又は基準データSDのデータ量を変更したデータである。基準データSDのデータ量の変更は、データの削除又はデータの追加により行われる。データの追加は、基準データSDの複製又は基準データSDから変更されたデータの追加により行われる。
基準データSDを変更する場合、基準データSDのデータ特性が考慮される。例えば、基準データSDがデータベースのテーブルレコードである場合、変更データCDは当該テーブルに関するテーブル制約及び列制約に整合するように基準データSDを変更することにより、作成される。
基準データSD及び変更データCDが用意された段階で、基準データSDと変更データCDとの差分データDDが作成される。例えば、基準データSD及び変更データCDがデータベースのテーブルデータである場合、テーブル名、差異が生じている列名、差異が生じているレコードの主キーデータ値等が差分に該当する。あるいは、基準データSDへのデータ削除又はデータ追加により変更データCDが作成された場合、削除されたレコードセット又は追加されたレコードセットの記録を差分データDDとしてもよい。
なお、基準データSDに対して最初に差分データDDを作成し、その後に基準データSDと差分データDDとから変更データCDを作成してもよい。
プログラム解析装置1のハードディスク14に解析対象プログラムをインストールする。この解析対象プログラムは、機械語で記述されている。
また、用意した基準データSD及び変更データCDをプログラム解析装置1のハードディスク14に記録する。
CPU11は、基準データSD及び変更データCDを解析対象プログラムに入力する。CPU11は解析対象プログラムを機能単位で実行し、基準データSD及び変更データCDの夫々について解析対象プログラムの実行履歴を取得する。この実行履歴を取得するために、既存の技術が利用される。例えば、解析対象プログラムがJAVA(登録商標)アプリケーションである場合、スタックの中身を実行履歴とし、仮想マシンにスタックトレースを出力させる。
CPU11は、基準データSD及び変更データCDに基づいて実行された解析対象プログラムの実行履歴を夫々基準データ実行履歴ファイル21F及び変更データ実行履歴ファイル210Fとしてハードディスク14に記録する。
図4及び図5は、関数の呼び出し履歴を計側する処理の手順の一例を示すフローチャートである。以下は、基準データSDに係る基準データ実行履歴ファイル21Fに基づく処理であるが、変更データCDに係る変更データ実行履歴ファイル210Fに基づく処理についても、CPU11は同様の処理を実行する。
以下のステップS202からステップS212までの処理は、基準データ実行履歴ファイル21Fの1行についての処理であり、基準データ実行履歴ファイル21Fの行数だけ繰り返し実行される。
CPU11は、基準データ実行履歴ファイル21Fをハードディスク14からRAM13にロードする(ステップS201)。CPU11は、基準データ実行履歴ファイル21Fから次の1行を読み込む(ステップS202)。ステップS202において、CPU11は基準データ実行履歴ファイル21Fを開いた直後の場合、先頭の1行を読み込む。CPU11は、読み込んだ行から行番号と、関数名と、当該関数の呼び出し開始又は呼び出し終了の情報とを取得する(ステップS203)。なお、行番号は、基準データ実行履歴ファイル21F又は変更データ実行履歴ファイル210Fの作成時に記述されてもよいし、CPU11がこれらのファイルから1行ずつデータを読み込む際に、カウントしてもよい。
CPU11は、ステップS203において関数名を取得したか否か判定する(ステップS204)。CPU11は、ステップS203において関数名を取得しなかったと判定した場合(ステップS204:NO)、ステップS202に処理を戻す。CPU11は、ステップS203において関数名を取得したと判定した場合(ステップS204:YES)、配列を読み込む(ステップS205)。この配列は基準データ実行履歴ファイル21Fから読み込んだ関数名を格納する作業用配列である。
CPU11は、配列の中にステップS203で取得した関数名があるか否か判定する(ステップS206)。CPU11は、配列の中にステップS203で取得した関数名がないと判定した場合(ステップS206:NO)、配列にステップS203で取得した関数名を格納し(ステップS207)、ステップS208へ処理を移す。CPU11は、配列の中にステップS203で取得した関数名があると判定した場合(ステップS206:YES)、ステップS203で取得した情報が関数の呼び出し開始情報か否か判定する(ステップS208)。
CPU11は、ステップS203で取得した情報が関数の呼び出し開始情報であると判定した場合(ステップS208:YES)、当該関数の呼び出し回数をインクリメントする(ステップS209)。CPU11は、ステップS203で取得した行番号を当該関数の呼び出し開始行番号として記録し(ステップS210)、ステップS212へ処理を移す。CPU11は、ステップS203で取得した情報が関数の呼び出し開始情報でないと判定した場合(ステップS208:NO)、ステップS203で取得した行番号を当該関数の呼び出し終了行番号として記録し(ステップS211)、ステップS212へ処理を移す。CPU11は、基準データ実行履歴ファイル21Fの全行を処理したか否か判定する(ステップS212)。CPU11は、基準データ実行履歴ファイル21Fの全行を処理していないと判定した場合(ステップS212:NO)、ステップS202に処理を戻す。CPU11は、基準データ実行履歴ファイル21Fの全行を処理したと判定した場合(ステップS212:YES)、処理を終了する。
図4及び図5の処理により、基準データSD及び変更データCDに基づいて夫々呼び出された関数毎に呼び出し回数、呼び出し開始行番号及び呼び出し終了行番号がRAM13に記録される。
呼び出し回数が複数回である関数の場合、複数の呼び出し開始行番号及び複数の呼び出し終了行番号がRAM13に記録される。かかる場合、呼び出し開始行番号の数と呼び出し終了行番号の数とは同数である。
CPU11は、上述において計測した関数の呼び出し履歴を整理し、基準データ関数別計測ファイル22F及び変更データ関数別計測ファイル220Fを作成する。
例えば、基準データ関数別計測ファイル22Fを作成するために、CPU11は1つの関数について、関数名及び呼び出し回数をRAM13に記録した関数の呼び出し履歴から抽出する。
CPU11は、当該関数の呼び出し開始が最初に取得された行番号をRAM13に記録した関数の呼び出し履歴から抽出する。以後、この行番号を初出開始行と呼ぶ。
CPU11は、当該関数の呼び出し終了が最初に取得された行番号をRAM13に記録した関数の呼び出し履歴から抽出する。以後、この行番号を初出終了行と呼ぶ。
CPU11は、当該関数の呼び出し開始が最後に取得された行番号をRAM13に記録した関数の呼び出し履歴から抽出する。以後、この行番号を最終開始行と呼ぶ。
CPU11は、当該関数の呼び出し終了が最後に取得された行番号をRAM13に記録した関数の呼び出し履歴から抽出する。以後、この行番号を最終終了行と呼ぶ。
CPU11は、1つの関数について、関数名、関数の呼び出し回数、初出開始行、初出終了行、最終開始行及び最終終了行を1レコードとする基準データ関数別計測ファイル22Fを作成する。基準データ関数別計測ファイル22Fは、CPU11が取得した関数の数だけこれらのレコードを含む。
同様に、CPU11は、変更データ実行履歴ファイル210Fに基づいて計測した関数の呼び出し履歴から、変更データ関数別計測ファイル220Fを作成する。変更データ関数別計測ファイル220Fのファイル形式は、基準データ関数別計測ファイル22Fと同一である。すなわち、変更データ関数別計測ファイル220Fは、1つの関数について、関数名、関数の呼び出し回数、初出開始行、初出終了行、最終開始行及び最終終了行を含む。そして、変更データ関数別計測ファイル220Fは、CPU11が取得した関数の数だけこれらのレコードを含む。
CPU11は、作成した基準データ関数別計測ファイル22F及び変更データ関数別計測ファイル220Fをハードディスク14に記録する。
上述では、関数の呼び出し回数が複数回である関数の場合、複数の呼び出し開始行番号及び複数の呼び出し終了行番号がRAM13に記録された。しかし、RAM13に記録する呼び出し開始行番号及び呼び出し終了行番号は、夫々2つずつでもよい。すなわち、CPU11は、初出開始行、初出終了行、最終開始行及び最終終了行を記録する領域を夫々1つずつRAM13に確保する。CPU11は、関数の呼び出し開始の行を読み込んだ場合、初出開始行及び最終開始行に、読み込んだ行の行番号を記録する。CPU11は、次に再び関数の呼び出し開始の行を読み込んだ場合、初出開始行はそのままにし、最終開始行を新たに読み込んだ行の行番号に更新する。CPU11は、その後さらに関数の呼び出し開始の行を読み込んだ場合、次々と最終開始行だけを更新する。
CPU11は、関数の呼び出し終了の行を読み込んだ場合、初出終了行及び最終終了行に、読み込んだ行の行番号を記録する。CPU11は、次に再び関数の呼び出し終了の行を読み込んだ場合、初出終了行はそのままにし、最終終了行を新たに読み込んだ行の行番号に更新する。CPU11は、その後さらに関数の呼び出し終了の行を読み込んだ場合、次々と最終終了行だけを更新する。
図6、図7及び図8は、関数の呼び出し履歴を分析する処理の手順の一例を示すフローチャートである。
CPU11は、基準データ関数別計測ファイル22Fをハードディスク14からRAM13にロードする(ステップS301)。CPU11は、基準データ関数別計測ファイル22Fから次の1行を読み込む(ステップS302)。ステップS302において、CPU11は基準データ関数別計測ファイル22Fを開いた直後の場合、先頭の1行を読み込む。CPU11は、関数名及び関数の呼び出し回数を取得する(ステップS303)。
CPU11は、初出開始行及び初出終了行を取得する(ステップS304)。CPU11は、初出開始行及び初出終了行の差を算出する(ステップS305)。以後、初出開始行及び初出終了行の差を関数行間距離と呼ぶ。
CPU11は、初出開始行及び最終開始行を取得する(ステップS306)。CPU11は、初出開始行及び最終開始行の差を算出する(ステップS307)。以後、初出開始行及び最終開始行の差を開始行間距離と呼ぶ。
CPU11は、基準データ関数別計測ファイル22Fの全行、すなわち全関数についてステップS302からステップS307までの処理を実行したか否か判定する(ステップS308)。CPU11は、基準データ関数別計測ファイル22Fの全関数についてステップS302からステップS307までの処理を実行しなかったと判定した場合(ステップS308:NO)、ステップS302に処理を戻す。CPU11は、基準データ関数別計測ファイル22Fの全関数についてステップS302からステップS307までの処理を実行したと判定した場合(ステップS308:YES)、ステップS309に処理を進める。
CPU11は、変更データ関数別計測ファイル220Fの全関数についてステップS302からステップS308の処理を実行したか否か判定する(ステップS309)。CPU11は、変更データ関数別計測ファイル220Fの全関数についてステップS302からステップS308の処理を実行していないと判定した場合(ステップS309:NO)、ステップS301に処理を戻す。なお、CPU11は、ステップS301に戻った後、ステップS301からステップS308までの処理について、基準データ関数別計測ファイル22Fを変更データ関数別計測ファイル220Fに置き換えて、実行する。
CPU11は、変更データ関数別計測ファイル220Fの全関数についてステップS302からステップS308の処理を実行したと判定した場合(ステップS309:YES)、ステップS310に処理を進める。
ここまでの段階で、基準データSD及び変更データCDに基づいて実行された解析対象プログラムの関数に関する呼び出し履歴の分析情報が、関数別にRAM13に記録されている。この分析情報は、関数名、呼び出し回数、関数行間距離及び開始行間距離を含む。
なお、関数行間距離は、初出開始行及び初出終了行の差に限らず、最終開始行及び最終終了行の差であってもよい。あるいは、関数行間距離は、関数の呼び出し開始がn回目(ただし、nは自然数)に取得された行番号と、関数の呼び出し終了がn回目に取得された行番号との差であってもよい。すなわち、関数行間距離は、関数の呼び出し開始及び呼び出し終了が夫々同一の呼び出し回数目に取得された行番号同士の差であってもよい。
また、開始行間距離は、初出開始行及び最終開始行の差に限らず、初出終了行及び最終終了行の差であってもよい。
CPU11は、基準データSDに基づく関数の分析情報と、変更データCDに基づく関数の分析情報とを関数毎に対応付け、その結果を関数別呼び出し履歴分析ファイル23Fとしてハードディスク14に記録する(ステップS310)。関数別呼び出し履歴分析ファイル23Fは、関数名、基準データSDに基づく関数の分析情報及び変更データCDに基づく関数の分析情報を1レコードとし、解析対象プログラムの実行履歴から取得された関数の数だけレコード数を有する。ただし、基準データSDに基づく関数の分析情報又は変更データCDに基づく関数の分析情報のうち、一方にのみ含まれる関数がある場合、関数別呼び出し履歴分析ファイル23Fは、存在しない分析情報のデータ部分を空データとする。
この段階では、RAM13に関数別呼び出し履歴分析ファイル23Fの内容が記録されている。
CPU11は、RAM13上の関数別呼び出し履歴分析ファイル23Fから次の1行を読み込む(ステップS311)。ステップS311において、CPU11は最初の処理時には先頭の1行を読み込む。CPU11は、基準データSDに基づく関数の分析情報又は変更データCDに基づく関数の分析情報のうち、一方の分析情報にのみ存在する関数があるか否か判定する(ステップS312)。CPU11は、基準データSDに基づく関数の分析情報又は変更データCDに基づく関数の分析情報のうち、一方の分析情報にのみ存在する関数があると判定した場合(ステップS312:YES)、当該関数を一方の分析情報にのみ存在する関数として抽出し(ステップS313)、ステップS311に処理を戻す。CPU11は、基準データSDに基づく関数の分析情報又は変更データCDに基づく関数の分析情報のうち、一方の分析情報にのみ存在する関数はないと判定した場合(ステップS312:NO)、ステップS314に処理を進める。
CPU11は、双方の分析情報に記録された呼び出し回数が同じか否か判定する(ステップS314)。CPU11は、双方の分析情報に記録された呼び出し回数が同じでないと判定した場合(ステップS314:NO)、当該関数を呼び出し回数が異なる関数として抽出し(ステップS315)、ステップS316に処理を進める。CPU11は、双方の分析情報に記録された呼び出し回数が同じであると判定した場合(ステップS314:YES)、双方の分析情報に記録された関数行間距離が同じか否か判定する(ステップS316)。
CPU11は、双方の分析情報に記録された関数行間距離が同じでないと判定した場合(ステップS316:NO)、当該関数を関数行間距離が異なる関数として抽出し(ステップS317)、ステップS318に処理を進める。CPU11は、双方の分析情報に記録された関数行間距離が同じであると判定した場合(ステップS316:YES)、双方の分析情報に記録された開始行間距離が同じか否か判定する(ステップS318)。CPU11は、双方の分析情報に記録された開始行間距離が同じでないと判定した場合(ステップS318:NO)、当該関数を開始行間距離が異なる関数として抽出し(ステップS319)、ステップS320に処理を進める。CPU11は、双方の分析情報に記録された開始行間距離が同じであると判定した場合(ステップS318:YES)、全行について、すなわち全関数についてステップS311からステップS319までの処理を実行したか否か判定する(ステップS320)。
CPU11は、全関数についてステップS311からステップS319までの処理を実行していないと判定した場合(ステップS320:NO)、ステップS311に処理を戻す。CPU11は、全関数についてステップS311からステップS319までの処理を実行したと判定した場合(ステップS320:NO)、差分データDDを受け付ける(ステップS321)。CPU11は、上述で抽出した関数のリストを差分リストファイル230Fとしてハードディスク14に記録し(ステップS322)、処理を終える。差分リストファイル230Fは、一方の分析情報にのみ存在する関数、呼び出し回数が異なる関数、関数行間距離が異なる関数及び開始行間距離が異なる関数を含み、これらの関数毎に対応する差分データDDが特定可能な態様で記録されている。
差分リストファイル230Fから関数の動作を推定することにより、解析対象プログラムの動作を把握することができる。
一方の分析情報にのみ存在する関数は、入力データの変化によって実行されなかった関数が実行されるように変化した関数又は実行された関数が実行されないように変化した関数である。例えば、一方の分析情報にのみ存在する関数は、例外処理、エラー処理等を実行する関数を含む。入力データの値又は量が変化した場合、関数の設計仕様によっては例外処理又はエラー処理の関数が呼び出されることがある。
なお、一方の分析情報にのみ存在する関数は、一方の分析情報における呼び出し回数が1回以上であり、他方の分析情報における呼び出し回数が0回である関数である。従って、一方の分析情報にのみ存在する関数であるか否かは、呼び出し回数に基づいて判定されてもよい。一方の分析情報にのみ存在する関数は、呼び出し回数が異なる関数に含めて分類されてもよい。
呼び出し回数が異なる関数は、入力データの変化によって呼び出し回数が変化した関数である。例えば、入力データ1件に対して1回呼び出される関数は、入力データの量変化に相関して呼び出し回数が変化すると考えられる。あるいは、入力データの値が変化することにより、関数の呼び出し回数が変化する場合がある。例えば、入力データが日付型であり、関数が1日分の処理ごとに1回ずつ呼び出される場合、1週間後の日付を入力したときと1カ月後の日付を入力したときとで、関数の呼び出し回数は変化すると考えられる。
関数行間距離が異なる関数は、入力データの変化によって関数の初出の呼び出し開始行と関数の初出の呼び出し終了行との間の行数が変化した関数である。関数行間距離は、関数が複数回呼び出されたとしても、2回目以降の呼び出し履歴は除外している。関数行間距離は、1回目の呼び出しにおける関数のステップ数変化を反映した情報を記録していると考えられる。
例えば、関数が解析対象プログラムの中で上位の機能を有し、当該関数から別の関数が呼び出されて処理が実行される場合がある。かかる場合、呼び出し先の別の関数の呼び出し回数が変化したとき、呼び出し元の関数の関数行間距離は変化する。従って、関数行間距離が異なる関数は、解析対象プログラムにおいて上位の機能を有する可能性がある。
なお、ここでのステップ数とは、解析対象プログラムの実行履歴(駆動履歴)の各行から取得される関数のステップ数であり、解析対象プログラムのソースコードにおけるステップ数とは異なる場合が含まれる。
開始行間距離が異なる関数は、入力データの変化によって関数の初出の呼び出し開始行と関数の最終の呼び出し開始行との間の行数が変化した関数である。開始行間距離は、ステップ数に応じた情報処理量が反映される情報である。入力データの変化によって自身の呼び出し回数が増減した場合、開始行間距離も増減する。
一方、入力データが変化しても自身の呼び出し回数は変わらない関数がある。かかる場合、開始行間距離が異なる関数は、自身から呼び出す別の関数を有し、この別の関数を呼び出す回数を変化させた可能性がある。この場合、開始行間距離が異なる関数は、解析対象プログラムにおいて上位の機能を有する可能性がある。
入力データが変化しても開始行間距離が異なる関数の呼び出し回数が変わらない場合、他の解釈も考え得る。例えば、入力データの変化によって、関数の初出の呼び出し開始行と関数の最終の呼び出し開始行との間に、割り込み処理を実行する関数が呼び出されることが考えられる。あるいは、入力データの変化によって、ステップ数が異なる複数の関数の実行順序が変化した可能性が考えられる。
差分リストファイル230Fの解釈には多様性があり、一義的に関数の動作が特定されない場合がある。上述は差分リストファイル230Fの解釈の一例である。差分リストファイル230Fの解釈は、具体的な差分データDDとの対応に基づいて行われる。また、差分リストファイル230Fの解釈には、他の情報が利用されてよい。例えば、基準データ実行履歴ファイル21F又は変更データ実行履歴ファイル210Fが差分リストファイル230Fの解釈に利用されてよい。また、解析対象プログラムがオブジェクト指向言語で作成されている場合、クラスの継承、クラスとそれに属するメソッド等の情報が差分リストファイル230Fの解釈に利用されてよい。すなわち、言語特性が差分リストファイル230Fの解釈に利用されてよい。設計仕様書、要求仕様書等が入手可能な場合、これらのドキュメントが差分リストファイル230Fの解釈に利用されてよいことは勿論である。
次に、上述したプログラム解析装置1の動作を、具体的な例を用いて説明する。
まず、入力データである基準データSD及び変更データCDについて説明する。基準データSD及び変更データCDとして、データベースのテーブルレコードを扱う。
図9は、基準データSDである商品在庫テーブルのレコード例を示す説明図である。商品在庫テーブルは、商品の在庫を管理するテーブルである。商品在庫テーブルは、商品コード、商品名、登録日時及び在庫数の各列を含む。商品コードは、商品の識別コードを格納し、商品在庫テーブルの主キーである。商品名は、商品の名称を格納する。登録日時は、在庫数が変化したときの日時を格納する。在庫数は、商品の在庫数を格納する。基準データSDの総数は2件である。
図10は、変更データCDである商品在庫テーブルのレコード例を示す説明図である。変更データCDは、基準データSDに対して4レコードが追加されたデータであり、その総数は6件である。追加データの登録日時及び在庫数は、基準データSDの先頭レコードの登録日時及び在庫数を複製している。追加データの商品コード及び商品名には、基準データSDの商品コード及び商品名と重複しない値が格納されている。
図11は、差分データDDの一例を示す説明図である。差分データDDは、基準データSDと変更データCDとの差分であるレコードが格納されたテーブル名と、差分レコードとを含む。差分レコードは、主キーである商品コードの値を列挙することにより示されている。
本実施例では、基準データSD及び変更データCDの組は1組であるため、差分データDDは1種類である。しかし、基準データSD及び変更データCDの組を複数用意した場合、各組ごとに差分データDDを作成する。
プログラム解析装置1に基準データSDを入力し、解析対象プログラムを実行する。プログラム解析装置1は、解析対象プログラムの実行履歴を取得し、取得した実行履歴を基準データ実行履歴ファイル21Fとしてハードディスク14に出力する。
同様に、プログラム解析装置1に変更データCDを入力し、解析対象プログラムの実行履歴を変更データ実行履歴ファイル210Fとしてハードディスク14に出力させる。
図12は、基準データ実行履歴ファイル21Fの内容の一例を示す説明図である。図13は、変更データ実行履歴ファイル210Fの内容の一例を示す説明図である。
図12及び図13は、解析対象プログラムの同一機能を実行した場合の実行履歴を示している。各行の左端の数字は行番号である。なお、基準データ実行履歴ファイル21F及び変更データ実行履歴ファイル210Fは、行番号が記録されていてもよいし、記録されていなくてもよい。
基準データ実行履歴ファイル21Fの1行目左端の>は、関数の呼び出し開始を示す記号である。その右隣りのtoplist1は関数名である。従って、>toplist1は、関数toplist1の呼び出し開始を示している。基準データ実行履歴ファイル21Fの2行目から5行目までは、関数内部に記述された命令文乃至制御文等である。6行目の>init1は、関数init1の呼び出し開始を示している。7行目左端の<は、関数の呼び出し終了を示す記号である。従って、<init1は、関数init1の呼び出し終了を示している。
変更データ実行履歴ファイル210Fにおける記号の意味は、基準データ実行履歴ファイル21Fにおける記号の意味と同じである。基準データ実行履歴ファイル21Fの先頭から最終行まで読むことにより、関数の呼び出し開始及び呼び出し終了を関数毎に時系列で追跡することができる。同様に変更データ実行履歴ファイル210Fの先頭から最終行まで読むことにより、関数の呼び出し開始及び呼び出し終了を関数毎に時系列で追跡することができる。
プログラム解析装置1は、基準データ実行履歴ファイル21F及び変更データ実行履歴ファイル210Fを入力データとして、夫々基準データ関数別計測ファイル22F及び変更データ関数別計測ファイル220Fをハードディスク14に出力する。
図14は、基準データ関数別計測ファイル22Fの内容の一例を示す説明図である。基準データ関数別計測ファイル22Fは、関数名、初出開始行、初出終了行、最終開始行、最終終了行及び呼び出し回数の各列を含む。関数名は、基準データ実行履歴ファイル21Fから抽出された関数名である。初出開始行は、関数の呼び出し開始が最初に読み込まれた行番号である。初出終了行は、関数の呼び出し終了が最初に読み込まれた行番号である。最終開始行は、関数の呼び出し開始が最後に読み込まれた行番号である。最終終了行は、関数の呼び出し終了が最後に読み込まれた行番号である。呼び出し回数は、関数が呼び出された回数である。
ここで、CPU11が基準データ実行履歴ファイル21Fを読み込み、基準データ関数別計測ファイル22Fを出力するまでの流れについて詳細に説明する。
CPU11は、基準データ実行履歴ファイル21Fの1行目を読み込み、toplist1の関数名と、toplist1の呼び出し開始が1行目にあることとを取得する。CPU11は、作業用の配列を参照し、toplist1がこの配列に格納されていないことから、初めて登場した関数としてtoplist1を配列に格納する。CPU11は、>の記号から1行目は呼び出し開始情報であると判定し、toplist1の呼び出し回数を0から1にインクリメントする。1行目はtoplist1の呼び出し開始の最初に相当するので、CPU11は、toplist1の初出開始行に1を記録する。また、現時点で1行目はtoplist1の呼び出し開始の最後に相当するので、CPU11はtoplist1の最終開始行に1を記録する。
CPU11は、基準データ実行履歴ファイル21Fの2行目を読み込む。2行目は「a=1」とあり、関数の呼び出し情報ではないので、CPU11は2行目を無視し、3行目を読み込む。以降、2行目と同じ理由から3行目、4行目及び5行目をCPU11は無視する。
CPU11は、基準データ実行履歴ファイル21Fの6行目を読み込む。CPU11は、init1の関数名と、init1の呼び出し開始が6行目にあることを取得する。CPU11は、配列を参照し、init1が配列に格納されていないことから、初めて登場した関数としてinit1を配列に格納する。CPU11は、init1の呼び出し回数を0から1にインクリメントする。CPU11は、init1の初出開始行及び最終開始行に6を記録する。
CPU11は、基準データ実行履歴ファイル21Fの7行目を読み込む。CPU11は、init1の関数名と、init1の呼び出し終了が7行目にあることを取得する。CPU11は、配列を参照し、init1が配列に既に格納されていることから、配列にinit1を格納しない。また、CPU11は、init1の呼び出し回数をインクリメントしない。7行目はinit1の呼び出し終了の最初に相当するので、CPU11はinit1の初出終了行に7を更新する。現時点で7行目はinit1の呼び出し終了の最後に相当するので、CPU11はinit1の最終終了行に7を記録する。
CPU11は、基準データ実行履歴ファイル21Fの8行目を読み込む。CPU11は、item1の関数名と、item1の呼び出し開始が8行目にあることを取得する。CPU11は、初めて登場した関数としてitem1を配列に格納する。CPU11は、item1の呼び出し回数を0から1にインクリメントする。CPU11は、item1の初出開始行及び最終開始行に8を記録する。
CPU11は、基準データ実行履歴ファイル21Fの9行目を読み込む。CPU11は、item1の関数名と、item1の呼び出し終了が9行目にあることを取得する。CPU11は、配列を参照し、item1が配列に既に格納されていることから、配列にitem1を格納しない。また、CPU11は、item1の呼び出し回数をインクリメントしない。9行目はitem1の呼び出し終了の最初に相当するので、CPU11はitem1の初出終了行に9を記録する。現時点で9行目はitem1の呼び出し終了の最後に相当するので、CPU11はitem1の最終終了行に9を記録する。
CPU11は、基準データ実行履歴ファイル21Fの10行目を読み込む。CPU11は、item1の関数名と、item1の呼び出し開始が10行目にあることを取得する。CPU11は、配列を参照し、item1が配列に既に格納されていることから、配列にitem1を格納しない。また、CPU11は、item1の呼び出し回数を1から2にインクリメントする。item1は初出ではないため、CPU11は初出開始行を更新しない。CPU11は、item1の最終開始行を8から10に上書き更新する。
CPU11は、基準データ実行履歴ファイル21Fの11行目を読み込む。CPU11は、item1の関数名と、item1の呼び出し終了が11行目にあることを取得する。CPU11は、配列を参照し、item1が配列に既に格納されていることから、配列にitem1を格納しない。また、CPU11は、item1の呼び出し回数をインクリメントしない。11行目はitem1の呼び出し終了の最初ではないので、CPU11はitem1の初出終了行を更新しない。CPU11は、item1の最終終了行を9から11に上書き更新する。
CPU11は、基準データ実行履歴ファイル21Fの12行目を読み込む。CPU11は、init1の関数名と、init1の呼び出し開始が12行目にあることを取得する。CPU11は、配列を参照し、init1が配列に既に格納されていることから、配列にinit1を格納しない。また、CPU11は、init1の呼び出し回数を1から2にインクリメントする。init1は初出ではないため、CPU11は初出開始行を更新しない。CPU11は、init1の最終開始行を6から12に上書き更新する。
CPU11は、基準データ実行履歴ファイル21Fの13行目を読み込む。CPU11は、init1の関数名と、init1の呼び出し終了が13行目にあることを取得する。CPU11は、配列を参照し、init1が配列に既に格納されていることから、配列にinit1を格納しない。また、CPU11は、init1の呼び出し回数をインクリメントしない。init1の呼び出し終了は初出ではないため、CPU11は初出終了行を更新しない。CPU11は、init1の最終終了行を7から13に上書き更新する。
CPU11は、基準データ実行履歴ファイル21Fの14行目を読み込む。CPU11は、toplist1の関数名と、toplist1の呼び出し終了が14行目にあることを取得する。CPU11は、配列を参照し、toplist1が配列に既に格納されていることから、配列にtoplist1を格納しない。また、CPU11は、toplist1の呼び出し回数をインクリメントしない。toplist1の呼び出し終了は初出であるため、CPU11はtoplist1の初出終了行に14を記録する。CPU11は、toplist1の最終終了行に14を記録する。
CPU11は、基準データ実行履歴ファイル21FのEOF(End Of File)を取得する。CPU11は、上述の関数の呼び出し履歴について計測した結果を基準データ関数別計測ファイル22Fとしてハードディスク14に記録する。図14の基準データ関数別計測ファイル22Fは、CPU11が基準データ実行履歴ファイル21Fについて計測処理を実行した最終状態を示している。
図15は、変更データ関数別計測ファイル220Fの内容の一例を示す説明図である。
CPU11は、基準データ実行履歴ファイル21Fについて実行した処理と同じ処理を変更データ実行履歴ファイル210Fについても実行する。図13に示す変更データ実行履歴ファイル210Fの場合、12行目以降の部分に基準データ実行履歴ファイル21Fとの差がある。CPU11は、基準データ実行履歴ファイル21Fよりもitem1が4回多く登場することを変更データ関数別計測ファイル220Fに記録する。図15の変更データ関数別計測ファイル220Fは、CPU11が変更データ実行履歴ファイル210Fについて計測処理を実行した最終状態を示している。
図16は、関数別呼び出し履歴分析ファイル23Fの内容の一例を示す説明図である。関数別呼び出し履歴分析ファイル23Fは、基準データ関数別計測ファイル22F及び変更データ関数別計測ファイル220Fのデータに基づいて作成される。
関数別呼び出し履歴分析ファイル23Fは、関数名、基準データSDに基づく関数の分析情報及び変更データCDに基づく関数の分析情報を含む。基準データSD及び変更データCDに基づく関数の分析情報は、ともに呼び出し回数、開始行間距離及び関数行間距離を含む。関数名は、基準データ関数別計測ファイル22F又は変更データ関数別計測ファイル220Fに含まれる関数名である。呼び出し回数は、基準データ関数別計測ファイル22F及び変更データ関数別計測ファイル220Fに含まれる関数の呼び出し回数である。開始行間距離は、基準データ関数別計測ファイル22F及び変更データ関数別計測ファイル220Fに夫々含まれる初出開始行及び最終開始行の差である。関数行間距離は、基準データ関数別計測ファイル22F及び変更データ関数別計測ファイル220Fに夫々含まれる初出開始行及び初出終了行の差である。
ここで、CPU11が基準データ関数別計測ファイル22Fを読み込み、関数別呼び出し履歴分析ファイル23Fを出力するまでの流れについて説明する。
CPU11は、基準データ関数別計測ファイル22Fの1行目を読み込む。CPU11は、関数名toplist1及び呼び出し回数1を取得する。CPU11は、最終開始行1と初出開始行1との差から開始行間距離0を取得する。CPU11は、初出終了行14と初出開始行1との差から関数行間距離13を取得する。
CPU11は、基準データ関数別計測ファイル22Fの2行目及び3行目を読み込み、上述と同様に夫々関数名、呼び出し回数、開始行間距離及び関数行間距離を取得する。
CPU11は、変更データ関数別計測ファイル220Fの各行からも同様に、夫々関数名、呼び出し回数、開始行間距離及び関数行間距離を取得する。
CPU11は、取得した基準データSDに基づく関数の分析情報及び変更データCDに基づく関数の分析情報に対して、関数名が一致するもの同士を対応付ける。CPU11は、関数毎に基準データSDに基づく関数の分析情報及び変更データCDに基づく関数の分析情報を1レコードとする関数別呼び出し履歴分析ファイル23Fを作成する。図16の関数別呼び出し履歴分析ファイル23Fの例では、toplist1、item1及びinit1の3関数についての3レコードが示されている。
ただし、基準データSDに基づく関数の分析情報又は変更データCDに基づく関数の分析情報のうち、一方にのみ含まれる関数がある場合、CPU11は関数の対応付けをすることができない。かかる場合、CPU11は、存在しない分析情報のデータを空データとする。例えば、関数item1の分析情報が基準データSDに基づく関数の分析情報に存在し、変更データCDに基づく関数の分析情報に存在しない場合、CPU11は、図16において変更データCDに基づくitem1の分析情報の欄を空欄とする。
図17は、差分リストファイル230Fの内容の一例を示す説明図である。差分リストファイル230Fは、差分データDD及び関数別呼び出し履歴分析ファイル23Fのデータに基づいて作成される。すなわち、差分リストファイル230Fは、基準データSDに基づく関数の分析情報又は変更データCDに基づく関数の分析情報を比較することにより作成される。
差分リストファイル230Fは、差分データDD、一方の分析情報にのみ存在する関数、呼び出し回数が異なる関数、開始行間距離が異なる関数及び関数行間距離が異なる関数の各リストを含む。差分データDDは、基準データSDと変更データCDとの差分に相当するデータである。一方の分析情報にのみ存在する関数は、入力データの変化によって実行されなかった関数が実行されるように変化した関数又は実行された関数が実行されないように変化した関数である。呼び出し回数が異なる関数は、入力データの変化によって呼び出し回数が変化した関数である。開始行間距離が異なる関数は、入力データの変化によって関数の初出の呼び出し開始行と関数の最終の呼び出し開始行との間の行数が変化した関数である。関数行間距離が異なる関数は、入力データの変化によって関数の初出の呼び出し開始行と関数の初出の呼び出し終了行との間の行数が変化した関数である。
ここで、CPU11が関数別呼び出し履歴分析ファイル23Fを読み込み、差分リストファイル230Fを出力するまでの流れについて説明する。
CPU11は、関数別呼び出し履歴分析ファイル23Fの1行目を読み込む。
CPU11は、基準データSDに基づく関数の分析情報又は変更データCDに基づく関数の分析情報のうち、一方の分析情報にのみ存在する関数があるか否か判定する。toplist1は双方の関数の分析情報に含まれているため、CPU11はtoplist1の有無に差分はないと判定する。
CPU11は、双方の分析情報に記録されたtoplist1の呼び出し回数が同じか否か判定する。呼び出し回数は夫々1、1であり同一なので、CPU11は、toplist1は呼び出し回数が異なる関数ではないと判定する。
CPU11は、双方の分析情報に記録されたtoplist1の開始行間距離が同じか否か判定する。開始行間距離は夫々0、0なので、CPU11は、toplist1は開始行間距離が異なる関数ではないと判定する。
CPU11は、双方の分析情報に記録されたtoplist1の関数行間距離が同じか否か判定する。関数行間距離は、夫々13、21であり異なるので、CPU11は、toplist1は関数行間距離が異なる関数であると判定する。
CPU11は、関数別呼び出し履歴分析ファイル23Fの2行目及び3行目を読み込み、上述と同様の処理を実行する。
その結果、CPU11は、item1は一方の分析情報にのみ存在する関数ではないと判定する。CPU11は、item1は呼び出し回数が異なる関数であると判定する。CPU11は、item1は開始行間距離が異なる関数であると判定する。CPU11は、item1は関数行間距離が異なる関数でないと判定する。
CPU11は、init1は一方の分析情報にのみ存在する関数ではないと判定する。CPU11は、init1は呼び出し回数が異なる関数でないと判定する。CPU11は、init1は開始行間距離が異なる関数であると判定する。CPU11は、init1は関数行間距離が異なる関数でないと判定する。
CPU11は、関数別呼び出し履歴分析ファイル23FのEOF(End Of File)を取得する。CPU11は、上述の判定に基づいて、一方の分析情報にのみ存在する関数、呼び出し回数が異なる関数、開始行間距離が異なる関数及び関数行間距離が異なる関数を抽出する。CPU11は、抽出した関数を差分リストファイル230Fとしてハードディスク14に記録する。図17は、CPU11により抽出された関数を示している。
図17の例では、一方の分析情報にのみ存在する関数は存在せず、呼び出し回数が異なる関数はitem1である。開始行間距離が異なる関数は、item1及びinit1、関数行間距離が異なる関数はtoplist1である。
なお、一方の分析情報にのみ存在する関数は、一方の分析情報の呼び出し回数が1回以上、他方の分析情報の呼び出し回数が0回の関数として表示されてもよい。
一方の分析情報にのみ存在する関数は存在しないので、本実施例において入力データの変化によって例外、エラー処理等を実行する関数は、実行されなかったと考えられる。
item1は、呼び出し回数が異なる関数であり、開始行間距離が異なる関数でもある。基準データSDと変更データCDとの違いはデータ数であることから、item1は入力データ数の違いにより呼び出し回数が変化する関数であるといえる。そのため、item1は、商品在庫の情報を商品の種類ごとに処理する関数である可能性がある。
init1は、呼び出し回数が異なる関数ではなく、開始行間距離が異なる関数である。init1は、解析対象プログラムの中で上位の機能を有し、複数回実行された関数を呼び出した可能性がある。また、基準データ実行履歴ファイル21F又は変更データ実行履歴ファイル210Fを参照した場合、init1とitem1とは入れ子構造であることが予想される。そうすると、init1からitem1が呼び出された可能性が示唆される。
toplist1は、呼び出し回数が異なる関数ではなく、関数行間距離が異なる関数である。toplist1は、入力データの量が増加することにより少なくとも1回目の呼び出しにおける実行されたステップ数が増大している。しかし、自身の呼び出し回数に差は生じなかったので、toplist1は解析対象プログラムの中で上位の機能を有するものと考えられる。また、基準データ実行履歴ファイル21F又は変更データ実行履歴ファイル210Fを参照した場合、toplist1とinit1とは入れ子構造であることが予想される。そうすると、toplist1からinit1が呼び出された可能性が示唆される。
プログラム解析装置1によれば、入力データの変化に基づいて、プログラムに含まれる関数の動作変化を取得することが可能である。
解析対象プログラムの機能毎に実行履歴から抽出された関数の属性は、入力データの変化に対する動作変化に基づいて4種類に分類される。差分リストファイル230Fにおいて、関数は基準データSD及び変更データCDの差分である差分データDDと、対応づけられており、解析対象プログラムにおける各関数の動作の理解を支援することができる。
プログラム解析装置1によれば、解析対象プログラムの実行履歴に基づいて、関数の呼び出し回数、開始行間距離及び関数行間距離を求めることができる。これにより、プログラム解析装置1は、関数が上位の機能を有するか否かについて分析を行う上で、有益な情報を提供することができる。
なお、CPU11は、基準データ実行履歴ファイル21F、変更データ実行履歴ファイル210F、基準データ関数別計測ファイル22F、変更データ関数別計測ファイル220F及び関数別呼び出し履歴分析ファイル23Fをハードディスク14に記録する。しかし、CPU11は、これらのファイルをRAM13に記録してもよい。
図16の関数別呼び出し履歴分析ファイル23Fには、基準データSDに基づく関数の分析情報と変更データCDに基づく関数の分析情報とが含まれていた。双方を比較することにより、入力データの変化に基づく関数の動作変化を知ることができる。しかし、基準データSDに基づく関数の分析情報と変更データCDに基づく関数の分析情報との差が定量的に求められてもよい。
図18は、基準データSDに基づく関数の分析情報と変更データCDに基づく関数の分析情報との差分を示す説明図である。図18の関数名は、図16の関数名と同じである。図16の呼び出し回数差、開始行間距離差及び関数行間距離差は、夫々図16の基準データSDに基づく関数の分析情報と変更データCDに基づく関数の分析情報との各差に該当する。つまり、図18には、入力データの変化による関数の動作変化が定量的に示されている。
item1は、呼び出し回数に4回、開始行間距離に8行の変化がある。変更データCDの件数が基準データSDの件数より4件多いことを勘案した場合、item1は、商品在庫テーブルのレコードを1件ずつ処理する関数であることが想像される。
init1は、関数行間距離に8行の変化がある。この変化量はitem1の開始行間距離の変化に等しい。従って、init1は、item1を呼び出していることが想像される。
toplist1は、呼び出し回数及び開始行間距離に変化がなく、関数行間距離に8行の変化がある。この変化量はitem1及びinit1の開始行間距離の変化に等しい。従って、toplist1は、item1又はinit1を呼び出していることが想像される。
なお、基準データに対応する関数の分析情報と変更データに対する関数の分析情報との間に差がないことも、リバースエンジニアリングの情報として有益である。従って、図18において、0と記された情報からも、関数の解釈に有益な情報が得られる。例えば、toplist1及びinit1は、入力データのデータ量が変化しても呼び出し回数は変化していない。そのため、toplist1及びinit1は、データ量の変化とは無関係な処理をしていることが想像される。
本実施例では、基準データSDと変更データCDとの間で、商品在庫テーブルのレコード数を変化させた。しかし、基準データSDと変更データCDとの間で、入力データの値を変化させてもよいことは勿論である。例えば、変更データCDの作成に際し、商品在庫テーブルのレコード数は基準データSDのレコード数と同じ2件とする。ただし、変更データCDの登録日時又は在庫数を基準データSDの登録日時又は在庫数と異なる値に変更する。
本実施例では、解析対象プログラムの機能毎に、関数別の分析を行った。しかし、関数間の構造が解析されてもよい。例えば、解析対象プログラムの実行履歴において、関数Aの呼び出し開始と呼び出し終了との間に、関数Bの呼び出し開始と呼び出し終了とがある場合、関数Bは関数Aの入れ子関数である可能性がある。かかる場合、関数Aから関数Bが呼び出される関係にあり、関数Aは上位の関数、関数Bは下位の関数であるといえる。
図19は、解析対象プログラムの実行履歴における関数間の構造の一例を示す説明図である。図19では、関数の呼び出し順序に基づいた入れ子構造が示されている。
図12又は図13の実行履歴において、toplist1の呼び出し開始と呼び出し終了との間に、init1の呼び出し開始と呼び出し終了とがある。また、init1の呼び出し開始と呼び出し終了との間に、item1の呼び出し開始と呼び出し終了とがある。従って、ソースコードにおいてもitem1はinit1の内部で入れ子になり、init1はtoplist1の内部で入れ子になっている可能性がある。
関数の呼び出し回数、開始行間距離及び関数行間距離から関数の動作を決定することが困難な場合であっても、関数の呼び出し順序に基づいた関数間の構造を勘案することにより、関数動作推定の支援が可能となる。
本実施の形態で扱った関数は、手続き型言語、命令型言語、構造化言語等における関数に限らない。本実施の形態で扱った関数は、オブジェクト指向言語におけるクラスのメソッドに置き換えてもよい。
プログラム解析装置1を動作させるためのプログラム1Pは、ディスクドライブ15に光ディスク1aを読み取らせてハードディスク14に記録してもよい。また、プログラム1Pは、インターネットNを介して接続される他の情報処理装置又は記録装置(図示せず)からダウンロードすることも可能である。あるいは、また、プログラム1Pを記録したフラッシュメモリ等の半導体メモリ1cがプログラム解析装置1内に実装されてもよい。
以上の実施の形態に関し、さらに以下の付記を開示する。
(付記1)
対象プログラムを解析する処理をコンピュータに実行させるコンピュータプログラムにおいて、
第1入力データ及び該第1入力データと異なる第2入力データに夫々基づく前記対象プログラムの第1駆動履歴及び第2駆動履歴を記録する記録手段に記録された該第1駆動履歴から、該対象プログラムに含まれる関数の呼び出し情報に基づいて、該関数の第1呼び出し履歴を抽出し、
前記記録手段に記録された第2駆動履歴から、前記関数の呼び出し情報に基づいて、該関数の第2呼び出し履歴を抽出し、
前記関数の第1及び第2呼び出し履歴に夫々基づいて、前記第1及び第2駆動履歴各々における該関数の呼び出し回数又は呼び出し箇所を取得する
処理をコンピュータに実行させるコンピュータプログラム。
(付記2)
前記関数の呼び出し情報は該関数の呼び出し開始又は呼び出し終了を示す情報を含み、
前記関数の第1及び第2呼び出し履歴を抽出する処理は、該関数の呼び出し開始又は呼び出し終了に係る第1及び第2呼び出し履歴を夫々抽出し、
前記関数の呼び出し回数又は呼び出し箇所を取得する処理は、該関数の呼び出し開始又は呼び出し終了に係る第1及び第2呼び出し履歴に夫々基づいて、前記第1及び第2駆動履歴各々における該関数の呼び出し回数又は呼び出し箇所を取得する
付記1に記載のコンピュータプログラム。
(付記3)
前記対象プログラムの第1及び第2駆動履歴は行単位の文字列であり、
前記関数の呼び出し箇所を取得する処理は、該関数の呼び出し開始又は呼び出し終了に対応する行番号を取得する
付記2に記載のコンピュータプログラム。
(付記4)
前記関数の呼び出し開始又は呼び出し終了に対応する行番号に基づいて、該関数の処理に関するステップ数に応じた行の数量を算出する
付記3に記載のコンピュータプログラム。
(付記5)
前記ステップ数に応じた行の数量を算出する処理は、前記対象プログラムの第1及び第2駆動履歴各々における関数の同一呼び出し回数目の呼び出し開始及び呼び出し終了に夫々対応する行番号に基づいて、前記ステップ数に応じた行の数量を算出する
付記4に記載のコンピュータプログラム。
(付記6)
前記ステップ数に応じた行の数量を算出する処理は、前記対象プログラムの第1及び第2駆動履歴各々における関数の呼び出し開始に対応する最初の行番号及び呼び出し開始に対応する最後の行番号、又は該関数の呼び出し終了に対応する最初の行番号及び呼び出し終了に対応する最後の行番号に基づいて、前記ステップ数に応じた行の数量を算出する
付記4に記載のコンピュータプログラム。
(付記7)
前記関数の呼び出し回数又はステップ数に応じた行の数量に基づいて、前記第1及び第2入力データに夫々対応する該関数の呼び出し回数又はステップ数に応じた行の数量の間の同異又は変化量を求める
付記4から付記6までのいずれか一つに記載のコンピュータプログラム。
(付記8)
前記第1入力データは値を有し、
前記第2入力データは前記第1入力データの値又はデータ量を変更したデータである
付記1から付記7までのいずれか一つに記載のコンピュータプログラム。
(付記9)
前記対象プログラムは機械語により記述されている
付記1から付記8までのいずれか一つに記載のコンピュータプログラム。
(付記10)
対象プログラムを解析するプログラム解析方法において、
コンピュータが、
第1入力データ及び該第1入力データと異なる第2入力データに夫々基づく前記対象プログラムの第1駆動履歴及び第2駆動履歴を記録する記録手段に記録された該第1駆動履歴から、該対象プログラムに含まれる関数の呼び出し情報に基づいて、該関数の第1呼び出し履歴を抽出し、
前記記録手段に記録された第2駆動履歴から、前記関数の呼び出し情報に基づいて、該関数の第2呼び出し履歴を抽出し、
前記関数の第1及び第2呼び出し履歴に夫々基づいて、前記第1及び第2駆動履歴各々における該関数の呼び出し回数又は呼び出し箇所を取得する
プログラム解析方法。
(付記11)
対象プログラムを解析するプログラム解析装置において、
第1入力データ及び該第1入力データと異なる第2入力データに夫々基づく前記対象プログラムの第1駆動履歴及び第2駆動履歴を記録する記録手段と、
該記録手段に記録された第1駆動履歴から、前記対象プログラムに含まれる関数の呼び出し情報に基づいて、該関数の第1呼び出し履歴を抽出する第1抽出部と、
前記記録手段に記録された第2駆動履歴から、前記関数の呼び出し情報に基づいて、該関数の第2呼び出し履歴を抽出する第2抽出部と、
前記第1及び第2抽出部が夫々抽出した関数の前記第1及び第2呼び出し履歴に基づいて、前記第1及び第2駆動履歴各々における該関数の呼び出し回数又は呼び出し箇所を取得する取得部と
を備えるプログラム解析装置。
1 プログラム解析装置
11 CPU
13 RAM
14 ハードディスク
22 関数呼び出し履歴計測部
23 関数呼び出し履歴分析部
SD 基準データ
CD 変更データ
DD 差分データ
21F 基準データ実行履歴ファイル
210F 変更データ実行履歴ファイル
22F 基準データ関数別計測ファイル
220F 変更データ関数別計測ファイル
23F 関数別呼び出し履歴分析ファイル
230F 差分リストファイル
1P プログラム
1a 光ディスク

Claims (8)

  1. 対象プログラムを解析する処理をコンピュータに実行させるコンピュータプログラムにおいて、
    第1入力データ及び該第1入力データと異なる第2入力データに夫々基づく前記対象プログラムの第1駆動履歴及び第2駆動履歴を記録する記録手段に記録された該第1駆動履歴から、該対象プログラムに含まれる関数の呼び出し情報に基づいて、該関数の第1呼び出し履歴を抽出し、
    前記記録手段に記録された第2駆動履歴から、前記関数の呼び出し情報に基づいて、該関数の第2呼び出し履歴を抽出し、
    前記関数の第1及び第2呼び出し履歴に夫々基づいて、前記第1及び第2駆動履歴各々における該関数の呼び出し回数又は呼び出し箇所を取得する
    処理をコンピュータに実行させるコンピュータプログラム。
  2. 前記関数の呼び出し情報は該関数の呼び出し開始又は呼び出し終了を示す情報を含み、
    前記関数の第1及び第2呼び出し履歴を抽出する処理は、該関数の呼び出し開始又は呼び出し終了に係る第1及び第2呼び出し履歴を夫々抽出し、
    前記関数の呼び出し回数又は呼び出し箇所を取得する処理は、該関数の呼び出し開始又は呼び出し終了に係る第1及び第2呼び出し履歴に夫々基づいて、前記第1及び第2駆動履歴各々における該関数の呼び出し回数又は呼び出し箇所を取得する
    請求項1に記載のコンピュータプログラム。
  3. 前記対象プログラムの第1及び第2駆動履歴は行単位の文字列であり、
    前記関数の呼び出し箇所を取得する処理は、該関数の呼び出し開始又は呼び出し終了に対応する行番号を取得する
    請求項2に記載のコンピュータプログラム。
  4. 前記関数の呼び出し開始又は呼び出し終了に対応する行番号に基づいて、該関数の処理に関するステップ数に応じた行の数量を算出する
    請求項3に記載のコンピュータプログラム。
  5. 前記ステップ数に応じた行の数量を算出する処理は、前記対象プログラムの第1及び第2駆動履歴各々における関数の同一呼び出し回数目の呼び出し開始及び呼び出し終了に夫々対応する行番号に基づいて、前記ステップ数に応じた行の数量を算出する
    請求項4に記載のコンピュータプログラム。
  6. 前記ステップ数に応じた行の数量を算出する処理は、前記対象プログラムの第1及び第2駆動履歴各々における関数の呼び出し開始に対応する最初の行番号及び呼び出し開始に対応する最後の行番号、又は該関数の呼び出し終了に対応する最初の行番号及び呼び出し終了に対応する最後の行番号に基づいて、前記ステップ数に応じた行の数量を算出する
    請求項4に記載のコンピュータプログラム。
  7. 対象プログラムを解析するプログラム解析方法において、
    コンピュータが、
    第1入力データ及び該第1入力データと異なる第2入力データに夫々基づく前記対象プログラムの第1駆動履歴及び第2駆動履歴を記録する記録手段に記録された該第1駆動履歴から、該対象プログラムに含まれる関数の呼び出し情報に基づいて、該関数の第1呼び出し履歴を抽出し、
    前記記録手段に記録された第2駆動履歴から、前記関数の呼び出し情報に基づいて、該関数の第2呼び出し履歴を抽出し、
    前記関数の第1及び第2呼び出し履歴に夫々基づいて、前記第1及び第2駆動履歴各々における該関数の呼び出し回数又は呼び出し箇所を取得する
    プログラム解析方法。
  8. 対象プログラムを解析するプログラム解析装置において、
    第1入力データ及び該第1入力データと異なる第2入力データに夫々基づく前記対象プログラムの第1駆動履歴及び第2駆動履歴を記録する記録手段と、
    該記録手段に記録された第1駆動履歴から、前記対象プログラムに含まれる関数の呼び出し情報に基づいて、該関数の第1呼び出し履歴を抽出する第1抽出部と、
    前記記録手段に記録された第2駆動履歴から、前記関数の呼び出し情報に基づいて、該関数の第2呼び出し履歴を抽出する第2抽出部と、
    前記第1及び第2抽出部が夫々抽出した関数の前記第1及び第2呼び出し履歴に基づいて、前記第1及び第2駆動履歴各々における該関数の呼び出し回数又は呼び出し箇所を取得する取得部と
    を備えるプログラム解析装置。
JP2011016842A 2011-01-28 2011-01-28 コンピュータプログラム、プログラム解析方法及びプログラム解析装置 Expired - Fee Related JP5678689B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011016842A JP5678689B2 (ja) 2011-01-28 2011-01-28 コンピュータプログラム、プログラム解析方法及びプログラム解析装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011016842A JP5678689B2 (ja) 2011-01-28 2011-01-28 コンピュータプログラム、プログラム解析方法及びプログラム解析装置

Publications (2)

Publication Number Publication Date
JP2012155680A JP2012155680A (ja) 2012-08-16
JP5678689B2 true JP5678689B2 (ja) 2015-03-04

Family

ID=46837310

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011016842A Expired - Fee Related JP5678689B2 (ja) 2011-01-28 2011-01-28 コンピュータプログラム、プログラム解析方法及びプログラム解析装置

Country Status (1)

Country Link
JP (1) JP5678689B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6553461B2 (ja) * 2015-09-17 2019-07-31 株式会社日立製作所 既存システム処理仕様抽出装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7496900B2 (en) * 2004-02-12 2009-02-24 International Business Machines Corporation Method for automatic detection of build regressions
JP2009211424A (ja) * 2008-03-04 2009-09-17 Mitsubishi Electric Corp 最適化箇所判定装置及び最適化箇所判定システム及びコンピュータプログラム及び最適化箇所判定方法
JP2010049489A (ja) * 2008-08-21 2010-03-04 Toshiba Corp デバッグ支援装置およびデバッグ支援プログラム
JP2010102663A (ja) * 2008-10-27 2010-05-06 Nec Corp プログラム解析装置およびプログラム解析方法並びにプログラム解析用プログラム

Also Published As

Publication number Publication date
JP2012155680A (ja) 2012-08-16

Similar Documents

Publication Publication Date Title
US9690788B2 (en) File type recognition analysis method and system
JP4911438B2 (ja) 操作監視装置
JP2007094818A (ja) 複数データの一括コピー及びペースト方法、装置、およびコンピュータ・プログラム
JP2007011604A (ja) 不具合診断システム及びプログラム
JPH08241191A (ja) Gui自動評価装置
CN113869789A (zh) 一种风险监控的方法、装置、计算机设备及存储介质
JP5678689B2 (ja) コンピュータプログラム、プログラム解析方法及びプログラム解析装置
CN114676231A (zh) 一种目标信息检测方法、设备和介质
TWI581172B (zh) Input device, form input method, recording medium
JPWO2009011057A1 (ja) アプリケーション解析プログラム、アプリケーション解析方法およびアプリケーション解析装置
JP5670156B2 (ja) テスト結果照合システム、方法、及びプログラム
CN112149402B (zh) 文档对比方法、装置、电子设备和计算机可读存储介质
JP2016057715A (ja) 図形式プログラム解析装置
CN110766402B (zh) 交易顺序依赖漏洞检测方法、系统、电子装置及存储介质
JP2009199172A (ja) 情報処理システム、プログラム中の類似箇所特定方法、及びプログラム
JP5568020B2 (ja) 含有化学物質管理システム
JP2008210229A (ja) 知的財産情報検索装置、知的財産情報検索方法及び知的財産情報検索プログラム
CN111164560A (zh) 用于动态地定义数据记录格式的技术
JP2012173745A (ja) データベース解析装置及びデータベース解析プログラム
JP6553461B2 (ja) 既存システム処理仕様抽出装置
JP6973433B2 (ja) 帳票処理装置、帳票処理方法、及びプログラム
JPWO2018154784A1 (ja) 影響抽出装置、影響抽出プログラム及び影響抽出方法
US20140244685A1 (en) Method of searching and generating a relevant search string
CN106293897A (zh) 组件自动化调度系统
JP2017004178A (ja) 積算業務テスト支援システム、方法、及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20131007

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140520

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140603

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141222

R150 Certificate of patent or registration of utility model

Ref document number: 5678689

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees