(57)【特許請求の範囲】
【請求項１】
コンピュータに，
プログラムを特徴づける関数としてプログラム同士の類似性の判断に用いる所定の分析対象関数が記憶された記憶部を参照して，前記所定の分析対象関数のうち，処理対象プログラムに含まれる分析対象関数を特定する第１の分析対象関数情報を取得し，
登録プログラムごとに，該登録プログラムを特定する識別情報と，前記所定の分析対象関数のうち，該登録プログラムに含まれる分析対象関数を特定する第２の分析対象関数情報と，該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を特定する第３の分析対象関数情報とが対応付けて記憶された記憶部を，前記第１の分析対象関数情報をもとに検索して，前記第２の分析対象関数情報および第３の分析対象関数情報を含む分析対象関数情報と前記第１の分析対象関数情報との類似度に基づいて登録プログラムを抽出し，
前記抽出した登録プログラムを，前記処理対象プログラムに類似するプログラムとして出力する
処理を実行させるための管理プログラム。
【請求項２】
前記記憶部は，さらに，登録プログラムに該登録プログラムの索引情報を対応付けて記憶し，
前記出力する処理では，前記抽出した登録プログラムを前記処理対象プログラムに類似するプログラムとして出力する際に，さらに前記抽出した登録プログラムに対応付けられた索引情報を出力する
ことを特徴とする請求項１に記載の管理プログラム。
【請求項３】
前記コンピュータに，さらに，
前記処理対象プログラムの識別情報を含む登録プログラムを前記記憶部から検索し，検索された登録プログラムに前記処理対象プログラムを関連付けて前記記憶部に記憶する
処理を実行させるための請求項１または請求項２に記載の管理プログラム。
【請求項４】
前記分析対象関数には，前記分析対象関数ごとに重要度が設定されており，
前記登録プログラムを抽出する処理では，重要度が所定以上高い分析対象関数を一致判定の対象として，前記記憶部を，前記第１の分析対象関数情報をもとに検索して，前記第２の分析対象関数情報および第３の分析対象関数情報を含む分析対象関数情報が，前記第１の分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする請求項１から請求項３までのいずれかに記載の管理プログラム。
【請求項５】
前記第１の分析対象関数情報を取得する処理では，前記処理対象プログラムに前記記憶部に記憶された登録プログラムを呼び出す識別情報が含まれている場合に，前記第１の分析対象関数情報を取得するとともに，前記処理対象プログラムに含まれる識別情報で呼び出される登録プログラムに含まれる分析対象関数を示す第４の分析対象関数情報を取得し，
前記登録プログラムを抽出する処理では，前記記憶部を，前記第１の分析対象関数情報および第４の分析対象関数情報を含む分析対象関数情報をもとに検索して，前記第２の分析対象関数情報および第３の分析対象関数情報を含む分析対象関数情報と前記第１の分析対象関数情報および第４の分析対象関数情報を含む分析対象関数情報との類似度に基づいて登録プログラムを抽出する
ことを特徴とする請求項１から請求項４までのいずれかに記載の管理プログラム。
【請求項６】
コンピュータが，
プログラムを特徴づける関数としてプログラム同士の類似性の判断に用いる所定の分析対象関数が記憶された記憶部を参照して，前記所定の分析対象関数のうち，処理対象プログラムに含まれる分析対象関数を特定する第１の分析対象関数情報を取得し，
登録プログラムごとに，該登録プログラムを特定する識別情報と，前記所定の分析対象関数のうち，該登録プログラムに含まれる分析対象関数を特定する第２の分析対象関数情報と，該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を特定する第３の分析対象関数情報とが対応付けて記憶された記憶部を，前記第１の分析対象関数情報をもとに検索して，前記第２の分析対象関数情報および第３の分析対象関数情報を含む分析対象関数情報と前記第１の分析対象関数情報との類似度に基づいて登録プログラムを抽出し，
前記抽出した登録プログラムを，前記処理対象プログラムに類似するプログラムとして出力する過程を実行する
ことを特徴とする管理方法。
【請求項７】
プログラムを特徴づける関数としてプログラム同士の類似性の判断に用いる所定の分析対象関数を記憶する分析情報記憶部と，
登録プログラムごとに，該登録プログラムを特定する識別情報と，前記所定の分析対象関数のうち，該登録プログラムに含まれる分析対象関数を特定する第２の分析対象関数情報と，該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を特定する第３の分析対象関数情報とを対応付けて記憶する登録プログラム記憶部と，
前記分析情報記憶部を参照して，前記所定の分析対象関数のうち，処理対象プログラムに含まれる分析対象関数を特定する第１の分析対象関数情報を取得する分析部と，
前記登録プログラム記憶部を，前記第１の分析対象関数情報をもとに検索して，前記第２の分析対象関数情報および第３の分析対象関数情報を含む分析対象関数情報と前記第１の分析対象関数情報との類似度に基づいて同じ登録プログラムを抽出する抽出部と，
前記抽出した登録プログラムを，前記処理対象プログラムに類似するプログラムとして出力する出力部とを備える
ことを特徴とする管理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，プログラムの管理を行う管理プログラム，管理方法および管理装置に関するものである。
【背景技術】
【０００２】
プログラム部品を管理し，再利用することで，プログラミングに掛かるコストやバグを削減することが行われている。
【０００３】
プログラム部品の管理では，プログラム部品の登録や，登録するプログラム部品への索引情報の付与などが，プログラマに一任されることも多い。そのため，プログラム部品の登録時に適切な索引情報が付与されなかったことで後日の検索が難しくなったり，同じようなプログラム部品が異なる索引情報で重複して登録されるなどの問題がある。
【０００４】
登録するプログラムに対する索引情報の付与精度を上げるためには，登録時に登録済みプログラムの中から類似するプログラムを検索し，その類似プログラムの索引情報を参照しながら，登録するプログラムに索引情報を付与できるようにすることが望ましい。
【０００５】
なお，プロセスモデルを，該プロセスモデルに含まれる参照関数にリンクさせてＤＢに登録し，検索・再利用を容易にする技術が知られている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特表２００４−５３５０２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記のプログラム検索の技術を利用することによって，例えば，登録しようとするプログラムに含まれる標準関数と同じ標準関数を含む登録済みプログラムを，類似プログラムとして検索することは可能である。
【０００８】
しかし，上述のプログラム検索の技術では，個々のプログラムに閉じた検索しか行うことができない。多くのプログラムでは，外部の別のプログラムへの呼び出しが行われている。別のプログラムを呼び出しているプログラムが登録されている場合に，この呼び出し対象の別プログラムに含まれる標準関数をも加味した検索を行うことができなければ，精度の高い類似プログラムの検索はできない。
【０００９】
一側面では，本発明は，あるプログラムの類似プログラムを登録されたプログラムから検索する場合において，類似プログラムの検索精度を向上させる技術を提供することを目的とする。
【課題を解決するための手段】
【００１０】
１態様では，開示するプログラムは，コンピュータを，次のように機能させる。
【００１１】
すなわち，前記プログラムは，前記プログラムがインストールされて実行されるコンピュータに，プログラムを特徴づける関数としてプログラム同士の類似性の判断に用いる所定の分析対象関数が記憶された記憶部を参照して，所定の分析対象関数のうち，処理対象プログラムに含まれる分析対象関数を特定する第１の分析対象関数情報を取得し，登録プログラムごとに，該登録プログラムを特定する識別情報と，所定の分析対象関数のうち，該登録プログラムに含まれる分析対象関数を特定する第２の分析対象関数情報と，該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を特定する第３の分析対象関数情報とが対応付けて記憶された記憶部を，第１の分析対象関数情報をもとに検索して，第２の分析対象関数情報および第３の分析対象関数情報を含む分析対象関数情報と第１の分析対象関数情報との類似度に基づいて登録プログラムを抽出し，抽出した登録プログラムを，処理対象プログラムに類似するプログラムとして出力する処理を実行させる。
【発明の効果】
【００１２】
１態様では，あるプログラムの類似プログラムを登録されたプログラムから検索する場合において，類似プログラムの検索精度が向上する。
【図面の簡単な説明】
【００１３】
【図１】本実施の形態によるプログラム管理装置の構成例を示す図である。
【図２】本実施の形態によるプログラム管理装置を実現するコンピュータのハードウェア構成例を示す図である。
【図３】本実施の形態による分析情報記憶部が格納するデータの例を示す図である。
【図４】本実施の形態による登録プログラム記憶部が格納するデータの例を示す図である。
【図５】本実施の形態による登録プログラム記憶部が格納するデータの例を示す図である。
【図６】本実施の形態による抽出結果記憶部が格納するデータの例を示す図である。
【図７】本実施の形態による出力部が表示装置に出力するプログラム登録画面の例を示す図である。
【図８】本実施の形態のプログラム管理装置によるプログラム登録処理フローチャートである。
【図９】本実施の形態の分析部によるプログラム分析処理フローチャートである。
【図１０】本実施の形態の抽出部による類似プログラム抽出処理フローチャートである。
【図１１】本実施の形態の登録部によるプログラム登録処理フローチャートである。
【図１２】本実施の形態の更新部によるデータ更新処理フローチャートである。
【発明を実施するための形態】
【００１４】
以下，本実施の形態について，図を用いて説明する。
【００１５】
図１は，本実施の形態によるプログラム管理装置の構成例を示す図である。
【００１６】
図１に示す本実施の形態のプログラム管理装置１０は，例えばプログラムの再利用を目的として，複数のプログラムの登録・管理を行う。
【００１７】
本実施の形態のプログラム管理装置１０は，プログラム管理装置１０に登録済みのプログラムから，これからプログラム管理装置１０に登録しようとしているプログラムと類似するプログラムを検索する，類似プログラム検索機能を有する。以下では，プログラム管理装置１０に登録済みのプログラムを，登録プログラムと呼ぶ。また，これからプログラム管理装置１０に登録しようとしているプログラムを，処理対象プログラムと呼ぶ。
【００１８】
図１に示すプログラム管理装置１０は，プログラム入力部１１，分析部１２，抽出部１３，出力部１４，登録部１５，更新部１６，分析情報記憶部１０１，登録プログラム記憶部１０２，抽出結果記憶部１０３を備える。図１に示すプログラム管理装置１０において，実線の接続は主に制御関係を示し，破線の接続は主にデータの入出力を示す。
【００１９】
プログラム入力部１１は，プログラム管理装置１０に登録する処理対象プログラムを入力する。入力される処理対象プログラムは，例えば，プログラミング言語で記述されたソースコードである。
【００２０】
分析部１２は，入力された処理対象プログラムを分析し，その分析結果として，処理対象プログラムに含まれる分析対象関数を示す第１の分析対象関数情報を取得する。分析対象関数としては，例えば，プログラム同士の類似性の判断に用いる関数が設定される。分析対象関数としては，システムコールや，プログラミング言語で標準規格化された標準関数などが考えられる。
【００２１】
分析対象関数は，例えば，分析情報記憶部１０１に記憶されたプログラム分析に関する情報で設定されている。分析情報記憶部１０１は，所定の分析対象関数を含むプログラム分析に関する情報を記憶する，コンピュータがアクセス可能な記憶部である。分析部１２は，処理対象プログラムの分析時に，分析情報記憶部１０１に記憶された情報を参照して，処理対象プログラムに含まれる分析対象関数を取得する。
【００２２】
また，分析部１２は，処理対象プログラムに登録プログラムを呼び出す識別情報が含まれている場合に，第１の分析対象関数情報を取得するとともに，処理対象プログラムに含まれる識別情報で呼び出される登録プログラムに含まれる分析対象関数を示す第４の分析対象関数情報を取得する。処理対象プログラムに含まれる登録プログラムを呼び出す識別情報は，例えば，処理対象プログラムに含まれるサブ関数の関数名である。例えば，処理対象プログラムに含まれるサブ関数が登録プログラムである場合には，分析部１２は，処理対象プログラムに含まれるサブ関数の関数名で，処理対象プログラムから呼び出される登録プログラムを特定できる。分析部１２は，登録プログラム記憶部１０２から特定された登録プログラムの分析結果を得ることで，処理対象プログラムの分析結果に，呼び出される登録プログラムの分析対象関数を含めることができる。
【００２３】
登録プログラム記憶部１０２は，登録プログラムに関する情報を記憶する，コンピュータがアクセス可能な記憶部である。例えば，登録プログラム記憶部１０２は，登録プログラムごとに，該登録プログラムを特定する識別情報と，該登録プログラムに含まれる分析対象関数を示す第２の分析対象関数情報と，該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第３の分析対象関数情報とを対応付けて記憶する。登録プログラムを特定する識別情報は，例えば，登録プログラムのメイン関数の関数名である。
【００２４】
また，登録プログラム記憶部１０２は，さらに，登録プログラムに，該登録プログラムの索引情報を対応付けて記憶する。索引情報は，ユーザがプログラム管理装置１０から目的とする登録プログラムを引き出す際に，ユーザが入力したり，参照したりする情報である。索引情報としては，例えば，ユーザにとってそのプログラムの特徴が分かり易い文例などが望ましい。
【００２５】
抽出部１３は，登録プログラム記憶部１０２を，処理対象プログラムから取得した第１の分析対象関数情報をもとに検索する。抽出部１３は，登録プログラム記憶部１０２から，第２の分析対象関数情報および第３の分析対象関数情報を含む分析対象関数情報が，第１の分析対象関数情報と同じ登録プログラムを抽出する。抽出部１３により抽出された登録プログラムが，処理対象プログラムに類似すると判定されたプログラムである。以下では，処理対象プログラムに類似すると判定されたプログラムを，類似プログラムとも呼ぶ。抽出部１３による登録プログラムの抽出結果は，抽出結果記憶部１０３に記憶される。抽出結果記憶部１０３は，類似プログラムの抽出結果を記憶する，コンピュータがアクセス可能な記憶部である。
【００２６】
また，抽出部１３は，登録プログラム記憶部１０２を検索する際に，重要度が所定以上高い分析対象関数を一致判定の対象として，第２の分析対象関数情報および第３の分析対象関数情報を含む分析対象関数情報が，第１の分析対象関数情報と同じ登録プログラムを抽出するようにしてもよい。
【００２７】
例えば，分析情報記憶部１０１では，分析対象関数ごとに重要度が設定されている。分析対象関数の中にも，プログラムの特徴を分析する上で，重要度が高い分析対象関数と重要度が低い分析対象関数とがある。２つのプログラム間で抽出される分析対象関数の一部が一致しなくても，その一致しない分析対象関数の重要度が低い場合には，それらの２つのプログラムが類似すると判定できる場合がある。このように，重要度の基準を変えて，処理対象プログラムの分析結果と登録プログラム分析結果との一致判定を行うことで，類似プログラムの検索精度を向上させることが可能となる。
【００２８】
また，抽出部１３は，処理対象プログラムに登録プログラムを呼び出す識別情報が含まれている場合に，登録プログラム記憶部１０２を，第１の分析対象関数情報および第４の分析対象関数情報を含む分析対象関数情報をもとに検索する。このとき，抽出部１３は，登録プログラム記憶部１０２から，第２の分析対象関数情報および第３の分析対象関数情報を含む分析対象関数情報が，第１の分析対象関数情報および第４の分析対象関数情報を含む分析対象関数情報と同じ登録プログラムを抽出する。
【００２９】
出力部１４は，抽出した登録プログラムを，処理対象プログラムに類似するプログラムとして出力する。例えば，出力部１４は，ユーザが処理対象プログラムに索引情報を付与してプログラム管理装置１０に登録する作業を行うためのプログラム登録画面を，ディスプレイ等の表示装置に表示する。このとき，出力部１４は，抽出された類似プログラムの情報を，ユーザが参照できるように，プログラム登録画面に出力する。
【００３０】
また，出力部１４は，抽出した登録プログラムを処理対象プログラムに類似するプログラムとして出力する際に，さらに抽出した登録プログラムに対応付けられた索引情報を出力する。例えば，出力部１４は，プログラム登録画面に抽出された類似プログラムの情報を出力する際に，抽出された類似プログラムに対応付けられた索引情報も，同時にプログラム登録画面に出力する。
【００３１】
登録部１５は，登録プログラム記憶部１０２に，処理対象プログラムのデータを登録する。例えば，登録部１５は，登録する処理対象プログラムに，該処理対象プログラムを特定する識別情報と，該処理対象プログラムに含まれる分析対象関数を示す分析関数情報とを対応付けて，登録プログラム記憶部１０２に登録する。また，処理対象プログラムに別の登録プログラムを呼び出す識別情報が含まれている場合に，登録部１５は，登録する処理対象プログラムに，該処理対象プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す分析関数情報をも対応付けて，登録プログラム記憶部１０２に登録する。また，登録部１５は，登録する処理対象プログラムに，ユーザに指定された索引情報を対応付けて，登録プログラム記憶部１０２に登録する。
【００３２】
更新部１６は，処理対象プログラムの識別情報を含む登録プログラムを，登録プログラム記憶部１０２から検索する。更新部１６は，検索された登録プログラムに処理対象プログラムを関連付けて，登録プログラム記憶部１０２に記憶する。例えば，登録プログラムに処理対象プログラムの識別情報が含まれている場合，処理対象プログラムは，該登録プログラムのサブ関数となる。このとき，該登録プログラムから呼び出される処理対象プログラムに含まれる分析対象関数を，該登録プログラムの分析結果に含めるために，処理対象プログラムの該登録プログラムへの関連付けを行う。このような更新部１６の処理によって，呼び出し対象プログラムの分析対象関数を含む類似プログラム検索の対象を増やすことが可能となる。
【００３３】
図２は，本実施の形態によるプログラム管理装置を実現するコンピュータのハードウェア構成例を示す図である。
【００３４】
図１に示す本実施の形態のプログラム管理装置１０は，例えば，ＣＰＵ（Central Processing Unit ）２，主記憶となるメモリ３，記憶装置４，通信装置５，媒体読取・書込装置６，入力装置７，出力装置８等を備えるコンピュータ１によって実現される。記憶装置４は，例えばＨＤＤ（Hard Disk Drive ）などである。媒体読取・書込装置６は，例えばＣＤ−Ｒ（Compact Disc Recordable ）ドライブやＤＶＤ−Ｒ（Digital Versatile Disc Recordable ）ドライブなどである。入力装置７は，例えばキーボード・マウスなどである。出力装置８は，例えばディスプレイ等の表示装置などである。
【００３５】
図１に示すプログラム管理装置１０およびプログラム管理装置１０が備える各機能部は，コンピュータ１が備えるＣＰＵ２，メモリ３等のハードウェアと，ソフトウェアプログラムとによって実現することが可能である。コンピュータ１が実行可能なプログラムは，記憶装置４に記憶され，その実行時にメモリ３に読み出され，ＣＰＵ２により実行される。
【００３６】
コンピュータ１は，可搬型記録媒体から直接プログラムを読み取り，そのプログラムに従った処理を実行することもできる。また，コンピュータ１は，サーバコンピュータからプログラムが転送されるごとに，逐次，受け取ったプログラムに従った処理を実行することもできる。さらに，このプログラムは，コンピュータ１で読み取り可能な記録媒体に記録しておくことができる。
【００３７】
図３は，本実施の形態による分析情報記憶部が格納するデータの例を示す図である。
【００３８】
図３（Ａ）に示す分析対象関数データ１１０，図３（Ｂ）に示す分析対象外関数データ１１１は，分析情報記憶部１０１に記憶されたプログラム分析に関する情報の一例である。
【００３９】
図３（Ａ）に示す分析対象関数データ１１０は，分析部１２によるプログラムの分析において，処理対象プログラムから取得する対象となる分析対象関数が設定された情報である。分析対象関数は，例えば，標準関数などである。使用頻度が高く，プログラムを特徴付ける重要な要素となり得るユーザ関数が，分析対象関数に設定されていてもよい。本実施の形態による分析部１２は，分析対象関数データ１１０に記録された分析対象関数を，分析結果として抽出する。
【００４０】
図３（Ａ）に示す分析対象関数データ１１０は，関数ＩＤ，関数名，重み値等の情報を持つ。図３（Ａ）に示す分析対象関数データ１１０において，関数ＩＤは，設定された分析対象関数を一意に識別する識別情報である。関数名は，分析対象関数の関数名を示す。重み値は，分析対象関数の重要度を示す情報である。本実施の形態では，各分析対象関数に対して５段階の重み値が設定されている。ここでは，重み値は，値が大きいほど重要度が高いものとする。重み値１が設定された分析対象関数の重要度は最も低く，重み値５が設定された分析対象関数の重要度は最も高い。
【００４１】
図３（Ｂ）に示す分析対象外関数データ１１１は，分析部１２によるプログラムの分析において，処理対象プログラムから取得する対象とならない分析対象外関数が設定された情報である。プログラムに含まれる関数の中には，分析結果として抽出することによって，かえってそのプログラムの特徴を失わせてしまう関数がある。本実施の形態による分析部１２は，処理対象プログラムに分析対象外関数データ１１１に記録された分析対象外関数が含まれている場合に，その存在を無視する。
【００４２】
図３（Ｂ）に示す分析対象外関数データ１１１は，番号，関数名，プログラム内容等の情報を持つ。図３（Ｂ）に示す分析対象外関数データ１１１において，番号は，分析対象外関数のレコードに付された番号である。関数名は，分析対象外関数の関数名を示す。プログラム内容は，分析対象外関数がユーザ関数である場合において，その分析対象外関数のソースコードを示す。
【００４３】
図４，図５は，本実施の形態による登録プログラム記憶部が格納するデータの例を示す図である。
【００４４】
図４に示す登録プログラム管理データ１２０，図５に示す文例管理データ１２１は，登録プログラム記憶部１０２に記憶された登録プログラムに関する情報の一例である。
【００４５】
図４に示す登録プログラム管理データ１２０は，各登録プログラムのデータを管理する情報である。図４に示す登録プログラム管理データ１２０は，管理番号，プログラム名，プログラム内容，呼び出し関係，分析結果の情報を持つ。
【００４６】
図４に示す登録プログラム管理データ１２０において，管理番号は，各登録プログラムをプログラム管理装置１０内部で識別するために付された番号である。
【００４７】
図４に示す登録プログラム管理データ１２０において，プログラム名は，プログラムを識別する識別情報である。本実施の形態では，原則として，登録プログラムのプログラム名に，その登録プログラムのメイン関数の関数名が使用される。これにより，プログラム名を登録プログラムの識別情報として，登録プログラムの呼び出し関係を管理することが可能となる。だだし，特にユーザからプログラム名の指定があった場合には，ユーザに指定されたものをプログラム名とする。例えば，登録プログラムのメイン関数の関数名が，“main”である場合などには，プログラム管理装置１０は，ユーザにプログラム名の指定を促す。
【００４８】
図４に示す登録プログラム管理データ１２０において，プログラム内容は，登録プログラムのソースコードを示す。
【００４９】
図４に示す登録プログラム管理データ１２０において，呼び出し関係は，登録プログラムに含まれるサブ関数が別のプログラムの呼び出しを行っている際の呼び出し関係を管理する情報である。図４に示す登録プログラム管理データ１２０の呼び出し関係では，
「サブ関数の関数名」：「呼び出し対象の登録プログラムの管理番号」
の形式で，登録プログラム間の呼び出し関係が示されている。
【００５０】
例えば，図４に示す登録プログラム管理データ１２０において，管理番号＃００３の登録プログラムのサブ関数ｓｕｂ４は，管理番号＃００４の登録プログラムのプログラム名，すなわち管理番号＃００４の登録プログラムのメイン関数の関数名ｓｕｂ４と一致する。このことから，管理番号＃００４の登録プログラムは，管理番号＃００３の登録プログラムからの呼び出し対象のプログラムであることがわかる。この関係ｓｕｂ４：＃００４が，管理番号＃００３のレコードの呼び出し関係に記録される。なお，「呼び出し対象の登録プログラムの管理番号」がｎｏｎｅである場合には，そのサブ関数の関数名の登録プログラムがなく，プログラム管理装置１０内で呼び出し関係が解決できていないことを示している。
【００５１】
登録プログラムのメイン関数で呼び出されるサブ関数が，その登録プログラム内部に存在する場合には，呼び出し関係の情報への記録は行われない。例えば，図４に示す登録プログラム管理データ１２０において，管理番号＃００２の登録プログラムのメイン関数では，３つのサブ関数ｓｕｂ１，ｓｕｂ２，ｓｕｂ３の呼び出しが行われている。だだし，そのうちの２つのサブ関数ｓｕｂ１，ｓｕｂ２は，管理番号＃００２の登録プログラムの内部に存在している。そのため，図４に示す登録プログラム管理データ１２０における管理番号＃００２のレコードでは，サブ関数ｓｕｂ１，ｓｕｂ２については，呼び出し関係が記録されていない。
【００５２】
図４に示す登録プログラム管理データ１２０において，分析結果は，登録プログラムに含まれる分析対象関数の情報である。図４に示す登録プログラム管理データ１２０の分析結果では，分析対象関数が，図３（Ａ）の分析対象関数データ１１０における関数ＩＤで示されている。
【００５３】
なお，図４に示す登録プログラム管理データ１２０では，登録プログラムのサブ関数が別の登録プログラムとして存在する場合には，その別の登録プログラムに含まれる分析対象関数も，分析結果に含まれている。例えば，管理番号＃００３の登録プログラム自身には，分析対象関数が１つも含まれていない。だだし，管理番号＃００３の登録プログラムのサブ関数ｓｕｂ４，ｓｕｂ５で呼び出される管理番号＃００４，管理番号＃００５の登録プログラムには，分析対象関数が含まれている。そのため，図４に示す登録プログラム管理データ１２０では，管理番号＃００３の登録プログラムの分析結果に，管理番号＃００４，管理番号＃００５の登録プログラムの分析結果における分析対象関数が記録されている。
【００５４】
図５に示す文例管理データ１２１は，文例を索引情報として登録プログラムを管理する情報である。図５に示す文例管理データ１２１は，文例，プログラム名，管理番号，分析結果，利用回数等の情報を持つ。図５に示す文例管理データ１２１において，文例は，登録プログラムの索引情報である。プログラム名，管理番号，分析結果は，図４に示す登録プログラム管理データ１２０のプログラム名，管理番号，分析結果に相当する。利用回数は，登録プログラムが再利用された回数を示す。
【００５５】
図６は，本実施の形態による抽出結果記憶部が格納するデータの例を示す図である。
【００５６】
図６に示す類似プログラムリストデータ１３０は，抽出結果記憶部１０３に記憶された類似プログラムの抽出結果の一例である。図６に示す類似プログラムリストデータ１３０は，プログラム名，文例，プログラムＩＤ，類似判定重み値等の情報を持つ。図６に示す類似プログラムリストデータ１３０において，プログラム名，文例，プログラムＩＤは，図４に示す登録プログラム管理データ１２０，図５に示す文例管理データ１２１のプログラム名，文例，プログラムＩＤに相当する。類似判定重み値は，類似プログラムが抽出された際の，一致判定の対象となる分析対象関数の重み値の範囲を示す。例えば，類似判定重み値が２である場合には，その類似プログラムの分析結果と処理対象プログラムの分析結果との一致判定で，重み値が２〜５のすべての分析対象関数が一致したことを示している。
【００５７】
図７は，本実施の形態による出力部が表示装置に出力するプログラム登録画面の例を示す図である。
【００５８】
図７に示すプログラム登録画面２００は，ユーザがプログラム管理装置１０への処理対象プログラムの登録を行う際に，ディスプレイ等の表示装置に表示される画面の例である。図７に示すプログラム登録画面２００には，類似プログラムの検索結果も出力されている。
【００５９】
図７に示すプログラム登録画面２００において，類似プログラムリストは，登録プログラムから検出された類似プログラムの一覧である。図７に示すプログラム登録画面２００の類似プログラムリストでは，類似プログラムのプログラム名と，類似プログラムに付与された索引情報である文例とが示されている。図７に示すプログラム登録画面２００において，例えばユーザが類似プログラムリストのプログラム名を指定すると，その類似プログラムのソースコードなどの情報が表示される。類似プログラムの検索結果と，検出された類似プログラムに付与された索引情報とを合わせて画面に出力することで，ユーザは，登録する処理対象プログラムに適切な索引情報を付与することができるようになる。
【００６０】
図７に示すプログラム登録画面２００において，文例入力欄は，ユーザが，登録する処理対象プログラムに付与する文例を入力する欄である。例えば，ユーザが登録する処理対象プログラムに類似プログラムと同じ文例を付与したい場合には，ユーザが類似プログラムリストの文例を指定すると，その文例が文例入力欄に入力される。ユーザが，ユーザが登録する処理対象プログラムに新たな文例を付与したい場合には，キーボードなどの入力装置によって文例入力欄に文例を入力する。
【００６１】
図７に示すプログラム登録画面２００において，プログラム名入力欄は，ユーザが，登録する処理対象プログラムにプログラム名を入力する欄である。プログラム名入力欄へのプログラム名の入力がない場合には，登録する処理対象プログラムのメイン関数の関数名が，その処理対象プログラムのプログラム名として登録される。
【００６２】
以下，図８〜図１２のフローチャートを用いて，本実施の形態のプログラム管理装置１０による処理の流れを説明する。
【００６３】
図８は，本実施の形態のプログラム管理装置によるプログラム登録処理フローチャートである。
【００６４】
プログラム管理装置１０においてプログラム入力部１１は，登録する処理対象プログラムを入力する（ステップＳ１０）。
【００６５】
分析部１２は，プログラム分析処理を実行する（ステップＳ１１）。プログラム分析処理は，プログラムを分析し，プログラムに含まれる分析対象関数を取得する処理である。プログラム分析処理の詳細については，後述する。
【００６６】
抽出部１３は，類似プログラム抽出処理を実行する（ステップＳ１２）。類似プログラム抽出処理は，処理対象プログラムから取得した分析対象関数と同じ分析対象関数が対応付けられた登録プログラムを，類似プログラムとして抽出する処理である。類似プログラム抽出処理の詳細については，後述する。
【００６７】
出力部１４は，ユーザが処理対象プログラムを登録する作業を行うためのプログラム登録画面２００を，ディスプレイなどの表示装置に表示する（ステップＳ１３）。このとき，出力部１４は，類似プログラムの抽出結果をプログラム登録画面２００に出力する。
【００６８】
登録部１５は，プログラム登録処理を実行する（ステップＳ１４）。プログラム登録処理は，処理対象プログラムのデータを登録プログラム記憶部１０２に記録する処理である。プログラム登録処理の詳細については，後述する。
【００６９】
更新部１６は，データ更新処理を実行する（ステップＳ１５）。データ更新処理は，処理対象プログラムの呼び出しを行っている登録プログラムのデータを更新する処理である。データ更新処理の詳細については，後述する。
【００７０】
図９は，本実施の形態の分析部によるプログラム分析処理フローチャートである。
【００７１】
本実施の形態の分析部１２による処理対象プログラムからの分析対象関数の取得では，分析部１２は，処理対象プログラムの記述順で関数の分析を行い，分析対象関数を取得する。途中にサブ関数があり，そのサブ関数に含まれる分析対象関数の取得が可能であれば，分析部１２は，該サブ関数から取得される分析対象関数を分析結果に加える。
【００７２】
分析部１２は，処理対象プログラムから，記述された順序で，関数を１つ取得する（ステップＳ２０）。プログラミング言語ごとに，関数を記述するルールが決まっており，そのルールに従った分析を行うことにより，処理対象プログラムから関数を取得することができる。例えば，分析部１２は，処理対象プログラムがＣ言語である場合に，“（）”付きの文字列を関数として取得する。
【００７３】
分析部１２は，分析情報記憶部１０１の分析対象外関数データ１１１を参照し，取得された関数が分析対象外関数であるかを判定する（ステップＳ２１）。取得された関数が分析対象外関数であれば（ステップＳ２１のＹＥＳ），分析部１２は，ステップＳ２９の処理に進む。本実施の形態によるプログラム分析処理では，分析対象外関数への対処は行われない。
【００７４】
取得された関数が分析対象外関数でなければ（ステップＳ２１のＮＯ），分析部１２は，分析情報記憶部１０１の分析対象関数データ１１０を参照し，取得された関数が分析対象関数であるかを判定する（ステップＳ２２）。取得された関数が分析対象関数であれば（ステップＳ２２のＹＥＳ），分析部１２は，取得された関数を分析結果に加え（ステップＳ２３），ステップＳ２９の処理に進む。
【００７５】
取得された関数が分析対象関数でなければ（ステップＳ２２のＮＯ），分析部１２は，取得された関数が，処理対象プログラム内にプログラムが存在するサブ関数であるかを判定する（ステップＳ２４）。取得された関数が処理対象プログラム内にプログラムが存在するサブ関数であれば（ステップＳ２４のＹＥＳ），分析部１２は，処理対象プログラムに含まれる該当サブ関数のプログラムについて，再帰的にプログラム分析処理を実行し（ステップＳ２５），ステップＳ２９の処理に進む。
【００７６】
例えば，処理対象プログラムが，図４の登録プログラム管理データ１２０における管理番号＃００２のレコードのプログラム内容に示されるようなプログラムであったものとする。このプログラムでは，メイン関数でサブ関数ｓｕｂ１，ｓｕｂ２，ｓｕｂ３を呼び出しているが，このうち２つのサブ関数ｓｕｂ１，ｓｕｂ２のプログラムについては，自身の内部に存在している。このようなサブ関数については，ステップＳ２５の処理によって，分析対象関数が取得される。
【００７７】
取得された関数が処理対象プログラム内にプログラムが存在するサブ関数でなければ（ステップＳ２４のＮＯ），分析部１２は，登録プログラム記憶部１０２の登録プログラム管理データ１２０を参照し，取得された関数が登録プログラムであるかを判定する（ステップＳ２６）。ここでは，分析部１２は，該当サブ関数の関数名で登録プログラム管理データ１２０のプログラム名を探索し，該当サブ関数の関数名とプログラム名が一致する登録プログラムが存在するかを判定する。
【００７８】
取得された関数が登録プログラムであれば（ステップＳ２６のＹＥＳ），分析部１２は，登録プログラム記憶部１０２の登録プログラム管理データ１２０を参照し，該当登録プログラムの分析結果を今回の処理対象プログラムの分析結果に加え（ステップＳ２７），ステップＳ２９の処理に進む。なお，このとき，分析部１２は，該当サブ関数と呼び出し対象の登録プログラムとを対応付けた呼び出し関係の情報を保持しておく。
【００７９】
例えば，処理対象プログラムが，図４の登録プログラム管理データ１２０における管理番号＃００３のレコードのプログラム内容に示されるようなプログラムであったものとする。このプログラムでは，メイン関数でサブ関数ｓｕｂ４，ｓｕｂ５，ｓｕｂ６を呼び出しているが，このうち２つのサブ関数ｓｕｂ４，ｓｕｂ５のプログラムについては，その関数名をプログラム名とする登録プログラムが存在する。このようなサブ関数については，ステップＳ２７の処理によって，分析対象関数が取得される。
【００８０】
取得された関数が登録プログラムでなければ（ステップＳ２６のＮＯ），分析部１２は，取得された関数が未分析のサブ関数であると判定し（ステップＳ２８），ステップＳ２９の処理に進む。このとき，分析部１２は，該当サブ関数に未分析を示すｎｏｎｅを対応付けた呼び出し関係の情報を保持しておく。未分析のサブ関数については，その時点でプログラムの実体がわからないため，分析対象関数の取得ができない。
【００８１】
分析部１２は，処理対象プログラムのすべての関数について，処理が終了したかを判定する（ステップＳ２９）。まだ，すべての関数について処理が終了していなければ（ステップＳ２９のＮＯ），ステップＳ２０の処理に戻って，次の関数の処理に移る。すべての関数について処理が終了していれば（ステップＳ２９のＹＥＳ），分析部１２は，処理を終了する。
【００８２】
図９に示すプログラム分析処理では，処理対象プログラムに別のプログラムの呼び出しがある場合に，その呼び出し対象のプログラムに含まれる分析対象関数も，分析結果として取得される。これにより，処理対象プログラムに別のプログラムの呼び出しがある場合に，呼び出し対象のプログラムに含まれる分析対象関数を考慮した，類似プログラムの検索が可能となる。
【００８３】
図１０は，本実施の形態の抽出部による類似プログラム抽出処理フローチャートである。
【００８４】
本実施の形態の抽出部１３による類似プログラムの抽出では，分析結果の分析対象関数が順序も含めて処理対象プログラムの分析結果の分析対象関数と一致する登録プログラムが，類似プログラムとして登録プログラム記憶部１０２から抽出される。
【００８５】
抽出部１３は，カウンタｉを１に設定する（ステップＳ３０）。カウンタｉは，分析結果同士の一致判定において，一致判定の対象となる分析対象関数の重み値の範囲を示す。例えば，カウンタｉの値が１であれば，一致判定の対象となる分析対象関数の重み値の範囲は１〜５となる。また，例えば，カウンタｉの値が３であれば，一致判定の対象となる分析対象関数の重み値の範囲は３〜５となる。
【００８６】
抽出部１３は，登録プログラム記憶部１０２の登録プログラム管理データ１２０から，登録プログラムのレコードを１つ取得する（ステップＳ３１）。
【００８７】
抽出部１３は，抽出結果記憶部１０３の類似プログラムリストデータ１３０を参照し，レコードが取得された登録プログラムが，類似プログラムの検索結果としてすでに抽出された登録プログラムであるかを判定する（ステップＳ３２）。結果としてすでに抽出された登録プログラムであれば（ステップＳ３２のＹＥＳ），ステップＳ３１の処理に戻り，次の登録プログラムの処理に移る。本実施の形態では，一致判定に用いる分析対象関数の重み値の基準を変えるたびに，登録プログラム管理データ１２０の最初のレコードに戻って処理を行うので，ステップＳ３２の判定で，同じ登録プログラムを重複して抽出することを防ぐ。
【００８８】
結果としてすでに抽出された登録プログラムでなければ（ステップＳ３２のＮＯ），抽出部１３は，重み値がｉ以上の分析対象関数について，取得された登録プログラムの分析結果を，処理対象プログラムの分析結果と比較する（ステップＳ３３）。抽出部１３は，重み値がｉ以上の分析対象関数について，双方のプログラムの分析結果が一致するかを判定する（ステップＳ３４）。
【００８９】
双方のプログラムの分析結果が一致すれば（ステップＳ３４のＹＥＳ），抽出部１３は，取得された登録プログラムのデータを，抽出結果記憶部１０３の類似プログラムリストデータ１３０に抽出する（ステップＳ３５）。ステップＳ３４の判定で一致した場合には，取得された登録プログラムが類似プログラムであると判定されたことになる。このとき，抽出部１３は，該当登録プログラムについて，登録プログラム記憶部１０２の登録プログラム管理データ１２０と文例管理データ１２１から必要な情報を抽出し，抽出結果記憶部１０３の類似プログラムリストデータ１３０に記録する。また，このときのカウンタｉの値を，類似プログラムリストデータ１３０の類似判定重み値に記録する。
【００９０】
抽出部１３は，すべての登録プログラムについて処理が終了したかを判定する（ステップＳ３６）。まだすべての登録プログラムについて処理が終了していなければ（ステップＳ３６のＮＯ），抽出部１３は，ステップＳ３１の処理に戻って，次の登録プログラムの処理に移る。
【００９１】
すべての登録プログラムについて処理が終了していれば（ステップＳ３６のＹＥＳ），抽出部１３は，カウンタｉが５であるかを判定する（ステップＳ３７）。カウンタｉが５でなければ（ステップＳ３７のＮＯ），抽出部１３は，カウンタｉをインクリメントし（ステップＳ３８），ステップＳ３１の処理に戻って，登録プログラム管理データ１２０の最初の登録プログラムの処理に移る。カウンタｉが５であれば（ステップＳ３７のＹＥＳ），抽出部１３は，処理を終了する。
【００９２】
例えば，ある入力対象プログラムＸＸＸの分析結果が，｛getaddrinfo() ，while() ，socket()，connect() ，close() ，freeaddrinfo()｝であるものとする。この入力対象プログラムＸＸＸの分析結果を，図３（Ａ）に示す分析対象関数データ１１０の関数ＩＤで表すと｛１００，０５３，１０２，１０１，２００，１０４｝となる。例えば，この入力対象プログラムＸＸＸの類似プログラムを，図４に示す登録プログラム管理データ１２０から検出するものとする。
【００９３】
図４に示す登録プログラム管理データ１２０において，管理番号＃００１の登録プログラムＡＡＡの分析結果は，｛００１，１００，０５３，１０２，１０１，２００，１０４｝である。重み値が１以上の分析対象関数が一致判定の対象であれば，管理番号＃００１の登録プログラムＡＡＡは，入力対象プログラムＸＸＸの類似プログラムとして検出されない。重み値が２以上の分析対象関数が一致判定の対象であれば，重み値１の分析対象関数mainが一致判定の対象とならないので，管理番号＃００１の登録プログラムＡＡＡは，入力対象プログラムＸＸＸの類似プログラムとして検出される。例えば，分析対象関数mainは，プログラムの特徴を表すという意味ではあまり重要ではないので，一致判定の対象としなくてもほとんど問題はない。
【００９４】
このように，すべての分析対象関数の一致判定では，類似プログラムとして検出できない登録プログラムでも，一致判定の対象となる分析対象関数の重み値の範囲を変えれば，類似プログラムとして検出できる場合がある。
【００９５】
なお，図１０に示す類似プログラム抽出処理では，一致判定の対象となる分析対象関数の重み値の範囲を５段階に変えて，類似プログラムの検索を行っているが，ある設定された固定の重み値の範囲で，１度だけ類似プログラムの検索を行うようにしてもよい。また，所定数以上の類似プログラムが検出された時点で，段階を変えた類似プログラムの検索を終了するようにしてもよい。
【００９６】
図１１は，本実施の形態の登録部によるプログラム登録処理フローチャートである。
【００９７】
プログラム管理装置１０において，登録部１５は，プログラム登録画面２００においてユーザが決定した文例を取得する（ステップＳ４０）。
【００９８】
登録部１５は，プログラム登録画面２００でのユーザによるプログラム名の入力があるかを判定する（ステップＳ４１）。プログラム名の入力があれば（ステップＳ４１のＹＥＳ），登録部１５は，入力されたプログラム名を取得する（ステップＳ４２）。プログラム名の入力がなければ（ステップＳ４１のＮＯ），処理対象プログラムのメイン関数の関数名をプログラム名とする（ステップＳ４３）。
【００９９】
登録部１５は，処理対象プログラムのデータを，登録プログラム管理データ１２０に追加する（ステップＳ４４）。プログラム名は，ステップＳ４２またはステップＳ４３の処理で得られたプログラム名が記録される。プログラム内容は，処理対象プログラムのソースコードが記録される。呼び出し関係は，分析部１２によるプログラム分析処理で保持された呼び出し関係が記録される。分析結果は，分析部１２によるプログラム分析処理で得られた分析結果が記録される。
【０１００】
登録部１５は，処理対象プログラムのデータを，文例管理データに追加する（ステップＳ４５）。文例は，ステップＳ４０の処理で得られた文例が記録される。
【０１０１】
図１２は，本実施の形態の更新部によるデータ更新処理フローチャートである。
【０１０２】
プログラム管理装置１０において，更新部１６は，登録プログラム記憶部１０２の登録プログラム管理データ１２０から，登録プログラムのレコードを１つ取得する（ステップＳ５０）。
【０１０３】
更新部１６は，取得した登録プログラムの呼び出し関係に未分析のサブ関数がある場合に，その未分析のサブ関数の関数名と，登録された処理対象プログラムのプログラム名とを比較する（ステップＳ５１）。更新部１６は，未分析のサブ関数の関数名と処理対象プログラムのプログラム名とが一致するかを判定する（ステップＳ５２）。
【０１０４】
未分析のサブ関数の関数名と処理対象プログラムのプログラム名とが一致すれば（ステップＳ５２のＹＥＳ），更新部１６は，登録プログラム管理データ１２０の該当登録プログラムの呼び出し関係において，該当サブ関数に処理対象プログラムとの関係を記録する（ステップＳ５３）。また，更新部１６は，登録プログラム管理データ１２０の該当登録プログラムの分析結果に，処理対象プログラムの分析結果をマージする（ステップＳ５４）。更新部１６は，登録プログラム管理データ１２０の更新結果を文例管理データ１２１に反映する。
【０１０５】
更新部１６は，すべての登録プログラムについて処理が終了したかを判定する（ステップＳ５５）。まだすべての登録プログラムについて処理が終了していなければ（ステップＳ５５のＮＯ），更新部１６は，ステップＳ５０の処理に戻って，次の登録プログラムの処理に移る。すべての登録プログラムについて処理が終了していれば（ステップＳ５５のＹＥＳ），更新部１６は，処理を終了する。
【０１０６】
例えば，図４に示す登録プログラム管理データ１２０において，管理番号＃００３のプログラムの登録時に，管理番号＃００４のｓｕｂ４のプログラムと管理番号＃００５のｓｕｂ５のプログラムとが，未登録であったものとする。この時点で，管理番号＃００３のプログラムの分析結果に，分析対象関数はない。
【０１０７】
その後，管理番号＃００４のｓｕｂ４のプログラムが登録されると，管理番号＃００３のプログラムとの呼び出し関係から，管理番号＃００３のプログラムの分析結果に管理番号＃００４のｓｕｂ４のプログラムの分析結果がマージされる。この時点で，管理番号＃００３のプログラムの分析結果は，｛１００｝となる。
【０１０８】
さらに，管理番号＃００５のｓｕｂ５のプログラムが登録されると，管理番号＃００３のプログラムとの呼び出し関係から，管理番号＃００３のプログラムの分析結果に管理番号＃００５のｓｕｂ５のプログラムの分析結果がマージされる。この時点で，管理番号＃００３のプログラムの分析結果は，｛１００，０５３，１０２，１０１，２００｝となる。
【０１０９】
以上説明した本実施の形態のプログラム管理装置１０によって，処理対象プログラムが別の登録プログラムを呼び出している場合でも，その呼び出し対象の登録プログラムに含まれる分析対象関数も含めた，処理対象プログラムの分析対象関数を取得することができる。これにより，より精度が高い類似プログラムの検索が可能となる。
【０１１０】
以上，本実施の形態について説明したが，本発明はその主旨の範囲において種々の変形が可能であることは当然である。
【０１１１】
例えば，本実施の形態では，類似プログラム抽出処理において，分析対象関数の順番も含めた一致で，類似プログラムの判定を行っている。例えば，類似プログラム抽出処理において，分析対象関数の種類と数との関係の一致で，類似プログラムの判定を行うようにしてもよい。
【０１１２】
以上の本実施の形態に関し，さらに以下の付記を開示する。
【０１１３】
（付記１）
コンピュータに，
プログラム同士の類似性の判断に用いる所定の分析対象関数が記憶された記憶部を参照して，前記所定の分析対象関数のうち，処理対象プログラムに含まれる分析対象関数を示す第１の分析対象関数情報を取得し，
登録プログラムごとに，該登録プログラムを特定する識別情報と，前記所定の分析対象関数のうち，該登録プログラムに含まれる分析対象関数を示す第２の分析対象関数情報と，該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第３の分析対象関数情報とが対応付けて記憶された記憶部を，前記第１の分析対象関数情報をもとに検索して，前記第２の分析対象関数情報および第３の分析対象関数情報を含む分析対象関数情報が，前記第１の分析対象関数情報と同じ登録プログラムを抽出し，
前記抽出した登録プログラムを，前記処理対象プログラムに類似するプログラムとして出力する
処理を実行させるための管理プログラム。
【０１１４】
（付記２）
前記記憶部は，さらに，登録プログラムに該登録プログラムの索引情報を対応付けて記憶し，
前記出力する処理では，前記抽出した登録プログラムを前記処理対象プログラムに類似するプログラムとして出力する際に，さらに前記抽出した登録プログラムに対応付けられた索引情報を出力する
ことを特徴とする付記１に記載の管理プログラム。
【０１１５】
（付記３）
前記コンピュータに，さらに，
前記処理対象プログラムの識別情報を含む登録プログラムを前記記憶部から検索し，検索された登録プログラムに前記処理対象プログラムを関連付けて前記記憶部に記憶する
処理を実行させるための付記１または付記２に記載の管理プログラム。
【０１１６】
（付記４）
前記分析対象関数には，前記分析対象関数ごとに重要度が設定されており，
前記登録プログラムを抽出する処理では，重要度が所定以上高い分析対象関数を一致判定の対象として，前記記憶部を，前記第１の分析対象関数情報をもとに検索して，前記第２の分析対象関数情報および第３の分析対象関数情報を含む分析対象関数情報が，前記第１の分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする付記１から付記３までのいずれかに記載の管理プログラム。
【０１１７】
（付記５）
前記第１の分析対象関数情報を取得する処理では，前記処理対象プログラムに前記記憶部に記憶された登録プログラムを呼び出す識別情報が含まれている場合に，前記第１の分析対象関数情報を取得するとともに，前記処理対象プログラムに含まれる識別情報で呼び出される登録プログラムに含まれる分析対象関数を示す第４の分析対象関数情報を取得し，
前記登録プログラムを抽出する処理では，前記記憶部を，前記第１の分析対象関数情報および第４の分析対象関数情報を含む分析対象関数情報をもとに検索して，前記第２の分析対象関数情報および第３の分析対象関数情報を含む分析対象関数情報が，前記第１の分析対象関数情報および第４の分析対象関数情報を含む分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする付記１から付記４までのいずれかに記載の管理プログラム。
【０１１８】
（付記６）
コンピュータが，
プログラム同士の類似性の判断に用いる所定の分析対象関数が記憶された記憶部を参照して，前記所定の分析対象関数のうち，処理対象プログラムに含まれる分析対象関数を示す第１の分析対象関数情報を取得し，
登録プログラムごとに，該登録プログラムを特定する識別情報と，前記所定の分析対象関数のうち，該登録プログラムに含まれる分析対象関数を示す第２の分析対象関数情報と，該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第３の分析対象関数情報とが対応付けて記憶された記憶部を，前記第１の分析対象関数情報をもとに検索して，前記第２の分析対象関数情報および第３の分析対象関数情報を含む分析対象関数情報が，前記第１の分析対象関数情報と同じ登録プログラムを抽出し，
前記抽出した登録プログラムを，前記処理対象プログラムに類似するプログラムとして出力する過程を実行する
ことを特徴とする管理方法。
【０１１９】
（付記７）
前記記憶部は，さらに，登録プログラムに該登録プログラムの索引情報を対応付けて記憶し，
前記出力する過程では，前記抽出した登録プログラムを前記処理対象プログラムに類似するプログラムとして出力する際に，さらに前記抽出した登録プログラムに対応付けられた索引情報を出力する
ことを特徴とする付記６に記載の管理方法。
【０１２０】
（付記８）
前記コンピュータが，さらに，
前記処理対象プログラムの識別情報を含む登録プログラムを前記記憶部から検索し，検索された登録プログラムに前記処理対象プログラムを関連付けて前記記憶部に記憶する過程を実行する
ことを特徴とする付記６または付記７に記載の管理方法。
【０１２１】
（付記９）
前記分析対象関数には，前記分析対象関数ごとに重要度が設定されており，
前記登録プログラムを抽出する過程では，重要度が所定以上高い分析対象関数を一致判定の対象として，前記記憶部を，前記第１の分析対象関数情報をもとに検索して，前記第２の分析対象関数情報および第３の分析対象関数情報を含む分析対象関数情報が，前記第１の分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする付記６から付記８までのいずれかに記載の管理方法。
【０１２２】
（付記１０）
前記第１の分析対象関数情報を取得する過程では，前記処理対象プログラムに前記記憶部に記憶された登録プログラムを呼び出す識別情報が含まれている場合に，前記第１の分析対象関数情報を取得するとともに，前記処理対象プログラムに含まれる識別情報で呼び出される登録プログラムに含まれる分析対象関数を示す第４の分析対象関数情報を取得し，
前記登録プログラムを抽出する過程では，前記記憶部を，前記第１の分析対象関数情報および第４の分析対象関数情報を含む分析対象関数情報をもとに検索して，前記第２の分析対象関数情報および第３の分析対象関数情報を含む分析対象関数情報が，前記第１の分析対象関数情報および第４の分析対象関数情報を含む分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする付記６から付記９までのいずれかに記載の管理方法。
【０１２３】
（付記１１）
プログラム同士の類似性の判断に用いる所定の分析対象関数を記憶する分析情報記憶部と，
登録プログラムごとに，該登録プログラムを特定する識別情報と，前記所定の分析対象関数のうち，該登録プログラムに含まれる分析対象関数を示す第２の分析対象関数情報と，該登録プログラムから識別情報で呼び出される別の登録プログラムに含まれる分析対象関数を示す第３の分析対象関数情報とを対応付けて記憶する登録プログラム記憶部と，
前記分析情報記憶部を参照して，前記所定の分析対象関数のうち，処理対象プログラムに含まれる分析対象関数を示す第１の分析対象関数情報を取得する分析部と，
前記登録プログラム記憶部を，前記第１の分析対象関数情報をもとに検索して，前記第２の分析対象関数情報および第３の分析対象関数情報を含む分析対象関数情報が，前記第１の分析対象関数情報と同じ登録プログラムを抽出する抽出部と，
前記抽出した登録プログラムを，前記処理対象プログラムに類似するプログラムとして出力する出力部とを備える
ことを特徴とする管理装置。
【０１２４】
（付記１２）
前記登録プログラム記憶部は，さらに，登録プログラムに該登録プログラムの索引情報を対応付けて記憶し，
前記出力部は，前記抽出した登録プログラムを前記処理対象プログラムに類似するプログラムとして出力する際に，さらに前記抽出した登録プログラムに対応付けられた索引情報を出力する
ことを特徴とする付記１１に記載の管理装置。
【０１２５】
（付記１３）
前記処理対象プログラムの識別情報を含む登録プログラムを前記登録プログラム記憶部から検索し，検索された登録プログラムに前記処理対象プログラムを関連付けて前記登録プログラム記憶部に記憶する更新部を備える
ことを特徴とする付記１１または付記１２に記載の管理装置。
【０１２６】
（付記１４）
前記分析対象関数には，前記分析対象関数ごとに重要度が設定されており，
前記抽出部は，重要度が所定以上高い分析対象関数を一致判定の対象として，前記登録プログラム記憶部を，前記第１の分析対象関数情報をもとに検索して，前記第２の分析対象関数情報および第３の分析対象関数情報を含む分析対象関数情報が，前記第１の分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする付記１１から付記１３までのいずれかに記載の管理装置。
【０１２７】
（付記１５）
前記分析部は，前記処理対象プログラムに前記登録プログラム記憶部に記憶された登録プログラムを呼び出す識別情報が含まれている場合に，前記第１の分析対象関数情報を取得するとともに，前記処理対象プログラムに含まれる識別情報で呼び出される登録プログラムに含まれる分析対象関数を示す第４の分析対象関数情報を取得し，
前記抽出部は，前記登録プログラム記憶部を，前記第１の分析対象関数情報および第４の分析対象関数情報を含む分析対象関数情報をもとに検索して，前記第２の分析対象関数情報および第３の分析対象関数情報を含む分析対象関数情報が，前記第１の分析対象関数情報および第４の分析対象関数情報を含む分析対象関数情報と同じ登録プログラムを抽出する
ことを特徴とする付記１１から付記１４までのいずれかに記載の管理装置。
【符号の説明】
【０１２８】
１０  プログラム管理装置
１１  プログラム入力部
１２  分析部
１３  抽出部
１４  出力部
１５  登録部
１６  更新部
１０１  分析情報記憶部
１０２  登録プログラム記憶部
１０３  抽出結果記憶部
【図１】
0005712711.tif 000002
【図２】
0005712711.tif 000003
【図３】
0005712711.tif 000004
【図４】
0005712711.tif 000005
【図５】
0005712711.tif 000006
【図６】
0005712711.tif 000007
【図７】
0005712711.tif 000008
【図８】
0005712711.tif 000009
【図９】
0005712711.tif 000010
【図１０】
0005712711.tif 000011
【図１１】
0005712711.tif 000012
【図１２】
0005712711.tif 000013