(57)【要約】【課題】修正箇所と同様の修正を行う可能性が高い箇所を効率よく高精度で検索可能な類似修正箇所検索方法とそのためのプログラムを提供する。【解決手段】修正前のソースファイルＦ１と修正後のソースファイルＦ２とを比較して差分検出を行い、修正前のソースファイルＦ１中の修正された箇所を特定し、修正箇所Ｐ１として記録する（Ｓ１０１）。ブロック作成ルールＲ２に基づき、各修正箇所Ｐ１のコードを含む比較元ブロックＢ１と、修正箇所の記述に類似する類似箇所Ｐ２のコードを含む比較対象ブロックＢ１を作成する（Ｓ１０２）。類似ブロック比較・判定ルールＲ３に基づき、コードの類似度と位置に応じて、比較対象ブロックＢ２の中から比較元ブロックＢ１と類似する類似ブロックＢ３を検索する（Ｓ１０３）。各比較元ブロックＢ１と検索された類似ブロックＢ３の組み合わせを検索結果として出力する（Ｓ１０４）。【選択図】　図１
2004062394.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータを利用して、ソフトウェアを構成するソースファイルに対して修正が行われた場合にその修正と同様の修正を行う可能性が高い類似修正箇所を検索する類似修正箇所検索方法において、
ソースファイルが修正された場合に、修正前のソースファイルを修正後のソースファイルと比較して、修正前のソースファイル中の修正された箇所を特定する差分検出ステップと、
前記修正前のソースファイル中で、前記修正された箇所のコードを含むコード群からなる比較元ブロックと、前記修正された箇所に類似する箇所のコードを含むコード群からなる比較対象ブロックを作成するブロック作成ステップと、
前記比較対象ブロックの中から、前記比較元ブロックと類似する記述内容を持つ類似ブロックを検索する類似ブロック検索ステップと、
前記類似ブロックの検索結果を出力する検索結果出力ステップと、
を有することを特徴とする類似修正箇所検索方法。
【請求項２】
前記ブロック作成ステップは、あるコードが指定された場合に、予め設定されたブロック作成ルールに基づいて、その周辺のコード群をまとめて１単位としたブロックを作成する単位ブロック作成ステップを含む、
ことを特徴とする請求項１に記載の類似修正箇所検索方法。
【請求項３】
前記単位ブロック作成ステップは、あるコードが指定された場合に、そのコードの位置を基準位置としてその基準位置から所定の方向にコードを順次辿り、前記ブロック作成ルールに基づいて各コードをブロックに含めるか否かを判定することによりブロックの範囲を決定する範囲決定ステップを含む、
ことを特徴とする請求項２に記載の類似修正箇所検索方法。
【請求項４】
前記ブロック作成ステップは、前記修正された箇所のコードに対する類似度に応じて、予め設定されたコード検索ルールに基づき、前記類似する箇所のコードと判定されるコードを検索するコード検索ステップを含む、
ことを特徴とする請求項１乃至３のいずれかに記載の類似修正箇所検索方法。
【請求項５】
前記類似ブロック検索ステップは、前記比較対象ブロックの各々を前記比較元ブロックと比較し、ブロックに含まれる個々のコード同士の類似度と各コードのブロック内における位置に応じて、予め設定された類似ブロック比較・判定ルールに基づき、各比較対象ブロックが比較元ブロックと類似する記述内容を持つ類似ブロックであるか否かを判定する類似ブロック比較・判定ステップを含む、
ことを特徴とする請求項１乃至請求項４のいずれかに記載の類似修正箇所検索方法。
【請求項６】
前記類似ブロック比較・判定ステップは、
前記比較対象ブロック中の各コードについて、前記比較元ブロック中のコードに対する類似度とブロック内における位置に応じて、前記類似ブロック比較・判定ルールに基づき、コードの評価を行うコード評価ステップと、
前記比較対象ブロック中の各コードの評価結果から得られるブロック中のコードの総合評価に応じて、前記類似ブロック比較・判定ルールに基づき、類似ブロックであるか否かを判定するブロック評価ステップを含む、
ことを特徴とする請求項５に記載の類似修正箇所検索方法。
【請求項７】
前記コードの類似度は、比較するコードを構成する文字列間における、最長一致する部分文字列の割合に応じて決定される
ことを特徴とする請求項４乃至請求項６のいずれかに記載の類似修正箇所検索方法。
【請求項８】
コンピュータを利用して、ソフトウェアを構成するソースファイルに対して修正が行われた場合にその修正と同様の修正を行う可能性が高い類似修正箇所を検索するためのプログラムにおいて、
ソースファイルが修正された場合に、修正前のソースファイルを修正後のソースファイルと比較して、修正前のソースファイル中の修正された箇所を特定する差分検出機能と、
前記修正前のソースファイル中で、前記修正された箇所のコードを含むコード群からなる比較元ブロックと、前記修正された箇所に類似する箇所のコードを含むコード群からなる比較対象ブロックを作成するブロック作成機能と、
前記比較対象ブロックの中から、前記比較元ブロックと類似する記述内容を持つ類似ブロックを検索する類似ブロック検索機能と、
前記類似ブロックの検索結果を出力する検索結果出力機能と、
をコンピュータに実現させることを特徴とするプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ソフトウェアを構成するソースファイルに対して修正が行われた場合に、そのソースファイル中において、修正された箇所と同様の修正を行う可能性が高い箇所を検索する方法とそのためのプログラムに関する。
【０００２】
【従来の技術】
ソフトウェアを構成するソースファイルは、複数の箇所で、類似するコードが記述されることが多い。このようなソースファイルでは、それら類似するコードのどれかに対して修正を行った場合に、他の類似するコードに対しても同様の修正を行うことが多い。
【０００３】
このような、複数箇所で記述された類似するコードを検索する方法としては、ユーザが指定した文字列と一致する文字列をソースファイル中から検索する文字列検索方法が一般的である。しかし、この方法によると、検索される文字列がユーザの修正コードとたまたま同じにすぎないコードが数多く検索されてしまう場合がある。この場合には、検索結果の中で本当に修正が必要な箇所を特定する作業に多くの手間がかかってしまい、効率が悪い。
【０００４】
一方、上述の文字列検索方法に対し、連続したコードをコード群として指定し、指定したコード群と類似するコード群を検索するコード群検索方法（特開２００１−１２５７８３号公報）も提案されている。このコード群検索方法によると、比較元ソースプログラムであるコード群と、比較対象ソースプログラムを入力として与えることにより、比較対象ソースプログラム中で、比較元ソースプログラムと類似する記述内容を持つコード群を検索することができる。
【０００５】
【発明が解決しようとする課題】
しかしながら、上記のような従来のコード群検索方法では、ソースファイル中のどこからどこまでを一個のコード群とするかをあらかじめユーザが指定しなければならないため、検索作業の効率が低いという問題点がある。また、ユーザが修正を行った箇所を含むコード群を適切に指定できない場合には、比較元と同様の修正が必要な箇所が検索できなかったり、逆に、比較元と同様の修正が不要な箇所が多数検索されてしまう等、検索精度が低下してしまう。
【０００６】
特に、比較元ソースプログラムと比較対象ソースプログラムを１処理単位（；で区切られる１行）で比較し、比較元の記述と完全または部分的に一致する行数が、比較対象中にどれだけあるかを判定基準としているため、コードの記述順序の違いや、コード間に異なる別のコードが挿入された場合でも類似するコード群として検索されてしまう。
【０００７】
したがって、ユーザが修正を行った箇所を含むコード群を適切に指定した場合であっても、比較元と同様の修正が本当に必要な箇所を検索できる一方で、比較元と同様の修正が不要な箇所が多数検索されてしまうことがあるため、高い検索精度を確保することは困難である。そして、修正が不要な箇所が多数検索されてしまった場合には、検索結果の中で本当に修正が必要な箇所を特定する作業に手間がかかってしまい、効率が悪い。
【０００８】
上述したように、従来のコード群検索方法においては、修正箇所を含む比較元コード群をユーザ自身が指定することにより、修正箇所と同様の修正を行う可能性が高い箇所を含むコード群を検索できるものの、その検索作業の効率と検索精度はユーザのコード群指定結果に大きく左右されるため、類似修正箇所を効率よく高精度で検索することは困難であった。
【０００９】
本発明は、上記のような従来技術の問題点を解消するために提案されたものであり、その目的は、ソースファイルに対して修正が行われた場合に、修正箇所を含む比較元コード群を適切に指定可能として、比較元コード群と類似する比較対象コード群を効率よく高精度で検索可能とすることにより、修正箇所と同様の修正を行う可能性が高い箇所を効率よく高精度で検索可能な類似修正箇所検索方法とそのためのプログラムを提供することである。
【００１０】
【課題を解決するための手段】
上記の目的を達成するために、本発明は、修正前と修正後のソースファイルを比較して修正箇所を特定し、修正箇所のコードを含む比較元ブロックと類似するコードを含む比較対象ブロックを作成することにより、修正箇所を含む比較元ブロックを適切に指定して、修正前のソースファイル中で比較元ブロックと類似するブロックを効率よく高精度に検索できるようにしたものである。
【００１１】
なお、本発明において、重要な用語の定義は次の通りである。
「類似」、「類似する」は、対象に応じて予め設定された算出方法で求められる類似度が予め設定された基準値以上であることを示しており、部分的に一致する場合だけでなく、完全に一致する場合（類似度１００％）を含む広い概念である。
【００１２】
請求項１の発明は、コンピュータを利用して、ソフトウェアを構成するソースファイルに対して修正が行われた場合にその修正と同様の修正を行う可能性が高い類似修正箇所を検索する類似修正箇所検索方法において、差分検出ステップ、ブロック作成ステップ、類似ブロック検索ステップ、検索結果出力ステップ、を有することを特徴としている。
【００１３】
ここで、差分検出ステップは、ソースファイルが修正された場合に、修正前のソースファイルを修正後のソースファイルと比較して、修正前のソースファイル中の修正された箇所を特定するステップである。また、ブロック作成ステップは、修正前のソースファイル中で、修正された箇所のコードを含むコード群からなる比較元ブロックと、修正された箇所に類似する箇所のコードを含むコード群からなる比較対象ブロックを作成するステップである。さらに、類似ブロック検索ステップは、比較対象ブロックの中から、比較元ブロックと類似する記述内容を持つ類似ブロックを検索するステップであり、検索結果出力ステップは、類似ブロックの検索結果を出力するステップである。
【００１４】
請求項８の発明は、請求項１の発明をプログラムの観点から把握したものであり、コンピュータを利用して、ソフトウェアを構成するソースファイルに対して修正が行われた場合にその修正と同様の修正を行う可能性が高い類似修正箇所を検索するためのプログラムにおいて、請求項１の発明における各ステップに対応する各機能、すなわち、差分検出機能、ブロック作成機能、類似ブロック検索機能、検索結果出力機能、をコンピュータに実現させることを特徴としている。
【００１５】
以上のような発明によれば、修正前と修正後のソースファイルを比較して差分検出を行うことにより、修正された箇所を適切に検索することができる。そのため、修正前のソースファイル中で修正箇所のコードとその周辺のコードを含むコード群からなる比較元ブロックを適切に作成することができ、また、修正箇所のコードと類似する類似コードを含むコード群からなる比較対象ブロックを適切に作成することができる。そして、比較元ブロックと比較対象ブロックをブロック単位で比較することにより、比較元ブロックの記述内容だけでなく記述順序についてもよく似た類似ブロックを、修正前のソースファイル中において効率よく高精度で検索することができる。したがって、修正後のソースファイル中において、ユーザが行った修正箇所と類似する箇所のうち、同様の修正を行う可能性が高い類似修正箇所を、効率よく高精度で検索することが可能となる。
【００１６】
請求項２の発明は、請求項１の類似修正箇所検索方法において、ブロック作成ステップが単位ブロック作成ステップを含むことを特徴としている。ここで、単位ブロック作成ステップは、あるコードが指定された場合に、予め設定されたブロック作成ルールに基づいて、その周辺のコード群をまとめて１単位としたブロックを作成するステップである。
【００１７】
請求項３の発明は、請求項２の類似修正箇所検索方法において、単位ブロック作成ステップが範囲決定ステップを含むことを特徴としている。ここで、範囲決定ステップは、あるコードが指定された場合に、そのコードの位置を基準位置としてその基準位置から所定の方向にコードを順次辿り、前記ブロック作成ルールに基づいて各コードをブロックに含めるか否かを判定することによりブロックの範囲を決定するステップである。
【００１８】
以上のような発明によれば、修正箇所のコードやその類似コードが指定された場合に、そのコードを含むブロックをブロック作成ルールに基づいて自動的に作成することができる。したがって、ユーザにコード群を指定させる場合に比べて、常に適切なコード群からなる適切なブロックを効率よく作成することができる。
【００１９】
請求項４の発明は、請求項１乃至請求項３のいずれかの類似修正箇所検索方法において、ブロック作成ステップがコード検索ステップを含むことを特徴としている。ここで、コード検索ステップは、修正された箇所のコードに対する類似度に応じて、予め設定されたコード検索ルールに基づき、類似する箇所のコードと判定されるコードを検索するステップである。
この発明によれば、一定の類似度以上のコードのみについて比較対象ブロックを作成することにより、無駄なブロックの作成を抑制することができるため、ブロック作成ステップの効率を向上すると共に、続く類似ブロック検索ステップの効率を向上することができる。
【００２０】
請求項５の発明は、請求項１乃至請求項４のいずれかの類似修正箇所検索方法において、類似ブロック検索ステップが類似ブロック比較・判定ステップを含むことを特徴としている。ここで、類似ブロック比較・判定ステップは、比較対象ブロックの各々を比較元ブロックと比較し、ブロックに含まれる個々のコード同士の類似度と各コードのブロック内における位置に応じて、予め設定された類似ブロック比較・判定ルールに基づき、各比較対象ブロックが比較元ブロックと類似する記述内容を持つ類似ブロックであるか否かを判定するステップである。
【００２１】
請求項６の発明は、請求項５の類似修正箇所検索方法において、類似ブロック比較・判定ステップが、コード評価ステップとブロック評価ステップを含むことを特徴としている。ここで、コード評価ステップは、比較対象ブロック中の各コードについて、比較元ブロック中のコードに対する類似度とブロック内における位置に応じて、類似ブロック比較・判定ルールに基づき、コードの評価を行うステップである。また、ブロック評価ステップは、比較対象ブロック中の各コードの評価結果から得られるブロック中のコードの総合評価に応じて、類似ブロック比較・判定ルールに基づき、類似ブロックであるか否かを判定するステップである。
【００２２】
以上のような発明によれば、比較対象ブロックの各々を比較元ブロックと比較し、類似ブロック比較・判定ルールに基づき、各比較対象ブロックが比較元ブロックと類似する記述内容を持つ類似ブロックであるか否かを自動的に判定することができる。特に、コードの類似度と位置に応じて判定を行うことから、単に個々のコードが類似しているかだけでなく、コードの記述順序が類似しているかについても判定できるため、記述内容がより客観的に類似している類似ブロックを効率よく高精度で検索することができる。
【００２３】
請求項７の発明は、請求項４乃至請求項６のいずれかの類似修正箇所検索方法において、コードの類似度が、比較するコードを構成する文字列間における、最長一致する部分文字列の割合に応じて決定されることを特徴としている。
この発明によれば、コードの類似度を自動的に算出することができるため、各種の条件に応じた任意の類似度を設定して、その類似度以上のコードのみを類似コードとして効率よく検索することが可能である。
【００２４】
【発明の実施の形態】
以下には、本発明の実施形態を図面に沿って具体的に説明する。ただし、ここで記載する実施形態は、本発明を何ら限定するものではなく、本発明の一態様を例示するものにすぎない。
【００２５】
本発明は、典型的には、コンピュータをソフトウェアで制御することにより実現される。この場合のソフトウェアは、コンピュータのハードウェアを物理的に活用することで本発明の作用効果を実現するものであり、また、従来技術を適用可能な部分には好適な従来技術が適用される。さらに、本発明を実現するハードウェアやソフトウェアの具体的な種類や構成、ソフトウェアで処理する範囲などは自由に変更可能であり、例えば、本発明を実現するプログラムは本発明の一態様である。
【００２６】
［１．類似修正箇所検索処理の概要］
図１は、本発明を適用した類似修正箇所検索処理の概要を示すフローチャートである。この図１に示すように、個々のステップにおける各種の判定に使用するルールとして、コード検索を行うためのコード検索ルールＲ１、比較元ブロックや比較対象ブロックを作成するためのブロック作成ルールＲ２、比較対象ブロックの各々を比較元ブロックと比較して類似ブロックであるか否かの判定を行うための類似ブロック比較・判定ルールＲ３、等が予め設定されている。
【００２７】
類似修正箇所検索にあたってはまず、ユーザによって修正されたソースファイルについて、修正前のソースファイルＦ１と修正後のソースファイルＦ２とを比較して差分検出を行い、修正前のソースファイルＦ１中の修正された箇所を特定し、修正箇所Ｐ１として記録する（Ｓ１０１）。
【００２８】
記録された各修正箇所Ｐ１のコードについて、ブロック作成ルールＲ２に基づき、その周辺のコード群をまとめて１単位とした比較元ブロックＢ１を作成するとともに、修正箇所の記述に類似する類似箇所Ｐ２のコードについて、ブロック作成ルールＲ２に基づき、その周辺のコード群をまとめて１単位とした比較対象ブロックＢ１を作成する（Ｓ１０２）。
【００２９】
続いて、作成された比較対象ブロックＢ２の中から、比較元ブロックＢ１と類似する記述内容を持つ類似ブロックＢ３を検索する。すなわち、比較対象ブロックＢ２の各々を比較元ブロックＢ１と比較し、ブロックに含まれる個々のコード同士の類似度と各コードのブロック内における位置に応じて、類似ブロック比較・判定ルールＲ３に基づき、各比較対象ブロックが比較元ブロックと類似する記述内容を持つ類似ブロックであるか否かを判定することにより、類似ブロックＢ３を検索する（Ｓ１０３）。最終的に、各比較元ブロックＢ１と検索された類似ブロックＢ３の組み合わせを検索結果として出力する（Ｓ１０４）。
【００３０】
［２．差分検出処理］
図２は、図１に示す差分検出処理（Ｓ１０１）のサブルーチンを示すフローチャートである。この図２に示すように、差分検出に当たってはまず、修正前のソースファイルＦ１の入力（Ｓ２０１）と、修正後のソースファイルＦ２の入力（Ｓ２０２）を行う。
【００３１】
これら異なるバージョンのソースファイルＦ１，Ｆ２を比較して差分検出を行い、修正前のソースファイルＦ１中の修正された箇所を検出する（Ｓ２０３）。変更が検出された箇所のコードが、ユーザが修正を行ったコードであるから、修正された箇所が検出されれば、修正前のソースファイルＦ１における修正されたコード（修正前コード）を特定できるため、そのコードを修正箇所Ｐ１として記録する（Ｓ２０４）
【００３２】
ここで、コードは、改行あるいはセミコロン「；」で終わる文字列を１単位とする。また、コードの修正には、▲１▼コードの記述内容を変更した場合、▲２▼コードを削除した場合、▲３▼コードを追加した場合、の３通りの修正があるが、このうち、▲１▼「コード変更」、▲２▼「コード削除」については、修正前のソースファイルＦ１中に、修正前のコードが必ず存在するため、修正前コードを容易に特定できる。これに対して、▲３▼「コード追加」については、修正前のソースファイルＦ１中には修正前コードが存在しないため、修正したコードの次の位置にあるコードや、直前の位置にあるコード、あるいはユーザによって指定された任意のコード、等の修正前に存在する何らかのコードを、修正前コードとして代用する。
【００３３】
［３．ブロック作成処理］
図３は、図１に示すブロック作成処理（Ｓ１０２）のサブルーチンを示すフローチャートであり、図４は、図３に示す単位ブロック作成処理（Ｓ３０４、Ｓ３０８）のサブルーチンを示すフローチャートである。
【００３４】
図３に示すように、ブロック作成に当たってはまず、修正前のソースファイルＦ１を入力し（Ｓ３０１）、差分検出処理で記録された修正箇所Ｐ１を取得する（Ｓ３０２）。そして、修正箇所Ｐ１のコードを指定して（Ｓ３０３）、指定されたコードについて、図４に示すような単位ブロック作成処理を行い、ブロック作成ルールＲ２に基づき、そのコードを含む周辺のコード群をまとめて１単位としたブロックを作成し（Ｓ３０４）、作成したブロックを比較元ブロックとする（Ｓ３０５）。
【００３５】
次に、修正前のソースファイルＦ１中で、修正箇所Ｐ１に類似する類似箇所Ｐ２を検索する（Ｓ３０６）。なお、修正箇所Ｐ１の記述に類似する類似箇所Ｐ２のコードとしては、修正前のソースファイルＦ１中で、コード検索ルールＲ１に基づき、修正箇所Ｐ１のコードに対する類似度が予め設定された基準値以上であるコードを検索する。そして、検索された類似箇所Ｐ２のコードを指定して（Ｓ３０７）、指定されたコードについて、図４に示すような単位ブロック作成処理を行い、ブロック作成ルールＲ２に基づき、そのコードを含む周辺のコード群をまとめて１単位としたブロックを作成する（Ｓ３０８）。
【００３６】
続いて、修正箇所Ｐ１に類似する類似箇所Ｐ２を全て検索したかどうかを調べ（Ｓ３０９）、残りの類似箇所Ｐ２がある場合（Ｓ３０９のＮＯ）には、それらの類似箇所Ｐ２のコードについてＳ３０６〜Ｓ３０８を繰り返し、ブロックを作成する。また、残りの類似箇所Ｐ２がない場合（Ｓ３０９のＹＥＳ）には、Ｓ３０６〜Ｓ３０８によって作成したブロック（群）を比較対象ブロック（群）とする（Ｓ３１０）。
【００３７】
さらに、差分検出処理で記録された修正箇所Ｐ１の全てに対して、比較対象ブロック（群）を作成したかどうかを調べ（Ｓ３１１）、残りの修正箇所Ｐ１がある場合（Ｓ３１２のＮＯ）には、それらの修正箇所Ｐ１についてＳ３０２〜Ｓ３１０を繰り返し、比較元ブロックおよび比較対象ブロック（群）を作成する。そして、残りの修正箇所Ｐ１がなくなった場合（Ｓ３１１のＹＥＳ）には、一連のブロック作成処理を終了する。
【００３８】
［３−１．コード検索処理の詳細］
以下には、図３に示す一連のブロック作成処理のうち、Ｓ３０６におけるコード検索処理の詳細について説明する。このコード検索処理においては、修正前のソースファイルＦ１において、修正前コードと類似する記述がされているコード（類似コード）を検索する。
【００３９】
このコード検索処理においては、修正前コードを構成する文字列と完全一致するコードを検索するだけでなく、部分一致するコードの検索（曖昧検索）を可能とするため、コード検索ルールＲ１を用いる。コード検索ルールＲ１には、修正前コードを構成する文字列のうち、比較するコードの文字列と最長一致する部分文字列の割合がある値以上の場合に、そのコードを類似コードと判定するための基準値を予め設定しておく。
【００４０】
たとえば、図５に示すコード検索ルールＲ１の例では、最長一致する部分文字列の割合が８０％以上である場合に類似コードと見なすように設定している。この例で示すルールに従うと、たとえば、修正前コード「ｗｈｉｌｅ　（ａ＜０）｛」とコード「ｗｈｉｌｅ　（ａ＜＝０）　｛」を比較した場合に、最長一致する部分文字列は「ｗｈｉｌｅ　（ａ＜」であるから、「ｗｈｉｌｅ　（ａ＜０）」（１１文字）中の「ｗｈｉｌｅ　（ａ＜」（９文字）として計算し、８２％という値が求められる。この値はコード検索ルールＲ１で設定した基準値８０％を上回るので、コード「ｗｈｉｌｅ　（ａ＜＝０）　｛」は、修正前コード「ｗｈｉｌｅ　（ａ＜０）　｛」の類似コードとして検索される。
【００４１】
［３−２．単位ブロック作成処理の詳細］
以下には、図３に示す一連のブロック作成処理のうち、Ｓ３０４、Ｓ３０８における単位ブロック作成処理の詳細について、図４のフローチャートを参照して説明する。図４に示すように、単位ブロック作成処理においてはまず、指定されたコードを基準コードとして（Ｓ４０１）、ソースファイル中で基準コードを検索する（Ｓ４０２）。
【００４２】
基準コードの位置をソースファイル中の基準位置ｎとし（Ｓ４０３）、ブロック範囲を基準位置から、ソースファイル中の上下方向に拡張していく。すなわち、ソースファイルは、改行あるいはセミコロン「；」で終わる１行の文字列として表現される１単位のコードを、上下に複数行並べた文字列群として表現できるが、そのような文字列群において、基準位置ｎの行を起点とし、ブロック範囲の行の上限位置および行の下限位置を拡張していく。
【００４３】
まず、基準位置ｎから開始して（Ｓ４０４）、１行ずつ上方向に移動していき（Ｓ４０５）、移動した位置のコードがブロック作成ルールＲ２を満たすか否かを判定する（Ｓ４０６）。そして、移動した位置のコードがブロック作成ルールＲ２を満たす限り（Ｓ４０６のＹＥＳ）、そのコードをブロックに含め、次のコードに移動してブロック作成ルールＲ２を満たすか否かを判定する（Ｓ４０５、Ｓ４０６）、という動作を繰り返すことにより、ブロック範囲を上方向に１行ずつ拡張していく。移動した位置のコードがブロック作成ルールＲ２を満たさなくなった時点（Ｓ４０６のＮＯ）で、上方向へのブロック範囲の拡張を終了して、次に下方向へのブロック範囲の拡張を行う。
【００４４】
下方向へも同様に、基準位置ｎから開始して（Ｓ４０７）、１行ずつ下方向に移動していき（Ｓ４０８）、移動した位置のコードがブロック作成ルールＲ２を満たすか否かを判定する（Ｓ４０９）。そして、移動した位置のコードがブロック作成ルールＲ２を満たす限り（Ｓ４０９のＹＥＳ）、そのコードをブロックに含め、次のコードに移動してブロック作成ルールＲ２を満たすか否かを判定する（Ｓ４０８、Ｓ４０９）、という動作を繰り返すことにより、ブロック範囲を下方向に１行ずつ拡張していく。移動した位置のコードがブロック作成ルールＲ２を満たさなくなった時点（Ｓ４０９のＮＯ）で、下方向へのブロック範囲の拡張を終了して、上方向への拡張時に求めた上限のコードから下限のコードまでの間を、ブロック範囲として決定する（Ｓ４１０）。
【００４５】
たとえば、図６に示すブロック作成ルールＲ２の例によると、「同インデント」、「下位のインデント」、「空行」、のルールが適用されているため、基準位置のコードのインデントが同じか下位のインデントのコードと、空行を含んだブロックが作成される。ここで、「インデント」とは、ソースファイル中に命令群の開始記号「｛」が見られれば、それに続くコードは相対的にインデントを一つ下げ、逆に命令群の終端記号「｝」が見られれば、それに続くコードのインデントを相対的に一つ上げるといったように、ワープロ文書の字下げ位置に相当するパラメータである。
【００４６】
このようなインデントを基にして、先述の「同インデント」、「下位のインデント」、「空行」、を含むブロック範囲を決定すると、図７に示すように、基準位置のコードを含んだブロックが作成される。この例では、「コメント行」のルールが非適用であるために、インデントが同じであっても、コメント行が記述されたコードは含まないようにしてブロック範囲の上限が決定されている。また、「上位のインデント」のルールが非適用であるために、基準位置のインデントから上位に位置する終端記号「｝」以降のコードを含まないようにしてブロック範囲の下限が決定されている。
【００４７】
［４．類似ブロック検索処理］
図８は、図１に示す類似ブロック検索処理（Ｓ１０３）のサブルーチンを示すフローチャートであり、図９は、図８に示すコード評価処理（Ｓ８０７）のループを示すフローチャートである。
【００４８】
図８に示すように、類似ブロック検索に当たってはまず、ブロック作成処理で修正前コードについて作成されたブロックを取得し、これを比較元ブロックとする（Ｓ８０１）。そして、比較元ブロックのブロック範囲の長さをｎとし（Ｓ８０２）、比較元ブロックにおける基準位置となるコードの位置Ｎを求めておく（Ｓ８０３）。次に、ブロック作成処理で類似コードのそれぞれについて作成されたブロックを取得し、これを比較対象ブロックとする（Ｓ８０４）。そして、比較対象ブロックのブロック範囲の長さをｍとし（Ｓ８０５）、比較対象ブロックにおける基準位置となるコードの位置Ｍを求めておく（Ｓ８０６）。
【００４９】
続いて、これらの比較元ブロックと比較対象ブロックを比較し、類似ブロック比較・判定ルールＲ３を用いて、比較対象ブロックが比較元ブロックと類似する類似ブロックであるか否かを判定する（Ｓ８０７〜Ｓ８１０）。すなわち、図１０に示すような類似ブロック比較・判定ルールＲ３を用いて、比較対象ブロック中のコードについて、図９に示すようなコード評価処理を行い、比較元ブロック中のコードに対する類似度とブロック内における位置に応じた得点を計算する（Ｓ８０７）。そして、各コードの得点結果（評価結果）から得られるブロック中のコードの合計点（総合評価）が、比較元ブロックの長さｎに応じて決定される基準得点以上であるか否かに応じて（Ｓ８０８）、類似ブロックであるか否かを判定する（Ｓ８０９、Ｓ８１０）。
【００５０】
［４−１．コード評価処理の詳細］
以下には、図８に示す一連の類似ブロック検索処理のうち、Ｓ８０７におけるコード評価処理の詳細について、図９のフローチャートを参照して説明する。図９に示すように、コード評価処理においてはまず、比較元ブロックのコードを１行目から順に取得して比較元コードとし（Ｓ９０１〜Ｓ９０４）、比較対象ブロックのコードを１行目から順に取得して比較対象コードとする（Ｓ９０５〜Ｓ９０８）。
【００５１】
各比較対象コードを比較元コードと比較して、比較対象コードを構成する比較対象文字列のうちで最長一致する部分文字列の、比較元コードの比較元文字列に対する割合を求め、これをコード間の類似度として、コード間の類似度が基準値以上であるか否かを調べる（Ｓ９０９）。そして、類似度が基準値以上である場合（Ｓ９０９のＹＥＳ）には、比較対象コードは、比較元コードに類似する類似コードであると判定する（Ｓ９１０）。
【００５２】
たとえば、比較元文字列「ｓｔｒｃｍｐ」と比較対象文字列「ｓｔｒｃｐｙ」では、最長一致する部分文字列は「ｓｔｒｃ」であるので、コード間の類似度は「ｓｔｒｃｍｐ（６文字）中の「ｓｔｒｃ」（４文字）と計算し、６７％という値が求められる。図１０の例では、類似コードの定義（基準値）として８０％以上を設定しているため、これらのコード同士は類似と判定されない。なお、類似度が基準値に満たない場合（Ｓ９１０のＮＯ）には、Ｓ９０７、Ｓ９０８で比較対象ブロックにおける次の行のコードを比較対象コードとして取得する。
【００５３】
類似コードと判定した場合（Ｓ９１０）には、その類似コードについて、基準位置からの相対距離に応じた得点計算を行う（Ｓ９１１〜Ｓ９１３）。ここで、比較元ブロック中の同じ比較元コードに対して、比較対象ブロック中に複数の類似コードが存在する場合（Ｓ９１１のＹＥＳ）には、それらの中で、比較対象ブロックにおける基準位置Ｍからの相対距離（Ｍ−ｊ）が、比較元ブロックにおける基準位置Ｎからの相対距離（Ｎ−ｋ）により近いものを、類似コードとする（Ｓ９１２）。
【００５４】
そして、類似コードについて、比較元ブロックの基準位置Ｎからの相対距離（Ｎ−ｋ）をＤ１とし、比較対象ブロックにおける基準位置Ｍからの相対距離（Ｍ−ｊ）をＤ２とした場合に、相対距離Ｄ１，Ｄ２に応じた得点計算を行う（Ｓ９１３）。すなわち、Ｄ１とＤ２が同じであればブロックの類似度の得点に１点を加える。また、Ｄ１とＤ２の差が大きくなるほど、比較元ブロックと比較対象ブロックの間でコードの記述順序に違いが大きくなるので、相対距離の差に応じて得点を減じる。
【００５５】
図１０の例では、基準位置からの相対距離に応じた得点計算方法として、Ｄ１とＤ２の差を計算し、Ｄ１とＤ２の差が１つ大きくなるほど、得点に０．９を乗じるという計算式を適用している。この計算式をたとえば、図１１の例に適用した場合、比較元ブロックと比較対象ブロックにおいて、それぞれ基準位置のコードから「ｆｕｎｃＡ（）；」という記述までの相対距離を求めると、Ｄ１＝３、Ｄ２＝７である。Ｄ１とＤ２の差の絶対値が４であるから、ブロックの類似度に加算される得点は、０．９４＝０．６５６１点となる。
【００５６】
以上のようにして、比較元ブロックにおける各コードに対して比較対象ブロックのコードの得点を計算し（Ｓ９０５〜Ｓ９１４）、合計点に加算する（Ｓ９１５）。比較元ブロックの全てのコードに対する比較対象ブロックの得点を合計して（Ｓ９０１〜Ｓ９１６）、合計点（総合評価）を比較対象ブロックの類似度とする。
【００５７】
［４−２．ブロック評価処理の詳細］
上記のコード評価処理を行った場合、比較対象ブロックの類似度の最高得点は、ブロックの長さの値になる。したがって、合計点（総合評価）による類似ブロックの判定に当たっては、比較元ブロックの長さをｎとしたとき、これに類似ブロックの定義（基準値）として設定した値（パーセンテージ）を乗じて求めた値（ｎ×基準値）を基準得点とし、ブロックの類似度が基準得点以上であるか否かを調べる（Ｓ８０８）。
【００５８】
そして、ブロックの類似度が基準得点以上である場合（Ｓ８０８のＹＥＳ）には、類似ブロックと判定し（Ｓ８０９）、基準得点に満たない場合（Ｓ８０８のＮＯ）には、類似ブロックでないと判定して（Ｓ８１０）、類似ブロック検索処理を終了する。たとえば、図１０の例では、類似ブロックの定義（基準値）として８０％以上を設定しているため、ブロックの長さが１５である場合には、ブロックの類似度を求めた値が１２以上であれば、類似ブロックと判定し、類似ブロック検索処理を終了する。
【００５９】
［５．検索結果出力処理］
図１２は、図１に示す検索結果出力処理（Ｓ１０４）のサブルーチンを示すフローチャートである。この図１２に示すように、検索結果出力に当たってはまず、ブロック作成処理で修正前コードについて作成された比較元ブロックＢ１を取得する（Ｓ１２０１）。次に、ブロック作成処理で修正前コードについて作成された比較対象ブロック（群）のうち、類似ブロック検索処理で類似ブロックと判定されたブロック（群）を取得する（Ｓ１２０２）。そして、取得した比較元ブロックと類似ブロック（群）の組見合わせを順次出力する（Ｓ１２０３）。
【００６０】
［６．実施形態の作用・効果］
以上のような本実施形態の類似修正箇所検索処理によれば、次のような作用・効果が得られる。
【００６１】
まず、修正前と修正後のソースファイルを比較して差分検出を行うことにより、修正された箇所を適切に検索することができる。そのため、修正前のソースファイル中で修正箇所のコードとその周辺のコードを含むコード群からなる比較元ブロックを適切に作成することができ、また、修正箇所のコードと類似する類似コードを含むコード群からなる比較対象ブロックを適切に作成することができる。
【００６２】
そして、比較元ブロックと比較対象ブロックをブロック単位で比較することにより、比較元ブロックの記述内容だけでなく記述順序についてもよく似た類似ブロックを、修正前のソースファイル中において効率よく高精度で検索することができる。したがって、修正後のソースファイル中において、ユーザが行った修正箇所と類似する箇所のうち、同様の修正を行う可能性が高い類似修正箇所を、効率よく高精度で検索することが可能となる。
【００６３】
また、ブロック作成処理においては、修正箇所のコードやその類似コードを含むブロックをブロック作成ルールに基づいて自動的に作成することができる。したがって、ユーザにコード群を指定させる場合に比べて、常に適切なコード群からなる適切なブロックを効率よく作成することができる。ブロック作成処理においてはまた、一定の類似度以上のコードのみについて比較対象ブロックを作成することにより、無駄なブロックの作成を抑制することができるため、ブロック作成処理の効率を向上すると共に、続く類似ブロック検索処理の効率を向上することができる。
【００６４】
一方、類似ブロック検索処理においては、比較対象ブロックの各々を比較元ブロックと比較し、類似ブロック比較・判定ルールに基づき、各比較対象ブロックが比較元ブロックと類似する記述内容を持つ類似ブロックであるか否かを自動的に判定することができる。特に、コードの類似度と位置に応じて判定を行うことから、単に個々のコードが類似しているかだけでなく、コードの記述順序が類似しているかについても判定できるため、記述内容がより客観的に類似している類似ブロックを効率よく高精度で検索することができる。
【００６５】
また、ブロック作成処理や類似ブロック検索処理においては、コードの類似度を、比較するコードを構成する文字列間における、最長一致する部分文字列の割合として求めている。この場合、コードの類似度を自動的に算出することができるため、各種の条件に応じた任意の類似度を設定して、その類似度以上のコードのみを類似コードとして効率よく検索することが可能である。
【００６６】
［７．他の実施形態］
なお、本発明は、前述した実施形態に限定されるものではなく、本発明の範囲内で他にも多種多様な形態が実施可能である。
【００６７】
まず、図１〜図１２に示した処理手順や各種のルール等は、一例にすぎず、具体的な処理手順やルールは自由に変更可能である。例えば、前記実施形態においては、基準位置から上下２方向にコードを順次辿り、ブロックの範囲を決定する場合について説明したが、ブロック範囲の決定方法は、これに限らず、基準位置から１方向のみにコードを順次辿ってブロックの範囲を決定することも可能である。また、指定されたコードの内容に応じて、ブロックの範囲の決定に異なる方法を採用すること等も可能である。
【００６８】
さらに、各種のルールで使用される基準値等の数値を、ユーザが自由に設定変更できるようにしてもよい。この場合には、ユーザは、検索結果として出力された類似ブロックについて、修正の不要なブロックが多い場合には類似度の基準値を上げ、逆に、類似ブロックが少なすぎて他にも修正の必要な箇所が推測されるような場合には類似度の基準値を下げる等の操作を行うことができる。また、本発明を適用する具体的なソースファイルの形式やデータ構造等は、自由に選択可能である。
【００６９】
【発明の効果】
以上詳述したように、本発明によれば、プログラムのソースファイルに対してユーザが修正を行った場合に、その修正前のバージョンのソースファイル中で、修正した箇所を含むブロックと類似するブロックを高い精度で検索することができる。したがって、修正後のバージョンのソースファイル中で、ユーザが行った修正箇所と類似する箇所に対して、同じような修正が必要となる箇所を効率よく高精度で検索することができる。
【図面の簡単な説明】
【図１】本発明を適用した類似修正箇所検索処理の概要を示すフローチャート。
【図２】図１に示す差分検出処理のサブルーチンを示すフローチャート。
【図３】図１に示すブロック作成処理のサブルーチンを示すフローチャート。
【図４】図３に示す単位ブロック作成処理のサブルーチンを示すフローチャート。
【図５】図３に示すブロック作成処理で使用するコード検索ルールの一例を示すデータ表示図。
【図６】図３に示すブロック作成処理で使用するブロック作成ルールの一例を示すデータ表示図。
【図７】図３に示すブロック作成処理によって作成されたブロックの一例を示すデータ表示図。
【図８】図１に示す類似ブロック検索処理のサブルーチンを示すフローチャート。
【図９】図８に示すコード評価処理のループを示すフローチャート。
【図１０】図８に示す類似ブロック検索処理で使用する類似ブロック比較・判定ルールの一例を示すデータ表示図。
【図１１】図９に示すコード評価処理による相対距離に応じた得点計算の一例を示す説明図。
【図１２】図１に示す検索結果出力処理のサブルーチンを示すフローチャート。
【符号の説明】
Ｆ１…修正前のソースファイル
Ｆ２…修正後のソースファイル
Ｒ１…コード検索ルール
Ｒ２…ブロック作成ルール
Ｒ３…類似ブロック比較・判定ルール
Ｐ１…修正箇所
Ｐ２…類似箇所
Ｂ１…比較元ブロック
Ｂ２…比較対象ブロック
Ｂ３…類似ブロック
【図１】
2004062394.tif 000003
【図２】
2004062394.tif 000004
【図３】
2004062394.tif 000005
【図４】
2004062394.tif 000006
【図５】
2004062394.tif 000007
【図６】
2004062394.tif 000008
【図７】
2004062394.tif 000009
【図８】
2004062394.tif 000010
【図９】
2004062394.tif 000011
【図１０】
2004062394.tif 000012
【図１１】
2004062394.tif 000013
【図１２】
2004062394.tif 000014