管理プログラム,管理方法および管理装置
【課題】あるプログラムの類似プログラムを登録されたプログラムから検索する場合において,類似プログラムの検索精度を向上させる技術を提供する。
【解決手段】分析情報記憶部101は,プログラム同士の類似性の判断に用いる分析対象関数を記憶する。登録プログラム記憶部102は,登録プログラムごとに,該登録プログラムを特定する識別情報と,該登録プログラムに含まれる分析対象関数と,該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数とを対応付けて記憶する。分析部12は,処理対象プログラムに含まれる分析対象関数を取得する。抽出部13は,登録プログラム記憶部102から,処理対象プログラムから取得した分析対象関数と同じ分析対象関数に対応付けて記憶された登録プログラムを抽出する。出力部14は,抽出した登録プログラムを類似プログラムとして出力する。
【解決手段】分析情報記憶部101は,プログラム同士の類似性の判断に用いる分析対象関数を記憶する。登録プログラム記憶部102は,登録プログラムごとに,該登録プログラムを特定する識別情報と,該登録プログラムに含まれる分析対象関数と,該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数とを対応付けて記憶する。分析部12は,処理対象プログラムに含まれる分析対象関数を取得する。抽出部13は,登録プログラム記憶部102から,処理対象プログラムから取得した分析対象関数と同じ分析対象関数に対応付けて記憶された登録プログラムを抽出する。出力部14は,抽出した登録プログラムを類似プログラムとして出力する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は,プログラムの管理を行う管理プログラム,管理方法および管理装置に関するものである。
【背景技術】
【0002】
プログラム部品を管理し,再利用することで,プログラミングに掛かるコストやバグを削減することが行われている。
【0003】
プログラム部品の管理では,プログラム部品の登録や,登録するプログラム部品への索引情報の付与などが,プログラマに一任されることも多い。そのため,プログラム部品の登録時に適切な索引情報が付与されなかったことで後日の検索が難しくなったり,同じようなプログラム部品が異なる索引情報で重複して登録されるなどの問題がある。
【0004】
登録するプログラムに対する索引情報の付与精度を上げるためには,登録時に登録済みプログラムの中から類似するプログラムを検索し,その類似プログラムの索引情報を参照しながら,登録するプログラムに索引情報を付与できるようにすることが望ましい。
【0005】
なお,プロセスモデルを,該プロセスモデルに含まれる参照関数にリンクさせてDBに登録し,検索・再利用を容易にする技術が知られている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特表2004−535021号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
上記のプログラム検索の技術を利用することによって,例えば,登録しようとするプログラムに含まれる標準関数と同じ標準関数を含む登録済みプログラムを,類似プログラムとして検索することは可能である。
【0008】
しかし,上述のプログラム検索の技術では,個々のプログラムに閉じた検索しか行うことができない。多くのプログラムでは,外部の別のプログラムへの呼び出しが行われている。別のプログラムを呼び出しているプログラムが登録されている場合に,この呼び出し対象の別プログラムに含まれる標準関数をも加味した検索を行うことができなければ,精度の高い類似プログラムの検索はできない。
【0009】
一側面では,本発明は,あるプログラムの類似プログラムを登録されたプログラムから検索する場合において,類似プログラムの検索精度を向上させる技術を提供することを目的とする。
【課題を解決するための手段】
【0010】
1態様では,開示するプログラムは,コンピュータを,次のように機能させる。
【0011】
すなわち,前記プログラムは,前記プログラムがインストールされて実行されるコンピュータに,プログラム同士の類似性の判断に用いる所定の分析対象関数が記憶された記憶部を参照して,所定の分析対象関数のうち,処理対象プログラムに含まれる分析対象関数を示す第1の分析対象関数情報を取得し,登録プログラムごとに,該登録プログラムを特定する識別情報と,所定の分析対象関数のうち,該登録プログラムに含まれる分析対象関数を示す第2の分析対象関数情報と,該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第3の分析対象関数情報とが対応付けて記憶された記憶部を,第1の分析対象関数情報をもとに検索して,第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,第1の分析対象関数情報と同じ登録プログラムを抽出し,抽出した登録プログラムを,処理対象プログラムに類似するプログラムとして出力する処理を実行させる。
【発明の効果】
【0012】
1態様では,あるプログラムの類似プログラムを登録されたプログラムから検索する場合において,類似プログラムの検索精度が向上する。
【図面の簡単な説明】
【0013】
【図1】本実施の形態によるプログラム管理装置の構成例を示す図である。
【図2】本実施の形態によるプログラム管理装置を実現するコンピュータのハードウェア構成例を示す図である。
【図3】本実施の形態による分析情報記憶部が格納するデータの例を示す図である。
【図4】本実施の形態による登録プログラム記憶部が格納するデータの例を示す図である。
【図5】本実施の形態による登録プログラム記憶部が格納するデータの例を示す図である。
【図6】本実施の形態による抽出結果記憶部が格納するデータの例を示す図である。
【図7】本実施の形態による出力部が表示装置に出力するプログラム登録画面の例を示す図である。
【図8】本実施の形態のプログラム管理装置によるプログラム登録処理フローチャートである。
【図9】本実施の形態の分析部によるプログラム分析処理フローチャートである。
【図10】本実施の形態の抽出部による類似プログラム抽出処理フローチャートである。
【図11】本実施の形態の登録部によるプログラム登録処理フローチャートである。
【図12】本実施の形態の更新部によるデータ更新処理フローチャートである。
【発明を実施するための形態】
【0014】
以下,本実施の形態について,図を用いて説明する。
【0015】
図1は,本実施の形態によるプログラム管理装置の構成例を示す図である。
【0016】
図1に示す本実施の形態のプログラム管理装置10は,例えばプログラムの再利用を目的として,複数のプログラムの登録・管理を行う。
【0017】
本実施の形態のプログラム管理装置10は,プログラム管理装置10に登録済みのプログラムから,これからプログラム管理装置10に登録しようとしているプログラムと類似するプログラムを検索する,類似プログラム検索機能を有する。以下では,プログラム管理装置10に登録済みのプログラムを,登録プログラムと呼ぶ。また,これからプログラム管理装置10に登録しようとしているプログラムを,処理対象プログラムと呼ぶ。
【0018】
図1に示すプログラム管理装置10は,プログラム入力部11,分析部12,抽出部13,出力部14,登録部15,更新部16,分析情報記憶部101,登録プログラム記憶部102,抽出結果記憶部103を備える。図1に示すプログラム管理装置10において,実線の接続は主に制御関係を示し,破線の接続は主にデータの入出力を示す。
【0019】
プログラム入力部11は,プログラム管理装置10に登録する処理対象プログラムを入力する。入力される処理対象プログラムは,例えば,プログラミング言語で記述されたソースコードである。
【0020】
分析部12は,入力された処理対象プログラムを分析し,その分析結果として,処理対象プログラムに含まれる分析対象関数を示す第1の分析対象関数情報を取得する。分析対象関数としては,例えば,プログラム同士の類似性の判断に用いる関数が設定される。分析対象関数としては,システムコールや,プログラミング言語で標準規格化された標準関数などが考えられる。
【0021】
分析対象関数は,例えば,分析情報記憶部101に記憶されたプログラム分析に関する情報で設定されている。分析情報記憶部101は,所定の分析対象関数を含むプログラム分析に関する情報を記憶する,コンピュータがアクセス可能な記憶部である。分析部12は,処理対象プログラムの分析時に,分析情報記憶部101に記憶された情報を参照して,処理対象プログラムに含まれる分析対象関数を取得する。
【0022】
また,分析部12は,処理対象プログラムに登録プログラムを呼び出す識別情報が含まれている場合に,第1の分析対象関数情報を取得するとともに,処理対象プログラムに含まれる識別情報で呼び出される登録プログラムに含まれる分析対象関数を示す第4の分析対象関数情報を取得する。処理対象プログラムに含まれる登録プログラムを呼び出す識別情報は,例えば,処理対象プログラムに含まれるサブ関数の関数名である。例えば,処理対象プログラムに含まれるサブ関数が登録プログラムである場合には,分析部12は,処理対象プログラムに含まれるサブ関数の関数名で,処理対象プログラムから呼び出される登録プログラムを特定できる。分析部12は,登録プログラム記憶部102から特定された登録プログラムの分析結果を得ることで,処理対象プログラムの分析結果に,呼び出される登録プログラムの分析対象関数を含めることができる。
【0023】
登録プログラム記憶部102は,登録プログラムに関する情報を記憶する,コンピュータがアクセス可能な記憶部である。例えば,登録プログラム記憶部102は,登録プログラムごとに,該登録プログラムを特定する識別情報と,該登録プログラムに含まれる分析対象関数を示す第2の分析対象関数情報と,該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第3の分析対象関数情報とを対応付けて記憶する。登録プログラムを特定する識別情報は,例えば,登録プログラムのメイン関数の関数名である。
【0024】
また,登録プログラム記憶部102は,さらに,登録プログラムに,該登録プログラムの索引情報を対応付けて記憶する。索引情報は,ユーザがプログラム管理装置10から目的とする登録プログラムを引き出す際に,ユーザが入力したり,参照したりする情報である。索引情報としては,例えば,ユーザにとってそのプログラムの特徴が分かり易い文例などが望ましい。
【0025】
抽出部13は,登録プログラム記憶部102を,処理対象プログラムから取得した第1の分析対象関数情報をもとに検索する。抽出部13は,登録プログラム記憶部102から,第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,第1の分析対象関数情報と同じ登録プログラムを抽出する。抽出部13により抽出された登録プログラムが,処理対象プログラムに類似すると判定されたプログラムである。以下では,処理対象プログラムに類似すると判定されたプログラムを,類似プログラムとも呼ぶ。抽出部13による登録プログラムの抽出結果は,抽出結果記憶部103に記憶される。抽出結果記憶部103は,類似プログラムの抽出結果を記憶する,コンピュータがアクセス可能な記憶部である。
【0026】
また,抽出部13は,登録プログラム記憶部102を検索する際に,重要度が所定以上高い分析対象関数を一致判定の対象として,第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,第1の分析対象関数情報と同じ登録プログラムを抽出するようにしてもよい。
【0027】
例えば,分析情報記憶部101では,分析対象関数ごとに重要度が設定されている。分析対象関数の中にも,プログラムの特徴を分析する上で,重要度が高い分析対象関数と重要度が低い分析対象関数とがある。2つのプログラム間で抽出される分析対象関数の一部が一致しなくても,その一致しない分析対象関数の重要度が低い場合には,それらの2つのプログラムが類似すると判定できる場合がある。このように,重要度の基準を変えて,処理対象プログラムの分析結果と登録プログラム分析結果との一致判定を行うことで,類似プログラムの検索精度を向上させることが可能となる。
【0028】
また,抽出部13は,処理対象プログラムに登録プログラムを呼び出す識別情報が含まれている場合に,登録プログラム記憶部102を,第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報をもとに検索する。このとき,抽出部13は,登録プログラム記憶部102から,第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報と同じ登録プログラムを抽出する。
【0029】
出力部14は,抽出した登録プログラムを,処理対象プログラムに類似するプログラムとして出力する。例えば,出力部14は,ユーザが処理対象プログラムに索引情報を付与してプログラム管理装置10に登録する作業を行うためのプログラム登録画面を,ディスプレイ等の表示装置に表示する。このとき,出力部14は,抽出された類似プログラムの情報を,ユーザが参照できるように,プログラム登録画面に出力する。
【0030】
また,出力部14は,抽出した登録プログラムを処理対象プログラムに類似するプログラムとして出力する際に,さらに抽出した登録プログラムに対応付けられた索引情報を出力する。例えば,出力部14は,プログラム登録画面に抽出された類似プログラムの情報を出力する際に,抽出された類似プログラムに対応付けられた索引情報も,同時にプログラム登録画面に出力する。
【0031】
登録部15は,登録プログラム記憶部102に,処理対象プログラムのデータを登録する。例えば,登録部15は,登録する処理対象プログラムに,該処理対象プログラムを特定する識別情報と,該処理対象プログラムに含まれる分析対象関数を示す分析関数情報とを対応付けて,登録プログラム記憶部102に登録する。また,処理対象プログラムに別の登録プログラムを呼び出す識別情報が含まれている場合に,登録部15は,登録する処理対象プログラムに,該処理対象プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す分析関数情報をも対応付けて,登録プログラム記憶部102に登録する。また,登録部15は,登録する処理対象プログラムに,ユーザに指定された索引情報を対応付けて,登録プログラム記憶部102に登録する。
【0032】
更新部16は,処理対象プログラムの識別情報を含む登録プログラムを,登録プログラム記憶部102から検索する。更新部16は,検索された登録プログラムに処理対象プログラムを関連付けて,登録プログラム記憶部102に記憶する。例えば,登録プログラムに処理対象プログラムの識別情報が含まれている場合,処理対象プログラムは,該登録プログラムのサブ関数となる。このとき,該登録プログラムから呼び出される処理対象プログラムに含まれる分析対象関数を,該登録プログラムの分析結果に含めるために,処理対象プログラムの該登録プログラムへの関連付けを行う。このような更新部16の処理によって,呼び出し対象プログラムの分析対象関数を含む類似プログラム検索の対象を増やすことが可能となる。
【0033】
図2は,本実施の形態によるプログラム管理装置を実現するコンピュータのハードウェア構成例を示す図である。
【0034】
図1に示す本実施の形態のプログラム管理装置10は,例えば,CPU(Central Processing Unit )2,主記憶となるメモリ3,記憶装置4,通信装置5,媒体読取・書込装置6,入力装置7,出力装置8等を備えるコンピュータ1によって実現される。記憶装置4は,例えばHDD(Hard Disk Drive )などである。媒体読取・書込装置6は,例えばCD−R(Compact Disc Recordable )ドライブやDVD−R(Digital Versatile Disc Recordable )ドライブなどである。入力装置7は,例えばキーボード・マウスなどである。出力装置8は,例えばディスプレイ等の表示装置などである。
【0035】
図1に示すプログラム管理装置10およびプログラム管理装置10が備える各機能部は,コンピュータ1が備えるCPU2,メモリ3等のハードウェアと,ソフトウェアプログラムとによって実現することが可能である。コンピュータ1が実行可能なプログラムは,記憶装置4に記憶され,その実行時にメモリ3に読み出され,CPU2により実行される。
【0036】
コンピュータ1は,可搬型記録媒体から直接プログラムを読み取り,そのプログラムに従った処理を実行することもできる。また,コンピュータ1は,サーバコンピュータからプログラムが転送されるごとに,逐次,受け取ったプログラムに従った処理を実行することもできる。さらに,このプログラムは,コンピュータ1で読み取り可能な記録媒体に記録しておくことができる。
【0037】
図3は,本実施の形態による分析情報記憶部が格納するデータの例を示す図である。
【0038】
図3(A)に示す分析対象関数データ110,図3(B)に示す分析対象外関数データ111は,分析情報記憶部101に記憶されたプログラム分析に関する情報の一例である。
【0039】
図3(A)に示す分析対象関数データ110は,分析部12によるプログラムの分析において,処理対象プログラムから取得する対象となる分析対象関数が設定された情報である。分析対象関数は,例えば,標準関数などである。使用頻度が高く,プログラムを特徴付ける重要な要素となり得るユーザ関数が,分析対象関数に設定されていてもよい。本実施の形態による分析部12は,分析対象関数データ110に記録された分析対象関数を,分析結果として抽出する。
【0040】
図3(A)に示す分析対象関数データ110は,関数ID,関数名,重み値等の情報を持つ。図3(A)に示す分析対象関数データ110において,関数IDは,設定された分析対象関数を一意に識別する識別情報である。関数名は,分析対象関数の関数名を示す。重み値は,分析対象関数の重要度を示す情報である。本実施の形態では,各分析対象関数に対して5段階の重み値が設定されている。ここでは,重み値は,値が大きいほど重要度が高いものとする。重み値1が設定された分析対象関数の重要度は最も低く,重み値5が設定された分析対象関数の重要度は最も高い。
【0041】
図3(B)に示す分析対象外関数データ111は,分析部12によるプログラムの分析において,処理対象プログラムから取得する対象とならない分析対象外関数が設定された情報である。プログラムに含まれる関数の中には,分析結果として抽出することによって,かえってそのプログラムの特徴を失わせてしまう関数がある。本実施の形態による分析部12は,処理対象プログラムに分析対象外関数データ111に記録された分析対象外関数が含まれている場合に,その存在を無視する。
【0042】
図3(B)に示す分析対象外関数データ111は,番号,関数名,プログラム内容等の情報を持つ。図3(B)に示す分析対象外関数データ111において,番号は,分析対象外関数のレコードに付された番号である。関数名は,分析対象外関数の関数名を示す。プログラム内容は,分析対象外関数がユーザ関数である場合において,その分析対象外関数のソースコードを示す。
【0043】
図4,図5は,本実施の形態による登録プログラム記憶部が格納するデータの例を示す図である。
【0044】
図4に示す登録プログラム管理データ120,図5に示す文例管理データ121は,登録プログラム記憶部102に記憶された登録プログラムに関する情報の一例である。
【0045】
図4に示す登録プログラム管理データ120は,各登録プログラムのデータを管理する情報である。図4に示す登録プログラム管理データ120は,管理番号,プログラム名,プログラム内容,呼び出し関係,分析結果の情報を持つ。
【0046】
図4に示す登録プログラム管理データ120において,管理番号は,各登録プログラムをプログラム管理装置10内部で識別するために付された番号である。
【0047】
図4に示す登録プログラム管理データ120において,プログラム名は,プログラムを識別する識別情報である。本実施の形態では,原則として,登録プログラムのプログラム名に,その登録プログラムのメイン関数の関数名が使用される。これにより,プログラム名を登録プログラムの識別情報として,登録プログラムの呼び出し関係を管理することが可能となる。だだし,特にユーザからプログラム名の指定があった場合には,ユーザに指定されたものをプログラム名とする。例えば,登録プログラムのメイン関数の関数名が,“main”である場合などには,プログラム管理装置10は,ユーザにプログラム名の指定を促す。
【0048】
図4に示す登録プログラム管理データ120において,プログラム内容は,登録プログラムのソースコードを示す。
【0049】
図4に示す登録プログラム管理データ120において,呼び出し関係は,登録プログラムに含まれるサブ関数が別のプログラムの呼び出しを行っている際の呼び出し関係を管理する情報である。図4に示す登録プログラム管理データ120の呼び出し関係では,
「サブ関数の関数名」:「呼び出し対象の登録プログラムの管理番号」
の形式で,登録プログラム間の呼び出し関係が示されている。
【0050】
例えば,図4に示す登録プログラム管理データ120において,管理番号#003の登録プログラムのサブ関数sub4は,管理番号#004の登録プログラムのプログラム名,すなわち管理番号#004の登録プログラムのメイン関数の関数名sub4と一致する。このことから,管理番号#004の登録プログラムは,管理番号#003の登録プログラムからの呼び出し対象のプログラムであることがわかる。この関係sub4:#004が,管理番号#003のレコードの呼び出し関係に記録される。なお,「呼び出し対象の登録プログラムの管理番号」がnoneである場合には,そのサブ関数の関数名の登録プログラムがなく,プログラム管理装置10内で呼び出し関係が解決できていないことを示している。
【0051】
登録プログラムのメイン関数で呼び出されるサブ関数が,その登録プログラム内部に存在する場合には,呼び出し関係の情報への記録は行われない。例えば,図4に示す登録プログラム管理データ120において,管理番号#002の登録プログラムのメイン関数では,3つのサブ関数sub1,sub2,sub3の呼び出しが行われている。だだし,そのうちの2つのサブ関数sub1,sub2は,管理番号#002の登録プログラムの内部に存在している。そのため,図4に示す登録プログラム管理データ120における管理番号#002のレコードでは,サブ関数sub1,sub2については,呼び出し関係が記録されていない。
【0052】
図4に示す登録プログラム管理データ120において,分析結果は,登録プログラムに含まれる分析対象関数の情報である。図4に示す登録プログラム管理データ120の分析結果では,分析対象関数が,図3(A)の分析対象関数データ110における関数IDで示されている。
【0053】
なお,図4に示す登録プログラム管理データ120では,登録プログラムのサブ関数が別の登録プログラムとして存在する場合には,その別の登録プログラムに含まれる分析対象関数も,分析結果に含まれている。例えば,管理番号#003の登録プログラム自身には,分析対象関数が1つも含まれていない。だだし,管理番号#003の登録プログラムのサブ関数sub4,sub5で呼び出される管理番号#004,管理番号#005の登録プログラムには,分析対象関数が含まれている。そのため,図4に示す登録プログラム管理データ120では,管理番号#003の登録プログラムの分析結果に,管理番号#004,管理番号#005の登録プログラムの分析結果における分析対象関数が記録されている。
【0054】
図5に示す文例管理データ121は,文例を索引情報として登録プログラムを管理する情報である。図5に示す文例管理データ121は,文例,プログラム名,管理番号,分析結果,利用回数等の情報を持つ。図5に示す文例管理データ121において,文例は,登録プログラムの索引情報である。プログラム名,管理番号,分析結果は,図4に示す登録プログラム管理データ120のプログラム名,管理番号,分析結果に相当する。利用回数は,登録プログラムが再利用された回数を示す。
【0055】
図6は,本実施の形態による抽出結果記憶部が格納するデータの例を示す図である。
【0056】
図6に示す類似プログラムリストデータ130は,抽出結果記憶部103に記憶された類似プログラムの抽出結果の一例である。図6に示す類似プログラムリストデータ130は,プログラム名,文例,プログラムID,類似判定重み値等の情報を持つ。図6に示す類似プログラムリストデータ130において,プログラム名,文例,プログラムIDは,図4に示す登録プログラム管理データ120,図5に示す文例管理データ121のプログラム名,文例,プログラムIDに相当する。類似判定重み値は,類似プログラムが抽出された際の,一致判定の対象となる分析対象関数の重み値の範囲を示す。例えば,類似判定重み値が2である場合には,その類似プログラムの分析結果と処理対象プログラムの分析結果との一致判定で,重み値が2〜5のすべての分析対象関数が一致したことを示している。
【0057】
図7は,本実施の形態による出力部が表示装置に出力するプログラム登録画面の例を示す図である。
【0058】
図7に示すプログラム登録画面200は,ユーザがプログラム管理装置10への処理対象プログラムの登録を行う際に,ディスプレイ等の表示装置に表示される画面の例である。図7に示すプログラム登録画面200には,類似プログラムの検索結果も出力されている。
【0059】
図7に示すプログラム登録画面200において,類似プログラムリストは,登録プログラムから検出された類似プログラムの一覧である。図7に示すプログラム登録画面200の類似プログラムリストでは,類似プログラムのプログラム名と,類似プログラムに付与された索引情報である文例とが示されている。図7に示すプログラム登録画面200において,例えばユーザが類似プログラムリストのプログラム名を指定すると,その類似プログラムのソースコードなどの情報が表示される。類似プログラムの検索結果と,検出された類似プログラムに付与された索引情報とを合わせて画面に出力することで,ユーザは,登録する処理対象プログラムに適切な索引情報を付与することができるようになる。
【0060】
図7に示すプログラム登録画面200において,文例入力欄は,ユーザが,登録する処理対象プログラムに付与する文例を入力する欄である。例えば,ユーザが登録する処理対象プログラムに類似プログラムと同じ文例を付与したい場合には,ユーザが類似プログラムリストの文例を指定すると,その文例が文例入力欄に入力される。ユーザが,ユーザが登録する処理対象プログラムに新たな文例を付与したい場合には,キーボードなどの入力装置によって文例入力欄に文例を入力する。
【0061】
図7に示すプログラム登録画面200において,プログラム名入力欄は,ユーザが,登録する処理対象プログラムにプログラム名を入力する欄である。プログラム名入力欄へのプログラム名の入力がない場合には,登録する処理対象プログラムのメイン関数の関数名が,その処理対象プログラムのプログラム名として登録される。
【0062】
以下,図8〜図12のフローチャートを用いて,本実施の形態のプログラム管理装置10による処理の流れを説明する。
【0063】
図8は,本実施の形態のプログラム管理装置によるプログラム登録処理フローチャートである。
【0064】
プログラム管理装置10においてプログラム入力部11は,登録する処理対象プログラムを入力する(ステップS10)。
【0065】
分析部12は,プログラム分析処理を実行する(ステップS11)。プログラム分析処理は,プログラムを分析し,プログラムに含まれる分析対象関数を取得する処理である。プログラム分析処理の詳細については,後述する。
【0066】
抽出部13は,類似プログラム抽出処理を実行する(ステップS12)。類似プログラム抽出処理は,処理対象プログラムから取得した分析対象関数と同じ分析対象関数が対応付けられた登録プログラムを,類似プログラムとして抽出する処理である。類似プログラム抽出処理の詳細については,後述する。
【0067】
出力部14は,ユーザが処理対象プログラムを登録する作業を行うためのプログラム登録画面200を,ディスプレイなどの表示装置に表示する(ステップS13)。このとき,出力部14は,類似プログラムの抽出結果をプログラム登録画面200に出力する。
【0068】
登録部15は,プログラム登録処理を実行する(ステップS14)。プログラム登録処理は,処理対象プログラムのデータを登録プログラム記憶部102に記録する処理である。プログラム登録処理の詳細については,後述する。
【0069】
更新部16は,データ更新処理を実行する(ステップS15)。データ更新処理は,処理対象プログラムの呼び出しを行っている登録プログラムのデータを更新する処理である。データ更新処理の詳細については,後述する。
【0070】
図9は,本実施の形態の分析部によるプログラム分析処理フローチャートである。
【0071】
本実施の形態の分析部12による処理対象プログラムからの分析対象関数の取得では,分析部12は,処理対象プログラムの記述順で関数の分析を行い,分析対象関数を取得する。途中にサブ関数があり,そのサブ関数に含まれる分析対象関数の取得が可能であれば,分析部12は,該サブ関数から取得される分析対象関数を分析結果に加える。
【0072】
分析部12は,処理対象プログラムから,記述された順序で,関数を1つ取得する(ステップS20)。プログラミング言語ごとに,関数を記述するルールが決まっており,そのルールに従った分析を行うことにより,処理対象プログラムから関数を取得することができる。例えば,分析部12は,処理対象プログラムがC言語である場合に,“()”付きの文字列を関数として取得する。
【0073】
分析部12は,分析情報記憶部101の分析対象外関数データ111を参照し,取得された関数が分析対象外関数であるかを判定する(ステップS21)。取得された関数が分析対象外関数であれば(ステップS21のYES),分析部12は,ステップS29の処理に進む。本実施の形態によるプログラム分析処理では,分析対象外関数への対処は行われない。
【0074】
取得された関数が分析対象外関数でなければ(ステップS21のNO),分析部12は,分析情報記憶部101の分析対象関数データ110を参照し,取得された関数が分析対象関数であるかを判定する(ステップS22)。取得された関数が分析対象関数であれば(ステップS22のYES),分析部12は,取得された関数を分析結果に加え(ステップS23),ステップS29の処理に進む。
【0075】
取得された関数が分析対象関数でなければ(ステップS22のNO),分析部12は,取得された関数が,処理対象プログラム内にプログラムが存在するサブ関数であるかを判定する(ステップS24)。取得された関数が処理対象プログラム内にプログラムが存在するサブ関数であれば(ステップS24のYES),分析部12は,処理対象プログラムに含まれる該当サブ関数のプログラムについて,再帰的にプログラム分析処理を実行し(ステップS25),ステップS29の処理に進む。
【0076】
例えば,処理対象プログラムが,図4の登録プログラム管理データ120における管理番号#002のレコードのプログラム内容に示されるようなプログラムであったものとする。このプログラムでは,メイン関数でサブ関数sub1,sub2,sub3を呼び出しているが,このうち2つのサブ関数sub1,sub2のプログラムについては,自身の内部に存在している。このようなサブ関数については,ステップS25の処理によって,分析対象関数が取得される。
【0077】
取得された関数が処理対象プログラム内にプログラムが存在するサブ関数でなければ(ステップS24のNO),分析部12は,登録プログラム記憶部102の登録プログラム管理データ120を参照し,取得された関数が登録プログラムであるかを判定する(ステップS26)。ここでは,分析部12は,該当サブ関数の関数名で登録プログラム管理データ120のプログラム名を探索し,該当サブ関数の関数名とプログラム名が一致する登録プログラムが存在するかを判定する。
【0078】
取得された関数が登録プログラムであれば(ステップS26のYES),分析部12は,登録プログラム記憶部102の登録プログラム管理データ120を参照し,該当登録プログラムの分析結果を今回の処理対象プログラムの分析結果に加え(ステップS27),ステップS29の処理に進む。なお,このとき,分析部12は,該当サブ関数と呼び出し対象の登録プログラムとを対応付けた呼び出し関係の情報を保持しておく。
【0079】
例えば,処理対象プログラムが,図4の登録プログラム管理データ120における管理番号#003のレコードのプログラム内容に示されるようなプログラムであったものとする。このプログラムでは,メイン関数でサブ関数sub4,sub5,sub6を呼び出しているが,このうち2つのサブ関数sub4,sub5のプログラムについては,その関数名をプログラム名とする登録プログラムが存在する。このようなサブ関数については,ステップS27の処理によって,分析対象関数が取得される。
【0080】
取得された関数が登録プログラムでなければ(ステップS26のNO),分析部12は,取得された関数が未分析のサブ関数であると判定し(ステップS28),ステップS29の処理に進む。このとき,分析部12は,該当サブ関数に未分析を示すnoneを対応付けた呼び出し関係の情報を保持しておく。未分析のサブ関数については,その時点でプログラムの実体がわからないため,分析対象関数の取得ができない。
【0081】
分析部12は,処理対象プログラムのすべての関数について,処理が終了したかを判定する(ステップS29)。まだ,すべての関数について処理が終了していなければ(ステップS29のNO),ステップS20の処理に戻って,次の関数の処理に移る。すべての関数について処理が終了していれば(ステップS29のYES),分析部12は,処理を終了する。
【0082】
図9に示すプログラム分析処理では,処理対象プログラムに別のプログラムの呼び出しがある場合に,その呼び出し対象のプログラムに含まれる分析対象関数も,分析結果として取得される。これにより,処理対象プログラムに別のプログラムの呼び出しがある場合に,呼び出し対象のプログラムに含まれる分析対象関数を考慮した,類似プログラムの検索が可能となる。
【0083】
図10は,本実施の形態の抽出部による類似プログラム抽出処理フローチャートである。
【0084】
本実施の形態の抽出部13による類似プログラムの抽出では,分析結果の分析対象関数が順序も含めて処理対象プログラムの分析結果の分析対象関数と一致する登録プログラムが,類似プログラムとして登録プログラム記憶部102から抽出される。
【0085】
抽出部13は,カウンタiを1に設定する(ステップS30)。カウンタiは,分析結果同士の一致判定において,一致判定の対象となる分析対象関数の重み値の範囲を示す。例えば,カウンタiの値が1であれば,一致判定の対象となる分析対象関数の重み値の範囲は1〜5となる。また,例えば,カウンタiの値が3であれば,一致判定の対象となる分析対象関数の重み値の範囲は3〜5となる。
【0086】
抽出部13は,登録プログラム記憶部102の登録プログラム管理データ120から,登録プログラムのレコードを1つ取得する(ステップS31)。
【0087】
抽出部13は,抽出結果記憶部103の類似プログラムリストデータ130を参照し,レコードが取得された登録プログラムが,類似プログラムの検索結果としてすでに抽出された登録プログラムであるかを判定する(ステップS32)。結果としてすでに抽出された登録プログラムであれば(ステップS32のYES),ステップS31の処理に戻り,次の登録プログラムの処理に移る。本実施の形態では,一致判定に用いる分析対象関数の重み値の基準を変えるたびに,登録プログラム管理データ120の最初のレコードに戻って処理を行うので,ステップS32の判定で,同じ登録プログラムを重複して抽出することを防ぐ。
【0088】
結果としてすでに抽出された登録プログラムでなければ(ステップS32のNO),抽出部13は,重み値がi以上の分析対象関数について,取得された登録プログラムの分析結果を,処理対象プログラムの分析結果と比較する(ステップS33)。抽出部13は,重み値がi以上の分析対象関数について,双方のプログラムの分析結果が一致するかを判定する(ステップS34)。
【0089】
双方のプログラムの分析結果が一致すれば(ステップS34のYES),抽出部13は,取得された登録プログラムのデータを,抽出結果記憶部103の類似プログラムリストデータ130に抽出する(ステップS35)。ステップS34の判定で一致した場合には,取得された登録プログラムが類似プログラムであると判定されたことになる。このとき,抽出部13は,該当登録プログラムについて,登録プログラム記憶部102の登録プログラム管理データ120と文例管理データ121から必要な情報を抽出し,抽出結果記憶部103の類似プログラムリストデータ130に記録する。また,このときのカウンタiの値を,類似プログラムリストデータ130の類似判定重み値に記録する。
【0090】
抽出部13は,すべての登録プログラムについて処理が終了したかを判定する(ステップS36)。まだすべての登録プログラムについて処理が終了していなければ(ステップS36のNO),抽出部13は,ステップS31の処理に戻って,次の登録プログラムの処理に移る。
【0091】
すべての登録プログラムについて処理が終了していれば(ステップS36のYES),抽出部13は,カウンタiが5であるかを判定する(ステップS37)。カウンタiが5でなければ(ステップS37のNO),抽出部13は,カウンタiをインクリメントし(ステップS38),ステップS31の処理に戻って,登録プログラム管理データ120の最初の登録プログラムの処理に移る。カウンタiが5であれば(ステップS37のYES),抽出部13は,処理を終了する。
【0092】
例えば,ある入力対象プログラムXXXの分析結果が,{getaddrinfo() ,while() ,socket(),connect() ,close() ,freeaddrinfo()}であるものとする。この入力対象プログラムXXXの分析結果を,図3(A)に示す分析対象関数データ110の関数IDで表すと{100,053,102,101,200,104}となる。例えば,この入力対象プログラムXXXの類似プログラムを,図4に示す登録プログラム管理データ120から検出するものとする。
【0093】
図4に示す登録プログラム管理データ120において,管理番号#001の登録プログラムAAAの分析結果は,{001,100,053,102,101,200,104}である。重み値が1以上の分析対象関数が一致判定の対象であれば,管理番号#001の登録プログラムAAAは,入力対象プログラムXXXの類似プログラムとして検出されない。重み値が2以上の分析対象関数が一致判定の対象であれば,重み値1の分析対象関数mainが一致判定の対象とならないので,管理番号#001の登録プログラムAAAは,入力対象プログラムXXXの類似プログラムとして検出される。例えば,分析対象関数mainは,プログラムの特徴を表すという意味ではあまり重要ではないので,一致判定の対象としなくてもほとんど問題はない。
【0094】
このように,すべての分析対象関数の一致判定では,類似プログラムとして検出できない登録プログラムでも,一致判定の対象となる分析対象関数の重み値の範囲を変えれば,類似プログラムとして検出できる場合がある。
【0095】
なお,図10に示す類似プログラム抽出処理では,一致判定の対象となる分析対象関数の重み値の範囲を5段階に変えて,類似プログラムの検索を行っているが,ある設定された固定の重み値の範囲で,1度だけ類似プログラムの検索を行うようにしてもよい。また,所定数以上の類似プログラムが検出された時点で,段階を変えた類似プログラムの検索を終了するようにしてもよい。
【0096】
図11は,本実施の形態の登録部によるプログラム登録処理フローチャートである。
【0097】
プログラム管理装置10において,登録部15は,プログラム登録画面200においてユーザが決定した文例を取得する(ステップS40)。
【0098】
登録部15は,プログラム登録画面200でのユーザによるプログラム名の入力があるかを判定する(ステップS41)。プログラム名の入力があれば(ステップS41のYES),登録部15は,入力されたプログラム名を取得する(ステップS42)。プログラム名の入力がなければ(ステップS41のNO),処理対象プログラムのメイン関数の関数名をプログラム名とする(ステップS43)。
【0099】
登録部15は,処理対象プログラムのデータを,登録プログラム管理データ120に追加する(ステップS44)。プログラム名は,ステップS42またはステップS43の処理で得られたプログラム名が記録される。プログラム内容は,処理対象プログラムのソースコードが記録される。呼び出し関係は,分析部12によるプログラム分析処理で保持された呼び出し関係が記録される。分析結果は,分析部12によるプログラム分析処理で得られた分析結果が記録される。
【0100】
登録部15は,処理対象プログラムのデータを,文例管理データに追加する(ステップS45)。文例は,ステップS40の処理で得られた文例が記録される。
【0101】
図12は,本実施の形態の更新部によるデータ更新処理フローチャートである。
【0102】
プログラム管理装置10において,更新部16は,登録プログラム記憶部102の登録プログラム管理データ120から,登録プログラムのレコードを1つ取得する(ステップS50)。
【0103】
更新部16は,取得した登録プログラムの呼び出し関係に未分析のサブ関数がある場合に,その未分析のサブ関数の関数名と,登録された処理対象プログラムのプログラム名とを比較する(ステップS51)。更新部16は,未分析のサブ関数の関数名と処理対象プログラムのプログラム名とが一致するかを判定する(ステップS52)。
【0104】
未分析のサブ関数の関数名と処理対象プログラムのプログラム名とが一致すれば(ステップS52のYES),更新部16は,登録プログラム管理データ120の該当登録プログラムの呼び出し関係において,該当サブ関数に処理対象プログラムとの関係を記録する(ステップS53)。また,更新部16は,登録プログラム管理データ120の該当登録プログラムの分析結果に,処理対象プログラムの分析結果をマージする(ステップS54)。更新部16は,登録プログラム管理データ120の更新結果を文例管理データ121に反映する。
【0105】
更新部16は,すべての登録プログラムについて処理が終了したかを判定する(ステップS55)。まだすべての登録プログラムについて処理が終了していなければ(ステップS55のNO),更新部16は,ステップS50の処理に戻って,次の登録プログラムの処理に移る。すべての登録プログラムについて処理が終了していれば(ステップS55のYES),更新部16は,処理を終了する。
【0106】
例えば,図4に示す登録プログラム管理データ120において,管理番号#003のプログラムの登録時に,管理番号#004のsub4のプログラムと管理番号#005のsub5のプログラムとが,未登録であったものとする。この時点で,管理番号#003のプログラムの分析結果に,分析対象関数はない。
【0107】
その後,管理番号#004のsub4のプログラムが登録されると,管理番号#003のプログラムとの呼び出し関係から,管理番号#003のプログラムの分析結果に管理番号#004のsub4のプログラムの分析結果がマージされる。この時点で,管理番号#003のプログラムの分析結果は,{100}となる。
【0108】
さらに,管理番号#005のsub5のプログラムが登録されると,管理番号#003のプログラムとの呼び出し関係から,管理番号#003のプログラムの分析結果に管理番号#005のsub5のプログラムの分析結果がマージされる。この時点で,管理番号#003のプログラムの分析結果は,{100,053,102,101,200}となる。
【0109】
以上説明した本実施の形態のプログラム管理装置10によって,処理対象プログラムが別の登録プログラムを呼び出している場合でも,その呼び出し対象の登録プログラムに含まれる分析対象関数も含めた,処理対象プログラムの分析対象関数を取得することができる。これにより,より精度が高い類似プログラムの検索が可能となる。
【0110】
以上,本実施の形態について説明したが,本発明はその主旨の範囲において種々の変形が可能であることは当然である。
【0111】
例えば,本実施の形態では,類似プログラム抽出処理において,分析対象関数の順番も含めた一致で,類似プログラムの判定を行っている。例えば,類似プログラム抽出処理において,分析対象関数の種類と数との関係の一致で,類似プログラムの判定を行うようにしてもよい。
【0112】
以上の本実施の形態に関し,さらに以下の付記を開示する。
【0113】
(付記1)
コンピュータに,
プログラム同士の類似性の判断に用いる所定の分析対象関数が記憶された記憶部を参照して,前記所定の分析対象関数のうち,処理対象プログラムに含まれる分析対象関数を示す第1の分析対象関数情報を取得し,
登録プログラムごとに,該登録プログラムを特定する識別情報と,前記所定の分析対象関数のうち,該登録プログラムに含まれる分析対象関数を示す第2の分析対象関数情報と,該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第3の分析対象関数情報とが対応付けて記憶された記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出し,
前記抽出した登録プログラムを,前記処理対象プログラムに類似するプログラムとして出力する
処理を実行させるための管理プログラム。
【0114】
(付記2)
前記記憶部は,さらに,登録プログラムに該登録プログラムの索引情報を対応付けて記憶し,
前記出力する処理では,前記抽出した登録プログラムを前記処理対象プログラムに類似するプログラムとして出力する際に,さらに前記抽出した登録プログラムに対応付けられた索引情報を出力する
ことを特徴とする付記1に記載の管理プログラム。
【0115】
(付記3)
前記コンピュータに,さらに,
前記処理対象プログラムの識別情報を含む登録プログラムを前記記憶部から検索し,検索された登録プログラムに前記処理対象プログラムを関連付けて前記記憶部に記憶する
処理を実行させるための付記1または付記2に記載の管理プログラム。
【0116】
(付記4)
前記分析対象関数には,前記分析対象関数ごとに重要度が設定されており,
前記登録プログラムを抽出する処理では,重要度が所定以上高い分析対象関数を一致判定の対象として,前記記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする付記1から付記3までのいずれかに記載の管理プログラム。
【0117】
(付記5)
前記第1の分析対象関数情報を取得する処理では,前記処理対象プログラムに前記記憶部に記憶された登録プログラムを呼び出す識別情報が含まれている場合に,前記第1の分析対象関数情報を取得するとともに,前記処理対象プログラムに含まれる識別情報で呼び出される登録プログラムに含まれる分析対象関数を示す第4の分析対象関数情報を取得し,
前記登録プログラムを抽出する処理では,前記記憶部を,前記第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする付記1から付記4までのいずれかに記載の管理プログラム。
【0118】
(付記6)
コンピュータが,
プログラム同士の類似性の判断に用いる所定の分析対象関数が記憶された記憶部を参照して,前記所定の分析対象関数のうち,処理対象プログラムに含まれる分析対象関数を示す第1の分析対象関数情報を取得し,
登録プログラムごとに,該登録プログラムを特定する識別情報と,前記所定の分析対象関数のうち,該登録プログラムに含まれる分析対象関数を示す第2の分析対象関数情報と,該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第3の分析対象関数情報とが対応付けて記憶された記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出し,
前記抽出した登録プログラムを,前記処理対象プログラムに類似するプログラムとして出力する過程を実行する
ことを特徴とする管理方法。
【0119】
(付記7)
前記記憶部は,さらに,登録プログラムに該登録プログラムの索引情報を対応付けて記憶し,
前記出力する過程では,前記抽出した登録プログラムを前記処理対象プログラムに類似するプログラムとして出力する際に,さらに前記抽出した登録プログラムに対応付けられた索引情報を出力する
ことを特徴とする付記6に記載の管理方法。
【0120】
(付記8)
前記コンピュータが,さらに,
前記処理対象プログラムの識別情報を含む登録プログラムを前記記憶部から検索し,検索された登録プログラムに前記処理対象プログラムを関連付けて前記記憶部に記憶する過程を実行する
ことを特徴とする付記6または付記7に記載の管理方法。
【0121】
(付記9)
前記分析対象関数には,前記分析対象関数ごとに重要度が設定されており,
前記登録プログラムを抽出する過程では,重要度が所定以上高い分析対象関数を一致判定の対象として,前記記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする付記6から付記8までのいずれかに記載の管理方法。
【0122】
(付記10)
前記第1の分析対象関数情報を取得する過程では,前記処理対象プログラムに前記記憶部に記憶された登録プログラムを呼び出す識別情報が含まれている場合に,前記第1の分析対象関数情報を取得するとともに,前記処理対象プログラムに含まれる識別情報で呼び出される登録プログラムに含まれる分析対象関数を示す第4の分析対象関数情報を取得し,
前記登録プログラムを抽出する過程では,前記記憶部を,前記第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする付記6から付記9までのいずれかに記載の管理方法。
【0123】
(付記11)
プログラム同士の類似性の判断に用いる所定の分析対象関数を記憶する分析情報記憶部と,
登録プログラムごとに,該登録プログラムを特定する識別情報と,前記所定の分析対象関数のうち,該登録プログラムに含まれる分析対象関数を示す第2の分析対象関数情報と,該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第3の分析対象関数情報とを対応付けて記憶する登録プログラム記憶部と,
前記分析情報記憶部を参照して,前記所定の分析対象関数のうち,処理対象プログラムに含まれる分析対象関数を示す第1の分析対象関数情報を取得する分析部と,
前記登録プログラム記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出する抽出部と,
前記抽出した登録プログラムを,前記処理対象プログラムに類似するプログラムとして出力する出力部とを備える
ことを特徴とする管理装置。
【0124】
(付記12)
前記登録プログラム記憶部は,さらに,登録プログラムに該登録プログラムの索引情報を対応付けて記憶し,
前記出力部は,前記抽出した登録プログラムを前記処理対象プログラムに類似するプログラムとして出力する際に,さらに前記抽出した登録プログラムに対応付けられた索引情報を出力する
ことを特徴とする付記11に記載の管理装置。
【0125】
(付記13)
前記処理対象プログラムの識別情報を含む登録プログラムを前記登録プログラム記憶部から検索し,検索された登録プログラムに前記処理対象プログラムを関連付けて前記登録プログラム記憶部に記憶する更新部を備える
ことを特徴とする付記11または付記12に記載の管理装置。
【0126】
(付記14)
前記分析対象関数には,前記分析対象関数ごとに重要度が設定されており,
前記抽出部は,重要度が所定以上高い分析対象関数を一致判定の対象として,前記登録プログラム記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする付記11から付記13までのいずれかに記載の管理装置。
【0127】
(付記15)
前記分析部は,前記処理対象プログラムに前記登録プログラム記憶部に記憶された登録プログラムを呼び出す識別情報が含まれている場合に,前記第1の分析対象関数情報を取得するとともに,前記処理対象プログラムに含まれる識別情報で呼び出される登録プログラムに含まれる分析対象関数を示す第4の分析対象関数情報を取得し,
前記抽出部は,前記登録プログラム記憶部を,前記第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする付記11から付記14までのいずれかに記載の管理装置。
【符号の説明】
【0128】
10 プログラム管理装置
11 プログラム入力部
12 分析部
13 抽出部
14 出力部
15 登録部
16 更新部
101 分析情報記憶部
102 登録プログラム記憶部
103 抽出結果記憶部
【技術分野】
【0001】
本発明は,プログラムの管理を行う管理プログラム,管理方法および管理装置に関するものである。
【背景技術】
【0002】
プログラム部品を管理し,再利用することで,プログラミングに掛かるコストやバグを削減することが行われている。
【0003】
プログラム部品の管理では,プログラム部品の登録や,登録するプログラム部品への索引情報の付与などが,プログラマに一任されることも多い。そのため,プログラム部品の登録時に適切な索引情報が付与されなかったことで後日の検索が難しくなったり,同じようなプログラム部品が異なる索引情報で重複して登録されるなどの問題がある。
【0004】
登録するプログラムに対する索引情報の付与精度を上げるためには,登録時に登録済みプログラムの中から類似するプログラムを検索し,その類似プログラムの索引情報を参照しながら,登録するプログラムに索引情報を付与できるようにすることが望ましい。
【0005】
なお,プロセスモデルを,該プロセスモデルに含まれる参照関数にリンクさせてDBに登録し,検索・再利用を容易にする技術が知られている。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特表2004−535021号公報
【発明の概要】
【発明が解決しようとする課題】
【0007】
上記のプログラム検索の技術を利用することによって,例えば,登録しようとするプログラムに含まれる標準関数と同じ標準関数を含む登録済みプログラムを,類似プログラムとして検索することは可能である。
【0008】
しかし,上述のプログラム検索の技術では,個々のプログラムに閉じた検索しか行うことができない。多くのプログラムでは,外部の別のプログラムへの呼び出しが行われている。別のプログラムを呼び出しているプログラムが登録されている場合に,この呼び出し対象の別プログラムに含まれる標準関数をも加味した検索を行うことができなければ,精度の高い類似プログラムの検索はできない。
【0009】
一側面では,本発明は,あるプログラムの類似プログラムを登録されたプログラムから検索する場合において,類似プログラムの検索精度を向上させる技術を提供することを目的とする。
【課題を解決するための手段】
【0010】
1態様では,開示するプログラムは,コンピュータを,次のように機能させる。
【0011】
すなわち,前記プログラムは,前記プログラムがインストールされて実行されるコンピュータに,プログラム同士の類似性の判断に用いる所定の分析対象関数が記憶された記憶部を参照して,所定の分析対象関数のうち,処理対象プログラムに含まれる分析対象関数を示す第1の分析対象関数情報を取得し,登録プログラムごとに,該登録プログラムを特定する識別情報と,所定の分析対象関数のうち,該登録プログラムに含まれる分析対象関数を示す第2の分析対象関数情報と,該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第3の分析対象関数情報とが対応付けて記憶された記憶部を,第1の分析対象関数情報をもとに検索して,第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,第1の分析対象関数情報と同じ登録プログラムを抽出し,抽出した登録プログラムを,処理対象プログラムに類似するプログラムとして出力する処理を実行させる。
【発明の効果】
【0012】
1態様では,あるプログラムの類似プログラムを登録されたプログラムから検索する場合において,類似プログラムの検索精度が向上する。
【図面の簡単な説明】
【0013】
【図1】本実施の形態によるプログラム管理装置の構成例を示す図である。
【図2】本実施の形態によるプログラム管理装置を実現するコンピュータのハードウェア構成例を示す図である。
【図3】本実施の形態による分析情報記憶部が格納するデータの例を示す図である。
【図4】本実施の形態による登録プログラム記憶部が格納するデータの例を示す図である。
【図5】本実施の形態による登録プログラム記憶部が格納するデータの例を示す図である。
【図6】本実施の形態による抽出結果記憶部が格納するデータの例を示す図である。
【図7】本実施の形態による出力部が表示装置に出力するプログラム登録画面の例を示す図である。
【図8】本実施の形態のプログラム管理装置によるプログラム登録処理フローチャートである。
【図9】本実施の形態の分析部によるプログラム分析処理フローチャートである。
【図10】本実施の形態の抽出部による類似プログラム抽出処理フローチャートである。
【図11】本実施の形態の登録部によるプログラム登録処理フローチャートである。
【図12】本実施の形態の更新部によるデータ更新処理フローチャートである。
【発明を実施するための形態】
【0014】
以下,本実施の形態について,図を用いて説明する。
【0015】
図1は,本実施の形態によるプログラム管理装置の構成例を示す図である。
【0016】
図1に示す本実施の形態のプログラム管理装置10は,例えばプログラムの再利用を目的として,複数のプログラムの登録・管理を行う。
【0017】
本実施の形態のプログラム管理装置10は,プログラム管理装置10に登録済みのプログラムから,これからプログラム管理装置10に登録しようとしているプログラムと類似するプログラムを検索する,類似プログラム検索機能を有する。以下では,プログラム管理装置10に登録済みのプログラムを,登録プログラムと呼ぶ。また,これからプログラム管理装置10に登録しようとしているプログラムを,処理対象プログラムと呼ぶ。
【0018】
図1に示すプログラム管理装置10は,プログラム入力部11,分析部12,抽出部13,出力部14,登録部15,更新部16,分析情報記憶部101,登録プログラム記憶部102,抽出結果記憶部103を備える。図1に示すプログラム管理装置10において,実線の接続は主に制御関係を示し,破線の接続は主にデータの入出力を示す。
【0019】
プログラム入力部11は,プログラム管理装置10に登録する処理対象プログラムを入力する。入力される処理対象プログラムは,例えば,プログラミング言語で記述されたソースコードである。
【0020】
分析部12は,入力された処理対象プログラムを分析し,その分析結果として,処理対象プログラムに含まれる分析対象関数を示す第1の分析対象関数情報を取得する。分析対象関数としては,例えば,プログラム同士の類似性の判断に用いる関数が設定される。分析対象関数としては,システムコールや,プログラミング言語で標準規格化された標準関数などが考えられる。
【0021】
分析対象関数は,例えば,分析情報記憶部101に記憶されたプログラム分析に関する情報で設定されている。分析情報記憶部101は,所定の分析対象関数を含むプログラム分析に関する情報を記憶する,コンピュータがアクセス可能な記憶部である。分析部12は,処理対象プログラムの分析時に,分析情報記憶部101に記憶された情報を参照して,処理対象プログラムに含まれる分析対象関数を取得する。
【0022】
また,分析部12は,処理対象プログラムに登録プログラムを呼び出す識別情報が含まれている場合に,第1の分析対象関数情報を取得するとともに,処理対象プログラムに含まれる識別情報で呼び出される登録プログラムに含まれる分析対象関数を示す第4の分析対象関数情報を取得する。処理対象プログラムに含まれる登録プログラムを呼び出す識別情報は,例えば,処理対象プログラムに含まれるサブ関数の関数名である。例えば,処理対象プログラムに含まれるサブ関数が登録プログラムである場合には,分析部12は,処理対象プログラムに含まれるサブ関数の関数名で,処理対象プログラムから呼び出される登録プログラムを特定できる。分析部12は,登録プログラム記憶部102から特定された登録プログラムの分析結果を得ることで,処理対象プログラムの分析結果に,呼び出される登録プログラムの分析対象関数を含めることができる。
【0023】
登録プログラム記憶部102は,登録プログラムに関する情報を記憶する,コンピュータがアクセス可能な記憶部である。例えば,登録プログラム記憶部102は,登録プログラムごとに,該登録プログラムを特定する識別情報と,該登録プログラムに含まれる分析対象関数を示す第2の分析対象関数情報と,該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第3の分析対象関数情報とを対応付けて記憶する。登録プログラムを特定する識別情報は,例えば,登録プログラムのメイン関数の関数名である。
【0024】
また,登録プログラム記憶部102は,さらに,登録プログラムに,該登録プログラムの索引情報を対応付けて記憶する。索引情報は,ユーザがプログラム管理装置10から目的とする登録プログラムを引き出す際に,ユーザが入力したり,参照したりする情報である。索引情報としては,例えば,ユーザにとってそのプログラムの特徴が分かり易い文例などが望ましい。
【0025】
抽出部13は,登録プログラム記憶部102を,処理対象プログラムから取得した第1の分析対象関数情報をもとに検索する。抽出部13は,登録プログラム記憶部102から,第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,第1の分析対象関数情報と同じ登録プログラムを抽出する。抽出部13により抽出された登録プログラムが,処理対象プログラムに類似すると判定されたプログラムである。以下では,処理対象プログラムに類似すると判定されたプログラムを,類似プログラムとも呼ぶ。抽出部13による登録プログラムの抽出結果は,抽出結果記憶部103に記憶される。抽出結果記憶部103は,類似プログラムの抽出結果を記憶する,コンピュータがアクセス可能な記憶部である。
【0026】
また,抽出部13は,登録プログラム記憶部102を検索する際に,重要度が所定以上高い分析対象関数を一致判定の対象として,第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,第1の分析対象関数情報と同じ登録プログラムを抽出するようにしてもよい。
【0027】
例えば,分析情報記憶部101では,分析対象関数ごとに重要度が設定されている。分析対象関数の中にも,プログラムの特徴を分析する上で,重要度が高い分析対象関数と重要度が低い分析対象関数とがある。2つのプログラム間で抽出される分析対象関数の一部が一致しなくても,その一致しない分析対象関数の重要度が低い場合には,それらの2つのプログラムが類似すると判定できる場合がある。このように,重要度の基準を変えて,処理対象プログラムの分析結果と登録プログラム分析結果との一致判定を行うことで,類似プログラムの検索精度を向上させることが可能となる。
【0028】
また,抽出部13は,処理対象プログラムに登録プログラムを呼び出す識別情報が含まれている場合に,登録プログラム記憶部102を,第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報をもとに検索する。このとき,抽出部13は,登録プログラム記憶部102から,第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報と同じ登録プログラムを抽出する。
【0029】
出力部14は,抽出した登録プログラムを,処理対象プログラムに類似するプログラムとして出力する。例えば,出力部14は,ユーザが処理対象プログラムに索引情報を付与してプログラム管理装置10に登録する作業を行うためのプログラム登録画面を,ディスプレイ等の表示装置に表示する。このとき,出力部14は,抽出された類似プログラムの情報を,ユーザが参照できるように,プログラム登録画面に出力する。
【0030】
また,出力部14は,抽出した登録プログラムを処理対象プログラムに類似するプログラムとして出力する際に,さらに抽出した登録プログラムに対応付けられた索引情報を出力する。例えば,出力部14は,プログラム登録画面に抽出された類似プログラムの情報を出力する際に,抽出された類似プログラムに対応付けられた索引情報も,同時にプログラム登録画面に出力する。
【0031】
登録部15は,登録プログラム記憶部102に,処理対象プログラムのデータを登録する。例えば,登録部15は,登録する処理対象プログラムに,該処理対象プログラムを特定する識別情報と,該処理対象プログラムに含まれる分析対象関数を示す分析関数情報とを対応付けて,登録プログラム記憶部102に登録する。また,処理対象プログラムに別の登録プログラムを呼び出す識別情報が含まれている場合に,登録部15は,登録する処理対象プログラムに,該処理対象プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す分析関数情報をも対応付けて,登録プログラム記憶部102に登録する。また,登録部15は,登録する処理対象プログラムに,ユーザに指定された索引情報を対応付けて,登録プログラム記憶部102に登録する。
【0032】
更新部16は,処理対象プログラムの識別情報を含む登録プログラムを,登録プログラム記憶部102から検索する。更新部16は,検索された登録プログラムに処理対象プログラムを関連付けて,登録プログラム記憶部102に記憶する。例えば,登録プログラムに処理対象プログラムの識別情報が含まれている場合,処理対象プログラムは,該登録プログラムのサブ関数となる。このとき,該登録プログラムから呼び出される処理対象プログラムに含まれる分析対象関数を,該登録プログラムの分析結果に含めるために,処理対象プログラムの該登録プログラムへの関連付けを行う。このような更新部16の処理によって,呼び出し対象プログラムの分析対象関数を含む類似プログラム検索の対象を増やすことが可能となる。
【0033】
図2は,本実施の形態によるプログラム管理装置を実現するコンピュータのハードウェア構成例を示す図である。
【0034】
図1に示す本実施の形態のプログラム管理装置10は,例えば,CPU(Central Processing Unit )2,主記憶となるメモリ3,記憶装置4,通信装置5,媒体読取・書込装置6,入力装置7,出力装置8等を備えるコンピュータ1によって実現される。記憶装置4は,例えばHDD(Hard Disk Drive )などである。媒体読取・書込装置6は,例えばCD−R(Compact Disc Recordable )ドライブやDVD−R(Digital Versatile Disc Recordable )ドライブなどである。入力装置7は,例えばキーボード・マウスなどである。出力装置8は,例えばディスプレイ等の表示装置などである。
【0035】
図1に示すプログラム管理装置10およびプログラム管理装置10が備える各機能部は,コンピュータ1が備えるCPU2,メモリ3等のハードウェアと,ソフトウェアプログラムとによって実現することが可能である。コンピュータ1が実行可能なプログラムは,記憶装置4に記憶され,その実行時にメモリ3に読み出され,CPU2により実行される。
【0036】
コンピュータ1は,可搬型記録媒体から直接プログラムを読み取り,そのプログラムに従った処理を実行することもできる。また,コンピュータ1は,サーバコンピュータからプログラムが転送されるごとに,逐次,受け取ったプログラムに従った処理を実行することもできる。さらに,このプログラムは,コンピュータ1で読み取り可能な記録媒体に記録しておくことができる。
【0037】
図3は,本実施の形態による分析情報記憶部が格納するデータの例を示す図である。
【0038】
図3(A)に示す分析対象関数データ110,図3(B)に示す分析対象外関数データ111は,分析情報記憶部101に記憶されたプログラム分析に関する情報の一例である。
【0039】
図3(A)に示す分析対象関数データ110は,分析部12によるプログラムの分析において,処理対象プログラムから取得する対象となる分析対象関数が設定された情報である。分析対象関数は,例えば,標準関数などである。使用頻度が高く,プログラムを特徴付ける重要な要素となり得るユーザ関数が,分析対象関数に設定されていてもよい。本実施の形態による分析部12は,分析対象関数データ110に記録された分析対象関数を,分析結果として抽出する。
【0040】
図3(A)に示す分析対象関数データ110は,関数ID,関数名,重み値等の情報を持つ。図3(A)に示す分析対象関数データ110において,関数IDは,設定された分析対象関数を一意に識別する識別情報である。関数名は,分析対象関数の関数名を示す。重み値は,分析対象関数の重要度を示す情報である。本実施の形態では,各分析対象関数に対して5段階の重み値が設定されている。ここでは,重み値は,値が大きいほど重要度が高いものとする。重み値1が設定された分析対象関数の重要度は最も低く,重み値5が設定された分析対象関数の重要度は最も高い。
【0041】
図3(B)に示す分析対象外関数データ111は,分析部12によるプログラムの分析において,処理対象プログラムから取得する対象とならない分析対象外関数が設定された情報である。プログラムに含まれる関数の中には,分析結果として抽出することによって,かえってそのプログラムの特徴を失わせてしまう関数がある。本実施の形態による分析部12は,処理対象プログラムに分析対象外関数データ111に記録された分析対象外関数が含まれている場合に,その存在を無視する。
【0042】
図3(B)に示す分析対象外関数データ111は,番号,関数名,プログラム内容等の情報を持つ。図3(B)に示す分析対象外関数データ111において,番号は,分析対象外関数のレコードに付された番号である。関数名は,分析対象外関数の関数名を示す。プログラム内容は,分析対象外関数がユーザ関数である場合において,その分析対象外関数のソースコードを示す。
【0043】
図4,図5は,本実施の形態による登録プログラム記憶部が格納するデータの例を示す図である。
【0044】
図4に示す登録プログラム管理データ120,図5に示す文例管理データ121は,登録プログラム記憶部102に記憶された登録プログラムに関する情報の一例である。
【0045】
図4に示す登録プログラム管理データ120は,各登録プログラムのデータを管理する情報である。図4に示す登録プログラム管理データ120は,管理番号,プログラム名,プログラム内容,呼び出し関係,分析結果の情報を持つ。
【0046】
図4に示す登録プログラム管理データ120において,管理番号は,各登録プログラムをプログラム管理装置10内部で識別するために付された番号である。
【0047】
図4に示す登録プログラム管理データ120において,プログラム名は,プログラムを識別する識別情報である。本実施の形態では,原則として,登録プログラムのプログラム名に,その登録プログラムのメイン関数の関数名が使用される。これにより,プログラム名を登録プログラムの識別情報として,登録プログラムの呼び出し関係を管理することが可能となる。だだし,特にユーザからプログラム名の指定があった場合には,ユーザに指定されたものをプログラム名とする。例えば,登録プログラムのメイン関数の関数名が,“main”である場合などには,プログラム管理装置10は,ユーザにプログラム名の指定を促す。
【0048】
図4に示す登録プログラム管理データ120において,プログラム内容は,登録プログラムのソースコードを示す。
【0049】
図4に示す登録プログラム管理データ120において,呼び出し関係は,登録プログラムに含まれるサブ関数が別のプログラムの呼び出しを行っている際の呼び出し関係を管理する情報である。図4に示す登録プログラム管理データ120の呼び出し関係では,
「サブ関数の関数名」:「呼び出し対象の登録プログラムの管理番号」
の形式で,登録プログラム間の呼び出し関係が示されている。
【0050】
例えば,図4に示す登録プログラム管理データ120において,管理番号#003の登録プログラムのサブ関数sub4は,管理番号#004の登録プログラムのプログラム名,すなわち管理番号#004の登録プログラムのメイン関数の関数名sub4と一致する。このことから,管理番号#004の登録プログラムは,管理番号#003の登録プログラムからの呼び出し対象のプログラムであることがわかる。この関係sub4:#004が,管理番号#003のレコードの呼び出し関係に記録される。なお,「呼び出し対象の登録プログラムの管理番号」がnoneである場合には,そのサブ関数の関数名の登録プログラムがなく,プログラム管理装置10内で呼び出し関係が解決できていないことを示している。
【0051】
登録プログラムのメイン関数で呼び出されるサブ関数が,その登録プログラム内部に存在する場合には,呼び出し関係の情報への記録は行われない。例えば,図4に示す登録プログラム管理データ120において,管理番号#002の登録プログラムのメイン関数では,3つのサブ関数sub1,sub2,sub3の呼び出しが行われている。だだし,そのうちの2つのサブ関数sub1,sub2は,管理番号#002の登録プログラムの内部に存在している。そのため,図4に示す登録プログラム管理データ120における管理番号#002のレコードでは,サブ関数sub1,sub2については,呼び出し関係が記録されていない。
【0052】
図4に示す登録プログラム管理データ120において,分析結果は,登録プログラムに含まれる分析対象関数の情報である。図4に示す登録プログラム管理データ120の分析結果では,分析対象関数が,図3(A)の分析対象関数データ110における関数IDで示されている。
【0053】
なお,図4に示す登録プログラム管理データ120では,登録プログラムのサブ関数が別の登録プログラムとして存在する場合には,その別の登録プログラムに含まれる分析対象関数も,分析結果に含まれている。例えば,管理番号#003の登録プログラム自身には,分析対象関数が1つも含まれていない。だだし,管理番号#003の登録プログラムのサブ関数sub4,sub5で呼び出される管理番号#004,管理番号#005の登録プログラムには,分析対象関数が含まれている。そのため,図4に示す登録プログラム管理データ120では,管理番号#003の登録プログラムの分析結果に,管理番号#004,管理番号#005の登録プログラムの分析結果における分析対象関数が記録されている。
【0054】
図5に示す文例管理データ121は,文例を索引情報として登録プログラムを管理する情報である。図5に示す文例管理データ121は,文例,プログラム名,管理番号,分析結果,利用回数等の情報を持つ。図5に示す文例管理データ121において,文例は,登録プログラムの索引情報である。プログラム名,管理番号,分析結果は,図4に示す登録プログラム管理データ120のプログラム名,管理番号,分析結果に相当する。利用回数は,登録プログラムが再利用された回数を示す。
【0055】
図6は,本実施の形態による抽出結果記憶部が格納するデータの例を示す図である。
【0056】
図6に示す類似プログラムリストデータ130は,抽出結果記憶部103に記憶された類似プログラムの抽出結果の一例である。図6に示す類似プログラムリストデータ130は,プログラム名,文例,プログラムID,類似判定重み値等の情報を持つ。図6に示す類似プログラムリストデータ130において,プログラム名,文例,プログラムIDは,図4に示す登録プログラム管理データ120,図5に示す文例管理データ121のプログラム名,文例,プログラムIDに相当する。類似判定重み値は,類似プログラムが抽出された際の,一致判定の対象となる分析対象関数の重み値の範囲を示す。例えば,類似判定重み値が2である場合には,その類似プログラムの分析結果と処理対象プログラムの分析結果との一致判定で,重み値が2〜5のすべての分析対象関数が一致したことを示している。
【0057】
図7は,本実施の形態による出力部が表示装置に出力するプログラム登録画面の例を示す図である。
【0058】
図7に示すプログラム登録画面200は,ユーザがプログラム管理装置10への処理対象プログラムの登録を行う際に,ディスプレイ等の表示装置に表示される画面の例である。図7に示すプログラム登録画面200には,類似プログラムの検索結果も出力されている。
【0059】
図7に示すプログラム登録画面200において,類似プログラムリストは,登録プログラムから検出された類似プログラムの一覧である。図7に示すプログラム登録画面200の類似プログラムリストでは,類似プログラムのプログラム名と,類似プログラムに付与された索引情報である文例とが示されている。図7に示すプログラム登録画面200において,例えばユーザが類似プログラムリストのプログラム名を指定すると,その類似プログラムのソースコードなどの情報が表示される。類似プログラムの検索結果と,検出された類似プログラムに付与された索引情報とを合わせて画面に出力することで,ユーザは,登録する処理対象プログラムに適切な索引情報を付与することができるようになる。
【0060】
図7に示すプログラム登録画面200において,文例入力欄は,ユーザが,登録する処理対象プログラムに付与する文例を入力する欄である。例えば,ユーザが登録する処理対象プログラムに類似プログラムと同じ文例を付与したい場合には,ユーザが類似プログラムリストの文例を指定すると,その文例が文例入力欄に入力される。ユーザが,ユーザが登録する処理対象プログラムに新たな文例を付与したい場合には,キーボードなどの入力装置によって文例入力欄に文例を入力する。
【0061】
図7に示すプログラム登録画面200において,プログラム名入力欄は,ユーザが,登録する処理対象プログラムにプログラム名を入力する欄である。プログラム名入力欄へのプログラム名の入力がない場合には,登録する処理対象プログラムのメイン関数の関数名が,その処理対象プログラムのプログラム名として登録される。
【0062】
以下,図8〜図12のフローチャートを用いて,本実施の形態のプログラム管理装置10による処理の流れを説明する。
【0063】
図8は,本実施の形態のプログラム管理装置によるプログラム登録処理フローチャートである。
【0064】
プログラム管理装置10においてプログラム入力部11は,登録する処理対象プログラムを入力する(ステップS10)。
【0065】
分析部12は,プログラム分析処理を実行する(ステップS11)。プログラム分析処理は,プログラムを分析し,プログラムに含まれる分析対象関数を取得する処理である。プログラム分析処理の詳細については,後述する。
【0066】
抽出部13は,類似プログラム抽出処理を実行する(ステップS12)。類似プログラム抽出処理は,処理対象プログラムから取得した分析対象関数と同じ分析対象関数が対応付けられた登録プログラムを,類似プログラムとして抽出する処理である。類似プログラム抽出処理の詳細については,後述する。
【0067】
出力部14は,ユーザが処理対象プログラムを登録する作業を行うためのプログラム登録画面200を,ディスプレイなどの表示装置に表示する(ステップS13)。このとき,出力部14は,類似プログラムの抽出結果をプログラム登録画面200に出力する。
【0068】
登録部15は,プログラム登録処理を実行する(ステップS14)。プログラム登録処理は,処理対象プログラムのデータを登録プログラム記憶部102に記録する処理である。プログラム登録処理の詳細については,後述する。
【0069】
更新部16は,データ更新処理を実行する(ステップS15)。データ更新処理は,処理対象プログラムの呼び出しを行っている登録プログラムのデータを更新する処理である。データ更新処理の詳細については,後述する。
【0070】
図9は,本実施の形態の分析部によるプログラム分析処理フローチャートである。
【0071】
本実施の形態の分析部12による処理対象プログラムからの分析対象関数の取得では,分析部12は,処理対象プログラムの記述順で関数の分析を行い,分析対象関数を取得する。途中にサブ関数があり,そのサブ関数に含まれる分析対象関数の取得が可能であれば,分析部12は,該サブ関数から取得される分析対象関数を分析結果に加える。
【0072】
分析部12は,処理対象プログラムから,記述された順序で,関数を1つ取得する(ステップS20)。プログラミング言語ごとに,関数を記述するルールが決まっており,そのルールに従った分析を行うことにより,処理対象プログラムから関数を取得することができる。例えば,分析部12は,処理対象プログラムがC言語である場合に,“()”付きの文字列を関数として取得する。
【0073】
分析部12は,分析情報記憶部101の分析対象外関数データ111を参照し,取得された関数が分析対象外関数であるかを判定する(ステップS21)。取得された関数が分析対象外関数であれば(ステップS21のYES),分析部12は,ステップS29の処理に進む。本実施の形態によるプログラム分析処理では,分析対象外関数への対処は行われない。
【0074】
取得された関数が分析対象外関数でなければ(ステップS21のNO),分析部12は,分析情報記憶部101の分析対象関数データ110を参照し,取得された関数が分析対象関数であるかを判定する(ステップS22)。取得された関数が分析対象関数であれば(ステップS22のYES),分析部12は,取得された関数を分析結果に加え(ステップS23),ステップS29の処理に進む。
【0075】
取得された関数が分析対象関数でなければ(ステップS22のNO),分析部12は,取得された関数が,処理対象プログラム内にプログラムが存在するサブ関数であるかを判定する(ステップS24)。取得された関数が処理対象プログラム内にプログラムが存在するサブ関数であれば(ステップS24のYES),分析部12は,処理対象プログラムに含まれる該当サブ関数のプログラムについて,再帰的にプログラム分析処理を実行し(ステップS25),ステップS29の処理に進む。
【0076】
例えば,処理対象プログラムが,図4の登録プログラム管理データ120における管理番号#002のレコードのプログラム内容に示されるようなプログラムであったものとする。このプログラムでは,メイン関数でサブ関数sub1,sub2,sub3を呼び出しているが,このうち2つのサブ関数sub1,sub2のプログラムについては,自身の内部に存在している。このようなサブ関数については,ステップS25の処理によって,分析対象関数が取得される。
【0077】
取得された関数が処理対象プログラム内にプログラムが存在するサブ関数でなければ(ステップS24のNO),分析部12は,登録プログラム記憶部102の登録プログラム管理データ120を参照し,取得された関数が登録プログラムであるかを判定する(ステップS26)。ここでは,分析部12は,該当サブ関数の関数名で登録プログラム管理データ120のプログラム名を探索し,該当サブ関数の関数名とプログラム名が一致する登録プログラムが存在するかを判定する。
【0078】
取得された関数が登録プログラムであれば(ステップS26のYES),分析部12は,登録プログラム記憶部102の登録プログラム管理データ120を参照し,該当登録プログラムの分析結果を今回の処理対象プログラムの分析結果に加え(ステップS27),ステップS29の処理に進む。なお,このとき,分析部12は,該当サブ関数と呼び出し対象の登録プログラムとを対応付けた呼び出し関係の情報を保持しておく。
【0079】
例えば,処理対象プログラムが,図4の登録プログラム管理データ120における管理番号#003のレコードのプログラム内容に示されるようなプログラムであったものとする。このプログラムでは,メイン関数でサブ関数sub4,sub5,sub6を呼び出しているが,このうち2つのサブ関数sub4,sub5のプログラムについては,その関数名をプログラム名とする登録プログラムが存在する。このようなサブ関数については,ステップS27の処理によって,分析対象関数が取得される。
【0080】
取得された関数が登録プログラムでなければ(ステップS26のNO),分析部12は,取得された関数が未分析のサブ関数であると判定し(ステップS28),ステップS29の処理に進む。このとき,分析部12は,該当サブ関数に未分析を示すnoneを対応付けた呼び出し関係の情報を保持しておく。未分析のサブ関数については,その時点でプログラムの実体がわからないため,分析対象関数の取得ができない。
【0081】
分析部12は,処理対象プログラムのすべての関数について,処理が終了したかを判定する(ステップS29)。まだ,すべての関数について処理が終了していなければ(ステップS29のNO),ステップS20の処理に戻って,次の関数の処理に移る。すべての関数について処理が終了していれば(ステップS29のYES),分析部12は,処理を終了する。
【0082】
図9に示すプログラム分析処理では,処理対象プログラムに別のプログラムの呼び出しがある場合に,その呼び出し対象のプログラムに含まれる分析対象関数も,分析結果として取得される。これにより,処理対象プログラムに別のプログラムの呼び出しがある場合に,呼び出し対象のプログラムに含まれる分析対象関数を考慮した,類似プログラムの検索が可能となる。
【0083】
図10は,本実施の形態の抽出部による類似プログラム抽出処理フローチャートである。
【0084】
本実施の形態の抽出部13による類似プログラムの抽出では,分析結果の分析対象関数が順序も含めて処理対象プログラムの分析結果の分析対象関数と一致する登録プログラムが,類似プログラムとして登録プログラム記憶部102から抽出される。
【0085】
抽出部13は,カウンタiを1に設定する(ステップS30)。カウンタiは,分析結果同士の一致判定において,一致判定の対象となる分析対象関数の重み値の範囲を示す。例えば,カウンタiの値が1であれば,一致判定の対象となる分析対象関数の重み値の範囲は1〜5となる。また,例えば,カウンタiの値が3であれば,一致判定の対象となる分析対象関数の重み値の範囲は3〜5となる。
【0086】
抽出部13は,登録プログラム記憶部102の登録プログラム管理データ120から,登録プログラムのレコードを1つ取得する(ステップS31)。
【0087】
抽出部13は,抽出結果記憶部103の類似プログラムリストデータ130を参照し,レコードが取得された登録プログラムが,類似プログラムの検索結果としてすでに抽出された登録プログラムであるかを判定する(ステップS32)。結果としてすでに抽出された登録プログラムであれば(ステップS32のYES),ステップS31の処理に戻り,次の登録プログラムの処理に移る。本実施の形態では,一致判定に用いる分析対象関数の重み値の基準を変えるたびに,登録プログラム管理データ120の最初のレコードに戻って処理を行うので,ステップS32の判定で,同じ登録プログラムを重複して抽出することを防ぐ。
【0088】
結果としてすでに抽出された登録プログラムでなければ(ステップS32のNO),抽出部13は,重み値がi以上の分析対象関数について,取得された登録プログラムの分析結果を,処理対象プログラムの分析結果と比較する(ステップS33)。抽出部13は,重み値がi以上の分析対象関数について,双方のプログラムの分析結果が一致するかを判定する(ステップS34)。
【0089】
双方のプログラムの分析結果が一致すれば(ステップS34のYES),抽出部13は,取得された登録プログラムのデータを,抽出結果記憶部103の類似プログラムリストデータ130に抽出する(ステップS35)。ステップS34の判定で一致した場合には,取得された登録プログラムが類似プログラムであると判定されたことになる。このとき,抽出部13は,該当登録プログラムについて,登録プログラム記憶部102の登録プログラム管理データ120と文例管理データ121から必要な情報を抽出し,抽出結果記憶部103の類似プログラムリストデータ130に記録する。また,このときのカウンタiの値を,類似プログラムリストデータ130の類似判定重み値に記録する。
【0090】
抽出部13は,すべての登録プログラムについて処理が終了したかを判定する(ステップS36)。まだすべての登録プログラムについて処理が終了していなければ(ステップS36のNO),抽出部13は,ステップS31の処理に戻って,次の登録プログラムの処理に移る。
【0091】
すべての登録プログラムについて処理が終了していれば(ステップS36のYES),抽出部13は,カウンタiが5であるかを判定する(ステップS37)。カウンタiが5でなければ(ステップS37のNO),抽出部13は,カウンタiをインクリメントし(ステップS38),ステップS31の処理に戻って,登録プログラム管理データ120の最初の登録プログラムの処理に移る。カウンタiが5であれば(ステップS37のYES),抽出部13は,処理を終了する。
【0092】
例えば,ある入力対象プログラムXXXの分析結果が,{getaddrinfo() ,while() ,socket(),connect() ,close() ,freeaddrinfo()}であるものとする。この入力対象プログラムXXXの分析結果を,図3(A)に示す分析対象関数データ110の関数IDで表すと{100,053,102,101,200,104}となる。例えば,この入力対象プログラムXXXの類似プログラムを,図4に示す登録プログラム管理データ120から検出するものとする。
【0093】
図4に示す登録プログラム管理データ120において,管理番号#001の登録プログラムAAAの分析結果は,{001,100,053,102,101,200,104}である。重み値が1以上の分析対象関数が一致判定の対象であれば,管理番号#001の登録プログラムAAAは,入力対象プログラムXXXの類似プログラムとして検出されない。重み値が2以上の分析対象関数が一致判定の対象であれば,重み値1の分析対象関数mainが一致判定の対象とならないので,管理番号#001の登録プログラムAAAは,入力対象プログラムXXXの類似プログラムとして検出される。例えば,分析対象関数mainは,プログラムの特徴を表すという意味ではあまり重要ではないので,一致判定の対象としなくてもほとんど問題はない。
【0094】
このように,すべての分析対象関数の一致判定では,類似プログラムとして検出できない登録プログラムでも,一致判定の対象となる分析対象関数の重み値の範囲を変えれば,類似プログラムとして検出できる場合がある。
【0095】
なお,図10に示す類似プログラム抽出処理では,一致判定の対象となる分析対象関数の重み値の範囲を5段階に変えて,類似プログラムの検索を行っているが,ある設定された固定の重み値の範囲で,1度だけ類似プログラムの検索を行うようにしてもよい。また,所定数以上の類似プログラムが検出された時点で,段階を変えた類似プログラムの検索を終了するようにしてもよい。
【0096】
図11は,本実施の形態の登録部によるプログラム登録処理フローチャートである。
【0097】
プログラム管理装置10において,登録部15は,プログラム登録画面200においてユーザが決定した文例を取得する(ステップS40)。
【0098】
登録部15は,プログラム登録画面200でのユーザによるプログラム名の入力があるかを判定する(ステップS41)。プログラム名の入力があれば(ステップS41のYES),登録部15は,入力されたプログラム名を取得する(ステップS42)。プログラム名の入力がなければ(ステップS41のNO),処理対象プログラムのメイン関数の関数名をプログラム名とする(ステップS43)。
【0099】
登録部15は,処理対象プログラムのデータを,登録プログラム管理データ120に追加する(ステップS44)。プログラム名は,ステップS42またはステップS43の処理で得られたプログラム名が記録される。プログラム内容は,処理対象プログラムのソースコードが記録される。呼び出し関係は,分析部12によるプログラム分析処理で保持された呼び出し関係が記録される。分析結果は,分析部12によるプログラム分析処理で得られた分析結果が記録される。
【0100】
登録部15は,処理対象プログラムのデータを,文例管理データに追加する(ステップS45)。文例は,ステップS40の処理で得られた文例が記録される。
【0101】
図12は,本実施の形態の更新部によるデータ更新処理フローチャートである。
【0102】
プログラム管理装置10において,更新部16は,登録プログラム記憶部102の登録プログラム管理データ120から,登録プログラムのレコードを1つ取得する(ステップS50)。
【0103】
更新部16は,取得した登録プログラムの呼び出し関係に未分析のサブ関数がある場合に,その未分析のサブ関数の関数名と,登録された処理対象プログラムのプログラム名とを比較する(ステップS51)。更新部16は,未分析のサブ関数の関数名と処理対象プログラムのプログラム名とが一致するかを判定する(ステップS52)。
【0104】
未分析のサブ関数の関数名と処理対象プログラムのプログラム名とが一致すれば(ステップS52のYES),更新部16は,登録プログラム管理データ120の該当登録プログラムの呼び出し関係において,該当サブ関数に処理対象プログラムとの関係を記録する(ステップS53)。また,更新部16は,登録プログラム管理データ120の該当登録プログラムの分析結果に,処理対象プログラムの分析結果をマージする(ステップS54)。更新部16は,登録プログラム管理データ120の更新結果を文例管理データ121に反映する。
【0105】
更新部16は,すべての登録プログラムについて処理が終了したかを判定する(ステップS55)。まだすべての登録プログラムについて処理が終了していなければ(ステップS55のNO),更新部16は,ステップS50の処理に戻って,次の登録プログラムの処理に移る。すべての登録プログラムについて処理が終了していれば(ステップS55のYES),更新部16は,処理を終了する。
【0106】
例えば,図4に示す登録プログラム管理データ120において,管理番号#003のプログラムの登録時に,管理番号#004のsub4のプログラムと管理番号#005のsub5のプログラムとが,未登録であったものとする。この時点で,管理番号#003のプログラムの分析結果に,分析対象関数はない。
【0107】
その後,管理番号#004のsub4のプログラムが登録されると,管理番号#003のプログラムとの呼び出し関係から,管理番号#003のプログラムの分析結果に管理番号#004のsub4のプログラムの分析結果がマージされる。この時点で,管理番号#003のプログラムの分析結果は,{100}となる。
【0108】
さらに,管理番号#005のsub5のプログラムが登録されると,管理番号#003のプログラムとの呼び出し関係から,管理番号#003のプログラムの分析結果に管理番号#005のsub5のプログラムの分析結果がマージされる。この時点で,管理番号#003のプログラムの分析結果は,{100,053,102,101,200}となる。
【0109】
以上説明した本実施の形態のプログラム管理装置10によって,処理対象プログラムが別の登録プログラムを呼び出している場合でも,その呼び出し対象の登録プログラムに含まれる分析対象関数も含めた,処理対象プログラムの分析対象関数を取得することができる。これにより,より精度が高い類似プログラムの検索が可能となる。
【0110】
以上,本実施の形態について説明したが,本発明はその主旨の範囲において種々の変形が可能であることは当然である。
【0111】
例えば,本実施の形態では,類似プログラム抽出処理において,分析対象関数の順番も含めた一致で,類似プログラムの判定を行っている。例えば,類似プログラム抽出処理において,分析対象関数の種類と数との関係の一致で,類似プログラムの判定を行うようにしてもよい。
【0112】
以上の本実施の形態に関し,さらに以下の付記を開示する。
【0113】
(付記1)
コンピュータに,
プログラム同士の類似性の判断に用いる所定の分析対象関数が記憶された記憶部を参照して,前記所定の分析対象関数のうち,処理対象プログラムに含まれる分析対象関数を示す第1の分析対象関数情報を取得し,
登録プログラムごとに,該登録プログラムを特定する識別情報と,前記所定の分析対象関数のうち,該登録プログラムに含まれる分析対象関数を示す第2の分析対象関数情報と,該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第3の分析対象関数情報とが対応付けて記憶された記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出し,
前記抽出した登録プログラムを,前記処理対象プログラムに類似するプログラムとして出力する
処理を実行させるための管理プログラム。
【0114】
(付記2)
前記記憶部は,さらに,登録プログラムに該登録プログラムの索引情報を対応付けて記憶し,
前記出力する処理では,前記抽出した登録プログラムを前記処理対象プログラムに類似するプログラムとして出力する際に,さらに前記抽出した登録プログラムに対応付けられた索引情報を出力する
ことを特徴とする付記1に記載の管理プログラム。
【0115】
(付記3)
前記コンピュータに,さらに,
前記処理対象プログラムの識別情報を含む登録プログラムを前記記憶部から検索し,検索された登録プログラムに前記処理対象プログラムを関連付けて前記記憶部に記憶する
処理を実行させるための付記1または付記2に記載の管理プログラム。
【0116】
(付記4)
前記分析対象関数には,前記分析対象関数ごとに重要度が設定されており,
前記登録プログラムを抽出する処理では,重要度が所定以上高い分析対象関数を一致判定の対象として,前記記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする付記1から付記3までのいずれかに記載の管理プログラム。
【0117】
(付記5)
前記第1の分析対象関数情報を取得する処理では,前記処理対象プログラムに前記記憶部に記憶された登録プログラムを呼び出す識別情報が含まれている場合に,前記第1の分析対象関数情報を取得するとともに,前記処理対象プログラムに含まれる識別情報で呼び出される登録プログラムに含まれる分析対象関数を示す第4の分析対象関数情報を取得し,
前記登録プログラムを抽出する処理では,前記記憶部を,前記第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする付記1から付記4までのいずれかに記載の管理プログラム。
【0118】
(付記6)
コンピュータが,
プログラム同士の類似性の判断に用いる所定の分析対象関数が記憶された記憶部を参照して,前記所定の分析対象関数のうち,処理対象プログラムに含まれる分析対象関数を示す第1の分析対象関数情報を取得し,
登録プログラムごとに,該登録プログラムを特定する識別情報と,前記所定の分析対象関数のうち,該登録プログラムに含まれる分析対象関数を示す第2の分析対象関数情報と,該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第3の分析対象関数情報とが対応付けて記憶された記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出し,
前記抽出した登録プログラムを,前記処理対象プログラムに類似するプログラムとして出力する過程を実行する
ことを特徴とする管理方法。
【0119】
(付記7)
前記記憶部は,さらに,登録プログラムに該登録プログラムの索引情報を対応付けて記憶し,
前記出力する過程では,前記抽出した登録プログラムを前記処理対象プログラムに類似するプログラムとして出力する際に,さらに前記抽出した登録プログラムに対応付けられた索引情報を出力する
ことを特徴とする付記6に記載の管理方法。
【0120】
(付記8)
前記コンピュータが,さらに,
前記処理対象プログラムの識別情報を含む登録プログラムを前記記憶部から検索し,検索された登録プログラムに前記処理対象プログラムを関連付けて前記記憶部に記憶する過程を実行する
ことを特徴とする付記6または付記7に記載の管理方法。
【0121】
(付記9)
前記分析対象関数には,前記分析対象関数ごとに重要度が設定されており,
前記登録プログラムを抽出する過程では,重要度が所定以上高い分析対象関数を一致判定の対象として,前記記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする付記6から付記8までのいずれかに記載の管理方法。
【0122】
(付記10)
前記第1の分析対象関数情報を取得する過程では,前記処理対象プログラムに前記記憶部に記憶された登録プログラムを呼び出す識別情報が含まれている場合に,前記第1の分析対象関数情報を取得するとともに,前記処理対象プログラムに含まれる識別情報で呼び出される登録プログラムに含まれる分析対象関数を示す第4の分析対象関数情報を取得し,
前記登録プログラムを抽出する過程では,前記記憶部を,前記第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする付記6から付記9までのいずれかに記載の管理方法。
【0123】
(付記11)
プログラム同士の類似性の判断に用いる所定の分析対象関数を記憶する分析情報記憶部と,
登録プログラムごとに,該登録プログラムを特定する識別情報と,前記所定の分析対象関数のうち,該登録プログラムに含まれる分析対象関数を示す第2の分析対象関数情報と,該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第3の分析対象関数情報とを対応付けて記憶する登録プログラム記憶部と,
前記分析情報記憶部を参照して,前記所定の分析対象関数のうち,処理対象プログラムに含まれる分析対象関数を示す第1の分析対象関数情報を取得する分析部と,
前記登録プログラム記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出する抽出部と,
前記抽出した登録プログラムを,前記処理対象プログラムに類似するプログラムとして出力する出力部とを備える
ことを特徴とする管理装置。
【0124】
(付記12)
前記登録プログラム記憶部は,さらに,登録プログラムに該登録プログラムの索引情報を対応付けて記憶し,
前記出力部は,前記抽出した登録プログラムを前記処理対象プログラムに類似するプログラムとして出力する際に,さらに前記抽出した登録プログラムに対応付けられた索引情報を出力する
ことを特徴とする付記11に記載の管理装置。
【0125】
(付記13)
前記処理対象プログラムの識別情報を含む登録プログラムを前記登録プログラム記憶部から検索し,検索された登録プログラムに前記処理対象プログラムを関連付けて前記登録プログラム記憶部に記憶する更新部を備える
ことを特徴とする付記11または付記12に記載の管理装置。
【0126】
(付記14)
前記分析対象関数には,前記分析対象関数ごとに重要度が設定されており,
前記抽出部は,重要度が所定以上高い分析対象関数を一致判定の対象として,前記登録プログラム記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする付記11から付記13までのいずれかに記載の管理装置。
【0127】
(付記15)
前記分析部は,前記処理対象プログラムに前記登録プログラム記憶部に記憶された登録プログラムを呼び出す識別情報が含まれている場合に,前記第1の分析対象関数情報を取得するとともに,前記処理対象プログラムに含まれる識別情報で呼び出される登録プログラムに含まれる分析対象関数を示す第4の分析対象関数情報を取得し,
前記抽出部は,前記登録プログラム記憶部を,前記第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする付記11から付記14までのいずれかに記載の管理装置。
【符号の説明】
【0128】
10 プログラム管理装置
11 プログラム入力部
12 分析部
13 抽出部
14 出力部
15 登録部
16 更新部
101 分析情報記憶部
102 登録プログラム記憶部
103 抽出結果記憶部
【特許請求の範囲】
【請求項1】
コンピュータに,
プログラム同士の類似性の判断に用いる所定の分析対象関数が記憶された記憶部を参照して,前記所定の分析対象関数のうち,処理対象プログラムに含まれる分析対象関数を示す第1の分析対象関数情報を取得し,
登録プログラムごとに,該登録プログラムを特定する識別情報と,前記所定の分析対象関数のうち,該登録プログラムに含まれる分析対象関数を示す第2の分析対象関数情報と,該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第3の分析対象関数情報とが対応付けて記憶された記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出し,
前記抽出した登録プログラムを,前記処理対象プログラムに類似するプログラムとして出力する
処理を実行させるための管理プログラム。
【請求項2】
前記記憶部は,さらに,登録プログラムに該登録プログラムの索引情報を対応付けて記憶し,
前記出力する処理では,前記抽出した登録プログラムを前記処理対象プログラムに類似するプログラムとして出力する際に,さらに前記抽出した登録プログラムに対応付けられた索引情報を出力する
ことを特徴とする請求項1に記載の管理プログラム。
【請求項3】
前記コンピュータに,さらに,
前記処理対象プログラムの識別情報を含む登録プログラムを前記記憶部から検索し,検索された登録プログラムに前記処理対象プログラムを関連付けて前記記憶部に記憶する
処理を実行させるための請求項1または請求項2に記載の管理プログラム。
【請求項4】
前記分析対象関数には,前記分析対象関数ごとに重要度が設定されており,
前記登録プログラムを抽出する処理では,重要度が所定以上高い分析対象関数を一致判定の対象として,前記記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする請求項1から請求項3までのいずれかに記載の管理プログラム。
【請求項5】
前記第1の分析対象関数情報を取得する処理では,前記処理対象プログラムに前記記憶部に記憶された登録プログラムを呼び出す識別情報が含まれている場合に,前記第1の分析対象関数情報を取得するとともに,前記処理対象プログラムに含まれる識別情報で呼び出される登録プログラムに含まれる分析対象関数を示す第4の分析対象関数情報を取得し,
前記登録プログラムを抽出する処理では,前記記憶部を,前記第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする請求項1から請求項4までのいずれかに記載の管理プログラム。
【請求項6】
コンピュータが,
プログラム同士の類似性の判断に用いる所定の分析対象関数が記憶された記憶部を参照して,前記所定の分析対象関数のうち,処理対象プログラムに含まれる分析対象関数を示す第1の分析対象関数情報を取得し,
登録プログラムごとに,該登録プログラムを特定する識別情報と,前記所定の分析対象関数のうち,該登録プログラムに含まれる分析対象関数を示す第2の分析対象関数情報と,該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第3の分析対象関数情報とが対応付けて記憶された記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出し,
前記抽出した登録プログラムを,前記処理対象プログラムに類似するプログラムとして出力する過程を実行する
ことを特徴とする管理方法。
【請求項7】
プログラム同士の類似性の判断に用いる所定の分析対象関数を記憶する分析情報記憶部と,
登録プログラムごとに,該登録プログラムを特定する識別情報と,前記所定の分析対象関数のうち,該登録プログラムに含まれる分析対象関数を示す第2の分析対象関数情報と,該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第3の分析対象関数情報とを対応付けて記憶する登録プログラム記憶部と,
前記分析情報記憶部を参照して,前記所定の分析対象関数のうち,処理対象プログラムに含まれる分析対象関数を示す第1の分析対象関数情報を取得する分析部と,
前記登録プログラム記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出する抽出部と,
前記抽出した登録プログラムを,前記処理対象プログラムに類似するプログラムとして出力する出力部とを備える
ことを特徴とする管理装置。
【請求項1】
コンピュータに,
プログラム同士の類似性の判断に用いる所定の分析対象関数が記憶された記憶部を参照して,前記所定の分析対象関数のうち,処理対象プログラムに含まれる分析対象関数を示す第1の分析対象関数情報を取得し,
登録プログラムごとに,該登録プログラムを特定する識別情報と,前記所定の分析対象関数のうち,該登録プログラムに含まれる分析対象関数を示す第2の分析対象関数情報と,該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第3の分析対象関数情報とが対応付けて記憶された記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出し,
前記抽出した登録プログラムを,前記処理対象プログラムに類似するプログラムとして出力する
処理を実行させるための管理プログラム。
【請求項2】
前記記憶部は,さらに,登録プログラムに該登録プログラムの索引情報を対応付けて記憶し,
前記出力する処理では,前記抽出した登録プログラムを前記処理対象プログラムに類似するプログラムとして出力する際に,さらに前記抽出した登録プログラムに対応付けられた索引情報を出力する
ことを特徴とする請求項1に記載の管理プログラム。
【請求項3】
前記コンピュータに,さらに,
前記処理対象プログラムの識別情報を含む登録プログラムを前記記憶部から検索し,検索された登録プログラムに前記処理対象プログラムを関連付けて前記記憶部に記憶する
処理を実行させるための請求項1または請求項2に記載の管理プログラム。
【請求項4】
前記分析対象関数には,前記分析対象関数ごとに重要度が設定されており,
前記登録プログラムを抽出する処理では,重要度が所定以上高い分析対象関数を一致判定の対象として,前記記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする請求項1から請求項3までのいずれかに記載の管理プログラム。
【請求項5】
前記第1の分析対象関数情報を取得する処理では,前記処理対象プログラムに前記記憶部に記憶された登録プログラムを呼び出す識別情報が含まれている場合に,前記第1の分析対象関数情報を取得するとともに,前記処理対象プログラムに含まれる識別情報で呼び出される登録プログラムに含まれる分析対象関数を示す第4の分析対象関数情報を取得し,
前記登録プログラムを抽出する処理では,前記記憶部を,前記第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報および第4の分析対象関数情報を含む分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする請求項1から請求項4までのいずれかに記載の管理プログラム。
【請求項6】
コンピュータが,
プログラム同士の類似性の判断に用いる所定の分析対象関数が記憶された記憶部を参照して,前記所定の分析対象関数のうち,処理対象プログラムに含まれる分析対象関数を示す第1の分析対象関数情報を取得し,
登録プログラムごとに,該登録プログラムを特定する識別情報と,前記所定の分析対象関数のうち,該登録プログラムに含まれる分析対象関数を示す第2の分析対象関数情報と,該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第3の分析対象関数情報とが対応付けて記憶された記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出し,
前記抽出した登録プログラムを,前記処理対象プログラムに類似するプログラムとして出力する過程を実行する
ことを特徴とする管理方法。
【請求項7】
プログラム同士の類似性の判断に用いる所定の分析対象関数を記憶する分析情報記憶部と,
登録プログラムごとに,該登録プログラムを特定する識別情報と,前記所定の分析対象関数のうち,該登録プログラムに含まれる分析対象関数を示す第2の分析対象関数情報と,該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第3の分析対象関数情報とを対応付けて記憶する登録プログラム記憶部と,
前記分析情報記憶部を参照して,前記所定の分析対象関数のうち,処理対象プログラムに含まれる分析対象関数を示す第1の分析対象関数情報を取得する分析部と,
前記登録プログラム記憶部を,前記第1の分析対象関数情報をもとに検索して,前記第2の分析対象関数情報および第3の分析対象関数情報を含む分析対象関数情報が,前記第1の分析対象関数情報と同じ登録プログラムを抽出する抽出部と,
前記抽出した登録プログラムを,前記処理対象プログラムに類似するプログラムとして出力する出力部とを備える
ことを特徴とする管理装置。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【公開番号】特開2012−194945(P2012−194945A)
【公開日】平成24年10月11日(2012.10.11)
【国際特許分類】
【出願番号】特願2011−60330(P2011−60330)
【出願日】平成23年3月18日(2011.3.18)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
【公開日】平成24年10月11日(2012.10.11)
【国際特許分類】
【出願日】平成23年3月18日(2011.3.18)
【出願人】(000005223)富士通株式会社 (25,993)
【Fターム(参考)】
[ Back to top ]