JP5900193B2 - 更新判定プログラムおよび更新判定装置 - Google Patents

更新判定プログラムおよび更新判定装置 Download PDF

Info

Publication number
JP5900193B2
JP5900193B2 JP2012147680A JP2012147680A JP5900193B2 JP 5900193 B2 JP5900193 B2 JP 5900193B2 JP 2012147680 A JP2012147680 A JP 2012147680A JP 2012147680 A JP2012147680 A JP 2012147680A JP 5900193 B2 JP5900193 B2 JP 5900193B2
Authority
JP
Japan
Prior art keywords
program
source program
hash value
update
dependency
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
JP2012147680A
Other languages
English (en)
Other versions
JP2014010699A (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 JP2012147680A priority Critical patent/JP5900193B2/ja
Publication of JP2014010699A publication Critical patent/JP2014010699A/ja
Application granted granted Critical
Publication of JP5900193B2 publication Critical patent/JP5900193B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明は,プログラムの更新を判定する更新判定プログラムおよび更新判定装置に関するものである。
例えば,ソフトウェアの開発等において,作成されたソースプログラムのコンパイルや静的解析等が行われる。このとき,最初は,コンパイラや静的解析ツールなどへの入力の対象となったすべてのソースプログラムのファイルに対して,コンパイルや静的解析等が実行される。2回目以降は,手間や時間の無駄を省くために,更新されたソースプログラムのファイルのみを対象として,コンパイルや静的解析等を実行するということが一般に行われている。なお,以下では,ソースプログラムのファイルをソースファイルとも呼ぶ。
このような差分ビルドや差分解析などを行う場合には,対象となるソースプログラムが更新されているか否かを判断する必要がある。このとき,ユーザが1つ1つのソースプログラムの更新を判断するのは非常に手間となるので,ソースプログラムの更新判定をコンピュータで自動化できることが望ましい。
ソースプログラムの更新判定を行う技術としては,例えば,前回処理時のソースプログラム自身と,今回処理を行うソースプログラム自身とを直接に比較する技術がある。また,別の技術としては,前回処理時のソースファイルの更新時刻を示すタイムスタンプと,今回処理を行うソースファイルの更新時刻を示すタイムスタンプとを比較する技術がある。
なお,監視対象ファイルが更新されたか否かを,該ファイルの前回アクセス時のハッシュ値と今回アクセス時のハッシュ値とを比較して判定する技術が知られている。また,プログラム開発において,プログラムや,関連するプログラム部品,ツール,仕様書,開発者等の情報を統合的に管理する技術が知られている。
特開平9−190372号公報 特開平9−212352号公報
上述のソースプログラム自身を比較する技術は,正確な比較判定ができるという利点がある。しかし,この技術では,前回処理時のソースファイルをすべて別に保存しておく必要があり,ディスクスペースを大量に消費するという問題がある。また,ソースプログラム同士の比較処理には多くの時間を浪費するという問題がある。
これに対して,上述のタイムスタンプを比較する技術は,前回処理時のソースプログラムについてはそのファイルの更新時刻を示すタイムスタンプのみを保存しておけばよく,さらに比較判定の処理時間が短いという利点がある。しかし,この技術では,ソースファイルの更新時間を示すタイムスタンプが必ずしもそのソースプログラムの更新時刻を示しているとは限らないため,必ずしも正確に更新を判定できないという問題がある。
また,ソースプログラムのコンパイルや静的解析などの処理では,そのソースプログラムと依存関係があるプログラムについても同時に処理が行われる。依存関係があるプログラムは,例えば,ソースプログラム中のinclude文で指定されるヘッダファイルや,import文で指定されるライブラリやパッケージなどのプログラムである。差分ビルドや差分解析などを行う場合には,処理対象のソースプログラムだけではなく,そのソースプログラムと依存関係があるプログラムについても更新されているか否かを判断する必要がある。依存関係があるプログラムについてもそれぞれ更新を判定する処理を行うと,その比較処理には多くの時間を浪費するという問題がある。
一側面では,本発明は,短時間で正確なプログラムの更新判定を可能とする技術を提供することを目的とする。
1態様では,開示するプログラムは,コンピュータを次のように機能させる。すなわち,前記プログラムは,前記プログラムがインストールされて実行されるコンピュータに,更新判定対象のソースプログラムと依存関係があるプログラムの情報を取得し,該ソースプログラムに取得した依存関係があるプログラムを連結したデータのハッシュ値である第1のハッシュ値を求め,記憶部に記憶された該ソースプログラムに対応する第2のハッシュ値を取得し,第1のハッシュ値および第2のハッシュ値の比較結果に基づき,該ソースプログラムの更新有無を判定し,該ソースプログラムが更新されていると判定された場合に,該ソースプログラムに該ソースプログラムから抽出した依存関係があるプログラムを連結したデータのハッシュ値で,記憶部に記憶された第2のハッシュ値を更新する処理を実行させる。
1態様では,短時間で正確なプログラムの更新判定が可能となる。
ソースプログラムの更新判定を説明する図である。 依存関係があるファイルが存在する場合のソースプログラムの更新判定を説明する図である。 本実施の形態による開発システムの構成例を示す図である。 本実施の形態によるユーザ装置の構成例を示す図である。 本実施の形態の更新判定部による更新判定処理フローチャートである。 本実施の形態によるユーザ装置を実現するコンピュータのハードウェア構成例を示す図である。 ソースプログラムから依存関係プログラムを抽出する例を説明する図である。 依存関係データの例を示す図である。 連結データの例を示す図である。 本実施例1による更新管理データの例を示す図である。 本実施例1の解析部による差分解析処理フローチャートである。 本実施例1の更新判定部による依存関係解析処理フローチャートである。 本実施例2による更新管理データの例を示す図である。 本実施例2の解析部による差分解析処理フローチャートである。
以下,本実施の形態について,図を用いて説明する。なお,以下の本実施の形態では,主に静的解析を行う際にソースプログラムの更新判定を行う例を説明する。
図1は,ソースプログラムの更新判定を説明する図である。
ここでは,ファイル名が“a.c”であるC言語で記述されたソースプログラムについて,静的解析の実行時に,その更新判定が行われるものとする。
図1(A)は,ソースプログラム自身を比較する例を示す。ソースプログラムの更新判定を行う技術として,ソースプログラム自身を比較して更新判定を行う方法が考えられる。この方法では,例えば,図1(A)に示すように,前回解析時のソースファイルのプログラムと,今回の解析対象のソースファイルのプログラムとを,文字ごとに比較する。なお,ソースファイルは,ソースプログラムのファイルである。
この方法では,ソースプログラムが更新されたか否かを正確に判定することができる。しかし,この方法では,一度解析したソースファイルを次の解析時まで保管しておく必要があり,またソースプログラム自身を比較するため,比較処理に多くの時間が必要となるという問題がある。
図1(B)は,ソースファイルのタイムスタンプを比較する例を示す。ソースプログラムの更新判定を行う技術として,ソースファイルの更新日時を示すタイムスタンプを比較して更新判定を行う方法が考えられる。この方法では,例えば,図1(B)に示すように,前回解析時のソースファイルの更新日時を示すタイムスタンプと,今回の解析対象のソースファイルの更新日時を示すタイムスタンプとを比較する。
この方法では,前回解析時のタイムスタンプさえ保管しておけば前回解析時のソースファイルを保管しておく必要がなく,タイムスタンプ同士の比較であるので比較処理にかかる時間は短い。しかし,この方法では,ソースファイルのタイムスタンプが必ずしもソースプログラムの更新日時を示すとは限らないため,必ずしも正確な更新判定ができないという問題がある。
例えば,構成管理サーバなどを用いて開発資源を一括管理する場合において,作業を行うソースファイルを構成管理サーバからユーザ装置に取り出す際に,そのソースファイルの更新日時を示すタイムスタンプがその取り出し日時に書き換えされるケースがある。このケースでは,ソースプログラム自身が更新されていなくても,ソースファイルのタイムスタンプが前回解析時のものと一致しないことで,更新されたと判定されてしまう可能性がある。
図1(C)は,本実施の形態によるソースプログラムのハッシュ値を比較する例を示す。本実施の形態では,図1(C)に示すように,前回解析時のソースファイルのプログラムのハッシュ値と,今回の解析対象のソースファイルのプログラムのハッシュ値とを比較することで,ソースプログラムの更新を判定する。ハッシュ値を求める際には,例えば,ソースプログラムの全文字を対象としてハッシュ値を求める。
図1(C)に示すように,ソースプログラムのハッシュ値の比較で更新を判定する場合,前回解析時のハッシュ値を保存しておけば,前回解析時のソースファイルをあえて保存しておかなくても,ソースプログラムの更新判定が可能となる。また,ソースプログラム自身を比較する必要がないので,処理時間は短い。また,ソースプログラム自身から算出されるハッシュ値を用いるので,更新判定の正確性は高い。
図2は,依存関係があるファイルが存在する場合のソースプログラムの更新判定を説明する図である。
図2に示す例においてファイル名“a.h”,“b.h”のファイルは,ソースファイル“a.c”のプログラム内で指定されたヘッダファイルである。また,ファイル名“aa.h”のファイルは,さらにヘッダファイル“a.h”のプログラム内で指定されたヘッダファイルである。ヘッダファイルは,インクルードファイルとも呼ばれ,例えば,C言語で記述されたソースファイルのコンパイル時に,該ソースファイルの一部として取り込まれるファイルである。例えば,C言語のソースプログラムにおいて,ヘッダファイルはinclude文で指定される。一般に,ヘッダファイルは,ソースコード形式のファイルである。
取り込むヘッダファイルの指定がソースプログラム内にある場合に,ソースプログラム自身が更新されていなくても,ヘッダファイルのプログラムが更新されていれば,実質的にソースプログラムが更新されている状態となり,コンパイルや解析の結果に影響する。そのため,差分ビルドや差分解析を行う場合には,ソースプログラムの更新判定だけではなく,そのソースプログラムで指定されるヘッダファイルのプログラムの更新も判定する必要がある。
以下では,ソースプログラムで指定されるヘッダファイルのプログラムのように,ソースプログラムと依存関係があるプログラムを,依存関係プログラムとも呼ぶ。また,ヘッダファイルのように,依存関係プログラムのファイルを,依存関係ファイルとも呼ぶ。
依存関係プログラムは,ソースプログラムの差分ビルドや解析などにおいて,そのソースプログラムの更新判断に影響を及ぼすプログラムである。依存関係プログラムとしては,include文で指定されるヘッダファイルのプログラムの他にも,例えば,import文で指定されるライブラリやパッケージのプログラムなどがある。依存関係プログラムは,ソースプログラムを記述する言語の仕様に応じたものとなる。
図2(A)は,ソースプログラムの更新判定において,各依存関係プログラムの更新判定も併せて行う例を示す。上述のように解析対象のソースファイルの更新判定を行う際には,各依存関係ファイルの更新判定も併せて行う。このとき,図2(A)に示すように,ファイルごとに個別に更新判定を行うと,比較処理に多くの時間が必要となるという問題がある。
図2(B)は,本実施の形態によるソースプログラムとその依存関係プログラムとを合わせたハッシュ値を比較する例を示す。本実施の形態では,図2(B)に示すように,ソースファイルのプログラムと依存関係があるファイルプログラムとを合わせてハッシュ値を求め,そのハッシュ値を比較することでソースプログラムの更新を判定する。図2(B)に示すように,ソースプログラムとその依存関係プログラムとをまとめてハッシュ値を求め,そのハッシュ値の比較で更新を判定できれば,プログラムごとに個別に更新を判定するよりも,処理時間が短くなる。
図3は,本実施の形態による開発システムの構成例を示す図である。
図1の例に示す開発システムにおいて,構成管理サーバ20は,開発資源を統合管理するコンピュータである。構成管理サーバ20は,本システムで開発されたソースプログラムのファイルを含む,資源となる様々なソースファイルを格納し,管理するソース管理部25を備える。
図1の例に示す開発システムにおいて,各ユーザ装置10は,開発等に携わる各ユーザが使用するコンピュータである。各ユーザ装置10は,LAN(Local Area Network)等のネットワーク30を介して構成管理サーバ20にアクセス可能である。各ユーザ装置10は,ソースプログラムのプログラミング,コンパイル,解析等を行う際に,構成管理サーバ20のソース管理部25から,必要なソースプログラムを取得する。
図4は,本実施の形態によるユーザ装置の構成例を示す図である。
ユーザ装置10は,プログラム記憶部15,解析部100を備える。プログラム記憶部15は,該ユーザ装置10での作業で使用するソースファイル等のプログラム資源を記憶する記憶部である。作業に使用するソースファイル等のプログラム資源は,例えば,構成管理サーバ20のソース管理部25から取得されたものなどである。
解析部100は,指定された解析対象のソースプログラムの静的解析を行う。解析部100は,解析ツールなどによって実現される。解析対象のソースプログラムは,単体で指定されてもよいし,群で指定されてもよい。なお,本実施の形態による解析部100では,一度解析が行われたソースプログラムについて再度解析が行われる場合に,内容が更新されたソースプログラムについてのみ解析を行う差分解析が行われるものとする。
解析部100は,更新判定部110,解析実行部120を備える。解析実行部120は,解析対象のソースプログラムについて,所定の静的解析を実行する。
更新判定部110は,解析対象のソースプログラムについて,前回の処理時から内容が更新されているかを判定する。本実施の形態において,解析部100にとっての解析対象のソースプログラムは,更新判定部110にとって,更新判定対象のソースプログラムとなる。このとき,本実施の形態の更新判定部110は,更新判定対象のソースプログラム自身だけではなく,該ソースプログラムの依存関係プログラムも含めた更新判定を行う。すなわち,更新判定部110は,更新判定対象のソースプログラム自身が更新されていなくても,依存関係プログラムが更新されていれば,更新判定対象のソースプログラムが更新されていると判定する。
本実施の形態の更新判定部110は,図2(B)の例にも示すように,ソースプログラムと依存関係プログラムとを合わせてハッシュ値を求め,そのハッシュ値を比較することでソースプログラムの更新を判定する。更新判定部110は,算出部111,比較判定部112,更新管理部113,更新管理情報記憶部115を備える。
更新管理情報記憶部115は,ソースプログラムと第2のハッシュ値との対応を含む,ソースプログラムの更新判定に用いる情報を記憶する記憶部である。第2のハッシュ値は,対応するソースプログラムについて,最初の処理で記録されたハッシュ値か,過去の最後に更新が確認された時点でのハッシュ値である。第2のハッシュ値は,対応するソースプログラムについての前回の更新判定時におけるハッシュ値であるとも言える。
本実施の形態では,ソースプログラムの更新が行われない限り第2のハッシュ値は更新されない。そのため,本実施の形態の例における第2のハッシュ値は,対応するソースプログラムについて,前回解析が行われた時点でのソースプログラムと,該ソースプログラムから抽出した依存関係プログラムとから算出されたハッシュ値となる。
算出部111は,更新判定対象のソースプログラムについて,第1のハッシュ値を算出する。本実施の形態の例において,第1のハッシュ値は,更新判定対象のソースプログラム,すなわち今回更新判定を行う時点での該当ソースプログラムと,依存関係プログラムとから算出されるハッシュ値である。
より具体的には,算出部111は,更新判定対象のソースプログラムについて,該更新判定対象のソースプログラムと依存関係があるプログラム,すなわち依存関係プログラムの情報を取得する。依存関係プログラムの情報は,例えば,更新判定対象のソースプログラムから抽出した依存関係プログラムの情報や,更新判定対象のソースプログラムについて前回解析が行われた時点での該当ソースプログラムから抽出した依存関係プログラムの情報などである。前回解析が行われた時点での該当ソースプログラムから抽出した依存関係プログラムの情報を取得する場合には,算出部111は,例えば,更新管理情報記憶部115から情報を取得する。
算出部111は,更新判定対象のソースプログラムに取得した依存関係プログラムを連結したデータのハッシュ値である第1のハッシュ値を求める。例えば,算出部111は,更新判定対象のソースプログラムのファイルと,依存関係プログラムのファイルとを取得する。算出部111は,更新判定対象のソースプログラムの文字列と,依存関係プログラムの文字列とを連結した文字列データを生成する。以下では,更新判定対象のソースプログラムに依存関係プログラムを連結して得られる文字列データを,連結データとも呼ぶ。算出部111は,連結データを所定のハッシュ関数に入力し,第1のハッシュ値を得る。文字列のハッシュ値を求めるハッシュ関数のアルゴリズムについては,様々なハッシュ関数のアルゴリズムが周知である。例えば,C言語でも,対象の文字列からハッシュ値を求めるアルゴリズムがライブラリで提供されている。
比較判定部112は,第1のハッシュ値と第2のハッシュ値との比較結果に基づいて,更新判定対象のソースプログラムの更新有無を判定する。より具体的には,比較判定部112は,更新判定対象のソースプログラムに対応する第2のハッシュ値を,更新管理情報記憶部115から取得する。比較判定部112は,算出部111で算出された第1のハッシュ値と,更新管理情報記憶部115から取得した第2のハッシュ値とを比較する。比較判定部112は,比較結果が一致である場合には,更新判定対象のソースプログラムが更新されていないと判定し,比較結果が不一致である場合には,更新判定対象のソースプログラムが更新されていると判定する。
更新管理部113は,更新判定対象のソースプログラムが更新されていると判定された場合に,更新管理情報記憶部115に記憶された更新判定対象のソースプログラムに対応する第2のハッシュ値を更新する。更新管理部113によって,更新管理情報記憶部115の第2のハッシュ値は,更新判定対象のソースプログラムに更新判定対象のソースプログラムから抽出した依存関係プログラムを連結したデータのハッシュ値で更新される。
例えば,算出部111が,更新判定対象のソースプログラムから抽出した依存関係プログラムの情報に基づいて第1のハッシュ値を求めている場合,更新管理部113は,第1のハッシュ値で更新管理情報記憶部115の第2のハッシュ値を更新する。
また,例えば,算出部111が,前回解析が行われた時点での該当ソースプログラムから抽出された依存関係プログラムの情報に基づいて第1のハッシュ値を求めている場合,更新管理部113は,更新判定対象のソースプログラムから依存関係ファイルを抽出する。更新管理部113は,更新判定対象のソースプログラムに抽出した依存関係プログラムを連結したデータのハッシュ値である第3のハッシュ値を求める。更新管理部113は,求めた第3のハッシュ値で,更新管理情報記憶部115の第2のハッシュ値を更新する。このとき,更新管理部113は,更新判定対象のソースプログラムから抽出した依存関係プログラムの情報で,更新管理情報記憶部115に記憶された,前回解析が行われた時点での該当ソースプログラムから抽出された依存関係プログラムの情報を更新する。
このように,更新判定対象のソースプログラムが更新されていると判定された場合に第2のハッシュ値を更新することにより,該当ソースプログラムについて,常に最後に更新が判定された時点のハッシュ値が,第2のハッシュ値として保管されるようになる。また,該当ソースプログラムの依存関係プログラムの情報を保管する場合も,常に最後に該当ソースプログラムの更新が判定された時点の依存関係プログラムの情報が保管されるようになる。
図5は,本実施の形態の更新判定部による更新判定処理フローチャートである。
更新判定部110において,算出部111は,更新判定対象のソースプログラムについて,依存関係プログラムの情報を取得する(ステップS10)。算出部111は,更新判定対象のソースプログラムと,取得した情報に示される依存関係プログラムとを取得し,更新判定対象のソースプログラムに依存関係プログラムを連結して(ステップS11),連結データを生成する。算出部111は,連結データに対して所定のハッシュ関数を用い,第1のハッシュ値を算出する(ステップS12)。
比較判定部112は,更新管理情報記憶部115から,更新判定対象のソースプログラムに対応する第2のハッシュ値を取得する(ステップS13)。比較判定部112は,第1のハッシュ値と第2のハッシュ値とを比較し,第1のハッシュ値と第2のハッシュ値とが一致するかを判定する(ステップS14)。
比較の結果,第1のハッシュ値と第2のハッシュ値とが一致する場合(ステップS14のYES),更新判定対象のソースプログラムは前回のものから更新されていないと判定されたことになる。
比較の結果,第1のハッシュ値と第2のハッシュ値とが一致しない場合(ステップS14のNO),更新判定対象のソースプログラムは前回のものから更新されていると判定されたことになる。このとき,更新管理部113は,更新判定対象のソースプログラムにその更新判定対象のソースプログラムから抽出した依存関係プログラムを連結したデータのハッシュ値で,更新管理情報記憶部115に記憶された,更新判定対象のソースプログラムに対応する第2のハッシュ値を更新する(ステップS15)。
本実施の形態による更新判定部110では,ソースプログラムの更新判定が,更新判定対象のソースプログラムに基づいて算出されるハッシュ値と,前回処理時の該当ソースプログラムに基づいて算出されたハッシュ値との比較により行われる。これにより,前回処理時のハッシュ値を保存しておけば,前回処理時のソースファイルを無駄に保存しておかなくても,更新判定ができる。また,ソースプログラム自身を比較せずに,ハッシュ値の比較で更新判定を行うので,処理時間の短縮が図れる。また,ソースプログラム自身から求めたハッシュ値を用いて更新判定を行うので,精度が高い判定が可能となる。
さらに,本実施の形態による更新判定部110では,ソースプログラムに依存関係プログラムを連結したデータから,比較に用いるハッシュ値が求められる。これにより,ソースプログラムと依存関係プログラムとをまとめて更新判定できるので,処理時間の短縮が図れる。ソースプログラム自身が更新されていなくても,そのソースプログラムの依存関係プログラムが更新されていれば,そのソースプログラムの解析結果が変わる可能性がある。
図6は,本実施の形態によるユーザ装置を実現するコンピュータのハードウェア構成例を示す図である。
図4に示す本実施の形態のユーザ装置10を実現するコンピュータ1は,例えば,CPU(Central Processing Unit )2,主記憶となるメモリ3,記憶装置4,通信装置5,媒体読取・書込装置6,入力装置7,出力装置8等を備える。記憶装置4は,例えばHDD(Hard Disk Drive )等の外部記憶装置や,補助記憶装置などである。媒体読取・書込装置6は,例えばCD−R(Compact Disc Recordable )ドライブやDVD−R(Digital Versatile Disc Recordable )ドライブなどである。入力装置7は,例えばキーボード・マウス等の入力機器などである。出力装置8は,例えばディスプレイ等の表示装置などである。
図4に示すユーザ装置10およびユーザ装置10が備える各機能部は,コンピュータ1が備えるCPU2,メモリ3等のハードウェアと,ソフトウェアプログラムとによって実現することが可能である。コンピュータ1が実行可能なプログラムは,記憶装置4に記憶され,その実行時にメモリ3に読み出され,CPU2により実行される。
コンピュータ1は,可搬型記録媒体から直接プログラムを読み取り,そのプログラムに従った処理を実行することもできる。また,コンピュータ1は,サーバコンピュータからプログラムが転送されるごとに,逐次,受け取ったプログラムに従った処理を実行することもできる。さらに,このプログラムは,コンピュータ1で読み取り可能な記録媒体に記録しておくことができる。
ここで,本実施の形態の更新判定部110によるソースプログラムのハッシュ値を求める例を説明する。
図7は,ソースプログラムから依存関係プログラムを抽出する例を説明する図である。
ここでは,ファイル名“a.c”のソースファイル200のプログラムを解析して依存関係プログラムを抽出し,更新判定に用いるハッシュ値を求めるものとする。図7に示すファイル名“a.c”のソースファイル200は,C言語で記述されたソースプログラムのファイルの例である。
まず,更新判定部110は,ソースプログラムに対して,構文解析を行う。更新判定部110は,ソースプログラムに対して意味解析を行い,ソースプログラム中の特定の命令文で指定された依存関係プログラムを順に抽出する。図7に示す例では,ソースファイル200のプログラムから,依存関係プログラムを指定する特定の命令文であるinclude文で指定されたヘッダファイル210a〜c,eが抽出される。ヘッダファイル210a〜c,eのプログラムが,依存関係プログラムのファイルとなる依存関係ファイルである。
更新判定部110は,抽出された依存関係プログラムについても,さらに依存関係プログラムの抽出を行う。図7に示す例においても,ファイル名“a.h”のヘッダファイル210cから,さらにファイル名“aa.h”のヘッダファイル210dが抽出されている。本実施の形態では,更新判定部110は,ソースプログラムと抽出された依存関係プログラムとに対して,再帰的に依存関係プログラムの抽出を実行する。
なお,図7に示すソースファイル200のプログラムにおいて,<>で示されるヘッダファイル210a,bは,コンパイラ等が提供する標準ヘッダファイルを示す。また,図7に示すソースファイル200のプログラムにおいて,""で示されるヘッダファイルc〜eは,各企業等で独自に作成されたローカルなヘッダファイルを示す。図7に示す例では,依存関係ファイルとして標準ヘッダファイルも抽出しているが,標準ヘッダファイルを抽出する依存関係ファイルの対象から除外してもよい。
ソフトウェア開発において,ローカルなヘッダファイルについては,随時改良される可能性があるが,標準ヘッダファイルについては,コンパイラのバージョンアップでもない限り,ほとんど更新されることはない。そのため,コンパイラのバージョンアップがない場合には,標準ヘッダファイルを依存関係ファイルの対象外としても問題はない。標準ヘッダファイルを抽出する依存関係ファイルの対象外とすることにより,処理の短縮が図れる。
標準ヘッダファイルを依存関係ファイルとして抽出するか,抽出する依存関係ファイルから除外するかをオプションで選択できるようにしてもよい。
図7に示す例では,ソースファイル200に対する解析で,最終的にヘッダファイル210a〜eの依存関係ファイルが抽出される。更新判定部110は,抽出された依存関係ファイルを,依存関係プログラムの情報である依存関係データに記録する。
図8は,依存関係データの例を示す図である。
図8に示す依存関係データ160は,図7に示すソースファイル200のプログラムから抽出された依存関係プログラムの情報の一例を示す。図8に示す依存関係データ160では,図7に示すソースファイル200のプログラムの解析で抽出された順に,ヘッダファイル210のファイル名が記録されている。図8に示す依存関係データ160において,fで示される数値は,そのヘッダファイル210が,ソースファイル200のプログラムから抽出された順序を示す。本実施の形態の例では,抽出された依存関係プログラムに対して再帰的に依存関係プログラムの抽出が行われるため,図7に示すように,ソースファイル200のプログラムのヘッダファイル210eより先に,ヘッダファイル210cのプログラムのヘッダファイル210dが抽出されている。
なお,ソースプログラムから依存関係プログラムを抽出する順序のルールについては,任意の設計が可能である。例えば,本実施の形態の例ではソースプログラムから抽出された依存関係プログラムから再帰的に依存関係プログラムを抽出しているが,ソースプログラムからすべての依存関係プログラムを抽出し,その後で各依存関係プログラムからさらに依存関係プログラムを抽出するようにしてもよい。だだし,一連の同じソースプログラムに対する更新判定では,常に同じルールで依存関係プログラムの抽出を行うものとする。
ソースプログラムからの依存関係プログラムの抽出において,抽出される順序には意味がある。ソースプログラムにおける依存関係プログラムの出現順序が変わるだけで,コンパイルや静的解析の結果が変わる可能性がある。一連の同じソースプログラムに対する更新判定において,途中で依存関係プログラムを抽出するルールを変えてしまうと,正確な更新判定ができずに正しい差分ビルドや差分解析が実行されない可能性がある。
更新判定部110は,ソースプログラムの解析で得られた依存関係データ160に基づいて,ソースプログラムと依存関係プログラムとを連結した連結データを生成する。
図9は,連結データの例を示す図である。
図9に示す連結データ161は,図7に示すソースファイル200のプログラムに対する解析で得られた依存関係データ160に基づいて,ソースファイル200のプログラムに各ヘッダファイル210のプログラムとを連結したデータの一例である。本実施の形態では,連結データ161は,プログラムの文字列を連結した文字列データとなる。図9に示す連結データ161では,最初にソースファイル200のプログラムがあり,図8の依存関係データ160に示される順に,各ヘッダファイル210a〜eのプログラムが連結されている。
なお,ソースプログラムに依存関係プログラムを連結する順序のルールについては,任意の設計が可能である。例えば,図9に示す例では最初のソースプログラムに対して依存関係データ160に示される順に各依存関係プログラムを連結しているが,最初に依存関係データ160に示される順に依存関係プログラムを連結し,最後にソースプログラムを連結するようにしてもよい。だだし,一連の同じソースプログラムに対する更新判定では,常に同じルールでソースプログラムに依存関係プログラムを連結するものとする。
ソースプログラムに依存関係プログラムを連結する際に,プログラムを連結する順序を変えると,連結データから算出されるハッシュ値が変わってしまう。例えば,前回の更新判定時と今回の更新判定時とで,連結する順序のルールを変えてしまうと,ソースプログラムが更新されていなくても,得られるハッシュ値が異なるので,ソースプログラムが更新されていると判定されてしまう。一連の同じソースプログラムに対する更新判定において,途中でプログラムを連結する順序のルールを変えてしまうと,正確な更新判定ができずに正しい差分ビルドや差分解析が実行されない可能性がある。
更新判定部110は,生成された連結データ161について,所定のハッシュ関数を用いて,ハッシュ値を算出する。ソースプログラムか依存関係プログラムのいずれかが更新されると得られるハッシュ値が変わるので,ハッシュ値の比較により,ソースプログラムの更新を判定できる。
以下では,本実施の形態によるソースプログラムの更新判定の技術について,より具体的な実施例を説明する。
〔実施例1〕
本実施例1において,ユーザは,あらかじめ目的とする静的解析に必要なソースファイルやヘッダファイル等のプログラムファイルを構成管理サーバ20等から取得し,自ユーザ装置10のプログラム記憶部15に格納しておくものとする。ユーザは,静的解析の実行にあたって,解析対象のソースプログラムを指定する。
解析部100は,ユーザに指定された解析対象のソースプログラムの静的解析を実行する。ここでは,解析部100により,必ずしも指定されたすべてのソースプログラムについて解析するのではなく,まだ解析を行っていないソースプログラムと,前回の解析時以降に更新されたソースプログラムとについて解析する差分解析が行われる。解析部100において,更新判定部110は,解析対象のソースプログラムを更新判定対象のソースプログラムとして,上述したハッシュ値の比較により,前回処理時から更新があるかを判定する。
図10は,本実施例1による更新管理データの例を示す図である。
図10に示す更新管理データ116は,更新管理情報記憶部115に記憶された,ソースプログラムと第2のハッシュ値との対応を含む,ソースプログラムの更新判定に用いる情報の一例を示す。図10に示す更新管理データ116は,ファイル形式のデータとなっている。ここでは,ハッシュ値を算出するもととなったソースファイルのファイル名に,拡張子“.hash”を付けたものを,更新管理データ116のファイル名とする。
図10に示すファイル名“a.c.hash”の更新管理データ116は,図7に示すファイル名“a.c”のソースファイル200から求められたハッシュ値が記録されたデータとなる。すなわち,図10に示す更新管理データ116は,ファイル名“a.c”のソースファイル200のプログラムと,そのソースプログラムについての前回解析実行時のハッシュ値である第2のハッシュ値とを対応付けたデータとなる。図10に示す更新管理データ116において,hashで示される値“123456”が,記録された第2のハッシュ値である。
なお,第2のハッシュ値が保管される更新管理データ116が,必ずしも図10に示すようなソースプログラムごとのファイル形式のデータである必要はない。例えば,更新管理データ116が,各ソースプログラムと第2のハッシュ値との対応を示すレコードを持つテーブル形式のデータであってもよい。
本実施例1において,更新判定部110の算出部111は,上述のソースプログラムからハッシュ値を求める手順で,更新判定対象のソースプログラムについての第1のハッシュ値を求める。より具体的には,算出部111は,更新判定対象のソースプログラムから依存関係プログラムを抽出して,依存関係データ160を生成する。算出部111は,生成した依存関係データ160に基づいて,更新判定対象のソースプログラムに依存関係プログラムを連結し,連結データ161を生成する。算出部111は,連結データ161に対して所定のハッシュ関数を用い,第1のハッシュ値を算出する。
比較判定部112は,更新管理情報記憶部115の更新管理データ116から,更新判定対象のソースプログラムに対応する第2のハッシュ値を取得する。比較判定部112は,第1のハッシュ値と第2のハッシュ値とを比較して,双方が一致すれば更新判定対象のソースプログラムは更新されていないと判定し,双方が一致しなければ更新判定対象のソースプログラムが更新されていると判定する。
解析部100において,解析実行部120は,更新判定対象の,すなわち解析対象のソースプログラムが更新されていると判定された場合には,その解析対象のソースプログラムに対する静的解析を実行する。更新判定対象の,すなわち解析対象のソースプログラムが更新されていないと判定された場合には,解析実行部120は,その解析対象のソースプログラムに対する静的解析を実行しない。このように,本実施の形態の解析部100では,差分解析が実行される。
更新判定対象のソースプログラムが更新されていると判定された場合には,該当ソースプログラムについての正しいハッシュ値が,更新管理情報記憶部115に保管された前回の解析実行時の第2のハッシュ値と異なっている。このとき,更新管理部113は,更新管理情報記憶部115に保管された,更新判定対象のソースプログラムに対応する第2のハッシュ値を,更新判定対象のソースプログラムに該ソースプログラムから抽出した依存関係プログラムを連結したデータのハッシュ値で更新する。
本実施例1では,算出部111で求めた第1のハッシュ値が,更新判定対象のソースプログラムに該ソースプログラムから抽出した依存関係プログラムを連結したデータのハッシュ値である。更新管理部113は,算出部111で求めた第1のハッシュ値で,更新管理情報記憶部115に保管された,更新判定対象のソースプログラムに対応する第2のハッシュ値を更新する。
図11は,本実施例1の解析部による差分解析処理フローチャートである。
本実施例1において,解析部100は,解析対象として指定された各ソースプログラムに対して,図11に示す差分解析処理を行う。
解析部100の更新判定部110において,算出部111は,解析対象の,すなわち更新判定対象のソースプログラムに対して,依存関係解析処理を実行する(ステップS20)。依存関係解析処理は,更新判定対象のソースプログラムから依存関係プログラムを抽出し,依存関係データ160を生成する処理である。依存関係解析処理の詳細については,後述する。
算出部111は,生成した依存関係データ160に基づいて,更新判定対象のソースプログラムに該ソースプログラムから抽出した依存関係プログラムを連結し(ステップS21),連結データ161を生成する。算出部111は,連結データ161に対して所定のハッシュ関数を用い,第1のハッシュ値を算出する(ステップS22)。
更新判定部110は,更新判定対象のソースプログラムに対する解析が,最初の解析であるかを判定する(ステップS23)。更新判定対象のソースプログラムに対する解析が最初の解析であるか否かは,例えば,該当ソースプログラムについての第2のハッシュ値が更新管理情報記憶部115に保管されているか否かで判定可能である。最初の解析であれば,更新判定対象のソースプログラムに対応する第2のハッシュ値は存在しない。
最初の解析であれば(ステップS23のYES),更新管理部113は,第1のハッシュ値を,更新判定対象のソースプログラムに対応する第2のハッシュ値として,更新管理情報記憶部115に記憶する更新管理データ116に記録する(ステップS26)。解析実行部120は,更新判定対象の,すなわち解析対象のソースプログラムの静的解析を実行する(ステップS27)。
最初の解析でなければ(ステップS23のNO),比較判定部112は,更新管理情報記憶部115の更新管理データ116から,更新判定対象のソースプログラムに対応する第2のハッシュ値を取得する(ステップS24)。比較判定部112は,第1のハッシュ値と第2のハッシュ値とを比較し,第1のハッシュ値と第2のハッシュ値とが一致するかを判定する(ステップS25)。
第1のハッシュ値と第2のハッシュ値とが一致すれば(ステップS25のYES),更新判定対象のソースプログラムは更新されていないと判定されたことになる。このとき,解析実行部120は,更新判定対象の,すなわち解析対象のソースプログラムの静的解析を実行しない。
第1のハッシュ値と第2のハッシュ値とが一致しなければ(ステップS25のNO),更新管理部113は,第1のハッシュ値を,更新判定対象のソースプログラムに対応する次の第2のハッシュ値として,更新管理情報記憶部115の更新管理データ116に記録する(ステップS26)。これにより,更新管理データ116に記録された,該当ソースプログラムに対応する前回解析時のハッシュ値である第2のハッシュ値が,最新の解析時のハッシュ値に更新される。解析実行部120は,更新判定対象の,すなわち解析対象のソースプログラムの静的解析を実行する(ステップS27)。
図12は,本実施例1の更新判定部による依存関係解析処理フローチャートである。
図12に示す依存関係解析処理は,更新判定対象のソースプログラムと依存関係プログラムとに対して再帰的に依存関係プログラムを抽出する処理を実行し,更新判定対象のソースプログラムについての依存関係データ160を生成する処理の例である。
更新判定部110は,依存関係を解析する対象のプログラムを,プログラム記憶部15から取得する(ステップS30)。最初は,更新判定対象のソースプログラムが,依存関係を解析する対象のプログラムとなる。再帰的に依存関係解析処理が実行された場合には,依存関係プログラムが,依存関係を解析する対象のプログラムとなる。更新判定部110は,ステップS30の処理で取得されたプログラムに対して,構文解析を実行する(ステップS31)。
更新判定部110は,ステップS30の処理で取得されたプログラムに対して意味解析を実行し,該プログラムから特定の命令文を順に1つ抽出する(ステップS32)。更新判定部110は,抽出された特定の命令文で指定された依存関係プログラムの情報を,依存関係データ160に記録する(ステップS33)。更新判定部110は,抽出された特定の命令文で指定された依存関係プログラムを,依存関係を解析する対象のプログラムとして,再帰的に依存関係解析処理を実行する(ステップS34)。
更新判定部110は,ステップS30の処理で取得されたプログラムのすべての特定の命令文について,処理が終了したかを判定する(ステップS35)。まだすべての特定の命令文について処理が終了していなければ(ステップS35のNO),更新判定部110は,ステップS32の処理に戻って,次の特定の命令文についての処理に移る。すべての特定の命令文について処理が終了していれば(ステップS35のYES),更新判定部110は,処理を終了する。
〔実施例2〕
上述の実施例1では,更新判定処理を行うたびに,更新判定対象のソースプログラムから依存関係プログラムを抽出する処理を行い,依存関係データ160を生成している。また,上述の実施例1では,更新判定対象のソースプログラムから生成された依存関係データ160を用いて,第1のハッシュ値を求めている。
これに対して,本実施例2では,更新判定対象のソースプログラムが更新されていると判定された場合にのみ,更新判定対象のソースプログラムから依存関係プログラムを抽出する処理を行い,依存関係データ160を生成する。本実施例2では,第1のハッシュ値を求める際に,前回解析時に該当ソースプログラムに基づいて生成された依存関係データ160を用いるものとする。そのため,本実施例2では,ソースプログラムと第2のハッシュ値との対応情報とともに,ソースプログラムと該ソースプログラムから生成された依存関係データ160との対応情報も,更新管理情報記憶部115に保管しておく。
図13は,本実施例2による更新管理データの例を示す図である。
図13に示す更新管理データ116’は,更新管理情報記憶部115に記憶された,ソースプログラムと第2のハッシュ値との対応と,ソースプログラムと依存関係データ160との対応とを含む,ソースプログラムの更新判定に用いる情報の一例を示す。図13に示す更新管理データ116’は,図10に示す更新管理データ116と同様のファイル形式のデータとなっている。
図13に示すファイル名“a.c.hash”の更新管理データ116’は,図7に示すファイル名“a.c”のソースファイル200から求められたハッシュ値と,図8に示す依存関係データ160とが記録されたデータとなる。すなわち,図13に示す更新管理データ116’は,ファイル名“a.c”のソースファイル200のプログラムと,そのソースプログラムについての前回解析実行時のハッシュ値である第2のハッシュ値とを対応付けたデータとなる。それと同時に,図13に示す更新管理データ116’は,ファイル名“a.c”のソースファイル200のプログラムと,そのソースプログラムについて前回解析時に抽出された依存関係プログラムの情報が記録された依存関係データ160とを対応付けたデータとなる。
なお,上述の図10に示す更新管理データ116の場合と同様に,第2のハッシュ値と依存関係データ160とが保管される更新管理データ116’が,例えばソースプログラムごとのレコードを持つテーブル形式のデータであってもよい。また,図13に示す例では,第2のハッシュ値と依存関係データ160とが1つのファイルの更新管理データ116’で管理されているが,第2のハッシュ値と依存関係データ160とがそれぞれ異なるデータで管理されてもよい。
本実施例2において,更新判定部110の算出部111は,更新判定対象のソースプログラムについて前回解析時に該当ソースプログラムの解析で生成された依存関係データ160を用いて,更新判定対象のソースプログラムについての第1のハッシュ値を求める。より具体的には,算出部111は,更新管理情報記憶部115の更新管理データ116’から,更新判定対象のソースプログラムに対応する依存関係データ160を取得する。算出部111は,取得した依存関係データ160に基づいて,更新判定対象のソースプログラムに依存関係プログラムを連結し,連結データ161を生成する。算出部111は,連結データ161に対して所定のハッシュ関数を用い,第1のハッシュ値を算出する。比較判定部112や解析実行部120については,上述の実施例1と同様の動作となる。
ここで,本実施例2では,更新判定対象のソースプログラムから直接に抽出した依存関係プログラムを用いずに,前回解析時に該当ソースプログラムから抽出した依存関係プログラムを用いて第1のハッシュ値を求めている。更新によってソースプログラムの依存関係プログラムが変更されている可能性があるため,本実施例2で得られる第1のハッシュ値は,必ずしも正確に更新判定対象のソースプログラムとその依存関係プログラムとから求められるハッシュ値になるとは限らない。ただし,本実施例2で求める第1のハッシュ値でも,更新判定対象のソースプログラム更新判定に用いる分には,問題はない。
例えば,更新判定対象のソースプログラムに基づいた依存関係データ160と,前回解析時の該当ソースプログラムに基づいた依存関係データ160とが同じになる場合には,いずれの依存関係データ160を用いても,更新判定対象のソースプログラムから求められる第1のハッシュ値は同じ値となる。すなわち,前回解析時に記録された更新管理データ116' の依存関係データ160を用いても,更新判定対象のソースプログラムについての正しい第1のハッシュ値が求められることになる。そのため,更新判定対象のソースプログラムが更新されていない場合には,第2のハッシュ値と同じ第1のハッシュ値が得られ,更新判定対象のソースプログラムが更新されている場合には,第2のハッシュ値と異なる第1のハッシュ値が得られる。
更新判定対象のソースプログラムに基づいた依存関係データ160と,前回解析時の該当ソースプログラムに基づいた依存関係データ160とが異なる場合には,更新判定対象のソースプログラムと依存関係プログラムとの少なくともいずれかが更新されているはずである。例えば,更新判定対象のソースプログラムが呼び出す依存関係プログラムが変更されている場合,更新判定対象のソースプログラムの記述が更新されている。また例えば,依存関係プログラムが呼び出す依存関係プログラムが変更されている場合,その呼び出しを行っている依存関係プログラムの記述が更新されている。この場合,第1のハッシュ値の算出において,前回解析時に記録された更新管理データ116' の依存関係データ160を用いると,必ず,更新管理データ116' の第2のハッシュ値と異なる第1のハッシュ値が得られることになる。
このように,更新判定対象のソースプログラムに基づいた依存関係データ160の代わりに,前回解析時の該当ソースプログラムに基づいた依存関係データ160を用いて第1のハッシュ値を算出しても,正しいソースプログラムの更新判定が可能である。
更新判定対象のソースプログラムが更新されていると判定された場合,更新管理部113は,次回の更新判定のために,更新判定対象のソースプログラムに基づいた依存関係データ160と,その依存関係データ160を用いて求められるハッシュ値とを,更新管理データ116' に記録しておく必要がある。しかし,上述したように,本実施例2の算出部111で求められる第1のハッシュ値は,必ずしも正確に更新判定対象のソースプログラムとその依存関係プログラムとから求められるハッシュ値になるとは限らない。
そこで,更新管理部113は,更新判定対象のソースプログラムが更新されていると判定された場合に,上述のソースプログラムからハッシュ値を求める手順で,更新判定対象のソースプログラムについての第3のハッシュ値を求める。より具体的には,更新管理部113は,更新判定対象のソースプログラムから依存関係プログラムを抽出して,依存関係データ160を生成する。更新管理部113は,生成した依存関係データ160に基づいて,更新判定対象のソースプログラムに依存関係プログラムを連結し,連結データ161を生成する。更新管理部113は,連結データ161に対して所定のハッシュ関数を用い,第3のハッシュ値を算出する。
更新管理部113は,第3のハッシュ値で,更新管理情報記憶部115に保管された,更新判定対象のソースプログラムに対応する第2のハッシュ値を更新する。また,更新管理部113は,第3のハッシュ値を算出する過程で得られた依存関係データ160で,更新管理情報記憶部115に保管された,更新判定対象のソースプログラムに対応する依存関係データ160を更新する。
図14は,本実施例2の解析部による差分解析処理フローチャートである。
本実施例2において,解析部100は,解析対象として指定された各ソースプログラムに対して,図14に示す差分解析処理を行う。
解析部100の更新判定部110は,解析対象の,すなわち更新判定対象のソースプログラムに対する解析が,最初の解析であるかを判定する(ステップS40)。更新判定対象のソースプログラムに対する解析が最初の解析であるか否かは,例えば,該当ソースプログラムについての第2のハッシュ値や依存関係データ160が更新管理情報記憶部115に保管されているか否かで判定可能である。最初の解析であれば,更新判定対象のソースプログラムに対応する第2のハッシュ値や依存関係データ160は存在しない。最初の解析であれば(ステップS40のYES),更新判定部110は,ステップS46の処理に進む。
最初の解析でなければ(ステップS40のNO),算出部111は,更新管理情報記憶部115の更新管理データ116' から,更新判定対象のソースプログラムに対応する依存関係データ160を取得する(ステップS41)。算出部111は,更新判定対象のソースプログラムに,取得した依存関係データ160に示される依存関係プログラムを連結し(ステップS42),連結データ161を生成する。算出部111は,連結データ161に対して所定のハッシュ関数を用い,第1のハッシュ値を算出する(ステップS43)。
比較判定部112は,更新管理情報記憶部115の更新管理データ116' から,更新判定対象のソースプログラムに対応する第2のハッシュ値を取得する(ステップS44)。比較判定部112は,第1のハッシュ値と第2のハッシュ値とを比較し,第1のハッシュ値と第2のハッシュ値とが一致するかを判定する(ステップS45)。
第1のハッシュ値と第2のハッシュ値とが一致すれば(ステップS45のYES),更新判定対象のソースプログラムは更新されていないと判定されたことになる。このとき,解析実行部120は,更新判定対象の,すなわち解析対象のソースプログラムの静的解析を実行しない。
第1のハッシュ値と第2のハッシュ値とが一致しなければ(ステップS45のNO),更新判定対象のソースプログラムは更新されていると判定されたことになる。このとき,更新判定部110は,次のステップS46の処理に進む。
更新管理部113は,更新判定対象のソースプログラムに対して,依存関係解析処理を実行する(ステップS46)。依存関係解析処理は,例えば図12に示す通りである。更新管理部113は,依存関係データ160に基づいて,更新判定対象のソースプログラムに該ソースプログラムから抽出した依存関係プログラムを連結し(ステップS47),連結データ161を生成する。更新管理部113は,連結データ161に対して所定のハッシュ関数を用い,第3のハッシュ値を算出する(ステップS48)。
更新管理部113は,第3のハッシュ値を,更新判定対象のソースプログラムに対応する次の第2のハッシュ値として,更新管理情報記憶部115の更新管理データ116' に記録する(ステップS49)。更新判定対象のソースプログラムに対する解析が最初の解析である場合には,更新管理データ116' に,該ソースプログラムの最初の解析時のハッシュ値が,第2のハッシュ値として記録される。また,更新判定対象のソースプログラムに対する解析が最初の解析でない場合には,更新管理データ116' に記録された,該当ソースプログラムに対応する前回解析時のハッシュ値である第2のハッシュ値が,最新の解析時のハッシュ値に更新される。
更新管理部113は,ステップS46で生成された依存関係データ160を,更新判定対象のソースプログラムに対応する次の依存関係データ160として,更新管理情報記憶部115の更新管理データ116' に記録する(ステップS50)。更新判定対象のソースプログラムに対する解析が最初の解析である場合には,更新管理データ116' に,該ソースプログラムの最初の解析時の依存関係データ160が記録される。また,更新判定対象のソースプログラムに対する解析が最初の解析でない場合には,更新管理データ116' に記録された,該当ソースプログラムに対応する前回解析時の依存関係データ160が,最新の解析時の依存関係データ160に更新される。
解析実行部120は,更新判定対象の,すなわち解析対象のソースプログラムの静的解析を実行する(ステップS51)。
実施例2では,更新されたと判定された場合にのみ,更新判定対象のソースプログラムから依存関係プログラムを抽出する処理が行われる。そのため,更新されていないソースプログラムの方が多い場合などには,更新判定対象のソースプログラムから依存関係プログラムを抽出する処理の回数が減るので,実施例1と比べて処理時間が短くなる。
ただし,実施例2では,更新されたと判定された場合には,比較に用いる第1のハッシュ値の他に,次回更新判定時の第2のハッシュ値として保管するための第3のハッシュ値を求める処理が行われる。そのため,更新されているソースプログラムの方が多い場合などには,ハッシュ値を算出する回数が増えるので,実施例1と比べて処理時間が長くなる。
このような更新判定処理の設計は,実施例1,実施例2に示す更新判定処理の例に限らず,任意である。例えば,実施例1に示す更新判定処理と,実施例2に示す更新判定処理とをオプションで指定できるように設計することも可能である。
以上,本実施の形態について説明したが,本発明はその主旨の範囲において種々の変形が可能であることは当然である。
例えば,本実施の形態では,差分解析で静的解析を行う場合においてソースプログラムの更新判定を行う例を説明したが,ソースプログラムの更新判定を行う様々なケースで,本実施の形態による更新判定の技術を利用可能である。
また,本実施の形態では,ユーザ装置10での解析時にソースプログラムの更新判定を行う例を説明したが,これに限るものではない。例えば,構成管理サーバ20が,定期的に管理するソースプログラムの解析をまとめて行うようなケースで,本実施の形態によるソースプログラムの更新を行うなどの設計は任意である。
10 ユーザ装置
15 プログラム記憶部
100 解析部
110 更新判定部
111 算出部
112 比較判定部
113 更新管理部
115 更新管理情報記憶部
120 解析実行部
20 構成管理サーバ
25 ソース管理部
30 ネットワーク

Claims (4)

  1. コンピュータに,
    更新判定対象のソースプログラムと依存関係があるプログラムの情報を取得し,
    前記ソースプログラムに前記取得した依存関係があるプログラムを連結したデータのハッシュ値である第1のハッシュ値を求め,
    記憶部に記憶された,前記ソースプログラムに対応する第2のハッシュ値を取得し,
    前記第1のハッシュ値および前記第2のハッシュ値の比較結果に基づき,前記ソースプログラムの更新有無を判定し,
    前記ソースプログラムが更新されていると判定された場合に,前記ソースプログラムに前記ソースプログラムから抽出した依存関係があるプログラムを連結したデータのハッシュ値で,記憶部に記憶された前記第2のハッシュ値を更新する
    処理を実行させるための更新判定プログラム。
  2. 前記ソースプログラムと依存関係があるプログラムの情報を取得する処理では,記憶部に記憶された,前記ソースプログラムに対応する依存関係があるプログラムの情報を取得し,
    前記第2のハッシュ値を更新する処理では,前記ソースプログラムが更新されていると判定された場合に,前記ソースプログラムから前記ソースプログラムと依存関係があるプログラムを抽出し,前記ソースプログラムに該抽出した依存関係があるプログラムを連結したデータのハッシュ値である第3のハッシュ値を求め,求めた第3のハッシュ値で記憶部に記憶された前記第2のハッシュ値を更新し,
    前記コンピュータに,さらに,前記ソースプログラムが更新されていると判定された場合に,前記ソースプログラムから抽出した依存関係があるプログラムの情報で,記憶部に記憶された前記依存関係があるプログラムの情報を更新する処理を実行させる
    ことを特徴とする請求項1に記載の更新判定プログラム。
  3. 前記依存関係があるプログラムを抽出する際には,標準ヘッダファイルを抽出する対象から除外する
    ことを特徴とする請求項1または請求項2に記載の更新判定プログラム。
  4. ソースプログラムと第2のハッシュ値との対応を含む情報を記憶する記憶部と,
    更新判定対象のソースプログラムと依存関係があるプログラムの情報を取得し,前記更新判定対象のソースプログラムに前記取得した依存関係があるプログラムを連結したデータのハッシュ値である第1のハッシュ値を求める算出部と,
    前記更新判定対象のソースプログラムに対応する第2のハッシュ値を前記記憶部から取得し,前記第1のハッシュ値および前記第2のハッシュ値の比較結果に基づき,前記更新判定対象のソースプログラムの更新有無を判定する比較判定部と,
    前記更新判定対象のソースプログラムが更新されていると判定された場合に,前記更新判定対象のソースプログラムに前記更新判定対象のソースプログラムから抽出した依存関係があるプログラムを連結したデータのハッシュ値で,前記記憶部に記憶された前記第2のハッシュ値を更新する更新管理部とを備える
    ことを特徴とする更新判定装置。
JP2012147680A 2012-06-29 2012-06-29 更新判定プログラムおよび更新判定装置 Expired - Fee Related JP5900193B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012147680A JP5900193B2 (ja) 2012-06-29 2012-06-29 更新判定プログラムおよび更新判定装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012147680A JP5900193B2 (ja) 2012-06-29 2012-06-29 更新判定プログラムおよび更新判定装置

Publications (2)

Publication Number Publication Date
JP2014010699A JP2014010699A (ja) 2014-01-20
JP5900193B2 true JP5900193B2 (ja) 2016-04-06

Family

ID=50107335

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012147680A Expired - Fee Related JP5900193B2 (ja) 2012-06-29 2012-06-29 更新判定プログラムおよび更新判定装置

Country Status (1)

Country Link
JP (1) JP5900193B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6369177B2 (ja) * 2014-07-07 2018-08-08 富士通株式会社 開発支援プログラム,開発支援方法及び開発支援装置
US9535689B2 (en) 2014-12-31 2017-01-03 Paypal, Inc. Source control management system with contingent dependency handling
JP6430036B2 (ja) * 2016-01-05 2018-11-28 三菱電機株式会社 表示制御装置及び表示制御方法
JP6933012B2 (ja) 2017-06-14 2021-09-08 富士通株式会社 解析装置、解析プログラムおよび解析方法
CN110716939B (zh) * 2019-10-16 2023-05-09 深圳市网心科技有限公司 数据管理方法、电子设备、系统及介质
CN112492337B (zh) * 2020-11-26 2023-05-23 北京达佳互联信息技术有限公司 一种通信方法、通信装置、服务器和存储介质

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2147036A1 (en) * 1994-05-16 1995-11-17 Yih-Farn Robin Chen System and method for selective regression testing
US5854932A (en) * 1995-08-17 1998-12-29 Microsoft Corporation Compiler and method for avoiding unnecessary recompilation
JPH0962498A (ja) * 1995-08-29 1997-03-07 Nec Corp ソースプログラムの論理的差分判別方式
JPH11194933A (ja) * 1998-01-06 1999-07-21 Hitachi Ltd ファイル検証方法
JP2005182102A (ja) * 2003-12-16 2005-07-07 Nec Corp ビルドシステム及び方法並びにビルド用プログラム、ビルドサーバ
JP4820584B2 (ja) * 2005-06-17 2011-11-24 富士通株式会社 構成管理プログラム、開発処理プログラム、該プログラムを記録した記録媒体、構成管理装置、開発処理端末、構成管理方法、および開発処理方法
JP2009064092A (ja) * 2007-09-04 2009-03-26 Nec Corp ソフトウェア構成管理装置、方法及びプログラム
JP4877193B2 (ja) * 2007-10-26 2012-02-15 日本電気株式会社 版数管理システムおよび版数管理方法
WO2012017522A1 (ja) * 2010-08-03 2012-02-09 富士通株式会社 検証プログラムおよび検証装置

Also Published As

Publication number Publication date
JP2014010699A (ja) 2014-01-20

Similar Documents

Publication Publication Date Title
JP5900193B2 (ja) 更新判定プログラムおよび更新判定装置
US8745595B2 (en) Information processing apparatus and method of acquiring trace log
CN108762743B (zh) 一种数据表操作代码生成方法及装置
US20120266131A1 (en) Automatic program generation device, method, and computer program
US20110126179A1 (en) Method and System for Dynamic Patching Software Using Source Code
US20120054728A1 (en) Maintaining a database of patch data
TWI437457B (zh) 分析目標物件之依賴關係的方法
JPWO2009011057A1 (ja) アプリケーション解析プログラム、アプリケーション解析方法およびアプリケーション解析装置
Izsó et al. MONDO-SAM: A Framework to Systematically Assess MDE Scalability.
CN112825033A (zh) 界面代码的生成方法、装置、设备及存储介质
JP6717140B2 (ja) 解析プログラム、解析方法、及び解析装置
KR100990091B1 (ko) 요구 사항 관리 방법 및 장치
CN107577476A (zh) 一种基于模块划分的安卓系统源码差异性分析方法、服务器及介质
JP6045707B2 (ja) ライセンス管理装置、ライセンス管理方法、及びプログラム
US20190244151A1 (en) Just in time compilation (jit) for business process execution
JP6955162B2 (ja) 解析装置、解析方法および解析プログラム
JP5891976B2 (ja) コンパイル実行・管理方法、装置、及びプログラム
JP5578625B2 (ja) プログラム分析装置、プログラム分析方法、及びプログラム
WO2020230241A1 (ja) テスト装置、テスト方法及びプログラム
JP6081144B2 (ja) ソースコード解析装置
JP5712711B2 (ja) 管理プログラム,管理方法および管理装置
JP6902513B2 (ja) ソースコード生成支援装置およびソースコード生成支援方法
JP6986928B2 (ja) 情報処理装置、情報処理方法及び情報処理プログラム
JP2009134662A (ja) 性能テストデータ構築ツール
JP2016151973A (ja) 制御コントロールシステム、その開発支援装置、制御装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150319

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151225

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160222

R150 Certificate of patent or registration of utility model

Ref document number: 5900193

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees