(57)【要約】【課題】プログラムの中から検索元コードと関連性のあるコードを自動的に検出する。【解決手段】  類似検索ツールは、プログラムの修正内容を管理するための修正管理情報１１とプログラムの構造を示すシステム構造情報１２とに基づいて検索条件の抽象化レベルを決定し、検索対象プログラムと検索元コードを抽象化する。抽象化した検索対象プログラムと検索元コードを比較して行単位の類似比率を算出する。そして、算出した類似比率と該当するコードを検索結果として出力する。【選択図】図２
2005301859.tif 000002
【特許請求の範囲】
【請求項１】
検索対象プログラムから検索元コードと関連性のあるコードを検索するプログラムであって、
検索元コードに対する修正内容と検索元コードを含むプログラムのシステム構造を示すシステム構造情報との少なくとも一方に基づいて検索条件の抽象化レベルを決定するステップと、
決定された抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化して記憶手段に格納するステップと、
前記記憶手段に格納された抽象化された検索対象プログラムと検索元コードとを比較してコードの類似度を算出するステップと、
前記検索対象プログラムの中の類似度が高いコードを出力するステップとからなるコンピュータが実行可能なコード検索プログラム。
【請求項２】
抽象化レベルを決定するステップは、検索元コードに対する修正内容が、項目名または変数名の変更、命令の条件以外の変更、命令の条件の変更の何れであるかを前記記憶手段に記憶されている情報または入力された情報から判定し、判定結果に基づいて抽象化レベルを決定する請求項１または２記載のコード検索プログラム。
【請求項３】
抽象化レベルを決定するステップは、検索元コードの修正内容を示す修正管理情報と検索元コードを含むプログラムのシステム構造を示すシステム構造情報とに基づいて抽象化レベルを決定する請求項１または２記載のコード検索プログラム。
【請求項４】
抽象化レベルを決定するステップは、少なくとも検索元コードを含むプログラムが作成されたプログラミング手法を示す情報と、検索元コードのシステム構造における階層上の位置を示す情報とに基づいて抽象化レベルを決定する請求項１，２または３記載のコード検索プログラム。
【請求項５】
検索対象のプログラムから検索元コードと関連性のあるコードを検索するコード検索装置であって、
検索元コードに対する修正内容に基づいて検索条件の抽象化レベルを決定する抽象化レベル決定手段と、
前記抽象化レベル決定手段により決定された抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化する抽象化手段と、
前記抽象化手段により抽象化された検索対象プログラムと検索元コードとを比較してコードの類似度を算出する類似度算出手段と、
前記類似度算出手段により算出された類似度が高いコードを出力する出力手段とを備えるコード検索装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検索元コードと関連するコードを対象となるプログラムから検索するコード検索プログラム及びコード検索装置に関する。
【背景技術】
【０００２】
プログラム開発においては、作成済みのソースコードを複写またはその一部を変更または追加して新たなプログラムを作成することが行われている。
そのようなプログラム開発において、ソースコードのある部分に問題が発生したり、バグを修正する等の対策を行った場合には、その影響が複写部分にも及ぶので複写されたコード（これをクローンコードという）を全て修正する必要がある。
【０００３】
通常、上記のような理由でソースコードが修正された場合には、人手による文字列検索等の方法で該当するクローンコードを探して修正が加えられる。
しかしながら、検索対象のプログラムにおいて、元のソースコードに対して変更が加えられている場合は、そのコードが複写したものかどうかの判別がつきにくいために複写したコードを見落とす可能性が高い。また、複数の開発者によりプログラム開発が行われていて、他の開発者が作成したプログラムを利用して別の開発者がプログラムの開発を行っている場合などには、ソースコードが複写されていること自体気がつかないので複写されたコードがそのまま放置される可能性がある。
【０００４】
ソースプログラムを解析する方法として、例えば、特許文献１に、ソースプログラム中の項目名、条件等を自動抽出する方法について記載されている。
また、特許文献２には、グラフ手法を使用することによって、仕様情報などの抽象化された情報を抽出し、プログラム解析を自動的に行う技術について記載されている。
【特許文献１】特許第３３７７８３６号
【特許文献２】特開平７−５６７３１号
【発明の開示】
【発明が解決しようとする課題】
【０００５】
特許文献１の発明は、ソースプログラムの項目名、条件式を自動的に抽出するものであり、特定のプログラムの中から複写されたソースコードを検出するものではない。
本発明の課題は、プログラムの中から検索元コードと関連性のあるコードを自動的に検出できるようにすることである。
【課題を解決するための手段】
【０００６】
本発明のコード検索プログラムは、検索対象プログラムから検索元コードと関連性のあるコードを検索するコンピュータが実行可能なプログラムであって、検索元コードに対する修正内容と検索元コードを含むプログラムのシステム構造を示すシステム構造情報との少なくとも一方に基づいて検索条件の抽象化レベルを決定するステップと、決定された抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化して記憶手段に格納するステップと、前記記憶手段に格納された抽象化された検索対象プログラムと検索元コードとを比較してコードの類似度を算出するステップと、前記検索対象プログラムの中の類似度が高いコードを出力するステップとからなる。
【０００７】
この発明によれば、修正内容またはシステム構造情報に基づいて抽象化した検索対象プログラムと検索元コードを比較し、両者の類似度を算出することで、検索対象プログラム中に存在する検索元コードと類似したコードを検索することができる。これにより、例えば、検索対象プログラムにおいてコードの一部が変更されている場合でも、それらのコードを漏れなく検出することができる。また、類似するコードが自動的に検索されるので、人手により検索文字列を入力して検索する方法のように検索者の技量の違いによる検索精度のバラツキが生じない。
【０００８】
本発明の他の態様は、上記の発明において、抽象化レベルを決定するステップは、検索元コードに対する修正内容が、項目名または変数名の変更、命令の条件以外の変更、命令の条件の変更の何れであるかを前記記憶手段に記憶されている情報または入力された情報から判定し、判定結果に基づいて抽象化レベルを決定する。
【０００９】
このように構成することで、修正内容に応じた抽象化レベルで検索条件を自動設定できるので、修正内容の実態に適合した適切な検索を実行できる。これにより目的とするクローンコードの検出精度を高め、かつ関連性の少ないコードが検出される可能性を少なくできる。
【００１０】
本発明の他の態様は、上記の発明において、抽象化レベルを決定するステップは、検索元コードの修正内容を示す修正管理情報と検索元コードを含むプログラムのシステム構造を示すシステム構造情報とに基づいて抽象化レベルを決定する。
【００１１】
このように構成することで、修正内容とシステム構造情報に基づいて抽象化レベルを決定することで、より適切な抽象化レベルを決めることができるので実態に沿った的確な検索を行うことができる。
【００１２】
本発明の他の態様は、上記の発明において、抽象レベルを決定するステップは、検索元コードを含むプログラムが作成されたプログラミング手法を示す情報と、検索元コードのシステム構造における階層上の位置を示す情報とに基づいて抽象化レベルを決定する。
【００１３】
このように構成することで、プログラムがどのようなシステム構造の特徴を持っているか、例えば、上階層ほどプログラムの抽象度が高いシステム構造、あるいは上位階層ほど抽象度が低いシステム構造を持っているか、さらに、検索元コードがどの階層に存在するかにより、検索元コードの抽象化の度合いを判断できる。従って、検索元コードの抽象化の度合いに適合させた抽象化レベルを設定できるので検索精度をより高めることができる。
【００１４】
図１は、本発明のコード検索装置の原理説明図である。
本発明のコード検索装置は、検索対象のプログラムから検索元コードと関連性のあるコードを検索するコード検索装置であって、検索元コードに対する修正内容と検索元コードを含むプログラムのシステム構造を示すシステム構造情報の少なくとも一方に基づいて検索条件の抽象化レベルを決定する抽象化レベル決定手段１と、前記抽象化レベル決定手段１により決定された抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化する抽象化手段２と、前記抽象化手段２により抽象化された検索対象プログラムと検索元コードとを比較してコードの類似度を算出する類似度算出手段３と、前記類似度算出手段３により算出された類似度が高いコードを出力する出力手段４とを備える。
【００１５】
この発明によれば、検索元コードに対する修正内容またはシステム構造情報に基づいて検索対象プログラムと検索元コードを抽象化し、両者の類似度を算出することで、検索対象プログラム中に存在する検索元コードと関連性の高いコードを検索できる。これにより、検索対象プログラムにおいてコードの一部が変更されている場合でも、それらのコードを漏れなく検出することができる。また、類似するコードが自動的に検索されるので、人手により検索文字列を入力する方法のように検索者の技量による検索精度のバラツキが生じない。
【００１６】
出力手段４は、例えば、検索対象プログラムの該当するコードとそのコードの検索元コードとの類似度を対応づけて表示する。
本発明のコード検索装置の他の態様は、前記抽象化手段は、検索対象プログラムをブロック単位に分割する分割手段を有し、前記類似度算出手段は、検索元コードを含むブロックと検索対象プログラムの各ブロックのそれぞれの行を比較し、不一致の行を語単位に比較して各行の類似度とブロック単位の類似度を算出する。
【００１７】
このように構成することで、行単位の類似度とブロック単位の類似度から、ユーザは、検出されたコードが検索元コードを複写したものか否かを容易に判断できる。
本発明のコード検索装置の他の態様は、前記抽象化レベル決定手段は、検索元コードがプログラムの中で共通に使用される共通モジュールか否かを判定し、検索元コードが共通モジュールであった場合には、抽象化レベルを低く設定する。
【００１８】
このように構成することで、検索元コードがプログラム中で共通に使用される共通モジュールであった場合には、その検索コードは抽象化されて記述されているものと判断し、検索元コードの抽象化の度合いに適合したレベルに抽象化できる。
【００１９】
本発明のコード検索装置の他の態様は、前記抽象化レベル決定手段は、検索元コードが作成されたプログラムが構造化プログラムか否か、検索元コードの存在する階層が少なくとも上位階層か下位階層かを判定し、検索元コードが上位階層に存在する場合には、検索条件の抽象化レベルを高く設定する。
【００２０】
このように構成することで、検索元コードのプログラムが構造化プログラムであった場合には、そのプログラムのシステム構造から検索元コードが存在する階層の位置から検索元コードに適した抽象化レベルを設定できる。
【発明の効果】
【００２１】
本発明によれば、修正内容またはプログラムのシステム構造に基づいて抽象化した検索対象プログラムと検索元コードを比較し、両者の類似度を算出することで検索対象プログラム中に存在する検索元コードと関連性のあるコードを検索することができる。
【発明を実施するための最良の形態】
【００２２】
以下、本発明の実施の形態を図面を参照しながら説明する。図２は、実施の形態の類似検索ツールの構成を示す図である。
類似検索ツールは、コード検索装置（パーソナルコンピュータ、専用の装置等）上で実行されるプログラムであり、検索元コードを複写したクローンコードを検索対象プログラムから検索してそれらの類似度を表示する機能を有する。
【００２３】
類似検索ツールは、プログラムの修正内容を管理するための修正管理情報１１とプログラムの構造を示すシステム構造情報１２とに基づいて検索条件の抽象化レベルを決定する。なお、参照元のプログラム（修正が施されたプログラム）等が格納された実資産１３から修正されたコードがシステム構造上のどの階層に存在するかを調べ、その情報（システム構造情報１２に対応する情報）に基づいて抽象化レベルを決めても良い。
【００２４】
検索条件の抽象化レベルとは、検索元コード並びに検索対象プログラムに記述されている項目名、命令、命令の実行条件等をどの程度抽象化するかを決める情報である。
抽象化レベルが決定されたなら、抽象化した検索対象プログラムと検索元コード（修正が加えられる前の状態のコード）を比較して類似比率（類似度）を算出する。さらに、抽象化レベルに応じた係数を一致数に乗算して類似比率を自動修正する。そして、算出した類似比率と共に該当するコードを検索結果として出力する。
【００２５】
次に、抽象化レベル決定処理を図３のフローチャートを参照して説明する。以下の処理は、類似検索ツールを実行するコンピュータのＣＰＵにより実行される。
最初に、修正管理情報１１が存在するか否かを判別する（図３，Ｓ１１）。修正管理情報１１が存在する場合には、ステップＳ１２に進み、修正管理情報１１に基づいて抽象化レベルを決定する。
【００２６】
ここで、修正管理情報１１について図４を参照して説明する。図４は修正管理情報テーブル２１に格納されるデータを示す図である。
修正管理情報テーブル２１には、プログラム毎にそのプログラムに対してどのような修正が加えられたかを示す修正管理情報１１が格納される。修正管理情報１１としては、図４に示すように、仕様変更や障害が発生した日付、担当者名、発生内容、修正を行った日付、担当者名、修正内容に応じた区分を示す修正区分、対応箇所（プログラムの修正行を特定する情報）、修正内容の詳細等が記録される。この修正管理情報１１は、プログラムの仕様を変更した人、プログラムの障害を発見した人、プログラムを修正した人が入力する。
【００２７】
修正区分としては、例えば、プログラムの項目名を変更した場合には、修正区分として「項目」を設定し、命令の実行条件を変更した場合には、修正区分として「条件」、命令の実行条件以外の部分を変更した場合には、修正区分として「条件以外」を設定する。
【００２８】
検索条件の抽象化レベルは、上記の修正管理情報１１の修正区分に基づいて自動的に設定される。例えば、修正管理情報１１の修正区分が「項目」であった場合には、図３のステップＳ１３に進み、抽象化レベル１が選択される。また、修正区分が「条件以外」であった場合には、ステップＳ１４に進み、抽象化レベル２が選択される。さらに、修正区分が「条件」であった場合には、抽象化レベル３が選択される。
【００２９】
抽象化レベル１〜３は、レベル１、レベル２，レベル３の順で抽象化の度合いが高くなる。例えば、項目名が修正され、修正区分として「項目」が設定されている場合には、項目名が重要な検索ポイントであるので項目名は抽象化せず、項目名そのものを検索する必要がある。この場合の抽象化レベルは、抽象化の度合いが最も低いレベル１が設定される。
【００３０】
また、命令の実行条件以外の部分が修正され、修正区分として「条件以外」が設定されている場合には、条件を除く命令の並びが検索のポイントであるので、項目名または変数名を抽象化する。この場合、抽象化レベルとして、抽象化の度合いが２番目のレベル２が設定される。
【００３１】
また、命令の実行条件が修正され、修正区分として「条件」が設定されている場合には、条件文の記述は異なるが命令の内容は同じものを検出する必要があるので条件を抽象化して検索する。この場合の抽象化レベルは、抽象化の度合いが１番高いレベル３が設定される。
【００３２】
次に、システム構造情報１２に基づいて抽象化レベル１〜３を選択する（Ｓ１６〜Ｓ１９）。
システム構造情報１２は、図５に示すようなシステム構造情報テーブル２２に格納される。システム構造情報テーブル２２には、そのプログラムがどのようなプログラミング手法で作成されているかを示す情報、例えば、構造化プログラミング手法で作成されたか、オブジェクト指向プログラミング手法で作成されたか等を示す情報と、プログラムの階層構造を示す情報が登録されている。階層構造を示す情報としては、上位プログラム名と下位プログラム名が対応づけて登録されている。
【００３３】
図５の例では、プログラムＰＧＭ１の下位にプログラムＳＵＢ１とＳＵＢ２とＳＵＢ３が存在し、プログラムＳＵＢ１の下位にプログラムＳＵＢ１１とＳＵＢ１２が存在し、ＳＵＢ２の下位にプログラムＳＵＢ２１が存在し、プログラムＳＵＢ３の下位にプログラムＳＵＢ１が存在することが規定されている。
【００３４】
図５のシステム構造情報１２は、図６（Ａ）の構造化プログラムに対応しており、この情報からプログラムＳＵＢ１，ＳＵＢ１１，ＳＵＢ１２が、複数の箇所で使用されている共通モジュールであることが判る。これらの共通モジュールは処理内容に依存せずに使用できるように抽象化されているので、抽象化レベルを選択する際に、共通モジュールに対する抽象化レベルは低いレベルを設定する。
【００３５】
システム構造情報１２に基づく抽象化レベルの選択が完了したなら、ステップＳ２０に進み、修正管理情報１１とシステム構造情報１２に基づく抽象化レベルの選択結果のうち抽象化レベルの低い方を選択する。なお、修正管理情報１１とシステム構造情報１２の一方に基づいて抽象化レベルを決めるようにしても良い。
【００３６】
ここで、図６を参照して構造化プログラムとオブジェクト指向プログラムのシステム構造について説明する。
図６（Ａ）に示す構造化プログラミングの技法により作成されたプログラムは、上位階層のプログラムは具体的な処理内容に関連する業務ロジックが比較的多く、下位階層のプログラムは業務ロジックが比較的少ないというシステム構造を有している。
【００３７】
図６（Ａ）のプログラムＳＵＢ１，ＳＵＢ１１，ＳＵＢ１２は、システム構造上で複数回出現する共通モジュールであり処理内容に関係なく実行可能に作られる。共通部品として使用される共通モジュールは、プログラミング内容が既に抽象化されているので、後述する抽象化レベル選択処理で抽象化度合いが最も低い抽象化レベル１が選択される。
【００３８】
また、構造化プログラムの最下位階層のプログラムは、抽象化されたプログラミングが行われているが、共通モジュールと比較した場合、項目名などの具体的表現が存在するので、後述する抽象化レベル選択処理で抽象化の度合いが２番目の抽象レベル２が選択される。
【００３９】
また、上位階層から中間階層のプログラムは、より具体化されたプログラムが行われているので、後述する抽象化レベル選択処理で、抽象化の度合いが最も高い抽象化レベル３が選択される。
【００４０】
図６（Ｂ）に示す、オブジェクト指向プログラミングの手法により作成されたプログラムは、上位階層のプログラムは、具体的な処理内容に関連する業務ロジックが比較的少なく、下位階層のプログラムは業務ロジックが比較的多いシステム構造を有している。
【００４１】
上位階層のプログラムは、抽象化されたプログラミングが行われているので、後述する抽象化レベル選択処理で抽象化レベル２が選択される。
また、中間階層から最下位階層のプログラムは、具体化されたプログラミングが行われているので、後述する抽象化レベル選択処理で、抽象化の度合いが最も高い抽象化レベル３が選択される。
【００４２】
図７は、図３のＳ１６〜Ｓ１９のシステム構造に基づく抽象化レベル選択処理のより詳しいフローチャートである。
先ず、システム構造情報１２から検索元コードが属するプログラムが共通に使用されているモジュール、すなわち共通部品か否かを判別する（Ｓ２１）。
【００４３】
プログラム全体で共通に使用される共通部品であると判別された場合には（Ｓ２１，ＹＥＳ）、ステップＳ２２に進み、抽象化の度合いが最も低い抽象化レベル１を選択する。
これは、プログラムが共通部品であった場合には、処理内容に依存せずに実行可能なように抽象化された記述になっているので、さらに抽象化する必要がないからである。
【００４４】
システム構造情報テーブル２２のプログラミング手法に関する情報が構造化プログラミングを指しているか否かを判別する（Ｓ２３）。
構造化プログラミングにより作成されたプログラムであった場合には（Ｓ２３，ＹＥＳ）、ステップＳ２４に進み、システム構造情報テーブル２２を参照してそのプログラムが最下位層のプログラムか否かを判別する。
【００４５】
最下位層のプログラムの場合には（Ｓ２４，ＹＥＳ）、ステップＳ２５に進み、抽象化レベル２を選択する。
また、ステップＳ２４において最下位層のプログラムではないと判別された場合には（Ｓ２４，ＮＯ）、ステップＳ２６に進み、抽象化レベル３を選択する。
【００４６】
上記の処理により、システム構造情報１２から構造化プログラムで、かつそのプログラムが最下位層のプログラムである判定された場合には、図６で説明したように、そのプログラムは抽象化されたプログラムの記述となっているので、抽象化の度合いが２番目の抽象化レベル２が選択される、また、上位階層から中間階層のプログラムであると判定された場合には、そのプログラムはより具体化された記述となっており更に抽象化する必要があるので抽象化レベル３が選択される。
【００４７】
ステップＳ２３で、構造化プログラミングではないと判別された場合には（Ｓ２３，ＮＯ）、ステップＳ２７に進み、そのプログラムが最下位階層のプログラムか否かを判別する。
【００４８】
また、下位階層のプログラムと判定された場合には（Ｓ２７，ＹＥＳ）、ステップＳ２８に進み、抽象化レベル３を選択する。また、最下位階層のプログラムではない場合には（Ｓ２７，ＮＯ）、ステップＳ２９に進み、抽象化レベル２を選択する。
【００４９】
上記の処理により、システム構造情報１２からオブジェクト指向プログラムで、かつ最下位階層のプログラムと判定された場合には、図６で説明したように、そのプログラムは具体的な記述となっているので、コードをさらに抽象化する必要があるので抽象化レベル３が選択される。また、上位階層のプログラムと判定された場合には、そのプログラムは抽象化されて記述されているので抽象化度合いが２番目の抽象化レベル２が選択される。
【００５０】
上述したように抽象化レベルを決定したなら、選択された抽象化レベルに基づいて検索元コードと検索対象プログラムを抽象化する。
図８は、同じプログラムを抽象化レベル１、２、３でそれぞれ抽象化した場合の例を示す図である。
【００５１】
先ず、図８（Ａ）の左側に示す抽象化前のプログラムを抽象化レベル１で抽象化する場合について説明する。
抽象化レベル１では、項目名／変数名はそのまま残し、命令の正規化（文の途中改行の除去や省略系の除去）のみを行う。抽象化レベル１は、項目名と変数名そのものと命令の並びを検索対象とする場合に適用する。
【００５２】
抽象化前のプログラムの３行目と４行目に２行に渡って記述されている”ＭＯＶＥ’Ｓ’”と”ＴＯ ＯＵＴ−ＮＥＮＧＯ”が、図８（Ａ）の右側に示すように１行にまとめられて”ＭＯＶＥ’Ｓ’ＴＯ ＯＵＴ−ＮＥＮＧＯ”という文に抽象化される。この場合、項目名と変数名は抽象化されない。
【００５３】
次に、図８（Ｂ）の左側のプログラム（図８（Ａ）と同じ）を抽象化レベル２で抽象化する場合について説明する。
抽象化レベル２では、抽象化レベル１の抽象化に加えて項目名及び変数名の抽象化を行う。この抽象化レベル２は、命令の実行条件を除いた命令の並びを検索対象にしたい場合に適用する。
【００５４】
抽象化前のプログラムの１行目に”ＩＦ ＷＫ−ＹＥＡＲ ＝ ２００４”と記述されていた項目名”ＷＫ−ＹＥＡＲ”が、図８（Ｂ）の右側に示すように”［ＹＥＡＲ］”という項目名に抽象化される。さらに、抽象化前のプログラムの２行目に”ＯＵＴ−ＵＲＵＴＯＡＩ”と記述されていた項目名が、”［ＵＲＵＴＯＡＩ］という項目名に抽象化される。以下、同様に４行目の項目名”ＯＵＴ−ＮＥＮＧＯ”が、”［ＮＥＮＧＯ］”に、５行目及び６行目の項目名”ＷＫ−ＴＵＫＩ”、”ＯＵＴ−ＴＵＫＩ”が、”［ＴＵＫＩ］という項目名に抽象化される。
【００５５】
このように項目名及び変数名を抽象化することで、検索対象プログラムにおいて、複写された検索元コードの項目名の一部が変更されている場合でも、検索元コードと類似したコード（複写された可能性の高いコード）を検出することができる。
【００５６】
次に、図８（Ｃ）の左側に示すプログラム（上記と同じプログラム）を抽象化レベル３で抽象化する場合について説明する。
抽象化レベル３では、抽象化レベル２の抽象化に加えて条件記述の抽象化を行う。この抽象化レベル３は、条件文の記述は異なるが内容が同じ命令を検索対象としたい場合に適用する。
【００５７】
図８（Ｃ）の抽象化前のプログラムの１行目の条件文”ＩＦ ＷＫ−ＹＥＡＲ ＝ ２００４”が、図８（Ｃ）の右側に示すように、”実行条件：［ＹＥＡＲ］＝２００４”に抽象化され、命令文、”ＭＯＶＥ１ ＴＯ ［ＵＲＵＴＯＡＩ］”、”ＭＯＶＥ’Ｓ’ ［ＮＥＮＧＯ］”の後に実行条件として記述される。なお、各命令文の項目名も同時に抽象化されている。
【００５８】
同様に、５行目の条件文”ＩＦ ＷＫ−ＴＵＫＩ ＝ ２”が、図８（Ｃ）の右側に示すように、”実行条件：［ＹＥＡＲ］＝２００４”に抽象化され、ＭＯＶＥ命令”ＭＯＶＥ［ＴＵＫＩ］ ＴＯ ［ＴＵＫＩ］”の後に実行条件として記述される。
【００５９】
このように条件文を個々の命令の実行条件として抽象化することで、検索対象プログラムにおいて、検索元コードと条件文の記述形式が異なっている場合や、実行条件のループの変更等が行われている場合でも、検索元コードと類似したコードを漏れなく検出することが可能となる。
【００６０】
なお、検索対象プログラムを抽象化する際に、そのプログラムから項目名、命令、命令の実行条件等を抽出する必要があるが、これらの抽出は公知のソースコードの検索方法を用いて実現できる。例えば、特許第３３７７８３６号公報には、ソースプログラムから項目名、命令文、命令の単純条件、複合条件を抽出する方法について記載されている。このような公知の方法を用いることで、検索対象プログラムの中の項目名、変数名、命令文、条件文等を抽出することができる。そして、抽出した項目名、命令文、実行条件等を上述した抽象化レベルに基づいて抽象化すれば良い。
【００６１】
次に、抽象化した検索対象プログラムをブロック化する処理について図９のフローチャートと、図１０及び図１１を参照して説明する。
以下に説明するブロック化処理では、構造化プログラムについては、図１０に示すように、手続き開始、セクション定義、あるいはラベル名定義に挟まれるソースコードを１つのブロックとして切り出す。そして、各ブロックの先頭アドレスと末尾アドレスとを指すブロックインデックステーブル３１を作成する。
【００６２】
図９において、抽象化ソースコードを全て参照したか否かを判別する（Ｓ３１）。参照していない抽象化ソースコードが存在する場合には（Ｓ３１，ＮＯ）、ステップＳ３２に進み、ブロックの先頭か否かを判別する。その抽象化ソースコードがブロックの先頭であれば（Ｓ３２，ＹＥＳ）、ステップＳ３３に進み、ブロック名とブロック先頭インデックスをレジスタ等に退避する。
【００６３】
他方、抽象化ソースコードがブロックの先頭でなければ（Ｓ３２，ＮＯ）、ステップＳ３４に進み、ブロックの末尾か否かを判別する。
抽象化ソースコードがブロックの末尾であれば（Ｓ３４，ＹＥＳ）、ステップＳ３５に進み、ブロック末尾インデックスをレジスタ等に退避させる。さらに、次のステップＳ３６でブロック名、先頭／末尾インデックスを出力する。これにより、例えば、
ブロック名、ブロック先頭及び末尾アドレスがブロックインデックステーブル３１に格納される。
【００６４】
ステップＳ３４でブロックの末尾ではないと判別された場合には（Ｓ３４，ＮＯ）、ステップＳ３７に進み、次行の抽象化ソースコードを読み込み、ステップＳ３１に戻る。また、ステップＳ３１で抽象化ソースコードを全て参照したと判別された場合には（Ｓ３１，ＹＥＳ）、ブロック化処理を終了する。
【００６５】
各ブロックは、例えば、手続き開始文のブロックは”プログラム名”を、セクション定義のブロックは”プログラム名：：セクション名”を、セクション名またはラベル名定義のブロックは”プログラム名：：ラベル名”をそれぞれのブロック名として命名する。
【００６６】
図１０（Ｂ）のブロックインデックステーブル３１は、図１０（Ａ）のプログラムから作成されたブロックのインデックを示す図である。例えば、行番号１００の手続き開始文”ＰＲＯＣＥＤＵＲＥＤＩＶＩＴＩＯＮ”と、行番号０１１０のセクション文”ＡＡＳＥＣＴＩＯＮ”とに挟まれるコードが１つのブロックＰＲＧ１として切り出される。そして、ブロックの先頭アドレスとして、手続き開始行の次の行番号「０１０１」が、ブロックの末尾のアドレスとして、セクションＡＡＳＥＣＴＩＯＮの１つ前の行番号「０１０９」が設定されている。
【００６７】
オブジェクト指向プログラムについては、図１１に示すように、メソッド開始／終了文”｛”、”｝”で挟まれるソースコードをブロックとして切り出す。そして、先頭／末尾の行数を取得してブロックインデックステーブル３２を作成する。ブロック名は、”クラス名：：メソッド名”を命名する。
【００６８】
図１１（Ｂ）のブロックインデックステーブル３２は、図１１（Ａ）のプログラムから作成されたブロックインデックを示すものであり、ブロック先頭アドレスとしてメソッド開始行の次の行番号「０１０１」が、ブロック末尾アドレスとしてメソッド終了行の前の行番号「０１０９」が設定されている。
【００６９】
次に、以上のようにしてブロック化された検索対象プログラムと照合元のコードをブロック単位で比較する処理を、図１２のフローチャートを参照して説明する。
作成されたブロックインデックスファイル３１または３２を全て参照したか否かを判別する（図１２，Ｓ４１）。
【００７０】
ブロックインデックスの参照が終了していない場合には（Ｓ４１，ＮＯ）、ステップＳ４２に進み、ブロックインデックスに基づいて抽象化ソースコード（抽象化された検索対象プログラムのソースコード）からブロックを取得する。
【００７１】
次に、抽象化ソースコードから取得したブロックと抽象化検索コード（検索元コードを抽象化したコード）の比較を行う（Ｓ４３）。
そして、その比較結果から両者の行単位とブロック単位の類似比率を算出し、それらを出力する（Ｓ４４）
ここで、図１２（Ａ）のステップＳ４３のブロック単位でのコードの比較処理を、図１２（Ｂ）のフローチャートを参照して説明する。
【００７２】
先ず、取得したブロックまたは抽象化検索コードのどちらかを全て参照したかどうかを判別する（図１２（Ｂ）、Ｓ５１）。
未参照のブロックまたは抽象化検索コードが存在する場合には（Ｓ５１，ＮＯ）、ステップＳ５２に進み、ブロックの参照行と抽象化検索コードの参照行が一致するか否かを判別する。
【００７３】
コードが不一致の場合には（Ｓ５２，ＮＯ）、ステップＳ５３に進み、ブロック参照行と抽象化検索コード参照行を１行ずつカウントアップし、一致行が検索されるまで総当たりで比較する（Ｓ５３）。
【００７４】
不一致行を語単位に分解し語単位で比較する（Ｓ５４）。そして、類似度が０か、あるいはブロック参照行と抽象化検索コード参照行との間に対応行が存在しないか否かを判別する（Ｓ５５）。
【００７５】
類似する語が存在するか、あるいは対応行が存在する場合には（Ｓ５５，ＮＯ）、ステップＳ５６に進み、不一致行同士を関連づけ、ステップＳ５１に戻る。また、類似する語が存在しない、あるいは対応行が存在しない場合には（Ｓ５５，ＹＥＳ）、ステップＳ５１に戻る。
【００７６】
ステップＳ５２において、ブロック参照行と抽象化検索コード参照行が一致した場合には（Ｓ５２，ＹＥＳ）、ステップＳ５７に進み一致行を関連づける。
ここで、図１３を参照してブロック単位でのコードの比較について説明する。
【００７７】
抽象化した検索対象プログラムから取得したブロック（以下単にブロックという）の先頭行と抽象化検索コードの先頭行のコードを比較すると、両者は”ＡＡ”で一致する。次に、２行目のコードどうしを比較すると、両者は不一致であるので（図１２，（１））、抽象化検索コードの３行目とを比較する（図１２，（２））。この行も不一致であるので、次に、抽象化検索コードの２行目とブロックの３行目を比較する（図１２，（３））。この行も不一致であるので、次に、ブロックの３行目と抽象化検索コードの３行目を比較する（図１２，（４））。この行も不一致であるので、次に、ブロックの２行目と抽象化検索コードの４行目を比較する（図１２，（５））。この行も不一致であるので、次に、抽象化検索コードの２行目とブロックの４行目を比較する（図１２，（６））。この行も不一致であるので、次に、ブロックの３行目と抽象化検索コードの４行目を比較する（図１２，（７））。この行も不一致であるので、次に、抽象化検索コードの３行目とブロックの４行目を比較する（図１２，（８））。この行は一致するので、ブロックの４行目が抽象化検索コードの３行目と一致することが検出され、ブロックの２行目、３行目は対応行がないことが検出される。
【００７８】
次に、図１２（Ａ）のステップＳ４４の類似比率の算出処理の詳細を、図１４のフローチャートを参照して説明する。
先ず、抽象化した検索対象プログラムの全行と抽象化検索コードとの比較が完了したか否かを判別する（図１４（Ａ），Ｓ６１）。
【００７９】
比較が完了していない場合には（Ｓ６１，ＮＯ）、ステップＳ６２に進み、行単位で類似比率を決定する。
ここで、ステップＳ６２の行単位類似比率決定処理を図１４（Ｂ）のフローチャートを参照して説明する。
【００８０】
最初に、検索対象プログラムのブロックの特定の行と抽象化検索コードの行の全ての語が一致したか否かを判別する（図１４（Ａ）、Ｓ７１）。
不一致の語が存在して完全一致ではない場合には（Ｓ７１，ＮＯ）、ステップＳ７２に進み、その検索対象プログラムが抽象化レベル１の抽象化が行われたか否かを判別する。
【００８１】
抽象化レベル１の抽象化が行われている場合には（Ｓ７２，ＹＥＳ）、ステップＳ７３に進み、その行に存在する項目数に予め決められている係数を乗算し、その行の語数を加算し、さらに項目数を減算して得られる値を分母の値（母数）として設定する。
【００８２】
他方、抽象化レベル１でなければ（Ｓ７２，ＮＯ）、ステップＳ７４に進み、１行の語数を分母の値として設定する。
ステップＳ７３またはＳ７４の次は、ステップＳ７５に進み、その行の全ての語の比較が完了したか否かを判別する。
【００８３】
その行の全ての語の比較が終了していない場合には（Ｓ７５，ＮＯ）、ステップＳ７６に進み、次の語が抽象化検索コードの該当する語と一致するか否かを判別する。
両者が一致する場合には（Ｓ７６，ＹＥＳ）、抽象化レベル１で、かつ比較した語が項目名（変数名）か否かを判別する（Ｓ７７）。
【００８４】
抽象化レベル１で、かつ比較した語が項目名であった場合には（Ｓ７７，ＹＥＳ）、ステップＳ７８に進み、一致数として係数（分母を計算する際に項目数に乗算した値）を加算する。
【００８５】
上記の処理により、抽象化レベル１の抽象化を行った場合に、項目名が一致したときの一致数が係数の値分大きくなる。抽象化レベル１の検索では項目名が一致することが重要であるので、後に行う類似比率の算出処理において項目名が一致した場合の類似比率が高くなるようにしている。
【００８６】
ステップＳ７７において、抽象化レベル１ではなく、あるいは一致した語が項目名ではない場合には（Ｓ７７，ＮＯ）、ステップＳ７９に進み、一致数として「１」をカウントアップする。
【００８７】
また、ステップＳ７５において、１行の全ての語の比較が終了した場合には（Ｓ７５，ＹＥＳ）、ステップＳ８０に進み、それ以前の処理で求めた母数と一致数とから１行の類似比率を算出する。
【００８８】
上記のようにして各行の類似比率が算出され、ステップＳ６１において、１つのブロックの全ての類似比率の算出が完了したと判定された場合には（Ｓ６１，ＹＥＳ）、ステップＳ６３に進み、行単位の類似比率を全て加算した値と行数とからブロック単位の類似比率を算出する。
【００８９】
上記の処理により、抽象化検索コードと比較したブロックの各行の類似比率と全体の類似比率を求めることができる。
図１５は、検索コード（検索元コード）と検索対象プログラムの１つのブロックを、抽象化レベル１、抽象化レベル２及び抽象化レベル３でそれぞれ抽象化した場合の類似比率の算出結果を示す図である。
【００９０】
図１５に示す抽象化前の検索コードと検索対象ブロックを、抽象化レベル１で抽象化すると、図１５に示すように、命令が正規化表現に変更される。
この場合の項目名はそのままであるので、検索コードの１行目”ＩＦ ＷＫ−ＹＥＡＲ ＝ ２００４”と、検索対象ブロックの１行目”ＩＦＷＫ−ＮＥＮ ＝ ２００４”は、項目名が”ＷＫ−ＹＥＡＲ”と”ＷＫ−ＮＥＮ”で異なるので、前述した類似比率算出処理により類似比率は６６．６％となる。
【００９１】
同様に、検索コードの３行目の項目名”ＯＵＴ−ＧＯ"と、検索対象ブロックの３行目の項目名”ＯＵＴ−ＮＥＮＧＯ”とが異なるので、類似比率は６６，６％となる。
この検索対象ブロック全体の類似比率は、（６６，６＋６６．６＋１００＋１００）÷１１で３０．３％となる。
【００９２】
同じ検索コードと検索対象ブロックを抽象化レベル２で抽象化すると、検索コードの１行目の命令と、検索対象ブロックの１行目の命令が共に”ＩＦ［ＹＥＡＲ］ ＝ ２００４”となり、両者は一致するので類似比率は１００％となる。３行目も同様に類似比率が１００％となる。従って、ブロック全体の類似比率は３６．３％となる。
【００９３】
また、同じ検索コードと検索対象ブロックを抽象化レベル３で抽象化すると、検索コードの条件文が抽象化され、さらに項目名が抽象化されて、”ＭＯＶＥ１ ＴＯ ［ＵＲＵＴＯＡＩ］:［ＹＥＡＲ］＝２００４”が１行目に記述される。また、２行目は、”ＭＯＶＥ ’Ｓ’ ＴＯ ［ＮＥＮＧＯ］:［ＹＥＡＲ］＝２００４”となる。
【００９４】
一方、検索対象ブロックは、２行目が”ＭＯＶＥ ’Ｓ’ ＴＯ ［ＮＥＮＧＯ］:［ＹＥＡＲ］＝２００４”となるので、検索コードの２行目と検索対象ブロックの２行目のコードが全て一致し、その行の類似比率は１００％となる。
【００９５】
この場合、条件文が無くなることにより検索コードの行数は５行となり、行単位の類似比率を加算した値は２００％となるので全体の類似比率は４０％となる。
ここで、図１６を参照して、抽象化レベル１の場合の類似比率算出方法を詳しく説明する。
【００９６】
抽象化レベル１で、図１６に示すような検索ロジック（検索元コード）と対象ロジック（検索対象プログラムから取得したブロック）抽象化したコードを比較すると、対象ロジックの１行目は項目名不一致、２行目は完全一致、３行目は完全不一致、４行目及び５行目は完全一致となる。
【００９７】
この場合、項目の係数が「３」であるとすると、１行目は、語数が４，項目数が２（この場合、”ＹＥＡＲ”と”２００４”が項目名となる）であるので母数が「２×３＋４−２＝８」となり、一致する項目数が１であるので一致数が「５」となり、１行目の類似比率は６２，５％となる。
【００９８】
２行目は、検索ロジックと対象ロジックの命令と項目名が全て一致するので類似比率が１００％、３行目は完全不一致であるので類似比率は０％になる。さらに、４行目、５行目も完全に一致するので、類似比率は１００％となる。
【００９９】
従って、対象ロジックのブロック全体の類似比率は、（６２．５％＋１００％＋０％＋１００％＋１００％）÷５＝７２．５％となる。
また、同じ対象ロジックを抽象化レベル２で抽象化した場合には、図１６に示すように、検索ロジックの１行目と対象ロジックの１行目の項目名”ＹＥＡＲ”が不一致となるので、１行目は語数が４，一致数が３となり、類似比率は７５％になる。２行目以降の類似比率は抽象化レベル１と同じである。
【０１００】
従って、この場合のブロック全体の類似比率は、（７５％＋１００％＋０％＋１００％＋１００％）÷５＝７５．０％となる。
上述した実施の形態によれば、検索元コードの修正内容を示す修正管理情報、あるいは修正が加えられたプログラムのシステム構造及び修正箇所のシステム構造上の位置を示すシステム構造情報１２に基づいて抽象化レベルを決め、その抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化して両者を比較し、その類似比率を算出することで、検索対象プログラムに存在する検索元コードを複写したコードを漏れなく検索することができる。また、複写されたコードを自動的に検索することができるので、人間が検索文字列を入力して検索する方法のように個人の技量による検索精度のバラツキが生じない。さらに、システム構造情報１２に基づいて抽象化レベルを決めることで、プログラムの構造に適合した抽象化レベルを設定することができる。これにより実態に沿った的確な検索を実現できる。
【０１０１】
また、類似比率を算出することにより検索元コードと類似したコードを抽出できるので、障害情報に基づいて検索を行うことで同じような障害が発生する可能を持ったコードを予め検索して予防保守を行うことも可能となる。
【０１０２】
次に、実施の形態のコード検索装置として使用される情報処理装置のハードウェア構成の一例を図１７を参照して説明する。
外部記憶装置１０２には本実施の形態の類似検索ツール等のプログラム及び修正情報管理テーブル２１，システム構造情報テーブル２２等が格納される。
【０１０３】
ＣＰＵ１０１は、外部記憶装置１０２に格納されているプログラムを読み出し、上述した検索対象プログラム及び検索元コードの抽象化処理、類似比率算出処理等を実行する。
ＲＡＭ１０３は、演算に使用される各種のレジスタ、あるいはデータを一時的に記憶するための領域として使用される。
【０１０４】
記録媒体読み取り装置装置１０４は、ＣＤＲＯＭ、ＤＶＤ、フレキシブルディスク、ＩＣカード等の可搬記録媒体１０５の読み取り、あるいは書き込みを行う。この可搬記録媒体１０５に実施の形態のコード検索プログラムを記録しておき、そのプログラムを外部記憶装置１０２にロードしても良い。
【０１０５】
入力装置１０６は、キーボード等のデータを入力する装置である。通信インタフェース１０７は、ＬＡＮ、インターネット等のネットワークに接続するための装置であり、ネットワークを介して情報提供者のサーバ１０８等からデータ、プログラムを等をダウンロードすることができる。なお、ＣＰＵ１０１、外部記憶装置１０２、ＲＡＭ１０３等はバス１０９により接続されている。
【０１０６】
本発明は、上述した実施の形態に限定されず、例えば、以下のように構成しても良い。
（１）抽象化レベルは３種類に限らず、対象となるプログラムに応じて２種類でも良いし、４種類以上でも良い。また、抽象化する際の基準は、項目名／変数名、命令の条件以外、実行条件に限らず他の要素に基づいて抽象化しても良い。
（２）修正管理情報１１、システム構造情報１２は、予めテーブルに記憶しておく方法に限らず、類似検索ツールを実行する際にユーザがそれらの情報を入力するようにしても良い。
（３）類似度の出力は、類似比率をパーセントで表示する方法に限らず、文字や図形により類似度の差が分かるように表示、あるいは他の手段で出力しても良い。あるいは、類似度を表示せずに、類似度が所定値以上のコードを検索結果として表示しても良い。
【０１０７】
（付記１）  検索元コードと関連性のあるコードを検索対象プログラムから検索するプログラムであって、
検索元コードに対する修正内容と検索元コードを含むプログラムのシステム構造を示すシステム構造情報の少なくとも一方に基づいて検索条件の抽象化レベルを決定するステップと、
決定された抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化して記憶手段に格納するステップと、
前記記憶手段に格納された抽象化された検索対象プログラムと検索元コードとを比較してコードの類似度を算出するステップと、
検索対象プログラムの中の類似度が高いコードを出力するステップとからなるコンピュータが実行可能なコード検索プログラム。
【０１０８】
（付記２）  抽象化レベルを決定する際に、検索元コードに対する修正内容が、項目名または変数名の変更、命令の条件以外の変更、命令の条件の変更の何れであるかを前記記憶手段に記憶されている情報または入力された情報から判定し、判定結果に基づいて抽象化レベルを決定する付記１記載のコード検索プログラム。
【０１０９】
（付記３）  抽象化レベルを決定する際に、検索元コードの修正内容を示す修正管理情報と検索元コードを含むプログラムのシステム構造を示すシステム構造情報とに基づいて抽象化レベルを決定する付記１または２記載のコード検索プログラム。
【０１１０】
（付記４）  抽象化レベルを決定する際に、検索元コードを含むプログラムが作成されたプログラミング手法を示す情報と、検索元コードのシステム構造における階層上の位置を示す情報とに基づいて抽象化レベルを決定する付記１，２または３記載のコード検索プログラム。
【０１１１】
（付記５）  検索対象のプログラムから検索元コードと関連性のあるコードを検索するコード検索装置であって、
検索元コードに対する修正内容と検索元コードを含むプログラムのシステム構造を示すシステム構造情報の少なくとも一方に基づいて検索条件の抽象化レベルを決定する抽象化レベル決定手段と、
前記抽象化レベル決定手段により決定された抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化する抽象化手段と、
前記抽象化手段により抽象化された検索対象プログラムと検索元コードとを比較してコードの類似度を算出する類似度算出手段と、
前記類似度算出手段により算出された類似度が高いコードを出力する出力手段とを備えるコード検索装置。
【０１１２】
（付記６）  前記抽象レベル決定手段は、検索元コードの修正内容が、少なくとも項目名または変数名の変更、命令の条件以外の変更、命令の条件の変更の何れであるかを判定し、判定結果に基づいて抽象化レベルを決定する付記５記載のコード検索装置。
【０１１３】
（付記７）  前記抽象化レベル決定手段は、検索元コードの修正内容を示す修正管理情報と検索元コードを含むプログラムのシステム構造を示すシステム構造情報とに基づいて抽象化レベルを決定する付記５または６記載のコード検索装置。
【０１１４】
（付記８）  前記抽象化レベル決定手段は、少なくとも検索元コードを含むプログラムが作成されたプログラミング手法と、検索元コードのシステム構造における階層上の位置を示す情報に基づいて抽象化レベルを決定する付記５，６または７記載のコード検索装置。
【０１１５】
（付記９）  前記抽象化手段は、検索対象プログラムをブロック単位に分割する分割手段を有し、
前記類似度算出手段は、検索元コードを含むブロックと検索対象プログラムの各ブロックのそれぞれの行を比較して各行の類似度とブロック単位の類似度を算出する付記５，６，７または８記載のコード検索装置。
【０１１６】
（付記１０）  前記抽象化レベル決定手段は、検索元コードがプログラムの中で共通に使用される共通モジュールか否かを判定し、検索元コードが共通モジュールであった場合には、抽象化レベルを低く設定する付記５〜９のいずれか１つに記載のコード検索装置。
【０１１７】
（付記１１）  前記抽象化レベル決定手段は、検索元コードが存在するプログラムが構造化プログラムか否か、検索元コードの存在する階層が上位階層か下位階層かを判定し、検索元コードが下位階層に存在する場合には検索条件の抽象化レベルを低く設定し、上位階層に存在する場合には、抽象化レベルをそれより高く設定する付記５〜１０の何れか１つに記載のコード検索装置。
【０１１８】
（付記１２）  前記抽象化レベル決定手段は、検索元コードが存在するプログラムがオブジェクト指向プログラムか否か、検索元コードが存在する階層が上位階層か、中間階層または下位階層かを判定し、上位階層に存在する場合には抽象化レベルを低く設定し、中間階層または下位階層に存在する場合には抽象化レベルをそれより高く設定する付記５〜１１の何れか１つに記載のコード検索装置。
【０１１９】
（付記１３）  前記類似度算出手段は、類似度を算出するための係数を抽象化レベルに応じて変更する付記５〜１２の何れか１つに記載のコード検索装置。
（付記１４）  検索元コードと関連性のあるコードを検索対象プログラムから検索するプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
検索元コードに対する修正内容と検索元コードを含むプログラムのシステム構造を示すシステム構造情報の少なくとも一方に基づいて検索条件の抽象化レベルを決定するステップと、
決定された抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化して記憶手段に格納するステップと、
前記記憶手段に格納された抽象化された検索対象プログラムと検索元コードとを比較してコードの類似度を算出するステップと、
検索対象プログラムの中の類似度が高いコードを出力するステップとからなるコード検索プログラムを記録した記録媒体。
【０１２０】
（付記１５）  抽象化レベルを決定する際に、検索元コードに対する修正内容が、項目名または変数名の変更、命令の条件以外の変更、命令の条件の変更の何れであるかを前記記憶手段に記憶されている情報または入力された情報から判定し、判定結果に基づいて抽象化レベルを決定する付記１４記載のコード検索プログラムを記録した記録媒体。
【０１２１】
（付記１６）  抽象化レベルを決定する際に、検索元コードの修正内容を示す修正管理情報と検索元コードを含むプログラムのシステム構造を示すシステム構造情報とに基づいて抽象化レベルを決定する付記１４または１５記載のコード検索プログラムを記録した記録媒体。
【０１２２】
（付記１７）  抽象レベルを決定する際に、少なくとも検索元コードを含むプログラムが作成されたプログラミング手法を示す情報と、検索元コードのシステム構造における階層上の位置を示す情報とに基づいて抽象化レベルを決定する付記１４，１５または１６記載のコード検索プログラムを記録した記録媒体。
【０１２３】
（付記１８）  検索対象プログラムをブロック単位に分割するステップを有し、
類似度を算出する際に、検索元コードを含むブロックと検索対象プログラムの各ブロックのそれぞれの行を比較して各行の類似度とブロック単位の類似度を算出する付記１４〜１７の何れか１つに記載の記録媒体。
【０１２４】
（付記１９）  抽象化レベルを決定する際に、検索元コードがプログラムの中で共通に使用される共通モジュールか否かを判定し、検索元コードが共通モジュールであった場合には、抽象化レベルを低く設定する付記１４〜１８の何れか１つに記載の記録媒体。
【０１２５】
（付記２０）  抽象化レベルを決定する際に、検索元コードが存在するプログラムが構造化プログラムか否か、検索元コードの存在する階層が上位階層か下位階層かを判定し、検索元コードが下位階層に存在する場合には検索条件の抽象化レベルを低く設定し、上位階層に存在する場合には抽象化レベルをそれより高く設定する付記１４〜１９の何れか１つに記載の記録媒体。
【０１２６】
（付記２１）  類似度を算出するための係数を抽象化レベルに応じて変更する付記１４〜２０の何れか１つに記載の記録媒体。
【図面の簡単な説明】
【０１２７】
【図１】発明の原理説明図である。
【図２】実施の形態の検索ツールの構成を示す図である。
【図３】抽象化レベル決定処理のフローチャートである。
【図４】修正管理情報テーブルを示す図である。
【図５】システム構造情報テーブルを示す図である。
【図６】構造化プログラムとオブジェクト指向プログラムのシステム構造を示す図である。
【図７】システム構造情報に基づく抽象化レベル選択処理のフローチャートである。
【図８】抽象化の例を示す図である。
【図９】ブロック化処理のフローチャートである。
【図１０】構造化プログラムのブロック化の説明図である。
【図１１】オブジェクト指向プログラムのブロック化の説明図である。
【図１２】ブロック単位でのコード比較処理のフローチャートである。
【図１３】ブロック単位でのコードの比較の説明図である。
【図１４】類似比率算出処理のフローチャートである。
【図１５】抽象化レベル毎の類似比率を示す図である。
【図１６】類似比率算出の例を示す図である。
【図１７】ハードウェア構成を示す図である。
【符号の説明】
【０１２８】
１        抽象化レベル決定手段
２        抽象化手段
３        類似度算出手段
４        出力手段
１１      修正管理情報
１２      システム構造情報
１３      資産
２１      修正管理情報テーブル
２２      システム構造情報テーブル
【図１】
2005301859.tif 000003
【図２】
2005301859.tif 000004
【図３】
2005301859.tif 000005
【図４】
2005301859.tif 000006
【図５】
2005301859.tif 000007
【図６】
2005301859.tif 000008
【図７】
2005301859.tif 000009
【図８】
2005301859.tif 000010
【図９】
2005301859.tif 000011
【図１０】
2005301859.tif 000012
【図１１】
2005301859.tif 000013
【図１２】
2005301859.tif 000014
【図１３】
2005301859.tif 000015
【図１４】
2005301859.tif 000016
【図１５】
2005301859.tif 000017
【図１６】
2005301859.tif 000018
【図１７】
2005301859.tif 000019