JP2005301859A - コード検索プログラム及びコード検索装置 - Google Patents
コード検索プログラム及びコード検索装置 Download PDFInfo
- Publication number
- JP2005301859A JP2005301859A JP2004119876A JP2004119876A JP2005301859A JP 2005301859 A JP2005301859 A JP 2005301859A JP 2004119876 A JP2004119876 A JP 2004119876A JP 2004119876 A JP2004119876 A JP 2004119876A JP 2005301859 A JP2005301859 A JP 2005301859A
- Authority
- JP
- Japan
- Prior art keywords
- search
- code
- program
- source code
- abstraction level
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
- G06F8/751—Code clone detection
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
【課題】プログラムの中から検索元コードと関連性のあるコードを自動的に検出する。
【解決手段】 類似検索ツールは、プログラムの修正内容を管理するための修正管理情報11とプログラムの構造を示すシステム構造情報12とに基づいて検索条件の抽象化レベルを決定し、検索対象プログラムと検索元コードを抽象化する。抽象化した検索対象プログラムと検索元コードを比較して行単位の類似比率を算出する。そして、算出した類似比率と該当するコードを検索結果として出力する。
【選択図】図2
【解決手段】 類似検索ツールは、プログラムの修正内容を管理するための修正管理情報11とプログラムの構造を示すシステム構造情報12とに基づいて検索条件の抽象化レベルを決定し、検索対象プログラムと検索元コードを抽象化する。抽象化した検索対象プログラムと検索元コードを比較して行単位の類似比率を算出する。そして、算出した類似比率と該当するコードを検索結果として出力する。
【選択図】図2
Description
本発明は、検索元コードと関連するコードを対象となるプログラムから検索するコード検索プログラム及びコード検索装置に関する。
プログラム開発においては、作成済みのソースコードを複写またはその一部を変更または追加して新たなプログラムを作成することが行われている。
そのようなプログラム開発において、ソースコードのある部分に問題が発生したり、バグを修正する等の対策を行った場合には、その影響が複写部分にも及ぶので複写されたコード(これをクローンコードという)を全て修正する必要がある。
そのようなプログラム開発において、ソースコードのある部分に問題が発生したり、バグを修正する等の対策を行った場合には、その影響が複写部分にも及ぶので複写されたコード(これをクローンコードという)を全て修正する必要がある。
通常、上記のような理由でソースコードが修正された場合には、人手による文字列検索等の方法で該当するクローンコードを探して修正が加えられる。
しかしながら、検索対象のプログラムにおいて、元のソースコードに対して変更が加えられている場合は、そのコードが複写したものかどうかの判別がつきにくいために複写したコードを見落とす可能性が高い。また、複数の開発者によりプログラム開発が行われていて、他の開発者が作成したプログラムを利用して別の開発者がプログラムの開発を行っている場合などには、ソースコードが複写されていること自体気がつかないので複写されたコードがそのまま放置される可能性がある。
しかしながら、検索対象のプログラムにおいて、元のソースコードに対して変更が加えられている場合は、そのコードが複写したものかどうかの判別がつきにくいために複写したコードを見落とす可能性が高い。また、複数の開発者によりプログラム開発が行われていて、他の開発者が作成したプログラムを利用して別の開発者がプログラムの開発を行っている場合などには、ソースコードが複写されていること自体気がつかないので複写されたコードがそのまま放置される可能性がある。
ソースプログラムを解析する方法として、例えば、特許文献1に、ソースプログラム中の項目名、条件等を自動抽出する方法について記載されている。
また、特許文献2には、グラフ手法を使用することによって、仕様情報などの抽象化された情報を抽出し、プログラム解析を自動的に行う技術について記載されている。
特許第3377836号
特開平7−56731号
また、特許文献2には、グラフ手法を使用することによって、仕様情報などの抽象化された情報を抽出し、プログラム解析を自動的に行う技術について記載されている。
特許文献1の発明は、ソースプログラムの項目名、条件式を自動的に抽出するものであり、特定のプログラムの中から複写されたソースコードを検出するものではない。
本発明の課題は、プログラムの中から検索元コードと関連性のあるコードを自動的に検出できるようにすることである。
本発明の課題は、プログラムの中から検索元コードと関連性のあるコードを自動的に検出できるようにすることである。
本発明のコード検索プログラムは、検索対象プログラムから検索元コードと関連性のあるコードを検索するコンピュータが実行可能なプログラムであって、検索元コードに対する修正内容と検索元コードを含むプログラムのシステム構造を示すシステム構造情報との少なくとも一方に基づいて検索条件の抽象化レベルを決定するステップと、決定された抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化して記憶手段に格納するステップと、前記記憶手段に格納された抽象化された検索対象プログラムと検索元コードとを比較してコードの類似度を算出するステップと、前記検索対象プログラムの中の類似度が高いコードを出力するステップとからなる。
この発明によれば、修正内容またはシステム構造情報に基づいて抽象化した検索対象プログラムと検索元コードを比較し、両者の類似度を算出することで、検索対象プログラム中に存在する検索元コードと類似したコードを検索することができる。これにより、例えば、検索対象プログラムにおいてコードの一部が変更されている場合でも、それらのコードを漏れなく検出することができる。また、類似するコードが自動的に検索されるので、人手により検索文字列を入力して検索する方法のように検索者の技量の違いによる検索精度のバラツキが生じない。
本発明の他の態様は、上記の発明において、抽象化レベルを決定するステップは、検索元コードに対する修正内容が、項目名または変数名の変更、命令の条件以外の変更、命令の条件の変更の何れであるかを前記記憶手段に記憶されている情報または入力された情報から判定し、判定結果に基づいて抽象化レベルを決定する。
このように構成することで、修正内容に応じた抽象化レベルで検索条件を自動設定できるので、修正内容の実態に適合した適切な検索を実行できる。これにより目的とするクローンコードの検出精度を高め、かつ関連性の少ないコードが検出される可能性を少なくできる。
本発明の他の態様は、上記の発明において、抽象化レベルを決定するステップは、検索元コードの修正内容を示す修正管理情報と検索元コードを含むプログラムのシステム構造を示すシステム構造情報とに基づいて抽象化レベルを決定する。
このように構成することで、修正内容とシステム構造情報に基づいて抽象化レベルを決定することで、より適切な抽象化レベルを決めることができるので実態に沿った的確な検索を行うことができる。
本発明の他の態様は、上記の発明において、抽象レベルを決定するステップは、検索元コードを含むプログラムが作成されたプログラミング手法を示す情報と、検索元コードのシステム構造における階層上の位置を示す情報とに基づいて抽象化レベルを決定する。
このように構成することで、プログラムがどのようなシステム構造の特徴を持っているか、例えば、上階層ほどプログラムの抽象度が高いシステム構造、あるいは上位階層ほど抽象度が低いシステム構造を持っているか、さらに、検索元コードがどの階層に存在するかにより、検索元コードの抽象化の度合いを判断できる。従って、検索元コードの抽象化の度合いに適合させた抽象化レベルを設定できるので検索精度をより高めることができる。
図1は、本発明のコード検索装置の原理説明図である。
本発明のコード検索装置は、検索対象のプログラムから検索元コードと関連性のあるコードを検索するコード検索装置であって、検索元コードに対する修正内容と検索元コードを含むプログラムのシステム構造を示すシステム構造情報の少なくとも一方に基づいて検索条件の抽象化レベルを決定する抽象化レベル決定手段1と、前記抽象化レベル決定手段1により決定された抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化する抽象化手段2と、前記抽象化手段2により抽象化された検索対象プログラムと検索元コードとを比較してコードの類似度を算出する類似度算出手段3と、前記類似度算出手段3により算出された類似度が高いコードを出力する出力手段4とを備える。
本発明のコード検索装置は、検索対象のプログラムから検索元コードと関連性のあるコードを検索するコード検索装置であって、検索元コードに対する修正内容と検索元コードを含むプログラムのシステム構造を示すシステム構造情報の少なくとも一方に基づいて検索条件の抽象化レベルを決定する抽象化レベル決定手段1と、前記抽象化レベル決定手段1により決定された抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化する抽象化手段2と、前記抽象化手段2により抽象化された検索対象プログラムと検索元コードとを比較してコードの類似度を算出する類似度算出手段3と、前記類似度算出手段3により算出された類似度が高いコードを出力する出力手段4とを備える。
この発明によれば、検索元コードに対する修正内容またはシステム構造情報に基づいて検索対象プログラムと検索元コードを抽象化し、両者の類似度を算出することで、検索対象プログラム中に存在する検索元コードと関連性の高いコードを検索できる。これにより、検索対象プログラムにおいてコードの一部が変更されている場合でも、それらのコードを漏れなく検出することができる。また、類似するコードが自動的に検索されるので、人手により検索文字列を入力する方法のように検索者の技量による検索精度のバラツキが生じない。
出力手段4は、例えば、検索対象プログラムの該当するコードとそのコードの検索元コードとの類似度を対応づけて表示する。
本発明のコード検索装置の他の態様は、前記抽象化手段は、検索対象プログラムをブロック単位に分割する分割手段を有し、前記類似度算出手段は、検索元コードを含むブロックと検索対象プログラムの各ブロックのそれぞれの行を比較し、不一致の行を語単位に比較して各行の類似度とブロック単位の類似度を算出する。
本発明のコード検索装置の他の態様は、前記抽象化手段は、検索対象プログラムをブロック単位に分割する分割手段を有し、前記類似度算出手段は、検索元コードを含むブロックと検索対象プログラムの各ブロックのそれぞれの行を比較し、不一致の行を語単位に比較して各行の類似度とブロック単位の類似度を算出する。
このように構成することで、行単位の類似度とブロック単位の類似度から、ユーザは、検出されたコードが検索元コードを複写したものか否かを容易に判断できる。
本発明のコード検索装置の他の態様は、前記抽象化レベル決定手段は、検索元コードがプログラムの中で共通に使用される共通モジュールか否かを判定し、検索元コードが共通モジュールであった場合には、抽象化レベルを低く設定する。
本発明のコード検索装置の他の態様は、前記抽象化レベル決定手段は、検索元コードがプログラムの中で共通に使用される共通モジュールか否かを判定し、検索元コードが共通モジュールであった場合には、抽象化レベルを低く設定する。
このように構成することで、検索元コードがプログラム中で共通に使用される共通モジュールであった場合には、その検索コードは抽象化されて記述されているものと判断し、検索元コードの抽象化の度合いに適合したレベルに抽象化できる。
本発明のコード検索装置の他の態様は、前記抽象化レベル決定手段は、検索元コードが作成されたプログラムが構造化プログラムか否か、検索元コードの存在する階層が少なくとも上位階層か下位階層かを判定し、検索元コードが上位階層に存在する場合には、検索条件の抽象化レベルを高く設定する。
このように構成することで、検索元コードのプログラムが構造化プログラムであった場合には、そのプログラムのシステム構造から検索元コードが存在する階層の位置から検索元コードに適した抽象化レベルを設定できる。
本発明によれば、修正内容またはプログラムのシステム構造に基づいて抽象化した検索対象プログラムと検索元コードを比較し、両者の類似度を算出することで検索対象プログラム中に存在する検索元コードと関連性のあるコードを検索することができる。
以下、本発明の実施の形態を図面を参照しながら説明する。図2は、実施の形態の類似検索ツールの構成を示す図である。
類似検索ツールは、コード検索装置(パーソナルコンピュータ、専用の装置等)上で実行されるプログラムであり、検索元コードを複写したクローンコードを検索対象プログラムから検索してそれらの類似度を表示する機能を有する。
類似検索ツールは、コード検索装置(パーソナルコンピュータ、専用の装置等)上で実行されるプログラムであり、検索元コードを複写したクローンコードを検索対象プログラムから検索してそれらの類似度を表示する機能を有する。
類似検索ツールは、プログラムの修正内容を管理するための修正管理情報11とプログラムの構造を示すシステム構造情報12とに基づいて検索条件の抽象化レベルを決定する。なお、参照元のプログラム(修正が施されたプログラム)等が格納された実資産13から修正されたコードがシステム構造上のどの階層に存在するかを調べ、その情報(システム構造情報12に対応する情報)に基づいて抽象化レベルを決めても良い。
検索条件の抽象化レベルとは、検索元コード並びに検索対象プログラムに記述されている項目名、命令、命令の実行条件等をどの程度抽象化するかを決める情報である。
抽象化レベルが決定されたなら、抽象化した検索対象プログラムと検索元コード(修正が加えられる前の状態のコード)を比較して類似比率(類似度)を算出する。さらに、抽象化レベルに応じた係数を一致数に乗算して類似比率を自動修正する。そして、算出した類似比率と共に該当するコードを検索結果として出力する。
抽象化レベルが決定されたなら、抽象化した検索対象プログラムと検索元コード(修正が加えられる前の状態のコード)を比較して類似比率(類似度)を算出する。さらに、抽象化レベルに応じた係数を一致数に乗算して類似比率を自動修正する。そして、算出した類似比率と共に該当するコードを検索結果として出力する。
次に、抽象化レベル決定処理を図3のフローチャートを参照して説明する。以下の処理は、類似検索ツールを実行するコンピュータのCPUにより実行される。
最初に、修正管理情報11が存在するか否かを判別する(図3,S11)。修正管理情報11が存在する場合には、ステップS12に進み、修正管理情報11に基づいて抽象化レベルを決定する。
最初に、修正管理情報11が存在するか否かを判別する(図3,S11)。修正管理情報11が存在する場合には、ステップS12に進み、修正管理情報11に基づいて抽象化レベルを決定する。
ここで、修正管理情報11について図4を参照して説明する。図4は修正管理情報テーブル21に格納されるデータを示す図である。
修正管理情報テーブル21には、プログラム毎にそのプログラムに対してどのような修正が加えられたかを示す修正管理情報11が格納される。修正管理情報11としては、図4に示すように、仕様変更や障害が発生した日付、担当者名、発生内容、修正を行った日付、担当者名、修正内容に応じた区分を示す修正区分、対応箇所(プログラムの修正行を特定する情報)、修正内容の詳細等が記録される。この修正管理情報11は、プログラムの仕様を変更した人、プログラムの障害を発見した人、プログラムを修正した人が入力する。
修正管理情報テーブル21には、プログラム毎にそのプログラムに対してどのような修正が加えられたかを示す修正管理情報11が格納される。修正管理情報11としては、図4に示すように、仕様変更や障害が発生した日付、担当者名、発生内容、修正を行った日付、担当者名、修正内容に応じた区分を示す修正区分、対応箇所(プログラムの修正行を特定する情報)、修正内容の詳細等が記録される。この修正管理情報11は、プログラムの仕様を変更した人、プログラムの障害を発見した人、プログラムを修正した人が入力する。
修正区分としては、例えば、プログラムの項目名を変更した場合には、修正区分として「項目」を設定し、命令の実行条件を変更した場合には、修正区分として「条件」、命令の実行条件以外の部分を変更した場合には、修正区分として「条件以外」を設定する。
検索条件の抽象化レベルは、上記の修正管理情報11の修正区分に基づいて自動的に設定される。例えば、修正管理情報11の修正区分が「項目」であった場合には、図3のステップS13に進み、抽象化レベル1が選択される。また、修正区分が「条件以外」であった場合には、ステップS14に進み、抽象化レベル2が選択される。さらに、修正区分が「条件」であった場合には、抽象化レベル3が選択される。
抽象化レベル1〜3は、レベル1、レベル2,レベル3の順で抽象化の度合いが高くなる。例えば、項目名が修正され、修正区分として「項目」が設定されている場合には、項目名が重要な検索ポイントであるので項目名は抽象化せず、項目名そのものを検索する必要がある。この場合の抽象化レベルは、抽象化の度合いが最も低いレベル1が設定される。
また、命令の実行条件以外の部分が修正され、修正区分として「条件以外」が設定されている場合には、条件を除く命令の並びが検索のポイントであるので、項目名または変数名を抽象化する。この場合、抽象化レベルとして、抽象化の度合いが2番目のレベル2が設定される。
また、命令の実行条件が修正され、修正区分として「条件」が設定されている場合には、条件文の記述は異なるが命令の内容は同じものを検出する必要があるので条件を抽象化して検索する。この場合の抽象化レベルは、抽象化の度合いが1番高いレベル3が設定される。
次に、システム構造情報12に基づいて抽象化レベル1〜3を選択する(S16〜S19)。
システム構造情報12は、図5に示すようなシステム構造情報テーブル22に格納される。システム構造情報テーブル22には、そのプログラムがどのようなプログラミング手法で作成されているかを示す情報、例えば、構造化プログラミング手法で作成されたか、オブジェクト指向プログラミング手法で作成されたか等を示す情報と、プログラムの階層構造を示す情報が登録されている。階層構造を示す情報としては、上位プログラム名と下位プログラム名が対応づけて登録されている。
システム構造情報12は、図5に示すようなシステム構造情報テーブル22に格納される。システム構造情報テーブル22には、そのプログラムがどのようなプログラミング手法で作成されているかを示す情報、例えば、構造化プログラミング手法で作成されたか、オブジェクト指向プログラミング手法で作成されたか等を示す情報と、プログラムの階層構造を示す情報が登録されている。階層構造を示す情報としては、上位プログラム名と下位プログラム名が対応づけて登録されている。
図5の例では、プログラムPGM1の下位にプログラムSUB1とSUB2とSUB3が存在し、プログラムSUB1の下位にプログラムSUB11とSUB12が存在し、SUB2の下位にプログラムSUB21が存在し、プログラムSUB3の下位にプログラムSUB1が存在することが規定されている。
図5のシステム構造情報12は、図6(A)の構造化プログラムに対応しており、この情報からプログラムSUB1,SUB11,SUB12が、複数の箇所で使用されている共通モジュールであることが判る。これらの共通モジュールは処理内容に依存せずに使用できるように抽象化されているので、抽象化レベルを選択する際に、共通モジュールに対する抽象化レベルは低いレベルを設定する。
システム構造情報12に基づく抽象化レベルの選択が完了したなら、ステップS20に進み、修正管理情報11とシステム構造情報12に基づく抽象化レベルの選択結果のうち抽象化レベルの低い方を選択する。なお、修正管理情報11とシステム構造情報12の一方に基づいて抽象化レベルを決めるようにしても良い。
ここで、図6を参照して構造化プログラムとオブジェクト指向プログラムのシステム構造について説明する。
図6(A)に示す構造化プログラミングの技法により作成されたプログラムは、上位階層のプログラムは具体的な処理内容に関連する業務ロジックが比較的多く、下位階層のプログラムは業務ロジックが比較的少ないというシステム構造を有している。
図6(A)に示す構造化プログラミングの技法により作成されたプログラムは、上位階層のプログラムは具体的な処理内容に関連する業務ロジックが比較的多く、下位階層のプログラムは業務ロジックが比較的少ないというシステム構造を有している。
図6(A)のプログラムSUB1,SUB11,SUB12は、システム構造上で複数回出現する共通モジュールであり処理内容に関係なく実行可能に作られる。共通部品として使用される共通モジュールは、プログラミング内容が既に抽象化されているので、後述する抽象化レベル選択処理で抽象化度合いが最も低い抽象化レベル1が選択される。
また、構造化プログラムの最下位階層のプログラムは、抽象化されたプログラミングが行われているが、共通モジュールと比較した場合、項目名などの具体的表現が存在するので、後述する抽象化レベル選択処理で抽象化の度合いが2番目の抽象レベル2が選択される。
また、上位階層から中間階層のプログラムは、より具体化されたプログラムが行われているので、後述する抽象化レベル選択処理で、抽象化の度合いが最も高い抽象化レベル3が選択される。
図6(B)に示す、オブジェクト指向プログラミングの手法により作成されたプログラムは、上位階層のプログラムは、具体的な処理内容に関連する業務ロジックが比較的少なく、下位階層のプログラムは業務ロジックが比較的多いシステム構造を有している。
上位階層のプログラムは、抽象化されたプログラミングが行われているので、後述する抽象化レベル選択処理で抽象化レベル2が選択される。
また、中間階層から最下位階層のプログラムは、具体化されたプログラミングが行われているので、後述する抽象化レベル選択処理で、抽象化の度合いが最も高い抽象化レベル3が選択される。
また、中間階層から最下位階層のプログラムは、具体化されたプログラミングが行われているので、後述する抽象化レベル選択処理で、抽象化の度合いが最も高い抽象化レベル3が選択される。
図7は、図3のS16〜S19のシステム構造に基づく抽象化レベル選択処理のより詳しいフローチャートである。
先ず、システム構造情報12から検索元コードが属するプログラムが共通に使用されているモジュール、すなわち共通部品か否かを判別する(S21)。
先ず、システム構造情報12から検索元コードが属するプログラムが共通に使用されているモジュール、すなわち共通部品か否かを判別する(S21)。
プログラム全体で共通に使用される共通部品であると判別された場合には(S21,YES)、ステップS22に進み、抽象化の度合いが最も低い抽象化レベル1を選択する。
これは、プログラムが共通部品であった場合には、処理内容に依存せずに実行可能なように抽象化された記述になっているので、さらに抽象化する必要がないからである。
これは、プログラムが共通部品であった場合には、処理内容に依存せずに実行可能なように抽象化された記述になっているので、さらに抽象化する必要がないからである。
システム構造情報テーブル22のプログラミング手法に関する情報が構造化プログラミングを指しているか否かを判別する(S23)。
構造化プログラミングにより作成されたプログラムであった場合には(S23,YES)、ステップS24に進み、システム構造情報テーブル22を参照してそのプログラムが最下位層のプログラムか否かを判別する。
構造化プログラミングにより作成されたプログラムであった場合には(S23,YES)、ステップS24に進み、システム構造情報テーブル22を参照してそのプログラムが最下位層のプログラムか否かを判別する。
最下位層のプログラムの場合には(S24,YES)、ステップS25に進み、抽象化レベル2を選択する。
また、ステップS24において最下位層のプログラムではないと判別された場合には(S24,NO)、ステップS26に進み、抽象化レベル3を選択する。
また、ステップS24において最下位層のプログラムではないと判別された場合には(S24,NO)、ステップS26に進み、抽象化レベル3を選択する。
上記の処理により、システム構造情報12から構造化プログラムで、かつそのプログラムが最下位層のプログラムである判定された場合には、図6で説明したように、そのプログラムは抽象化されたプログラムの記述となっているので、抽象化の度合いが2番目の抽象化レベル2が選択される、また、上位階層から中間階層のプログラムであると判定された場合には、そのプログラムはより具体化された記述となっており更に抽象化する必要があるので抽象化レベル3が選択される。
ステップS23で、構造化プログラミングではないと判別された場合には(S23,NO)、ステップS27に進み、そのプログラムが最下位階層のプログラムか否かを判別する。
また、下位階層のプログラムと判定された場合には(S27,YES)、ステップS28に進み、抽象化レベル3を選択する。また、最下位階層のプログラムではない場合には(S27,NO)、ステップS29に進み、抽象化レベル2を選択する。
上記の処理により、システム構造情報12からオブジェクト指向プログラムで、かつ最下位階層のプログラムと判定された場合には、図6で説明したように、そのプログラムは具体的な記述となっているので、コードをさらに抽象化する必要があるので抽象化レベル3が選択される。また、上位階層のプログラムと判定された場合には、そのプログラムは抽象化されて記述されているので抽象化度合いが2番目の抽象化レベル2が選択される。
上述したように抽象化レベルを決定したなら、選択された抽象化レベルに基づいて検索元コードと検索対象プログラムを抽象化する。
図8は、同じプログラムを抽象化レベル1、2、3でそれぞれ抽象化した場合の例を示す図である。
図8は、同じプログラムを抽象化レベル1、2、3でそれぞれ抽象化した場合の例を示す図である。
先ず、図8(A)の左側に示す抽象化前のプログラムを抽象化レベル1で抽象化する場合について説明する。
抽象化レベル1では、項目名/変数名はそのまま残し、命令の正規化(文の途中改行の除去や省略系の除去)のみを行う。抽象化レベル1は、項目名と変数名そのものと命令の並びを検索対象とする場合に適用する。
抽象化レベル1では、項目名/変数名はそのまま残し、命令の正規化(文の途中改行の除去や省略系の除去)のみを行う。抽象化レベル1は、項目名と変数名そのものと命令の並びを検索対象とする場合に適用する。
抽象化前のプログラムの3行目と4行目に2行に渡って記述されている”MOVE’S’”と”TO OUT−NENGO”が、図8(A)の右側に示すように1行にまとめられて”MOVE’S’TO OUT−NENGO”という文に抽象化される。この場合、項目名と変数名は抽象化されない。
次に、図8(B)の左側のプログラム(図8(A)と同じ)を抽象化レベル2で抽象化する場合について説明する。
抽象化レベル2では、抽象化レベル1の抽象化に加えて項目名及び変数名の抽象化を行う。この抽象化レベル2は、命令の実行条件を除いた命令の並びを検索対象にしたい場合に適用する。
抽象化レベル2では、抽象化レベル1の抽象化に加えて項目名及び変数名の抽象化を行う。この抽象化レベル2は、命令の実行条件を除いた命令の並びを検索対象にしたい場合に適用する。
抽象化前のプログラムの1行目に”IF WK−YEAR = 2004”と記述されていた項目名”WK−YEAR”が、図8(B)の右側に示すように”[YEAR]”という項目名に抽象化される。さらに、抽象化前のプログラムの2行目に”OUT−URUTOAI”と記述されていた項目名が、”[URUTOAI]という項目名に抽象化される。以下、同様に4行目の項目名”OUT−NENGO”が、”[NENGO]”に、5行目及び6行目の項目名”WK−TUKI”、”OUT−TUKI”が、”[TUKI]という項目名に抽象化される。
このように項目名及び変数名を抽象化することで、検索対象プログラムにおいて、複写された検索元コードの項目名の一部が変更されている場合でも、検索元コードと類似したコード(複写された可能性の高いコード)を検出することができる。
次に、図8(C)の左側に示すプログラム(上記と同じプログラム)を抽象化レベル3で抽象化する場合について説明する。
抽象化レベル3では、抽象化レベル2の抽象化に加えて条件記述の抽象化を行う。この抽象化レベル3は、条件文の記述は異なるが内容が同じ命令を検索対象としたい場合に適用する。
抽象化レベル3では、抽象化レベル2の抽象化に加えて条件記述の抽象化を行う。この抽象化レベル3は、条件文の記述は異なるが内容が同じ命令を検索対象としたい場合に適用する。
図8(C)の抽象化前のプログラムの1行目の条件文”IF WK−YEAR = 2004”が、図8(C)の右側に示すように、”実行条件:[YEAR]=2004”に抽象化され、命令文、”MOVE1 TO [URUTOAI]”、”MOVE’S’ [NENGO]”の後に実行条件として記述される。なお、各命令文の項目名も同時に抽象化されている。
同様に、5行目の条件文”IF WK−TUKI = 2”が、図8(C)の右側に示すように、”実行条件:[YEAR]=2004”に抽象化され、MOVE命令”MOVE[TUKI] TO [TUKI]”の後に実行条件として記述される。
このように条件文を個々の命令の実行条件として抽象化することで、検索対象プログラムにおいて、検索元コードと条件文の記述形式が異なっている場合や、実行条件のループの変更等が行われている場合でも、検索元コードと類似したコードを漏れなく検出することが可能となる。
なお、検索対象プログラムを抽象化する際に、そのプログラムから項目名、命令、命令の実行条件等を抽出する必要があるが、これらの抽出は公知のソースコードの検索方法を用いて実現できる。例えば、特許第3377836号公報には、ソースプログラムから項目名、命令文、命令の単純条件、複合条件を抽出する方法について記載されている。このような公知の方法を用いることで、検索対象プログラムの中の項目名、変数名、命令文、条件文等を抽出することができる。そして、抽出した項目名、命令文、実行条件等を上述した抽象化レベルに基づいて抽象化すれば良い。
次に、抽象化した検索対象プログラムをブロック化する処理について図9のフローチャートと、図10及び図11を参照して説明する。
以下に説明するブロック化処理では、構造化プログラムについては、図10に示すように、手続き開始、セクション定義、あるいはラベル名定義に挟まれるソースコードを1つのブロックとして切り出す。そして、各ブロックの先頭アドレスと末尾アドレスとを指すブロックインデックステーブル31を作成する。
以下に説明するブロック化処理では、構造化プログラムについては、図10に示すように、手続き開始、セクション定義、あるいはラベル名定義に挟まれるソースコードを1つのブロックとして切り出す。そして、各ブロックの先頭アドレスと末尾アドレスとを指すブロックインデックステーブル31を作成する。
図9において、抽象化ソースコードを全て参照したか否かを判別する(S31)。参照していない抽象化ソースコードが存在する場合には(S31,NO)、ステップS32に進み、ブロックの先頭か否かを判別する。その抽象化ソースコードがブロックの先頭であれば(S32,YES)、ステップS33に進み、ブロック名とブロック先頭インデックスをレジスタ等に退避する。
他方、抽象化ソースコードがブロックの先頭でなければ(S32,NO)、ステップS34に進み、ブロックの末尾か否かを判別する。
抽象化ソースコードがブロックの末尾であれば(S34,YES)、ステップS35に進み、ブロック末尾インデックスをレジスタ等に退避させる。さらに、次のステップS36でブロック名、先頭/末尾インデックスを出力する。これにより、例えば、
ブロック名、ブロック先頭及び末尾アドレスがブロックインデックステーブル31に格納される。
抽象化ソースコードがブロックの末尾であれば(S34,YES)、ステップS35に進み、ブロック末尾インデックスをレジスタ等に退避させる。さらに、次のステップS36でブロック名、先頭/末尾インデックスを出力する。これにより、例えば、
ブロック名、ブロック先頭及び末尾アドレスがブロックインデックステーブル31に格納される。
ステップS34でブロックの末尾ではないと判別された場合には(S34,NO)、ステップS37に進み、次行の抽象化ソースコードを読み込み、ステップS31に戻る。また、ステップS31で抽象化ソースコードを全て参照したと判別された場合には(S31,YES)、ブロック化処理を終了する。
各ブロックは、例えば、手続き開始文のブロックは”プログラム名”を、セクション定義のブロックは”プログラム名::セクション名”を、セクション名またはラベル名定義のブロックは”プログラム名::ラベル名”をそれぞれのブロック名として命名する。
図10(B)のブロックインデックステーブル31は、図10(A)のプログラムから作成されたブロックのインデックを示す図である。例えば、行番号100の手続き開始文”PROCEDUREDIVITION”と、行番号0110のセクション文”AASECTION”とに挟まれるコードが1つのブロックPRG1として切り出される。そして、ブロックの先頭アドレスとして、手続き開始行の次の行番号「0101」が、ブロックの末尾のアドレスとして、セクションAASECTIONの1つ前の行番号「0109」が設定されている。
オブジェクト指向プログラムについては、図11に示すように、メソッド開始/終了文”{”、”}”で挟まれるソースコードをブロックとして切り出す。そして、先頭/末尾の行数を取得してブロックインデックステーブル32を作成する。ブロック名は、”クラス名::メソッド名”を命名する。
図11(B)のブロックインデックステーブル32は、図11(A)のプログラムから作成されたブロックインデックを示すものであり、ブロック先頭アドレスとしてメソッド開始行の次の行番号「0101」が、ブロック末尾アドレスとしてメソッド終了行の前の行番号「0109」が設定されている。
次に、以上のようにしてブロック化された検索対象プログラムと照合元のコードをブロック単位で比較する処理を、図12のフローチャートを参照して説明する。
作成されたブロックインデックスファイル31または32を全て参照したか否かを判別する(図12,S41)。
作成されたブロックインデックスファイル31または32を全て参照したか否かを判別する(図12,S41)。
ブロックインデックスの参照が終了していない場合には(S41,NO)、ステップS42に進み、ブロックインデックスに基づいて抽象化ソースコード(抽象化された検索対象プログラムのソースコード)からブロックを取得する。
次に、抽象化ソースコードから取得したブロックと抽象化検索コード(検索元コードを抽象化したコード)の比較を行う(S43)。
そして、その比較結果から両者の行単位とブロック単位の類似比率を算出し、それらを出力する(S44)
ここで、図12(A)のステップS43のブロック単位でのコードの比較処理を、図12(B)のフローチャートを参照して説明する。
そして、その比較結果から両者の行単位とブロック単位の類似比率を算出し、それらを出力する(S44)
ここで、図12(A)のステップS43のブロック単位でのコードの比較処理を、図12(B)のフローチャートを参照して説明する。
先ず、取得したブロックまたは抽象化検索コードのどちらかを全て参照したかどうかを判別する(図12(B)、S51)。
未参照のブロックまたは抽象化検索コードが存在する場合には(S51,NO)、ステップS52に進み、ブロックの参照行と抽象化検索コードの参照行が一致するか否かを判別する。
未参照のブロックまたは抽象化検索コードが存在する場合には(S51,NO)、ステップS52に進み、ブロックの参照行と抽象化検索コードの参照行が一致するか否かを判別する。
コードが不一致の場合には(S52,NO)、ステップS53に進み、ブロック参照行と抽象化検索コード参照行を1行ずつカウントアップし、一致行が検索されるまで総当たりで比較する(S53)。
不一致行を語単位に分解し語単位で比較する(S54)。そして、類似度が0か、あるいはブロック参照行と抽象化検索コード参照行との間に対応行が存在しないか否かを判別する(S55)。
類似する語が存在するか、あるいは対応行が存在する場合には(S55,NO)、ステップS56に進み、不一致行同士を関連づけ、ステップS51に戻る。また、類似する語が存在しない、あるいは対応行が存在しない場合には(S55,YES)、ステップS51に戻る。
ステップS52において、ブロック参照行と抽象化検索コード参照行が一致した場合には(S52,YES)、ステップS57に進み一致行を関連づける。
ここで、図13を参照してブロック単位でのコードの比較について説明する。
ここで、図13を参照してブロック単位でのコードの比較について説明する。
抽象化した検索対象プログラムから取得したブロック(以下単にブロックという)の先頭行と抽象化検索コードの先頭行のコードを比較すると、両者は”AA”で一致する。次に、2行目のコードどうしを比較すると、両者は不一致であるので(図12,(1))、抽象化検索コードの3行目とを比較する(図12,(2))。この行も不一致であるので、次に、抽象化検索コードの2行目とブロックの3行目を比較する(図12,(3))。この行も不一致であるので、次に、ブロックの3行目と抽象化検索コードの3行目を比較する(図12,(4))。この行も不一致であるので、次に、ブロックの2行目と抽象化検索コードの4行目を比較する(図12,(5))。この行も不一致であるので、次に、抽象化検索コードの2行目とブロックの4行目を比較する(図12,(6))。この行も不一致であるので、次に、ブロックの3行目と抽象化検索コードの4行目を比較する(図12,(7))。この行も不一致であるので、次に、抽象化検索コードの3行目とブロックの4行目を比較する(図12,(8))。この行は一致するので、ブロックの4行目が抽象化検索コードの3行目と一致することが検出され、ブロックの2行目、3行目は対応行がないことが検出される。
次に、図12(A)のステップS44の類似比率の算出処理の詳細を、図14のフローチャートを参照して説明する。
先ず、抽象化した検索対象プログラムの全行と抽象化検索コードとの比較が完了したか否かを判別する(図14(A),S61)。
先ず、抽象化した検索対象プログラムの全行と抽象化検索コードとの比較が完了したか否かを判別する(図14(A),S61)。
比較が完了していない場合には(S61,NO)、ステップS62に進み、行単位で類似比率を決定する。
ここで、ステップS62の行単位類似比率決定処理を図14(B)のフローチャートを参照して説明する。
ここで、ステップS62の行単位類似比率決定処理を図14(B)のフローチャートを参照して説明する。
最初に、検索対象プログラムのブロックの特定の行と抽象化検索コードの行の全ての語が一致したか否かを判別する(図14(A)、S71)。
不一致の語が存在して完全一致ではない場合には(S71,NO)、ステップS72に進み、その検索対象プログラムが抽象化レベル1の抽象化が行われたか否かを判別する。
不一致の語が存在して完全一致ではない場合には(S71,NO)、ステップS72に進み、その検索対象プログラムが抽象化レベル1の抽象化が行われたか否かを判別する。
抽象化レベル1の抽象化が行われている場合には(S72,YES)、ステップS73に進み、その行に存在する項目数に予め決められている係数を乗算し、その行の語数を加算し、さらに項目数を減算して得られる値を分母の値(母数)として設定する。
他方、抽象化レベル1でなければ(S72,NO)、ステップS74に進み、1行の語数を分母の値として設定する。
ステップS73またはS74の次は、ステップS75に進み、その行の全ての語の比較が完了したか否かを判別する。
ステップS73またはS74の次は、ステップS75に進み、その行の全ての語の比較が完了したか否かを判別する。
その行の全ての語の比較が終了していない場合には(S75,NO)、ステップS76に進み、次の語が抽象化検索コードの該当する語と一致するか否かを判別する。
両者が一致する場合には(S76,YES)、抽象化レベル1で、かつ比較した語が項目名(変数名)か否かを判別する(S77)。
両者が一致する場合には(S76,YES)、抽象化レベル1で、かつ比較した語が項目名(変数名)か否かを判別する(S77)。
抽象化レベル1で、かつ比較した語が項目名であった場合には(S77,YES)、ステップS78に進み、一致数として係数(分母を計算する際に項目数に乗算した値)を加算する。
上記の処理により、抽象化レベル1の抽象化を行った場合に、項目名が一致したときの一致数が係数の値分大きくなる。抽象化レベル1の検索では項目名が一致することが重要であるので、後に行う類似比率の算出処理において項目名が一致した場合の類似比率が高くなるようにしている。
ステップS77において、抽象化レベル1ではなく、あるいは一致した語が項目名ではない場合には(S77,NO)、ステップS79に進み、一致数として「1」をカウントアップする。
また、ステップS75において、1行の全ての語の比較が終了した場合には(S75,YES)、ステップS80に進み、それ以前の処理で求めた母数と一致数とから1行の類似比率を算出する。
上記のようにして各行の類似比率が算出され、ステップS61において、1つのブロックの全ての類似比率の算出が完了したと判定された場合には(S61,YES)、ステップS63に進み、行単位の類似比率を全て加算した値と行数とからブロック単位の類似比率を算出する。
上記の処理により、抽象化検索コードと比較したブロックの各行の類似比率と全体の類似比率を求めることができる。
図15は、検索コード(検索元コード)と検索対象プログラムの1つのブロックを、抽象化レベル1、抽象化レベル2及び抽象化レベル3でそれぞれ抽象化した場合の類似比率の算出結果を示す図である。
図15は、検索コード(検索元コード)と検索対象プログラムの1つのブロックを、抽象化レベル1、抽象化レベル2及び抽象化レベル3でそれぞれ抽象化した場合の類似比率の算出結果を示す図である。
図15に示す抽象化前の検索コードと検索対象ブロックを、抽象化レベル1で抽象化すると、図15に示すように、命令が正規化表現に変更される。
この場合の項目名はそのままであるので、検索コードの1行目”IF WK−YEAR = 2004”と、検索対象ブロックの1行目”IFWK−NEN = 2004”は、項目名が”WK−YEAR”と”WK−NEN”で異なるので、前述した類似比率算出処理により類似比率は66.6%となる。
この場合の項目名はそのままであるので、検索コードの1行目”IF WK−YEAR = 2004”と、検索対象ブロックの1行目”IFWK−NEN = 2004”は、項目名が”WK−YEAR”と”WK−NEN”で異なるので、前述した類似比率算出処理により類似比率は66.6%となる。
同様に、検索コードの3行目の項目名”OUT−GO"と、検索対象ブロックの3行目の項目名”OUT−NENGO”とが異なるので、類似比率は66,6%となる。
この検索対象ブロック全体の類似比率は、(66,6+66.6+100+100)÷11で30.3%となる。
この検索対象ブロック全体の類似比率は、(66,6+66.6+100+100)÷11で30.3%となる。
同じ検索コードと検索対象ブロックを抽象化レベル2で抽象化すると、検索コードの1行目の命令と、検索対象ブロックの1行目の命令が共に”IF[YEAR] = 2004”となり、両者は一致するので類似比率は100%となる。3行目も同様に類似比率が100%となる。従って、ブロック全体の類似比率は36.3%となる。
また、同じ検索コードと検索対象ブロックを抽象化レベル3で抽象化すると、検索コードの条件文が抽象化され、さらに項目名が抽象化されて、”MOVE1 TO [URUTOAI]:[YEAR]=2004”が1行目に記述される。また、2行目は、”MOVE ’S’ TO [NENGO]:[YEAR]=2004”となる。
一方、検索対象ブロックは、2行目が”MOVE ’S’ TO [NENGO]:[YEAR]=2004”となるので、検索コードの2行目と検索対象ブロックの2行目のコードが全て一致し、その行の類似比率は100%となる。
この場合、条件文が無くなることにより検索コードの行数は5行となり、行単位の類似比率を加算した値は200%となるので全体の類似比率は40%となる。
ここで、図16を参照して、抽象化レベル1の場合の類似比率算出方法を詳しく説明する。
ここで、図16を参照して、抽象化レベル1の場合の類似比率算出方法を詳しく説明する。
抽象化レベル1で、図16に示すような検索ロジック(検索元コード)と対象ロジック(検索対象プログラムから取得したブロック)抽象化したコードを比較すると、対象ロジックの1行目は項目名不一致、2行目は完全一致、3行目は完全不一致、4行目及び5行目は完全一致となる。
この場合、項目の係数が「3」であるとすると、1行目は、語数が4,項目数が2(この場合、”YEAR”と”2004”が項目名となる)であるので母数が「2×3+4−2=8」となり、一致する項目数が1であるので一致数が「5」となり、1行目の類似比率は62,5%となる。
2行目は、検索ロジックと対象ロジックの命令と項目名が全て一致するので類似比率が100%、3行目は完全不一致であるので類似比率は0%になる。さらに、4行目、5行目も完全に一致するので、類似比率は100%となる。
従って、対象ロジックのブロック全体の類似比率は、(62.5%+100%+0%+100%+100%)÷5=72.5%となる。
また、同じ対象ロジックを抽象化レベル2で抽象化した場合には、図16に示すように、検索ロジックの1行目と対象ロジックの1行目の項目名”YEAR”が不一致となるので、1行目は語数が4,一致数が3となり、類似比率は75%になる。2行目以降の類似比率は抽象化レベル1と同じである。
また、同じ対象ロジックを抽象化レベル2で抽象化した場合には、図16に示すように、検索ロジックの1行目と対象ロジックの1行目の項目名”YEAR”が不一致となるので、1行目は語数が4,一致数が3となり、類似比率は75%になる。2行目以降の類似比率は抽象化レベル1と同じである。
従って、この場合のブロック全体の類似比率は、(75%+100%+0%+100%+100%)÷5=75.0%となる。
上述した実施の形態によれば、検索元コードの修正内容を示す修正管理情報、あるいは修正が加えられたプログラムのシステム構造及び修正箇所のシステム構造上の位置を示すシステム構造情報12に基づいて抽象化レベルを決め、その抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化して両者を比較し、その類似比率を算出することで、検索対象プログラムに存在する検索元コードを複写したコードを漏れなく検索することができる。また、複写されたコードを自動的に検索することができるので、人間が検索文字列を入力して検索する方法のように個人の技量による検索精度のバラツキが生じない。さらに、システム構造情報12に基づいて抽象化レベルを決めることで、プログラムの構造に適合した抽象化レベルを設定することができる。これにより実態に沿った的確な検索を実現できる。
上述した実施の形態によれば、検索元コードの修正内容を示す修正管理情報、あるいは修正が加えられたプログラムのシステム構造及び修正箇所のシステム構造上の位置を示すシステム構造情報12に基づいて抽象化レベルを決め、その抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化して両者を比較し、その類似比率を算出することで、検索対象プログラムに存在する検索元コードを複写したコードを漏れなく検索することができる。また、複写されたコードを自動的に検索することができるので、人間が検索文字列を入力して検索する方法のように個人の技量による検索精度のバラツキが生じない。さらに、システム構造情報12に基づいて抽象化レベルを決めることで、プログラムの構造に適合した抽象化レベルを設定することができる。これにより実態に沿った的確な検索を実現できる。
また、類似比率を算出することにより検索元コードと類似したコードを抽出できるので、障害情報に基づいて検索を行うことで同じような障害が発生する可能を持ったコードを予め検索して予防保守を行うことも可能となる。
次に、実施の形態のコード検索装置として使用される情報処理装置のハードウェア構成の一例を図17を参照して説明する。
外部記憶装置102には本実施の形態の類似検索ツール等のプログラム及び修正情報管理テーブル21,システム構造情報テーブル22等が格納される。
外部記憶装置102には本実施の形態の類似検索ツール等のプログラム及び修正情報管理テーブル21,システム構造情報テーブル22等が格納される。
CPU101は、外部記憶装置102に格納されているプログラムを読み出し、上述した検索対象プログラム及び検索元コードの抽象化処理、類似比率算出処理等を実行する。
RAM103は、演算に使用される各種のレジスタ、あるいはデータを一時的に記憶するための領域として使用される。
RAM103は、演算に使用される各種のレジスタ、あるいはデータを一時的に記憶するための領域として使用される。
記録媒体読み取り装置装置104は、CDROM、DVD、フレキシブルディスク、ICカード等の可搬記録媒体105の読み取り、あるいは書き込みを行う。この可搬記録媒体105に実施の形態のコード検索プログラムを記録しておき、そのプログラムを外部記憶装置102にロードしても良い。
入力装置106は、キーボード等のデータを入力する装置である。通信インタフェース107は、LAN、インターネット等のネットワークに接続するための装置であり、ネットワークを介して情報提供者のサーバ108等からデータ、プログラムを等をダウンロードすることができる。なお、CPU101、外部記憶装置102、RAM103等はバス109により接続されている。
本発明は、上述した実施の形態に限定されず、例えば、以下のように構成しても良い。
(1)抽象化レベルは3種類に限らず、対象となるプログラムに応じて2種類でも良いし、4種類以上でも良い。また、抽象化する際の基準は、項目名/変数名、命令の条件以外、実行条件に限らず他の要素に基づいて抽象化しても良い。
(2)修正管理情報11、システム構造情報12は、予めテーブルに記憶しておく方法に限らず、類似検索ツールを実行する際にユーザがそれらの情報を入力するようにしても良い。
(3)類似度の出力は、類似比率をパーセントで表示する方法に限らず、文字や図形により類似度の差が分かるように表示、あるいは他の手段で出力しても良い。あるいは、類似度を表示せずに、類似度が所定値以上のコードを検索結果として表示しても良い。
(1)抽象化レベルは3種類に限らず、対象となるプログラムに応じて2種類でも良いし、4種類以上でも良い。また、抽象化する際の基準は、項目名/変数名、命令の条件以外、実行条件に限らず他の要素に基づいて抽象化しても良い。
(2)修正管理情報11、システム構造情報12は、予めテーブルに記憶しておく方法に限らず、類似検索ツールを実行する際にユーザがそれらの情報を入力するようにしても良い。
(3)類似度の出力は、類似比率をパーセントで表示する方法に限らず、文字や図形により類似度の差が分かるように表示、あるいは他の手段で出力しても良い。あるいは、類似度を表示せずに、類似度が所定値以上のコードを検索結果として表示しても良い。
(付記1) 検索元コードと関連性のあるコードを検索対象プログラムから検索するプログラムであって、
検索元コードに対する修正内容と検索元コードを含むプログラムのシステム構造を示すシステム構造情報の少なくとも一方に基づいて検索条件の抽象化レベルを決定するステップと、
決定された抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化して記憶手段に格納するステップと、
前記記憶手段に格納された抽象化された検索対象プログラムと検索元コードとを比較してコードの類似度を算出するステップと、
検索対象プログラムの中の類似度が高いコードを出力するステップとからなるコンピュータが実行可能なコード検索プログラム。
検索元コードに対する修正内容と検索元コードを含むプログラムのシステム構造を示すシステム構造情報の少なくとも一方に基づいて検索条件の抽象化レベルを決定するステップと、
決定された抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化して記憶手段に格納するステップと、
前記記憶手段に格納された抽象化された検索対象プログラムと検索元コードとを比較してコードの類似度を算出するステップと、
検索対象プログラムの中の類似度が高いコードを出力するステップとからなるコンピュータが実行可能なコード検索プログラム。
(付記2) 抽象化レベルを決定する際に、検索元コードに対する修正内容が、項目名または変数名の変更、命令の条件以外の変更、命令の条件の変更の何れであるかを前記記憶手段に記憶されている情報または入力された情報から判定し、判定結果に基づいて抽象化レベルを決定する付記1記載のコード検索プログラム。
(付記3) 抽象化レベルを決定する際に、検索元コードの修正内容を示す修正管理情報と検索元コードを含むプログラムのシステム構造を示すシステム構造情報とに基づいて抽象化レベルを決定する付記1または2記載のコード検索プログラム。
(付記4) 抽象化レベルを決定する際に、検索元コードを含むプログラムが作成されたプログラミング手法を示す情報と、検索元コードのシステム構造における階層上の位置を示す情報とに基づいて抽象化レベルを決定する付記1,2または3記載のコード検索プログラム。
(付記5) 検索対象のプログラムから検索元コードと関連性のあるコードを検索するコード検索装置であって、
検索元コードに対する修正内容と検索元コードを含むプログラムのシステム構造を示すシステム構造情報の少なくとも一方に基づいて検索条件の抽象化レベルを決定する抽象化レベル決定手段と、
前記抽象化レベル決定手段により決定された抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化する抽象化手段と、
前記抽象化手段により抽象化された検索対象プログラムと検索元コードとを比較してコードの類似度を算出する類似度算出手段と、
前記類似度算出手段により算出された類似度が高いコードを出力する出力手段とを備えるコード検索装置。
検索元コードに対する修正内容と検索元コードを含むプログラムのシステム構造を示すシステム構造情報の少なくとも一方に基づいて検索条件の抽象化レベルを決定する抽象化レベル決定手段と、
前記抽象化レベル決定手段により決定された抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化する抽象化手段と、
前記抽象化手段により抽象化された検索対象プログラムと検索元コードとを比較してコードの類似度を算出する類似度算出手段と、
前記類似度算出手段により算出された類似度が高いコードを出力する出力手段とを備えるコード検索装置。
(付記6) 前記抽象レベル決定手段は、検索元コードの修正内容が、少なくとも項目名または変数名の変更、命令の条件以外の変更、命令の条件の変更の何れであるかを判定し、判定結果に基づいて抽象化レベルを決定する付記5記載のコード検索装置。
(付記7) 前記抽象化レベル決定手段は、検索元コードの修正内容を示す修正管理情報と検索元コードを含むプログラムのシステム構造を示すシステム構造情報とに基づいて抽象化レベルを決定する付記5または6記載のコード検索装置。
(付記8) 前記抽象化レベル決定手段は、少なくとも検索元コードを含むプログラムが作成されたプログラミング手法と、検索元コードのシステム構造における階層上の位置を示す情報に基づいて抽象化レベルを決定する付記5,6または7記載のコード検索装置。
(付記9) 前記抽象化手段は、検索対象プログラムをブロック単位に分割する分割手段を有し、
前記類似度算出手段は、検索元コードを含むブロックと検索対象プログラムの各ブロックのそれぞれの行を比較して各行の類似度とブロック単位の類似度を算出する付記5,6,7または8記載のコード検索装置。
前記類似度算出手段は、検索元コードを含むブロックと検索対象プログラムの各ブロックのそれぞれの行を比較して各行の類似度とブロック単位の類似度を算出する付記5,6,7または8記載のコード検索装置。
(付記10) 前記抽象化レベル決定手段は、検索元コードがプログラムの中で共通に使用される共通モジュールか否かを判定し、検索元コードが共通モジュールであった場合には、抽象化レベルを低く設定する付記5〜9のいずれか1つに記載のコード検索装置。
(付記11) 前記抽象化レベル決定手段は、検索元コードが存在するプログラムが構造化プログラムか否か、検索元コードの存在する階層が上位階層か下位階層かを判定し、検索元コードが下位階層に存在する場合には検索条件の抽象化レベルを低く設定し、上位階層に存在する場合には、抽象化レベルをそれより高く設定する付記5〜10の何れか1つに記載のコード検索装置。
(付記12) 前記抽象化レベル決定手段は、検索元コードが存在するプログラムがオブジェクト指向プログラムか否か、検索元コードが存在する階層が上位階層か、中間階層または下位階層かを判定し、上位階層に存在する場合には抽象化レベルを低く設定し、中間階層または下位階層に存在する場合には抽象化レベルをそれより高く設定する付記5〜11の何れか1つに記載のコード検索装置。
(付記13) 前記類似度算出手段は、類似度を算出するための係数を抽象化レベルに応じて変更する付記5〜12の何れか1つに記載のコード検索装置。
(付記14) 検索元コードと関連性のあるコードを検索対象プログラムから検索するプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
検索元コードに対する修正内容と検索元コードを含むプログラムのシステム構造を示すシステム構造情報の少なくとも一方に基づいて検索条件の抽象化レベルを決定するステップと、
決定された抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化して記憶手段に格納するステップと、
前記記憶手段に格納された抽象化された検索対象プログラムと検索元コードとを比較してコードの類似度を算出するステップと、
検索対象プログラムの中の類似度が高いコードを出力するステップとからなるコード検索プログラムを記録した記録媒体。
(付記14) 検索元コードと関連性のあるコードを検索対象プログラムから検索するプログラムを記録したコンピュータ読み取り可能な記録媒体であって、
検索元コードに対する修正内容と検索元コードを含むプログラムのシステム構造を示すシステム構造情報の少なくとも一方に基づいて検索条件の抽象化レベルを決定するステップと、
決定された抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化して記憶手段に格納するステップと、
前記記憶手段に格納された抽象化された検索対象プログラムと検索元コードとを比較してコードの類似度を算出するステップと、
検索対象プログラムの中の類似度が高いコードを出力するステップとからなるコード検索プログラムを記録した記録媒体。
(付記15) 抽象化レベルを決定する際に、検索元コードに対する修正内容が、項目名または変数名の変更、命令の条件以外の変更、命令の条件の変更の何れであるかを前記記憶手段に記憶されている情報または入力された情報から判定し、判定結果に基づいて抽象化レベルを決定する付記14記載のコード検索プログラムを記録した記録媒体。
(付記16) 抽象化レベルを決定する際に、検索元コードの修正内容を示す修正管理情報と検索元コードを含むプログラムのシステム構造を示すシステム構造情報とに基づいて抽象化レベルを決定する付記14または15記載のコード検索プログラムを記録した記録媒体。
(付記17) 抽象レベルを決定する際に、少なくとも検索元コードを含むプログラムが作成されたプログラミング手法を示す情報と、検索元コードのシステム構造における階層上の位置を示す情報とに基づいて抽象化レベルを決定する付記14,15または16記載のコード検索プログラムを記録した記録媒体。
(付記18) 検索対象プログラムをブロック単位に分割するステップを有し、
類似度を算出する際に、検索元コードを含むブロックと検索対象プログラムの各ブロックのそれぞれの行を比較して各行の類似度とブロック単位の類似度を算出する付記14〜17の何れか1つに記載の記録媒体。
類似度を算出する際に、検索元コードを含むブロックと検索対象プログラムの各ブロックのそれぞれの行を比較して各行の類似度とブロック単位の類似度を算出する付記14〜17の何れか1つに記載の記録媒体。
(付記19) 抽象化レベルを決定する際に、検索元コードがプログラムの中で共通に使用される共通モジュールか否かを判定し、検索元コードが共通モジュールであった場合には、抽象化レベルを低く設定する付記14〜18の何れか1つに記載の記録媒体。
(付記20) 抽象化レベルを決定する際に、検索元コードが存在するプログラムが構造化プログラムか否か、検索元コードの存在する階層が上位階層か下位階層かを判定し、検索元コードが下位階層に存在する場合には検索条件の抽象化レベルを低く設定し、上位階層に存在する場合には抽象化レベルをそれより高く設定する付記14〜19の何れか1つに記載の記録媒体。
(付記21) 類似度を算出するための係数を抽象化レベルに応じて変更する付記14〜20の何れか1つに記載の記録媒体。
1 抽象化レベル決定手段
2 抽象化手段
3 類似度算出手段
4 出力手段
11 修正管理情報
12 システム構造情報
13 資産
21 修正管理情報テーブル
22 システム構造情報テーブル
2 抽象化手段
3 類似度算出手段
4 出力手段
11 修正管理情報
12 システム構造情報
13 資産
21 修正管理情報テーブル
22 システム構造情報テーブル
Claims (5)
- 検索対象プログラムから検索元コードと関連性のあるコードを検索するプログラムであって、
検索元コードに対する修正内容と検索元コードを含むプログラムのシステム構造を示すシステム構造情報との少なくとも一方に基づいて検索条件の抽象化レベルを決定するステップと、
決定された抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化して記憶手段に格納するステップと、
前記記憶手段に格納された抽象化された検索対象プログラムと検索元コードとを比較してコードの類似度を算出するステップと、
前記検索対象プログラムの中の類似度が高いコードを出力するステップとからなるコンピュータが実行可能なコード検索プログラム。 - 抽象化レベルを決定するステップは、検索元コードに対する修正内容が、項目名または変数名の変更、命令の条件以外の変更、命令の条件の変更の何れであるかを前記記憶手段に記憶されている情報または入力された情報から判定し、判定結果に基づいて抽象化レベルを決定する請求項1または2記載のコード検索プログラム。
- 抽象化レベルを決定するステップは、検索元コードの修正内容を示す修正管理情報と検索元コードを含むプログラムのシステム構造を示すシステム構造情報とに基づいて抽象化レベルを決定する請求項1または2記載のコード検索プログラム。
- 抽象化レベルを決定するステップは、少なくとも検索元コードを含むプログラムが作成されたプログラミング手法を示す情報と、検索元コードのシステム構造における階層上の位置を示す情報とに基づいて抽象化レベルを決定する請求項1,2または3記載のコード検索プログラム。
- 検索対象のプログラムから検索元コードと関連性のあるコードを検索するコード検索装置であって、
検索元コードに対する修正内容に基づいて検索条件の抽象化レベルを決定する抽象化レベル決定手段と、
前記抽象化レベル決定手段により決定された抽象化レベルに基づいて検索対象プログラムと検索元コードを抽象化する抽象化手段と、
前記抽象化手段により抽象化された検索対象プログラムと検索元コードとを比較してコードの類似度を算出する類似度算出手段と、
前記類似度算出手段により算出された類似度が高いコードを出力する出力手段とを備えるコード検索装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004119876A JP2005301859A (ja) | 2004-04-15 | 2004-04-15 | コード検索プログラム及びコード検索装置 |
US10/955,655 US20050234887A1 (en) | 2004-04-15 | 2004-09-30 | Code retrieval method and code retrieval apparatus |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2004119876A JP2005301859A (ja) | 2004-04-15 | 2004-04-15 | コード検索プログラム及びコード検索装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005301859A true JP2005301859A (ja) | 2005-10-27 |
Family
ID=35097519
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004119876A Withdrawn JP2005301859A (ja) | 2004-04-15 | 2004-04-15 | コード検索プログラム及びコード検索装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20050234887A1 (ja) |
JP (1) | JP2005301859A (ja) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008234218A (ja) * | 2007-03-19 | 2008-10-02 | Ricoh Co Ltd | 情報検索システム及び情報検索方法 |
WO2014136611A1 (ja) * | 2013-03-08 | 2014-09-12 | Necソリューションイノベータ株式会社 | コスト算出装置、コスト算出方法、及びコンピュータ読み取り可能な記録媒体 |
WO2015015622A1 (ja) * | 2013-08-01 | 2015-02-05 | 松崎 務 | 装置及びプログラム |
US9275020B2 (en) | 2013-01-31 | 2016-03-01 | International Business Machines Corporation | Tracking changes among similar documents |
JP2018032275A (ja) * | 2016-08-25 | 2018-03-01 | ナレルシステム株式会社 | 変数を含んだ文字列をリテラルとして許容する論理プログラムを処理する方法、コンピュータプログラム及び装置 |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006018693A (ja) * | 2004-07-02 | 2006-01-19 | Fujitsu Ltd | 類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法 |
US8290962B1 (en) * | 2005-09-28 | 2012-10-16 | Google Inc. | Determining the relationship between source code bases |
US20080120323A1 (en) * | 2006-11-17 | 2008-05-22 | Lehman Brothers Inc. | System and method for generating customized reports |
US8312427B2 (en) * | 2007-05-15 | 2012-11-13 | International Business Machines Corporation | Selecting a set of candidate code expressions from a section of program code for copying |
US9110769B2 (en) * | 2010-04-01 | 2015-08-18 | Microsoft Technology Licensing, Llc | Code-clone detection and analysis |
US20120159434A1 (en) * | 2010-12-20 | 2012-06-21 | Microsoft Corporation | Code clone notification and architectural change visualization |
JP5712711B2 (ja) * | 2011-03-18 | 2015-05-07 | 富士通株式会社 | 管理プログラム,管理方法および管理装置 |
EP2940585A4 (en) * | 2012-12-28 | 2016-01-06 | Fujitsu Ltd | PROGRAM FOR CREATING A RESPONSE PROCESS, METHOD FOR CREATING A RESPONSE PROCESS AND INFORMATION PROCESSING DEVICE |
CN110688150B (zh) * | 2019-09-03 | 2020-12-08 | 华中科技大学 | 一种基于张量运算的二进制文件代码搜索检测方法及系统 |
US11416245B2 (en) | 2019-12-04 | 2022-08-16 | At&T Intellectual Property I, L.P. | System and method for syntax comparison and analysis of software code |
US20220222165A1 (en) * | 2021-01-12 | 2022-07-14 | Microsoft Technology Licensing, Llc. | Performance bug detection and code recommendation |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3711863A (en) * | 1972-01-21 | 1973-01-16 | Honeywell Inf Systems | Source code comparator computer program |
US4931928A (en) * | 1988-11-09 | 1990-06-05 | Greenfeld Norton R | Apparatus for analyzing source code |
US6263348B1 (en) * | 1998-07-01 | 2001-07-17 | Serena Software International, Inc. | Method and apparatus for identifying the existence of differences between two files |
US6694191B2 (en) * | 2000-01-21 | 2004-02-17 | Medtronic Minimed, Inc. | Ambulatory medical apparatus and method having telemetry modifiable control software |
US6954747B1 (en) * | 2000-11-14 | 2005-10-11 | Microsoft Corporation | Methods for comparing versions of a program |
US6745215B2 (en) * | 2001-04-20 | 2004-06-01 | International Business Machines Corporation | Computer apparatus, program and method for determining the equivalence of two algebraic functions |
US7054891B2 (en) * | 2002-03-18 | 2006-05-30 | Bmc Software, Inc. | System and method for comparing database data |
CA2482142A1 (en) * | 2002-04-10 | 2003-10-16 | Software Engineering Gmbh | Comparison of source files |
US20030233621A1 (en) * | 2002-06-13 | 2003-12-18 | International Business Machines Corporation | Editor for smart version control |
US20040024781A1 (en) * | 2002-08-01 | 2004-02-05 | The Regents Of The University Of California | Method of comparing version strings |
US20040049767A1 (en) * | 2002-09-05 | 2004-03-11 | International Business Machines Corporation | Method and apparatus for comparing computer code listings |
US7353225B2 (en) * | 2002-11-13 | 2008-04-01 | Sun Microsystems, Inc. | Mechanism for comparing content in data structures |
US7568109B2 (en) * | 2003-09-11 | 2009-07-28 | Ipx, Inc. | System for software source code comparison |
JP2006018693A (ja) * | 2004-07-02 | 2006-01-19 | Fujitsu Ltd | 類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法 |
-
2004
- 2004-04-15 JP JP2004119876A patent/JP2005301859A/ja not_active Withdrawn
- 2004-09-30 US US10/955,655 patent/US20050234887A1/en not_active Abandoned
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008234218A (ja) * | 2007-03-19 | 2008-10-02 | Ricoh Co Ltd | 情報検索システム及び情報検索方法 |
US9275020B2 (en) | 2013-01-31 | 2016-03-01 | International Business Machines Corporation | Tracking changes among similar documents |
US10169393B2 (en) | 2013-01-31 | 2019-01-01 | International Business Machines Corporation | Tracking changes among similar documents |
WO2014136611A1 (ja) * | 2013-03-08 | 2014-09-12 | Necソリューションイノベータ株式会社 | コスト算出装置、コスト算出方法、及びコンピュータ読み取り可能な記録媒体 |
US20160019609A1 (en) * | 2013-03-08 | 2016-01-21 | Nec Solution Innovators, Ltd. | Cost computation device, cost computation method, and computer-readable recording medium |
WO2015015622A1 (ja) * | 2013-08-01 | 2015-02-05 | 松崎 務 | 装置及びプログラム |
JP6008456B2 (ja) * | 2013-08-01 | 2016-10-19 | 石田 伸一 | 装置及びプログラム |
US9792197B2 (en) | 2013-08-01 | 2017-10-17 | Shinichi Ishida | Apparatus and program |
JP2018032275A (ja) * | 2016-08-25 | 2018-03-01 | ナレルシステム株式会社 | 変数を含んだ文字列をリテラルとして許容する論理プログラムを処理する方法、コンピュータプログラム及び装置 |
Also Published As
Publication number | Publication date |
---|---|
US20050234887A1 (en) | 2005-10-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Antoniol et al. | Is it a bug or an enhancement? A text-based approach to classify change requests | |
US7493596B2 (en) | Method, system and program product for determining java software code plagiarism and infringement | |
JP2005301859A (ja) | コード検索プログラム及びコード検索装置 | |
US20080120601A1 (en) | Information processing apparatus, method and program for deciding priority of test case to be carried out in regression test background of the invention | |
US10210211B2 (en) | Code searching and ranking | |
US20090249250A1 (en) | Method and system for log file processing and generating a graphical user interface based thereon | |
US9852217B2 (en) | Searching and ranking of code in videos | |
US20100325539A1 (en) | Web based spell check | |
US11714636B2 (en) | Methods and arrangements to process comments | |
JP2017041171A (ja) | テストシナリオ生成支援装置およびテストシナリオ生成支援方法 | |
CN111061488A (zh) | 检测前端代码质量的方法、装置、计算机设备及存储介质 | |
CN113032548A (zh) | 信息处理装置、存储介质及信息处理方法 | |
US6889219B2 (en) | Method of tuning a decision network and a decision tree model | |
US11176022B2 (en) | Health diagnostics and analytics for object repositories | |
Ostrand et al. | A Tool for Mining Defect-Tracking Systems to Predict Fault-Prone Files. | |
Carvalho et al. | DMOSS: Open source software documentation assessment | |
JP2008112363A (ja) | 文書処理装置および文書処理プログラム | |
JP5900486B2 (ja) | 関連仕様対応付けシステム、関連仕様対応付け方法およびプログラム | |
US7886137B1 (en) | Template-based BIOS project creation | |
JP5326781B2 (ja) | 抽出規則作成システム、抽出規則作成方法及び抽出規則作成プログラム | |
CN114676155A (zh) | 代码提示信息的确定方法、数据集的确定方法及电子设备 | |
JP2011175446A (ja) | 要件・バグレポート処理システム及びその方法 | |
US20110225126A1 (en) | Method, Apparatus and Software for Maintaining Consistency Between a Data Object and References to the Object Within a File | |
JP2008117280A (ja) | ソフトウェアソースコードの検索方法及びシステム | |
JP6960270B2 (ja) | 設計書学習装置および設計書学習方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20051125 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20071024 |