JP2004062394A - 類似修正箇所検索方法とそのためのプログラム - Google Patents

類似修正箇所検索方法とそのためのプログラム Download PDF

Info

Publication number
JP2004062394A
JP2004062394A JP2002218097A JP2002218097A JP2004062394A JP 2004062394 A JP2004062394 A JP 2004062394A JP 2002218097 A JP2002218097 A JP 2002218097A JP 2002218097 A JP2002218097 A JP 2002218097A JP 2004062394 A JP2004062394 A JP 2004062394A
Authority
JP
Japan
Prior art keywords
block
code
similar
correction
comparison
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.)
Pending
Application number
JP2002218097A
Other languages
English (en)
Inventor
Makoto Sato
佐藤 誠
Katsuhiko Ueki
植木 克彦
Jiro Okayasu
岡安 二郎
Masayuki Hirayama
平山 雅之
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2002218097A priority Critical patent/JP2004062394A/ja
Publication of JP2004062394A publication Critical patent/JP2004062394A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】修正箇所と同様の修正を行う可能性が高い箇所を効率よく高精度で検索可能な類似修正箇所検索方法とそのためのプログラムを提供する。
【解決手段】修正前のソースファイルF1と修正後のソースファイルF2とを比較して差分検出を行い、修正前のソースファイルF1中の修正された箇所を特定し、修正箇所P1として記録する(S101)。ブロック作成ルールR2に基づき、各修正箇所P1のコードを含む比較元ブロックB1と、修正箇所の記述に類似する類似箇所P2のコードを含む比較対象ブロックB1を作成する(S102)。類似ブロック比較・判定ルールR3に基づき、コードの類似度と位置に応じて、比較対象ブロックB2の中から比較元ブロックB1と類似する類似ブロックB3を検索する(S103)。各比較元ブロックB1と検索された類似ブロックB3の組み合わせを検索結果として出力する(S104)。
【選択図】 図1

Description

【0001】
【発明の属する技術分野】
本発明は、ソフトウェアを構成するソースファイルに対して修正が行われた場合に、そのソースファイル中において、修正された箇所と同様の修正を行う可能性が高い箇所を検索する方法とそのためのプログラムに関する。
【0002】
【従来の技術】
ソフトウェアを構成するソースファイルは、複数の箇所で、類似するコードが記述されることが多い。このようなソースファイルでは、それら類似するコードのどれかに対して修正を行った場合に、他の類似するコードに対しても同様の修正を行うことが多い。
【0003】
このような、複数箇所で記述された類似するコードを検索する方法としては、ユーザが指定した文字列と一致する文字列をソースファイル中から検索する文字列検索方法が一般的である。しかし、この方法によると、検索される文字列がユーザの修正コードとたまたま同じにすぎないコードが数多く検索されてしまう場合がある。この場合には、検索結果の中で本当に修正が必要な箇所を特定する作業に多くの手間がかかってしまい、効率が悪い。
【0004】
一方、上述の文字列検索方法に対し、連続したコードをコード群として指定し、指定したコード群と類似するコード群を検索するコード群検索方法(特開2001−125783号公報)も提案されている。このコード群検索方法によると、比較元ソースプログラムであるコード群と、比較対象ソースプログラムを入力として与えることにより、比較対象ソースプログラム中で、比較元ソースプログラムと類似する記述内容を持つコード群を検索することができる。
【0005】
【発明が解決しようとする課題】
しかしながら、上記のような従来のコード群検索方法では、ソースファイル中のどこからどこまでを一個のコード群とするかをあらかじめユーザが指定しなければならないため、検索作業の効率が低いという問題点がある。また、ユーザが修正を行った箇所を含むコード群を適切に指定できない場合には、比較元と同様の修正が必要な箇所が検索できなかったり、逆に、比較元と同様の修正が不要な箇所が多数検索されてしまう等、検索精度が低下してしまう。
【0006】
特に、比較元ソースプログラムと比較対象ソースプログラムを1処理単位(;で区切られる1行)で比較し、比較元の記述と完全または部分的に一致する行数が、比較対象中にどれだけあるかを判定基準としているため、コードの記述順序の違いや、コード間に異なる別のコードが挿入された場合でも類似するコード群として検索されてしまう。
【0007】
したがって、ユーザが修正を行った箇所を含むコード群を適切に指定した場合であっても、比較元と同様の修正が本当に必要な箇所を検索できる一方で、比較元と同様の修正が不要な箇所が多数検索されてしまうことがあるため、高い検索精度を確保することは困難である。そして、修正が不要な箇所が多数検索されてしまった場合には、検索結果の中で本当に修正が必要な箇所を特定する作業に手間がかかってしまい、効率が悪い。
【0008】
上述したように、従来のコード群検索方法においては、修正箇所を含む比較元コード群をユーザ自身が指定することにより、修正箇所と同様の修正を行う可能性が高い箇所を含むコード群を検索できるものの、その検索作業の効率と検索精度はユーザのコード群指定結果に大きく左右されるため、類似修正箇所を効率よく高精度で検索することは困難であった。
【0009】
本発明は、上記のような従来技術の問題点を解消するために提案されたものであり、その目的は、ソースファイルに対して修正が行われた場合に、修正箇所を含む比較元コード群を適切に指定可能として、比較元コード群と類似する比較対象コード群を効率よく高精度で検索可能とすることにより、修正箇所と同様の修正を行う可能性が高い箇所を効率よく高精度で検索可能な類似修正箇所検索方法とそのためのプログラムを提供することである。
【0010】
【課題を解決するための手段】
上記の目的を達成するために、本発明は、修正前と修正後のソースファイルを比較して修正箇所を特定し、修正箇所のコードを含む比較元ブロックと類似するコードを含む比較対象ブロックを作成することにより、修正箇所を含む比較元ブロックを適切に指定して、修正前のソースファイル中で比較元ブロックと類似するブロックを効率よく高精度に検索できるようにしたものである。
【0011】
なお、本発明において、重要な用語の定義は次の通りである。
「類似」、「類似する」は、対象に応じて予め設定された算出方法で求められる類似度が予め設定された基準値以上であることを示しており、部分的に一致する場合だけでなく、完全に一致する場合(類似度100%)を含む広い概念である。
【0012】
請求項1の発明は、コンピュータを利用して、ソフトウェアを構成するソースファイルに対して修正が行われた場合にその修正と同様の修正を行う可能性が高い類似修正箇所を検索する類似修正箇所検索方法において、差分検出ステップ、ブロック作成ステップ、類似ブロック検索ステップ、検索結果出力ステップ、を有することを特徴としている。
【0013】
ここで、差分検出ステップは、ソースファイルが修正された場合に、修正前のソースファイルを修正後のソースファイルと比較して、修正前のソースファイル中の修正された箇所を特定するステップである。また、ブロック作成ステップは、修正前のソースファイル中で、修正された箇所のコードを含むコード群からなる比較元ブロックと、修正された箇所に類似する箇所のコードを含むコード群からなる比較対象ブロックを作成するステップである。さらに、類似ブロック検索ステップは、比較対象ブロックの中から、比較元ブロックと類似する記述内容を持つ類似ブロックを検索するステップであり、検索結果出力ステップは、類似ブロックの検索結果を出力するステップである。
【0014】
請求項8の発明は、請求項1の発明をプログラムの観点から把握したものであり、コンピュータを利用して、ソフトウェアを構成するソースファイルに対して修正が行われた場合にその修正と同様の修正を行う可能性が高い類似修正箇所を検索するためのプログラムにおいて、請求項1の発明における各ステップに対応する各機能、すなわち、差分検出機能、ブロック作成機能、類似ブロック検索機能、検索結果出力機能、をコンピュータに実現させることを特徴としている。
【0015】
以上のような発明によれば、修正前と修正後のソースファイルを比較して差分検出を行うことにより、修正された箇所を適切に検索することができる。そのため、修正前のソースファイル中で修正箇所のコードとその周辺のコードを含むコード群からなる比較元ブロックを適切に作成することができ、また、修正箇所のコードと類似する類似コードを含むコード群からなる比較対象ブロックを適切に作成することができる。そして、比較元ブロックと比較対象ブロックをブロック単位で比較することにより、比較元ブロックの記述内容だけでなく記述順序についてもよく似た類似ブロックを、修正前のソースファイル中において効率よく高精度で検索することができる。したがって、修正後のソースファイル中において、ユーザが行った修正箇所と類似する箇所のうち、同様の修正を行う可能性が高い類似修正箇所を、効率よく高精度で検索することが可能となる。
【0016】
請求項2の発明は、請求項1の類似修正箇所検索方法において、ブロック作成ステップが単位ブロック作成ステップを含むことを特徴としている。ここで、単位ブロック作成ステップは、あるコードが指定された場合に、予め設定されたブロック作成ルールに基づいて、その周辺のコード群をまとめて1単位としたブロックを作成するステップである。
【0017】
請求項3の発明は、請求項2の類似修正箇所検索方法において、単位ブロック作成ステップが範囲決定ステップを含むことを特徴としている。ここで、範囲決定ステップは、あるコードが指定された場合に、そのコードの位置を基準位置としてその基準位置から所定の方向にコードを順次辿り、前記ブロック作成ルールに基づいて各コードをブロックに含めるか否かを判定することによりブロックの範囲を決定するステップである。
【0018】
以上のような発明によれば、修正箇所のコードやその類似コードが指定された場合に、そのコードを含むブロックをブロック作成ルールに基づいて自動的に作成することができる。したがって、ユーザにコード群を指定させる場合に比べて、常に適切なコード群からなる適切なブロックを効率よく作成することができる。
【0019】
請求項4の発明は、請求項1乃至請求項3のいずれかの類似修正箇所検索方法において、ブロック作成ステップがコード検索ステップを含むことを特徴としている。ここで、コード検索ステップは、修正された箇所のコードに対する類似度に応じて、予め設定されたコード検索ルールに基づき、類似する箇所のコードと判定されるコードを検索するステップである。
この発明によれば、一定の類似度以上のコードのみについて比較対象ブロックを作成することにより、無駄なブロックの作成を抑制することができるため、ブロック作成ステップの効率を向上すると共に、続く類似ブロック検索ステップの効率を向上することができる。
【0020】
請求項5の発明は、請求項1乃至請求項4のいずれかの類似修正箇所検索方法において、類似ブロック検索ステップが類似ブロック比較・判定ステップを含むことを特徴としている。ここで、類似ブロック比較・判定ステップは、比較対象ブロックの各々を比較元ブロックと比較し、ブロックに含まれる個々のコード同士の類似度と各コードのブロック内における位置に応じて、予め設定された類似ブロック比較・判定ルールに基づき、各比較対象ブロックが比較元ブロックと類似する記述内容を持つ類似ブロックであるか否かを判定するステップである。
【0021】
請求項6の発明は、請求項5の類似修正箇所検索方法において、類似ブロック比較・判定ステップが、コード評価ステップとブロック評価ステップを含むことを特徴としている。ここで、コード評価ステップは、比較対象ブロック中の各コードについて、比較元ブロック中のコードに対する類似度とブロック内における位置に応じて、類似ブロック比較・判定ルールに基づき、コードの評価を行うステップである。また、ブロック評価ステップは、比較対象ブロック中の各コードの評価結果から得られるブロック中のコードの総合評価に応じて、類似ブロック比較・判定ルールに基づき、類似ブロックであるか否かを判定するステップである。
【0022】
以上のような発明によれば、比較対象ブロックの各々を比較元ブロックと比較し、類似ブロック比較・判定ルールに基づき、各比較対象ブロックが比較元ブロックと類似する記述内容を持つ類似ブロックであるか否かを自動的に判定することができる。特に、コードの類似度と位置に応じて判定を行うことから、単に個々のコードが類似しているかだけでなく、コードの記述順序が類似しているかについても判定できるため、記述内容がより客観的に類似している類似ブロックを効率よく高精度で検索することができる。
【0023】
請求項7の発明は、請求項4乃至請求項6のいずれかの類似修正箇所検索方法において、コードの類似度が、比較するコードを構成する文字列間における、最長一致する部分文字列の割合に応じて決定されることを特徴としている。
この発明によれば、コードの類似度を自動的に算出することができるため、各種の条件に応じた任意の類似度を設定して、その類似度以上のコードのみを類似コードとして効率よく検索することが可能である。
【0024】
【発明の実施の形態】
以下には、本発明の実施形態を図面に沿って具体的に説明する。ただし、ここで記載する実施形態は、本発明を何ら限定するものではなく、本発明の一態様を例示するものにすぎない。
【0025】
本発明は、典型的には、コンピュータをソフトウェアで制御することにより実現される。この場合のソフトウェアは、コンピュータのハードウェアを物理的に活用することで本発明の作用効果を実現するものであり、また、従来技術を適用可能な部分には好適な従来技術が適用される。さらに、本発明を実現するハードウェアやソフトウェアの具体的な種類や構成、ソフトウェアで処理する範囲などは自由に変更可能であり、例えば、本発明を実現するプログラムは本発明の一態様である。
【0026】
[1.類似修正箇所検索処理の概要]
図1は、本発明を適用した類似修正箇所検索処理の概要を示すフローチャートである。この図1に示すように、個々のステップにおける各種の判定に使用するルールとして、コード検索を行うためのコード検索ルールR1、比較元ブロックや比較対象ブロックを作成するためのブロック作成ルールR2、比較対象ブロックの各々を比較元ブロックと比較して類似ブロックであるか否かの判定を行うための類似ブロック比較・判定ルールR3、等が予め設定されている。
【0027】
類似修正箇所検索にあたってはまず、ユーザによって修正されたソースファイルについて、修正前のソースファイルF1と修正後のソースファイルF2とを比較して差分検出を行い、修正前のソースファイルF1中の修正された箇所を特定し、修正箇所P1として記録する(S101)。
【0028】
記録された各修正箇所P1のコードについて、ブロック作成ルールR2に基づき、その周辺のコード群をまとめて1単位とした比較元ブロックB1を作成するとともに、修正箇所の記述に類似する類似箇所P2のコードについて、ブロック作成ルールR2に基づき、その周辺のコード群をまとめて1単位とした比較対象ブロックB1を作成する(S102)。
【0029】
続いて、作成された比較対象ブロックB2の中から、比較元ブロックB1と類似する記述内容を持つ類似ブロックB3を検索する。すなわち、比較対象ブロックB2の各々を比較元ブロックB1と比較し、ブロックに含まれる個々のコード同士の類似度と各コードのブロック内における位置に応じて、類似ブロック比較・判定ルールR3に基づき、各比較対象ブロックが比較元ブロックと類似する記述内容を持つ類似ブロックであるか否かを判定することにより、類似ブロックB3を検索する(S103)。最終的に、各比較元ブロックB1と検索された類似ブロックB3の組み合わせを検索結果として出力する(S104)。
【0030】
[2.差分検出処理]
図2は、図1に示す差分検出処理(S101)のサブルーチンを示すフローチャートである。この図2に示すように、差分検出に当たってはまず、修正前のソースファイルF1の入力(S201)と、修正後のソースファイルF2の入力(S202)を行う。
【0031】
これら異なるバージョンのソースファイルF1,F2を比較して差分検出を行い、修正前のソースファイルF1中の修正された箇所を検出する(S203)。変更が検出された箇所のコードが、ユーザが修正を行ったコードであるから、修正された箇所が検出されれば、修正前のソースファイルF1における修正されたコード(修正前コード)を特定できるため、そのコードを修正箇所P1として記録する(S204)
【0032】
ここで、コードは、改行あるいはセミコロン「;」で終わる文字列を1単位とする。また、コードの修正には、▲1▼コードの記述内容を変更した場合、▲2▼コードを削除した場合、▲3▼コードを追加した場合、の3通りの修正があるが、このうち、▲1▼「コード変更」、▲2▼「コード削除」については、修正前のソースファイルF1中に、修正前のコードが必ず存在するため、修正前コードを容易に特定できる。これに対して、▲3▼「コード追加」については、修正前のソースファイルF1中には修正前コードが存在しないため、修正したコードの次の位置にあるコードや、直前の位置にあるコード、あるいはユーザによって指定された任意のコード、等の修正前に存在する何らかのコードを、修正前コードとして代用する。
【0033】
[3.ブロック作成処理]
図3は、図1に示すブロック作成処理(S102)のサブルーチンを示すフローチャートであり、図4は、図3に示す単位ブロック作成処理(S304、S308)のサブルーチンを示すフローチャートである。
【0034】
図3に示すように、ブロック作成に当たってはまず、修正前のソースファイルF1を入力し(S301)、差分検出処理で記録された修正箇所P1を取得する(S302)。そして、修正箇所P1のコードを指定して(S303)、指定されたコードについて、図4に示すような単位ブロック作成処理を行い、ブロック作成ルールR2に基づき、そのコードを含む周辺のコード群をまとめて1単位としたブロックを作成し(S304)、作成したブロックを比較元ブロックとする(S305)。
【0035】
次に、修正前のソースファイルF1中で、修正箇所P1に類似する類似箇所P2を検索する(S306)。なお、修正箇所P1の記述に類似する類似箇所P2のコードとしては、修正前のソースファイルF1中で、コード検索ルールR1に基づき、修正箇所P1のコードに対する類似度が予め設定された基準値以上であるコードを検索する。そして、検索された類似箇所P2のコードを指定して(S307)、指定されたコードについて、図4に示すような単位ブロック作成処理を行い、ブロック作成ルールR2に基づき、そのコードを含む周辺のコード群をまとめて1単位としたブロックを作成する(S308)。
【0036】
続いて、修正箇所P1に類似する類似箇所P2を全て検索したかどうかを調べ(S309)、残りの類似箇所P2がある場合(S309のNO)には、それらの類似箇所P2のコードについてS306〜S308を繰り返し、ブロックを作成する。また、残りの類似箇所P2がない場合(S309のYES)には、S306〜S308によって作成したブロック(群)を比較対象ブロック(群)とする(S310)。
【0037】
さらに、差分検出処理で記録された修正箇所P1の全てに対して、比較対象ブロック(群)を作成したかどうかを調べ(S311)、残りの修正箇所P1がある場合(S312のNO)には、それらの修正箇所P1についてS302〜S310を繰り返し、比較元ブロックおよび比較対象ブロック(群)を作成する。そして、残りの修正箇所P1がなくなった場合(S311のYES)には、一連のブロック作成処理を終了する。
【0038】
[3−1.コード検索処理の詳細]
以下には、図3に示す一連のブロック作成処理のうち、S306におけるコード検索処理の詳細について説明する。このコード検索処理においては、修正前のソースファイルF1において、修正前コードと類似する記述がされているコード(類似コード)を検索する。
【0039】
このコード検索処理においては、修正前コードを構成する文字列と完全一致するコードを検索するだけでなく、部分一致するコードの検索(曖昧検索)を可能とするため、コード検索ルールR1を用いる。コード検索ルールR1には、修正前コードを構成する文字列のうち、比較するコードの文字列と最長一致する部分文字列の割合がある値以上の場合に、そのコードを類似コードと判定するための基準値を予め設定しておく。
【0040】
たとえば、図5に示すコード検索ルールR1の例では、最長一致する部分文字列の割合が80%以上である場合に類似コードと見なすように設定している。この例で示すルールに従うと、たとえば、修正前コード「while (a<0){」とコード「while (a<=0) {」を比較した場合に、最長一致する部分文字列は「while (a<」であるから、「while (a<0)」(11文字)中の「while (a<」(9文字)として計算し、82%という値が求められる。この値はコード検索ルールR1で設定した基準値80%を上回るので、コード「while (a<=0) {」は、修正前コード「while (a<0) {」の類似コードとして検索される。
【0041】
[3−2.単位ブロック作成処理の詳細]
以下には、図3に示す一連のブロック作成処理のうち、S304、S308における単位ブロック作成処理の詳細について、図4のフローチャートを参照して説明する。図4に示すように、単位ブロック作成処理においてはまず、指定されたコードを基準コードとして(S401)、ソースファイル中で基準コードを検索する(S402)。
【0042】
基準コードの位置をソースファイル中の基準位置nとし(S403)、ブロック範囲を基準位置から、ソースファイル中の上下方向に拡張していく。すなわち、ソースファイルは、改行あるいはセミコロン「;」で終わる1行の文字列として表現される1単位のコードを、上下に複数行並べた文字列群として表現できるが、そのような文字列群において、基準位置nの行を起点とし、ブロック範囲の行の上限位置および行の下限位置を拡張していく。
【0043】
まず、基準位置nから開始して(S404)、1行ずつ上方向に移動していき(S405)、移動した位置のコードがブロック作成ルールR2を満たすか否かを判定する(S406)。そして、移動した位置のコードがブロック作成ルールR2を満たす限り(S406のYES)、そのコードをブロックに含め、次のコードに移動してブロック作成ルールR2を満たすか否かを判定する(S405、S406)、という動作を繰り返すことにより、ブロック範囲を上方向に1行ずつ拡張していく。移動した位置のコードがブロック作成ルールR2を満たさなくなった時点(S406のNO)で、上方向へのブロック範囲の拡張を終了して、次に下方向へのブロック範囲の拡張を行う。
【0044】
下方向へも同様に、基準位置nから開始して(S407)、1行ずつ下方向に移動していき(S408)、移動した位置のコードがブロック作成ルールR2を満たすか否かを判定する(S409)。そして、移動した位置のコードがブロック作成ルールR2を満たす限り(S409のYES)、そのコードをブロックに含め、次のコードに移動してブロック作成ルールR2を満たすか否かを判定する(S408、S409)、という動作を繰り返すことにより、ブロック範囲を下方向に1行ずつ拡張していく。移動した位置のコードがブロック作成ルールR2を満たさなくなった時点(S409のNO)で、下方向へのブロック範囲の拡張を終了して、上方向への拡張時に求めた上限のコードから下限のコードまでの間を、ブロック範囲として決定する(S410)。
【0045】
たとえば、図6に示すブロック作成ルールR2の例によると、「同インデント」、「下位のインデント」、「空行」、のルールが適用されているため、基準位置のコードのインデントが同じか下位のインデントのコードと、空行を含んだブロックが作成される。ここで、「インデント」とは、ソースファイル中に命令群の開始記号「{」が見られれば、それに続くコードは相対的にインデントを一つ下げ、逆に命令群の終端記号「}」が見られれば、それに続くコードのインデントを相対的に一つ上げるといったように、ワープロ文書の字下げ位置に相当するパラメータである。
【0046】
このようなインデントを基にして、先述の「同インデント」、「下位のインデント」、「空行」、を含むブロック範囲を決定すると、図7に示すように、基準位置のコードを含んだブロックが作成される。この例では、「コメント行」のルールが非適用であるために、インデントが同じであっても、コメント行が記述されたコードは含まないようにしてブロック範囲の上限が決定されている。また、「上位のインデント」のルールが非適用であるために、基準位置のインデントから上位に位置する終端記号「}」以降のコードを含まないようにしてブロック範囲の下限が決定されている。
【0047】
[4.類似ブロック検索処理]
図8は、図1に示す類似ブロック検索処理(S103)のサブルーチンを示すフローチャートであり、図9は、図8に示すコード評価処理(S807)のループを示すフローチャートである。
【0048】
図8に示すように、類似ブロック検索に当たってはまず、ブロック作成処理で修正前コードについて作成されたブロックを取得し、これを比較元ブロックとする(S801)。そして、比較元ブロックのブロック範囲の長さをnとし(S802)、比較元ブロックにおける基準位置となるコードの位置Nを求めておく(S803)。次に、ブロック作成処理で類似コードのそれぞれについて作成されたブロックを取得し、これを比較対象ブロックとする(S804)。そして、比較対象ブロックのブロック範囲の長さをmとし(S805)、比較対象ブロックにおける基準位置となるコードの位置Mを求めておく(S806)。
【0049】
続いて、これらの比較元ブロックと比較対象ブロックを比較し、類似ブロック比較・判定ルールR3を用いて、比較対象ブロックが比較元ブロックと類似する類似ブロックであるか否かを判定する(S807〜S810)。すなわち、図10に示すような類似ブロック比較・判定ルールR3を用いて、比較対象ブロック中のコードについて、図9に示すようなコード評価処理を行い、比較元ブロック中のコードに対する類似度とブロック内における位置に応じた得点を計算する(S807)。そして、各コードの得点結果(評価結果)から得られるブロック中のコードの合計点(総合評価)が、比較元ブロックの長さnに応じて決定される基準得点以上であるか否かに応じて(S808)、類似ブロックであるか否かを判定する(S809、S810)。
【0050】
[4−1.コード評価処理の詳細]
以下には、図8に示す一連の類似ブロック検索処理のうち、S807におけるコード評価処理の詳細について、図9のフローチャートを参照して説明する。図9に示すように、コード評価処理においてはまず、比較元ブロックのコードを1行目から順に取得して比較元コードとし(S901〜S904)、比較対象ブロックのコードを1行目から順に取得して比較対象コードとする(S905〜S908)。
【0051】
各比較対象コードを比較元コードと比較して、比較対象コードを構成する比較対象文字列のうちで最長一致する部分文字列の、比較元コードの比較元文字列に対する割合を求め、これをコード間の類似度として、コード間の類似度が基準値以上であるか否かを調べる(S909)。そして、類似度が基準値以上である場合(S909のYES)には、比較対象コードは、比較元コードに類似する類似コードであると判定する(S910)。
【0052】
たとえば、比較元文字列「strcmp」と比較対象文字列「strcpy」では、最長一致する部分文字列は「strc」であるので、コード間の類似度は「strcmp(6文字)中の「strc」(4文字)と計算し、67%という値が求められる。図10の例では、類似コードの定義(基準値)として80%以上を設定しているため、これらのコード同士は類似と判定されない。なお、類似度が基準値に満たない場合(S910のNO)には、S907、S908で比較対象ブロックにおける次の行のコードを比較対象コードとして取得する。
【0053】
類似コードと判定した場合(S910)には、その類似コードについて、基準位置からの相対距離に応じた得点計算を行う(S911〜S913)。ここで、比較元ブロック中の同じ比較元コードに対して、比較対象ブロック中に複数の類似コードが存在する場合(S911のYES)には、それらの中で、比較対象ブロックにおける基準位置Mからの相対距離(M−j)が、比較元ブロックにおける基準位置Nからの相対距離(N−k)により近いものを、類似コードとする(S912)。
【0054】
そして、類似コードについて、比較元ブロックの基準位置Nからの相対距離(N−k)をD1とし、比較対象ブロックにおける基準位置Mからの相対距離(M−j)をD2とした場合に、相対距離D1,D2に応じた得点計算を行う(S913)。すなわち、D1とD2が同じであればブロックの類似度の得点に1点を加える。また、D1とD2の差が大きくなるほど、比較元ブロックと比較対象ブロックの間でコードの記述順序に違いが大きくなるので、相対距離の差に応じて得点を減じる。
【0055】
図10の例では、基準位置からの相対距離に応じた得点計算方法として、D1とD2の差を計算し、D1とD2の差が1つ大きくなるほど、得点に0.9を乗じるという計算式を適用している。この計算式をたとえば、図11の例に適用した場合、比較元ブロックと比較対象ブロックにおいて、それぞれ基準位置のコードから「funcA();」という記述までの相対距離を求めると、D1=3、D2=7である。D1とD2の差の絶対値が4であるから、ブロックの類似度に加算される得点は、0.9=0.6561点となる。
【0056】
以上のようにして、比較元ブロックにおける各コードに対して比較対象ブロックのコードの得点を計算し(S905〜S914)、合計点に加算する(S915)。比較元ブロックの全てのコードに対する比較対象ブロックの得点を合計して(S901〜S916)、合計点(総合評価)を比較対象ブロックの類似度とする。
【0057】
[4−2.ブロック評価処理の詳細]
上記のコード評価処理を行った場合、比較対象ブロックの類似度の最高得点は、ブロックの長さの値になる。したがって、合計点(総合評価)による類似ブロックの判定に当たっては、比較元ブロックの長さをnとしたとき、これに類似ブロックの定義(基準値)として設定した値(パーセンテージ)を乗じて求めた値(n×基準値)を基準得点とし、ブロックの類似度が基準得点以上であるか否かを調べる(S808)。
【0058】
そして、ブロックの類似度が基準得点以上である場合(S808のYES)には、類似ブロックと判定し(S809)、基準得点に満たない場合(S808のNO)には、類似ブロックでないと判定して(S810)、類似ブロック検索処理を終了する。たとえば、図10の例では、類似ブロックの定義(基準値)として80%以上を設定しているため、ブロックの長さが15である場合には、ブロックの類似度を求めた値が12以上であれば、類似ブロックと判定し、類似ブロック検索処理を終了する。
【0059】
[5.検索結果出力処理]
図12は、図1に示す検索結果出力処理(S104)のサブルーチンを示すフローチャートである。この図12に示すように、検索結果出力に当たってはまず、ブロック作成処理で修正前コードについて作成された比較元ブロックB1を取得する(S1201)。次に、ブロック作成処理で修正前コードについて作成された比較対象ブロック(群)のうち、類似ブロック検索処理で類似ブロックと判定されたブロック(群)を取得する(S1202)。そして、取得した比較元ブロックと類似ブロック(群)の組見合わせを順次出力する(S1203)。
【0060】
[6.実施形態の作用・効果]
以上のような本実施形態の類似修正箇所検索処理によれば、次のような作用・効果が得られる。
【0061】
まず、修正前と修正後のソースファイルを比較して差分検出を行うことにより、修正された箇所を適切に検索することができる。そのため、修正前のソースファイル中で修正箇所のコードとその周辺のコードを含むコード群からなる比較元ブロックを適切に作成することができ、また、修正箇所のコードと類似する類似コードを含むコード群からなる比較対象ブロックを適切に作成することができる。
【0062】
そして、比較元ブロックと比較対象ブロックをブロック単位で比較することにより、比較元ブロックの記述内容だけでなく記述順序についてもよく似た類似ブロックを、修正前のソースファイル中において効率よく高精度で検索することができる。したがって、修正後のソースファイル中において、ユーザが行った修正箇所と類似する箇所のうち、同様の修正を行う可能性が高い類似修正箇所を、効率よく高精度で検索することが可能となる。
【0063】
また、ブロック作成処理においては、修正箇所のコードやその類似コードを含むブロックをブロック作成ルールに基づいて自動的に作成することができる。したがって、ユーザにコード群を指定させる場合に比べて、常に適切なコード群からなる適切なブロックを効率よく作成することができる。ブロック作成処理においてはまた、一定の類似度以上のコードのみについて比較対象ブロックを作成することにより、無駄なブロックの作成を抑制することができるため、ブロック作成処理の効率を向上すると共に、続く類似ブロック検索処理の効率を向上することができる。
【0064】
一方、類似ブロック検索処理においては、比較対象ブロックの各々を比較元ブロックと比較し、類似ブロック比較・判定ルールに基づき、各比較対象ブロックが比較元ブロックと類似する記述内容を持つ類似ブロックであるか否かを自動的に判定することができる。特に、コードの類似度と位置に応じて判定を行うことから、単に個々のコードが類似しているかだけでなく、コードの記述順序が類似しているかについても判定できるため、記述内容がより客観的に類似している類似ブロックを効率よく高精度で検索することができる。
【0065】
また、ブロック作成処理や類似ブロック検索処理においては、コードの類似度を、比較するコードを構成する文字列間における、最長一致する部分文字列の割合として求めている。この場合、コードの類似度を自動的に算出することができるため、各種の条件に応じた任意の類似度を設定して、その類似度以上のコードのみを類似コードとして効率よく検索することが可能である。
【0066】
[7.他の実施形態]
なお、本発明は、前述した実施形態に限定されるものではなく、本発明の範囲内で他にも多種多様な形態が実施可能である。
【0067】
まず、図1〜図12に示した処理手順や各種のルール等は、一例にすぎず、具体的な処理手順やルールは自由に変更可能である。例えば、前記実施形態においては、基準位置から上下2方向にコードを順次辿り、ブロックの範囲を決定する場合について説明したが、ブロック範囲の決定方法は、これに限らず、基準位置から1方向のみにコードを順次辿ってブロックの範囲を決定することも可能である。また、指定されたコードの内容に応じて、ブロックの範囲の決定に異なる方法を採用すること等も可能である。
【0068】
さらに、各種のルールで使用される基準値等の数値を、ユーザが自由に設定変更できるようにしてもよい。この場合には、ユーザは、検索結果として出力された類似ブロックについて、修正の不要なブロックが多い場合には類似度の基準値を上げ、逆に、類似ブロックが少なすぎて他にも修正の必要な箇所が推測されるような場合には類似度の基準値を下げる等の操作を行うことができる。また、本発明を適用する具体的なソースファイルの形式やデータ構造等は、自由に選択可能である。
【0069】
【発明の効果】
以上詳述したように、本発明によれば、プログラムのソースファイルに対してユーザが修正を行った場合に、その修正前のバージョンのソースファイル中で、修正した箇所を含むブロックと類似するブロックを高い精度で検索することができる。したがって、修正後のバージョンのソースファイル中で、ユーザが行った修正箇所と類似する箇所に対して、同じような修正が必要となる箇所を効率よく高精度で検索することができる。
【図面の簡単な説明】
【図1】本発明を適用した類似修正箇所検索処理の概要を示すフローチャート。
【図2】図1に示す差分検出処理のサブルーチンを示すフローチャート。
【図3】図1に示すブロック作成処理のサブルーチンを示すフローチャート。
【図4】図3に示す単位ブロック作成処理のサブルーチンを示すフローチャート。
【図5】図3に示すブロック作成処理で使用するコード検索ルールの一例を示すデータ表示図。
【図6】図3に示すブロック作成処理で使用するブロック作成ルールの一例を示すデータ表示図。
【図7】図3に示すブロック作成処理によって作成されたブロックの一例を示すデータ表示図。
【図8】図1に示す類似ブロック検索処理のサブルーチンを示すフローチャート。
【図9】図8に示すコード評価処理のループを示すフローチャート。
【図10】図8に示す類似ブロック検索処理で使用する類似ブロック比較・判定ルールの一例を示すデータ表示図。
【図11】図9に示すコード評価処理による相対距離に応じた得点計算の一例を示す説明図。
【図12】図1に示す検索結果出力処理のサブルーチンを示すフローチャート。
【符号の説明】
F1…修正前のソースファイル
F2…修正後のソースファイル
R1…コード検索ルール
R2…ブロック作成ルール
R3…類似ブロック比較・判定ルール
P1…修正箇所
P2…類似箇所
B1…比較元ブロック
B2…比較対象ブロック
B3…類似ブロック

Claims (8)

  1. コンピュータを利用して、ソフトウェアを構成するソースファイルに対して修正が行われた場合にその修正と同様の修正を行う可能性が高い類似修正箇所を検索する類似修正箇所検索方法において、
    ソースファイルが修正された場合に、修正前のソースファイルを修正後のソースファイルと比較して、修正前のソースファイル中の修正された箇所を特定する差分検出ステップと、
    前記修正前のソースファイル中で、前記修正された箇所のコードを含むコード群からなる比較元ブロックと、前記修正された箇所に類似する箇所のコードを含むコード群からなる比較対象ブロックを作成するブロック作成ステップと、
    前記比較対象ブロックの中から、前記比較元ブロックと類似する記述内容を持つ類似ブロックを検索する類似ブロック検索ステップと、
    前記類似ブロックの検索結果を出力する検索結果出力ステップと、
    を有することを特徴とする類似修正箇所検索方法。
  2. 前記ブロック作成ステップは、あるコードが指定された場合に、予め設定されたブロック作成ルールに基づいて、その周辺のコード群をまとめて1単位としたブロックを作成する単位ブロック作成ステップを含む、
    ことを特徴とする請求項1に記載の類似修正箇所検索方法。
  3. 前記単位ブロック作成ステップは、あるコードが指定された場合に、そのコードの位置を基準位置としてその基準位置から所定の方向にコードを順次辿り、前記ブロック作成ルールに基づいて各コードをブロックに含めるか否かを判定することによりブロックの範囲を決定する範囲決定ステップを含む、
    ことを特徴とする請求項2に記載の類似修正箇所検索方法。
  4. 前記ブロック作成ステップは、前記修正された箇所のコードに対する類似度に応じて、予め設定されたコード検索ルールに基づき、前記類似する箇所のコードと判定されるコードを検索するコード検索ステップを含む、
    ことを特徴とする請求項1乃至3のいずれかに記載の類似修正箇所検索方法。
  5. 前記類似ブロック検索ステップは、前記比較対象ブロックの各々を前記比較元ブロックと比較し、ブロックに含まれる個々のコード同士の類似度と各コードのブロック内における位置に応じて、予め設定された類似ブロック比較・判定ルールに基づき、各比較対象ブロックが比較元ブロックと類似する記述内容を持つ類似ブロックであるか否かを判定する類似ブロック比較・判定ステップを含む、
    ことを特徴とする請求項1乃至請求項4のいずれかに記載の類似修正箇所検索方法。
  6. 前記類似ブロック比較・判定ステップは、
    前記比較対象ブロック中の各コードについて、前記比較元ブロック中のコードに対する類似度とブロック内における位置に応じて、前記類似ブロック比較・判定ルールに基づき、コードの評価を行うコード評価ステップと、
    前記比較対象ブロック中の各コードの評価結果から得られるブロック中のコードの総合評価に応じて、前記類似ブロック比較・判定ルールに基づき、類似ブロックであるか否かを判定するブロック評価ステップを含む、
    ことを特徴とする請求項5に記載の類似修正箇所検索方法。
  7. 前記コードの類似度は、比較するコードを構成する文字列間における、最長一致する部分文字列の割合に応じて決定される
    ことを特徴とする請求項4乃至請求項6のいずれかに記載の類似修正箇所検索方法。
  8. コンピュータを利用して、ソフトウェアを構成するソースファイルに対して修正が行われた場合にその修正と同様の修正を行う可能性が高い類似修正箇所を検索するためのプログラムにおいて、
    ソースファイルが修正された場合に、修正前のソースファイルを修正後のソースファイルと比較して、修正前のソースファイル中の修正された箇所を特定する差分検出機能と、
    前記修正前のソースファイル中で、前記修正された箇所のコードを含むコード群からなる比較元ブロックと、前記修正された箇所に類似する箇所のコードを含むコード群からなる比較対象ブロックを作成するブロック作成機能と、
    前記比較対象ブロックの中から、前記比較元ブロックと類似する記述内容を持つ類似ブロックを検索する類似ブロック検索機能と、
    前記類似ブロックの検索結果を出力する検索結果出力機能と、
    をコンピュータに実現させることを特徴とするプログラム。
JP2002218097A 2002-07-26 2002-07-26 類似修正箇所検索方法とそのためのプログラム Pending JP2004062394A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2002218097A JP2004062394A (ja) 2002-07-26 2002-07-26 類似修正箇所検索方法とそのためのプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2002218097A JP2004062394A (ja) 2002-07-26 2002-07-26 類似修正箇所検索方法とそのためのプログラム

Publications (1)

Publication Number Publication Date
JP2004062394A true JP2004062394A (ja) 2004-02-26

Family

ID=31939386

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2002218097A Pending JP2004062394A (ja) 2002-07-26 2002-07-26 類似修正箇所検索方法とそのためのプログラム

Country Status (1)

Country Link
JP (1) JP2004062394A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008262330A (ja) * 2007-04-11 2008-10-30 Hitachi Ltd プログラム誤修正検知方法および装置
JP2010079447A (ja) * 2008-09-24 2010-04-08 Fujitsu Ltd バグ検出支援プログラム、類似構文識別情報一覧出力プログラム、バグ検出支援装置およびバグ検出支援方法
JP2017151754A (ja) * 2016-02-25 2017-08-31 ファナック株式会社 プログラマブルコントローラ及びこれを備えるシステム
JP7290784B1 (ja) 2022-04-18 2023-06-13 中国長江三峡集団有限公司 コード類似性に基づくファジーテスト方法、装置及び記憶媒体

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008262330A (ja) * 2007-04-11 2008-10-30 Hitachi Ltd プログラム誤修正検知方法および装置
JP2010079447A (ja) * 2008-09-24 2010-04-08 Fujitsu Ltd バグ検出支援プログラム、類似構文識別情報一覧出力プログラム、バグ検出支援装置およびバグ検出支援方法
JP2017151754A (ja) * 2016-02-25 2017-08-31 ファナック株式会社 プログラマブルコントローラ及びこれを備えるシステム
CN107121963A (zh) * 2016-02-25 2017-09-01 发那科株式会社 可编程序控制器及具备其的***
US10416642B2 (en) 2016-02-25 2019-09-17 Fanuc Corporation Programmable controller and system equipped with same
CN107121963B (zh) * 2016-02-25 2021-04-02 发那科株式会社 可编程序控制器及具备其的***
JP7290784B1 (ja) 2022-04-18 2023-06-13 中国長江三峡集団有限公司 コード類似性に基づくファジーテスト方法、装置及び記憶媒体
JP2023158623A (ja) * 2022-04-18 2023-10-30 中国長江三峡集団有限公司 コード類似性に基づくファジーテスト方法、装置及び記憶媒体

Similar Documents

Publication Publication Date Title
CN110866180B (zh) 资源推荐方法、服务器及存储介质
US20160140389A1 (en) Information extraction supporting apparatus and method
JP4872529B2 (ja) リバースエンジニアリング支援方法
JPWO2009110550A1 (ja) 属性抽出方法、システム及びプログラム
JP2008217710A (ja) 設計方法及びプログラム
JP3600611B2 (ja) 情報処理装置および情報処理方法、並びに情報処理プログラム
JP2013246644A (ja) ソフトウェアオブジェクト修正支援装置、ソフトウェアオブジェクト修正支援方法、および、プログラム
KR101639972B1 (ko) Plc 시스템 및 연산식 데이터 작성 지원 장치
JPWO2003034279A1 (ja) 情報検索方法、情報検索プログラム、情報検索プログラムを記録したコンピュータ読み取り可能な記録媒体
JP2004062394A (ja) 類似修正箇所検索方法とそのためのプログラム
JP2018181020A (ja) 計算装置、影響出力システム
JP2010267083A (ja) 帳票検索装置、帳票検索プログラムおよび帳票検索方法
JP2011191834A (ja) 文書分類方法、文書分類装置、およびプログラム
CN112149402B (zh) 文档对比方法、装置、电子设备和计算机可读存储介质
JPH11306203A (ja) インデックス作成方法及び文書検索処理方法
Lucas et al. High precision detection of conserved segments from synteny blocks
JP6707410B2 (ja) 文献検索装置、文献検索方法およびコンピュータプログラム
JP5188290B2 (ja) アノテーション装置、アノテーション方法およびプログラム
JP6497253B2 (ja) 情報共有プログラム、情報共有装置、及び情報共有システム
JP4247026B2 (ja) キーワード頻度算出方法及びそれを実行するプログラム
JP6361472B2 (ja) 対応情報生成プログラム、対応情報生成装置及び対応情報生成方法
JP2010134766A (ja) 文書データ処理装置およびそのプログラム
JP2019021254A (ja) 文書処理システム、文書処理方法、及びプログラム
WO2021240886A1 (ja) テストスクリプト生成システム、テストスクリプト生成方法、電子制御装置
JP2017142669A (ja) 情報出力システム、情報出力方法および情報出力プログラム