(57)【要約】【課題】類似するソースコード片を高速に抽出することができる類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法を提供すること。【解決手段】比較元ソースコード片指定部２１０が比較との基準となるソースコード片の指定を受け付け、このソースコード片と類似するソースコード片を比較先ソースコード指定部２２０によって指定を受け付けられたソースコード群から抽出して結果出力部２９０から出力する。ソースコード群から比較元のソースコード片と類似比較されるソースコードを抽出する処理は、比較元のソースコード片から作成した構文木と、ソースコード群から作成した構文木とを参照して比較先ソースコード片抽出部２７０がおこなう。【選択図】        図３
2006018693.tif 000002
【特許請求の範囲】
【請求項１】
所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出プログラムであって、
類似比較の基本となる比較元ソースコード片の指定を受け付ける比較元ソースコード片指定手順と、
前記比較元ソースコード片と類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定手順と、
前記比較元ソースコード片と類似比較される比較先ソースコード片を前記比較先ソースコード群から抽出する比較先ソースコード片抽出手順と、
前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算手順と、
前記類似度計算手順により算出された類似の度合いを一覧出力する結果出力手段と
をコンピュータに実行させることを特徴とする類似ソースコード抽出プログラム。
【請求項２】
所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出プログラムであって、
類似比較の基本となる比較元ソースコードの指定を受け付ける比較元ソースコード指定手順と、
前記比較元ソースコードと類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定手順と、
前記比較元ソースコードから比較元ソースコード片を抽出し、前記比較先ソースコード群から前記比較元ソースコード片と類似比較する比較先ソースコード片を抽出するソースコード片抽出手順と、
前記ソースコード片抽出手順により抽出された前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算手順と、
前記類似度計算手順により算出された類似の度合いを一覧出力する結果出力手段と
をコンピュータに実行させることを特徴とする類似ソースコード抽出プログラム。
【請求項３】
所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出プログラムであって、
類似比較の基本となる比較元ソースコード群の指定を受け付ける比較元ソースコード群指定手順と、
前記比較元ソースコード群と類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定手順と、
前記比較元ソースコード群から比較元ソースコード片を抽出し、前記比較先ソースコード群から前記比較元ソースコード片と類似比較する比較先ソースコード片を抽出するソースコード片抽出手順と、
前記ソースコード片抽出手順により抽出された前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算手順と、
前記類似度計算手順により算出された類似の度合いを一覧出力する結果出力手段と
をコンピュータに実行させることを特徴とする類似ソースコード抽出プログラム。
【請求項４】
前記類似度計算手順における類似度合いの算出において用いられるパラメータ情報の指定を受け付けるパラメータ指定手順をさらにコンピュータに実行させ、
前記類似度計算手順は、前記パラメータ指定手順にて受け付けた前記パラメータを加味して類義度合いの算出をおこなうことを特徴とする請求項１、２または３に記載の類似ソースコード抽出プログラム。
【請求項５】
前記パラメータ指定手順にて受け付けた前記パラメータ情報を任意の名前と組み合わせて記憶手段に記憶するパラメータ記録手順をさらにコンピュータに実行させることを特徴とする請求項４に記載の類似ソースコード抽出プログラム。
【請求項６】
前記パラメータ記録手順により記憶手段に記憶された前記パラメータ情報を読み出し、これを前記パラメータ指定手順に引き渡すパラメータ読出し手順をさらにコンピュータに実行させることを特徴とする付請求項５に記載の類似ソースコード抽出プログラム。
【請求項７】
前記類似度計算手順は、前記比較元ソースコード片と前記比較先ソースコード片とを構文解析して構成要素に分解し、構成要素の種類毎の類似・相違状況に構成要素の種類毎に定められた重みを加味して類似度合いの計算をおこなうことを特徴とする請求項１〜６のいずれか一つに記載の類似ソースコード抽出プログラム。
【請求項８】
前記パラメータ指定手順は、前記構成要素の種類毎に定められた重みの指定を受け付けることを特徴とする請求項７に記載の類似ソースコード抽出プログラム。
【請求項９】
所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出装置であって、
類似比較の基本となる比較元ソースコード片の指定を受け付ける比較元ソースコード片指定手段と、
前記比較元ソースコード片と類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定手段と、
前記比較元ソースコード片と類似比較される比較先ソースコード片を前記比較先ソースコード群から抽出する比較先ソースコード片抽出手段と、
前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算手段と、
前記類似度計算手段により算出された類似の度合いを一覧出力する結果出力手段と
を備えたことを特徴とする類似ソースコード抽出装置。
【請求項１０】
所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出方法であって、
類似比較の基本となる比較元ソースコード片の指定を受け付ける比較元ソースコード片指定工程と、
前記比較元ソースコード片と類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定工程と、
前記比較元ソースコード片と類似比較される比較先ソースコード片を前記比較先ソースコード群から抽出する比較先ソースコード片抽出工程と、
前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算工程と、
前記類似度計算工程により算出された類似の度合いを一覧出力する結果出力手段と
を含んだことを特徴とする類似ソースコード抽出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法に関し、特に類似のソースコード片の抽出を高速でおこなうことができる類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法に関するものである。
【背景技術】
【０００２】
ソフトウェアの開発プロジェクトにおいて、開発対象のプログラムに共通して必要となる機能をライブラリ等として共有化し、開発効率と保守性の向上を図ることが一般的におこなわれている。しかし、設計段階において共通機能を洗い出して精査するための時間を十分に確保できない等の理由から、本来共有化すべき処理が個別のプログラムに作りこまれてしまうことがしばしば発生する。
【０００３】
従来から、このように共通機能を含んで肥大化したソースコードをスリム化して保守性を高めることを目的として、ソースコード群から類似のソースコード片を抽出する技術が知られている。これらの技術は、具体的には非特許文献１〜３が示すような製品となって利用されている。
【０００４】
【非特許文献１】“CCFinder/Gemini Webサイト”、［online］、平成１５年５月１２日、大阪大学大学院情報科学研究科井上研究室、［平成１６年６月２２日検索］、インターネット＜URL：http://sel.ics.es.osaka-u.ac.jp/cdtools/＞
【非特許文献２】“Semantic Designs, Inc: Clone Doctor”、［online］、Semantic Designs, Inc.、［平成１６年６月２２日検索］、インターネット＜URL：http://www.semdesigns.com/Products/Clone/＞
【非特許文献３】“BEB | Download”、［online］、Blue Edge Bulgaria、［平成１６年６月２２日検索］、インターネット＜URL：http://www.blue-edge.bg/download.html＞
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、これらの製品に利用されている技術は、ソースコード群に含まれるソースコードを総当りで比較して類似のソースコード片を抽出するものであるので、ソースコード群に含まれるソースコードの数が大量に存在する場合には処理時間が膨大になるという問題がある。
【０００６】
この発明は、上述した従来技術による問題点を解消するためになされたものであり、ソースコード群から類似のソースコード片を高速に抽出することのできる類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、この発明に係る類似ソースコード抽出プログラムは、所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出プログラムであって、類似比較の基本となる比較元ソースコード片の指定を受け付ける比較元ソースコード片指定手順と、前記比較元ソースコード片と類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定手順と、前記比較元ソースコード片と類似比較される比較先ソースコード片を前記比較先ソースコード群から抽出する比較先ソースコード片抽出手順と、前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算手順と、前記類似度計算手順により算出された類似の度合いを一覧出力する結果出力手段とをコンピュータに実行させることを特徴とする。
【０００８】
また、この発明に係る類似ソースコード抽出装置は、所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出装置であって、類似比較の基本となる比較元ソースコード片の指定を受け付ける比較元ソースコード片指定手段と、前記比較元ソースコード片と類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定手段と、前記比較元ソースコード片と類似比較される比較先ソースコード片を前記比較先ソースコード群から抽出する比較先ソースコード片抽出手段と、前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算手段と、前記類似度計算手段により算出された類似の度合いを一覧出力する結果出力手段とを備えたことを特徴とする。
【０００９】
また、この発明に係る類似ソースコード抽出方法は、所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出方法であって、類似比較の基本となる比較元ソースコード片の指定を受け付ける比較元ソースコード片指定工程と、前記比較元ソースコード片と類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定工程と、前記比較元ソースコード片と類似比較される比較先ソースコード片を前記比較先ソースコード群から抽出する比較先ソースコード片抽出工程と、前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算工程と、前記類似度計算工程により算出された類似の度合いを一覧出力する結果出力手段とを含んだことを特徴とする。
【００１０】
この発明によれば、指定されたソースコード片を基準として類似するソースコード片を抽出するように構成したので、全てのソースコードを総当りで類似比較して類似するソースコード片を抽出する場合と比較して処理結果を短時間で得ることができる。
【００１１】
また、この発明に係る類似ソースコード抽出プログラムは、所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出プログラムであって、類似比較の基本となる比較元ソースコードの指定を受け付ける比較元ソースコード指定手順と、前記比較元ソースコードと類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定手順と、前記比較元ソースコードから比較元ソースコード片を抽出し、前記比較先ソースコード群から前記比較元ソースコード片と類似比較する比較先ソースコード片を抽出するソースコード片抽出手順と、前記ソースコード片抽出手順により抽出された前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算手順と、前記類似度計算手順により算出された類似の度合いを一覧出力する結果出力手段とをコンピュータに実行させることを特徴とする。
【００１２】
この発明によれば、指定された一つのソースコードに含まれるソースコード片を基準として類似するソースコード片を抽出するように構成したので、全てのソースコードを総当りで類似比較して類似するソースコード片を抽出する場合と比較して処理結果を短時間で得ることができる。
【００１３】
また、この発明に係る類似ソースコード抽出プログラムは、所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出プログラムであって、類似比較の基本となる比較元ソースコード群の指定を受け付ける比較元ソースコード群指定手順と、前記比較元ソースコード群と類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定手順と、前記比較元ソースコード群から比較元ソースコード片を抽出し、前記比較先ソースコード群から前記比較元ソースコード片と類似比較する比較先ソースコード片を抽出するソースコード片抽出手順と、前記ソースコード片抽出手順により抽出された前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算手順と、前記類似度計算手順により算出された類似の度合いを一覧出力する結果出力手段とをコンピュータに実行させることを特徴とする。
【００１４】
この発明によれば、指定されたのソースコード群に含まれるソースコード片を基準として類似するソースコード片を抽出するように構成したので、全てのソースコードを総当りで類似比較して類似するソースコード片を抽出する場合と比較して処理結果を短時間で得ることができる。
【００１５】
また、この発明に係る類似ソースコード抽出プログラムは、上記の発明において、前記類似度計算手順における類似度合いの算出において用いられるパラメータ情報の指定を受け付けるパラメータ指定手順をさらにコンピュータに実行させ、前記類似度計算手順は、前記パラメータ指定手順にて受け付けた前記パラメータを加味して類義度合いの算出をおこなうことを特徴とする。
【００１６】
この発明によれば、プログラムの外部から類似度合いの計算ロジックを調整するパラメータを指定できるように構成したので、ソースコードの特徴に合わせてより適切な類似ソースコードの抽出をおこなうことができる。
【００１７】
また、この発明に係る類似ソースコード抽出プログラムは、上記の発明において、前記パラメータ指定手順にて受け付けた前記パラメータ情報を任意の名前と組み合わせて記憶手段に記憶するパラメータ記録手順をさらにコンピュータに実行させることを特徴とする。
【００１８】
この発明によれば、計算ロジックを調整するパラメータを記憶手段に保存できるように構成したので、指定したパラメータを容易に再利用することができる。
【００１９】
また、この発明に係る類似ソースコード抽出プログラムは、上記の発明において、前記パラメータ記録手順により記憶手段に記憶された前記パラメータ情報を読み出し、これを前記パラメータ指定手順に引き渡すパラメータ読出し手順をさらにコンピュータに実行させることを特徴とする。
【００２０】
この発明によれば、記憶手段に保存したパラメータを読み出して利用できるように構成したので、指定したパラメータを容易に再利用することができる。
【００２１】
また、この発明に係る類似ソースコード抽出プログラムは、上記の発明において、前記類似度計算手順は、前記比較元ソースコード片と前記比較先ソースコード片とを構文解析して構成要素に分解し、構成要素の種類毎の類似・相違状況に構成要素の種類毎に定められた重みを加味して類似度合いの計算をおこなうことを特徴とする。
【００２２】
この発明によれば、ソースコード片を構成要素に分解し、構成要素の種類毎に重みをつけて類似度合いの計算をおこなうように構成したので、ソースコードの特徴に合わせてより適切な類似ソースコードの抽出をおこなうことができる。
【００２３】
また、この発明に係る類似ソースコード抽出プログラムは、上記の発明において、前記パラメータ指定手順は、前記構成要素の種類毎に定められた重みの指定を受け付けることを特徴とする。
【００２４】
この発明によれば、プログラムの外部から類似度合いの計算ロジックを調整するパラメータを指定できるように構成したので、ソースコードの特徴に合わせてより適切な類似ソースコードの抽出をおこなうことができる。
【発明の効果】
【００２５】
本発明によれば、指定されたソースコード片を基準として類似するソースコード片を抽出するように構成したので、全てのソースコードを総当りで類似比較して類似するソースコード片を抽出する場合と比較して処理結果を短時間で得ることができるという効果を奏する。
【００２６】
また、本発明によれば、指定された一つのソースコードに含まれるソースコード片を基準として類似するソースコード片を抽出するように構成したので、全てのソースコードを総当りで類似比較して類似するソースコード片を抽出する場合と比較して処理結果を短時間で得ることができるという効果を奏する。
【００２７】
また、本発明によれば、指定されたのソースコード群に含まれるソースコード片を基準として類似するソースコード片を抽出するように構成したので、全てのソースコードを総当りで類似比較して類似するソースコード片を抽出する場合と比較して処理結果を短時間で得ることができるという効果を奏する。
【００２８】
また、本発明によれば、プログラムの外部から類似度合いの計算ロジックを調整するパラメータを指定できるように構成したので、ソースコードの特徴に合わせてより適切な類似ソースコードの抽出をおこなうことができるという効果を奏する。
【００２９】
また、本発明によれば、計算ロジックを調整するパラメータを記憶手段に保存し、記憶手段に保存したパラメータを読み出して利用できるように構成したので、指定したパラメータを容易に再利用することができるという効果を奏する。
【００３０】
また、本発明によれば、ソースコード片を構成要素に分解し、構成要素の種類毎に重みをつけて類似度合いの計算をおこなうように構成したので、ソースコードの特徴に合わせてより適切な類似ソースコードの抽出をおこなうことができるという効果を奏する。
【発明を実施するための最良の形態】
【００３１】
以下に添付図面を参照して、この発明に係る類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法の好適な実施の形態を詳細に説明する。なお、ここでは、Ｃ言語で記述されたプログラムから類似のソースコード片を抽出する場合を例にして説明するが、この発明は、特定の言語に依存するものではなく、様々なプログラム言語に用いることができる。
【実施例１】
【００３２】
まず、本実施例の背景について説明する。図１は、本実施例に係る類似ソースコード抽出方式の背景を説明するための説明図である。同図に示すように、あるソフトウェア開発プロジェクトにおいて、プログラムを３階層で構築することが原則となっているとする。
【００３３】
最下層のレベル３に該当するのは、各プログラムに共通の処理を抽出した「共通部品」である。その上のレベル２に該当するのは、個別のプログラムに必要な業務ロジックからなる「個別処理」である。そして、最上位のレベル１に該当するのは、「共通部品」や「個別処理」の機能を呼び出してプログラムとしての動作を実現する「制御コントローラ」である。
【００３４】
しかし、この３階層化の原則は必ずしも厳格に守られているわけではない。例えば、新規機能として機能Ｂを追加開発する際に、既存の「共通部品」の一部の仕様修正が必要となったが、この仕様修正が他のプログラムに与える影響を調査する時間が足りない等の理由から、「共通部品」のうち仕様修正が必要となる処理を機能Ｂの「制御コントローラ」に取り込んでそこで修正を加えている。
【００３５】
このようなことが積み重なると、結果として「共通部品」と同様な処理が「制御コントローラ」や「個別処理」の各所にも含まれることになり、その重複状況が把握できなくなる。そして、「共通部品」に何らかの不具合が発見された場合には「制御コントローラ」や「個別処理」に類似の処理が存在する可能性があるため、それらを調査し、類似のコードが存在する場合にはそこも修正することが必要となる。
【００３６】
一般のプロジェクトにおいても、類似のコードがプロジェクト内のソースコードに散在することは珍しくない。たとえば、近年、インターネット上で様々な新サービスが提供されているが、これらのサービスは、迅速に顧客に提供することを求められ、開発に割当てられる期間が非常に短いものが多い。このため、十分な設計ができないまま実装がおこなわれ、共通処理の共有化が十分におこなわれない場合がある。
【００３７】
プロジェクトのソースコードがこのような状態になった場合、２つの対応方法が考えられる。第１の対応方法は、プロジェクトの全てのソースコードから共通処理を再抽出して、適切に共通部品化し、この共通部品を呼び出すように従来のソースコードを書き直すというものである。第２の方法は、このようなソースコードの再構成をおこなわずにコードの重複をそのままにしておくというものである。
【００３８】
本来であれば、第１の対応方法をとることが好ましい。従来の類似ソースコード抽出方式は、この作業を支援することを目的としている。しかし、これをおこなうにはソースコードの改修に加えてプロジェクトの全プログラムの再テストが必要となるため、工数等の問題から実現できない場合が多い。
【００３９】
このため、実際には第２の対応方法がとられることが多い。しかし、この対応方法をとった場合、処理の一部に不具合が発覚した都度、他にも同様な処理が存在するか否かを調査し、存在した場合はそれも修正することが必要となる。プロジェクトが大規模な場合、全てのプログラムを目視で確認し、類似の処理の有無を判断することは困難な作業となる。本実施例に係る類似ソースコード抽出方式は、この作業を効率化することを目的としている。
【００４０】
図２−１は、従来の類似ソースコード抽出方式の概要を説明するための説明図である。同図に示すように、従来の類似ソースコード抽出方式ではソースコードを総当りで比較し、類似のソースコード片の抽出をおこなう。この方式では、不特定多数の類似ソースコード片を抽出することができるが、ソースコードの数が増えると抽出処理に要する時間が指数的に増大する。
【００４１】
この方式は、プロジェクトの全ソースコードを対象にして類似コード抽出することができるので第１の対応方法をとる場合に有効であるが、第２の対応方法とった場合には問題がある。第２の対応方法とった場合には、処理の一部に不具合が発覚するたびに類似のソースコード片の抽出をおこなう必要があるが、この処理方式では抽出に要する時間が大きすぎて作業を効率的に進めることができない可能性がある。
【００４２】
不具合が発覚した箇所と類似する箇所を見つけることを目的とすると、類似ソースコード片の抽出処理を高速化することができる。不具合が発覚した箇所と類似する箇所を見つける場合は、その箇所と類似するソースコード片だけを抽出すればよく、不特定多数の類似ソースコード片を抽出することは必要ないからである。
【００４３】
図２−２は、本実施例に係る類似ソースコード抽出方式の概要を説明するための説明図である。同図に示すように、本実施例に係るソースコード抽出方式では特定のソースコードを基準にして、この基準となるソースコードと他のソースコードとを比較し、類似のソースコード片の抽出をおこなう。この方式では、抽出される類似ソースコード片は基準となるソースコードに類似するものに限定されるが、ソースコードが増えても抽出に要する処理時間はそのソースコードの数に比例して増えるだけであり、高速に処理結果を得ることができる。
【００４４】
また、処理速度が高速であれば、ソースコードの特徴に合わせて類似判定の判断ロジックを試行錯誤で調整して、より適切な類似ソースコード片の抽出をおこなうことも容易となる。ソースコードは、制御構造が複雑なものや多数のデータ項目からなるものなど個々に特徴があり、その特徴に合うように類似判定の設定パラメータを変えてやることでより目的に適った処理結果を得ることができる。
【００４５】
なお、本発明に係る類似ソースコード抽出方式は、修正を加えた箇所と類似したソースコード片を抽出することを一つの目的にしているが、利用目的はこれだけに限定されるものではなく、様々な目的のために適用することができる。
【００４６】
次に、本実施例に係る類似ソースコード抽出装置の構成について説明する。図３は、本実施例に係る類似ソースコード抽出装置の構成を示す機能ブロック図である。同図に示すように、類似ソースコード抽出装置１００は、制御部２００と、ユーザインターフェース部３００と、記憶部４００とを有する。
【００４７】
制御部２００は、類似ソースコード抽出装置１００を全体制御する制御部であり、比較元ソースコード片指定部２１０と、比較先ソースコード指定部２２０と、パラメータ指定部２３０と、パラメータ入出力部２４０と、ソースコード取得部２５０と、構文解析部２６０と、比較先ソースコード片抽出部２７０と、類似度計算部２８０と、結果出力部２９０とを有する。
【００４８】
比較元ソースコード片指定部２１０は、比較元ソースコード片選択画面を表示部３１０に表示し、比較の基準となるソースコード片について利用者からの指定を受け付ける処理部である。
【００４９】
図４は、比較元ソースコード片選択画面の一例を示すサンプル図である。利用者は、任意のソースコードを画面に表示させ、比較の基準となる部分を操作部３２０のマウス等により選択し、「選択」ボタンを押下する。これにより、この画面上で選択された部分が比較元ソースコード片指定部２１０により比較の基準となるソースコード片として受け付けられる。
【００５０】
比較先ソースコード指定部２２０は、比較先ソースコード選択画面を表示部３１０に表示し、比較対象となるソースコードの取得条件について利用者からの指定を受け付ける処理部である。
【００５１】
図５は、比較先ソースコード選択画面の一例を示すサンプル図である。利用者は、比較対象のソースコードを含むフォルダのパスを指定する。パスの指定に際しては、「参照」ボタンを押下してフォルダの階層構造をブラウズする画面を表示させ、この画面から希望するフォルダを選択することができる。デフォルトでは指定したフォルダのサブフォルダに含まれるソースコードも比較対象となるが、これらを比較対象外としたい場合には、「サブフォルダも対象にする」のチェックを外す。
【００５２】
また、この実施例におけるソフトウェアの開発プロジェクトにおいては、図１に示したようにソースコードを「制御コントローラ」、「固有処理」、「共通部品」という３階層化して管理しており、それぞれ階層に属するソースコードを階層ごとに定められた名前のサブフォルダに格納することになっている。デフォルトでは、これら３階層のソースコードはいずれも比較対象となるが、特定の階層のソースコードを対象外としたい場合には当該の階層のチェックを外す。
【００５３】
利用者が、比較対象となるソースコードの取得条件について必要な情報を設定し、「実行」ボタンを押下すると、比較先ソースコード指定部２２０によりこの情報が受け付けられる。
【００５４】
パラメータ指定部２３０は、パラメータ設定画面を表示部３１０に表示し、ソースコード片の類似判定処理をおこなうためのパラメータ情報について利用者からの指定を受け付ける処理部である。
【００５５】
図６は、パラメータ設定画面の一例を示すサンプル図である。利用者は、「データ項目」、「定数」、「関数呼び出し」、「文」、「式」ごとに「重み」と「丸め」の指定をおこなう。ここで、「データ項目」とは変数を指す。「定数」とは数値や文字定数などの定数を指す。「関数呼び出し」とは関数やメソッドの呼び出しを指す。「文」とは条件分岐やブロックなどの制御文もしくは制御構造を指す。また、「式」は演算子を指す。
【００５６】
「重み」は、比較元と比較先の相違を重み付けするためのパラメータで、０〜５の数値で指定する。５がデフォルトの値であり、数値が小さくなるほど類似判定において相違が小さく評価される。たとえば、変数名の違いを無視して比較元と比較先の類似判定をおこないたい場合には、「データ項目」の重みを０に設定することで目的が達成される。
【００５７】
「丸め」は、「データ項目」等の区分を変更するための所定のルールを指定する。たとえば、「データ項目」に「定数と同一視」というルールを設定した場合は、比較元では変数である項目が比較先では定数になっている場合であっても、これらは同一であるとみなされる。
【００５８】
また、利用者は、比較元と比較先の「重み」の指定をおこなう。この「重み」も０〜５の数値で指定する。５がデフォルトの値であり、数値が小さくなるほど類似判定において相違が小さく評価される。たとえば、比較先のみに存在する項目を無視して比較元と比較先の類似判定をおこないたい場合には、「比較先」の重みを０に設定すること目的が達成される。
【００５９】
利用者が、必要なパラメータ情報を設定し、「設定」ボタンを押下すると、パラメータ指定部２３０によりこの情報が受け付けられる。
【００６０】
なお、本実施例ではソースコードの構成要素を「データ項目」、「定数」、「関数呼び出し」、「文」、「式」のいずれかに分類して類似判定をおこなうことになっているが、本発明に係る類似ソースコード抽出方式は、必ずしもソースコードの構成要素をこの通りに分類する必要はなく他の体系で分類しても良い。
【００６１】
パラメータ入出力部２４０は、パラメータ設定画面にて入力されたパラメータ情報を再利用することを目的としてパラメータ記憶部４２０に記憶させ、また必要に応じてここから読み出しをおこなう処理部である。
【００６２】
図７は、パラメータ設定保存画面の一例を示すサンプル図である。この画面は、パラメータ設定画面において「設定保存」ボタンが押下された場合にパラメータ入出力部２４０が表示する画面である。利用者がこの画面で任意の名前を入力して「保存」ボタンを押下すると、パラメータ入出力部２４０は、パラメータ設定画面にて入力されたパラメータ情報にこの名前を付けてパラメータ記憶部４２０に記憶させる。
【００６３】
図８は、パラメータ設定選択画面の一例を示すサンプル図である。この画面は、パラメータ設定画面において「設定選択」ボタンが押下された場合にパラメータ入出力部２４０が表示する画面である。利用者がこの画面で保存済みのいずれかのパラメータ情報の名前を選択して「選択」ボタンを押下すると、パラメータ入出力部２４０は、パラメータ記憶部４２０から該当するパラメータ情報を読み出して、これをパラメータ設定画面に表示する。
【００６４】
ソースコード取得部２５０は、比較先ソースコード指定部２２０にて指定された取得条件に基づいて比較対象となるソースコードをソースコード記憶部４１０から取得する処理部である。具体的には、指定されたパスに存在するファイルのうち対象外とされたもの以外を１件ずつ取得し、これを構文解析部２６０に引き渡す処理をおこなう。
【００６５】
構文解析部２６０は、比較元ソースコード片指定部２１０で指定されたソースコード片と、ソースコード取得部２５０が取得したファイルに含まれる比較先のソースコードを構文解析し、構文木を作成する処理部である。
【００６６】
比較先ソースコード片抽出部２７０は、構文解析部２６０が作成した比較先のソースコードの構文木から比較元ソースコード片との類似比較の対象となる構文木を抽出する処理部である。本実施例における類似ソースコード抽出方式は、比較元となるソースコード片と類似するソースコード片を比較先のソースコードから抽出するものであるが、比較先のソースコードからどのようにしてソースコード片を抽出するかによって、類似のソースコード抽出の処理速度が大きく変動する。
【００６７】
図９は、本実施例にかかる比較先ソースコード片の抽出処理を説明するための説明図である。同図に示すように、比較元ソースコード片１０と比較先ソースコード２０をソースコード取得部２５０が構文解析することにより、比較元ソースコード片の構文木３０と比較先ソースコードの構文木４０が作成される。
【００６８】
比較元ソースコード片１０は、ｉｆ文からなるブロックであるため、ｉｆを頂点とする構文木が作成される。比較先ソースコード２０のある関数は、大きく分けて４つのブロックもしくは文からなり、４つの構文木が作成される。
【００６９】
比較先ソースコード片抽出部２７０は、比較先ソースコードから作成された構文木のうち、比較元ソースコード片の構文木のと同じ頂点をもつものを類似比較対象として抽出する。図９の場合、比較元ソースコード片の構文木３０の頂点はｉｆであるため、比較先ソースコードの構文木４０のうち頂点がｉｆである構文木が類似比較対象となる。
【００７０】
このように構文木の頂点を比較して類似判定の対象とするか否かを決定することにより、迅速に類似判定の対象となる構文木を抽出することができ、類似のソースコード抽出を高速におこなうことができる。なお、本発明に係る類似ソースコード抽出方式は、必ずしもここに示した比較先ソースコード片の抽出方式をもちいる必要はなく、他の抽出方式をもちいることもできる。
【００７１】
類似度計算部２８０は、比較元ソースコードから作成された構文木と比較先ソースコード片抽出部２７０が類似比較対象として抽出した構文木の一つを比較して類似度の計算をおこなう処理部である。図１０は、本実施例に係るソースコードの類似度の算出処理を説明するための説明図である。
【００７２】
同図に示すように、類似度計算部２８０は、比較元ソースコード片の構文木３０の構成要素を出現順に並べた配列５０と、比較先ソースコード片の構文木４２の構成要素を出現順に並べた配列６０を作成する。そして、この２つの配列の要素を先頭から比較して同一か否かを判定し、要素の種類別に同一であった項目数と相違していた項目数とを集計する。
【００７３】
たとえば、配列５０の先頭の要素と配列６０の要素はいずれも制御文の”ｉｆ”であるが、これは同一の「文」が１件あるものとしてカウントする。また、配列５０の４番目の要素は変数の”ｘ”であり、配列６０の４番目の要素は定数の”１”であるが、これは比較元に相違する「データ項目」が１件あり、比較先に相違する「定数」が１件あるものとしてカウントする。
【００７４】
なお、パラメータ指定部２３０で何らかの丸めのルールが選択されていた場合は、そのルールを加味して同一か否かの判定をおこなう。
【００７５】
また、２つの構文木の各要素の同一性を判定するアルゴリズムとして以下のようなものが知られており、このようなアルゴリズムを用いて同一性の判定をおこなうようにしてもよい。（１）Sudarshan S. Chawathe, Anand Rajaraman, Hector Garcia-Molina, and Jenifer Widom. Change detection in hierarchically structured information. In Proceedings of the ACM SIGMOD International Conference on Management of Data, pp. 493-504,1966. （２）S. Chawathe, A. Rajaraman, H. Garcia-Molina, and J. Widom. Change detection in hierarchically structured information. Available in http://dbpubs.stanford.edu:8090/aux/index-en.html, 1955.
【００７６】
そして、このようにして集計した項目数を数式１に当てはめて類似度Ｒの計算をおこなう。
【００７７】
【数１】
2006018693.tif 000003
【００７８】
ここで、ｉは、配列の要素の種類、すなわち、「データ項目」、「定数」、「関数呼び出し」、「文」、「式」を示す。Ｓｉは、同一と判定されたｉの項目数を示す。Ｗｉは、パラメータ指定部２３０で指定されたｉの重みを示す。Ｄｏｉは、相違すると判定された比較元のｉの項目数を示す。Ｗｏｉは、パラメータ指定部２３０で指定された比較元の重みを０〜１に圧縮した値を示す。すなわち、パラメータ指定部２３０で４として指定された重みは、０．８として適用する。Ｄｄｉは、相違すると判定された比較先のｉの項目数を示す。Ｗｄｉは、パラメータ指定部２３０で指定された比較先の重みを０〜１に圧縮した値を示す。
【００７９】
結果出力部２９０は、類似度計算部２８０の計算結果を類似度が高い順に並び替えて出力する処理部である。図１１は、出力結果の一例を示すサンプル図である。同図に示すように、出力結果は、ファイル名と関数名と行と類似度という４つの項目からなる。
【００８０】
ファイル名は、比較先のソースコード片を含むソースコードのファイル名を示す。関数名は、比較先のソースコード片を含む関数もしくはメソッドの名前を示す。行は、ソースコードにおける比較先のソースコード片の位置を行番号の範囲で表したものである。類似度は、類似度計算部２８０の計算結果を示す。
【００８１】
ユーザインターフェース部３００は、利用者に対して情報を表示し、また、利用者からの指示を受け付ける装置であり、液晶装置等の表示装置からなる表示部３１０と、キーボードやマウス等から構成される操作部３２０とを有する。
【００８２】
記憶部４００は、ソースコード記憶部４１０とパラメータ記憶部４２０とを有する。ソースコード記憶部４１０は、類似ソースコード片を抽出するソースコードを記憶する記憶部である。パラメータ記憶部４２０は、パラメータ指定部２３０で指定された各種パラメータを再利用可能なように保存しておく記憶部である。
【００８３】
次に、図３に示した類似ソースコード抽出装置１００の処理手順について説明する。図１２は、図３に示した類似ソースコード抽出装置１００の処理手順を示すフローチャートである。
【００８４】
同図に示すように、まず、比較元ソースコード片指定部２１０を通して比較元となるソースコード片を取得し（ステップＳ１０１）、比較先ソースコード指定部２２０を通して比較先となるソースコードの取得条件を取得する（ステップＳ１０２）。また、パラメータ指定部２３０を通して類似判定のためのパラメータ情報も取得する（ステップＳ１０３）。
【００８５】
こうして処理に必要となる情報を全て取得したならば、構文解析部２６０が、比較元のソースコード片を構文解析し、比較元の構文木を作成する（ステップＳ１０４）。
【００８６】
そして、ソースコード取得部２５０が、ステップＳ１０２で取得した条件に合致するソースコードを一つ取得し（ステップＳ１０５）、構文解析部２６０が、これを構文解析して比較先ソースコードの構文木を作成する（ステップＳ１０６）。
【００８７】
そして、比較先ソースコード片抽出部２７０が、比較先ソースコードの構文木から頂点が比較元の構文木と同じものを一つ抜き出し（ステップＳ１０７）、類似度計算部２８０が、この抜き出された構文木と比較元の構文木を類似比較して別途説明する手順で類似度の計算をおこなう（ステップＳ１０８）。
【００８８】
比較先ソースコードの構文木に頂点が比較元と同じで未処理の構文木が残っている場合は（ステップＳ１０９否定）、ステップＳ１０７から処理を再開する。残っていない場合は（ステップＳ１０９肯定）、ステップＳ１０２で取得した条件に合致する未処理のソースコードが残っているか否かを確認する。ソースコードが残っている場合は（ステップＳ１１０否定）、ステップＳ１０５から処理を再開する。
【００８９】
ソースコードが残っていない場合は（ステップＳ１１０肯定）、結果出力部２９０が、類似度計算部２８０の計算結果を類似度が高い順に並び替え（ステップＳ１１１）、これを出力して処理が完了する（ステップＳ１１２）。
【００９０】
次に、図１２に示した類似度計算処理の処理手順について説明する。図１３は、図１２に示した類似度計算処理の処理手順を示すフローチャートである。
【００９１】
類似度計算部２８０は、比較元の構文木の要素を出現順にならべた配列を作成する（ステップＳ２０１）。比較先の構文木についても同様に、要素を出現順にならべた配列を作成する（Ｓ２０２）。そして、この２つの配列を比較し（ステップＳ２０３）、同一の項目数と相違している項目数を項目の種類別に集計する（ステップＳ２０４）。そして、この集計結果を数式１に当てはめて類似度を算出する（ステップＳ２０５）。
【００９２】
上述してきたように、本実施例では、ソースコードの任意の部分を比較の基準とし、これと類似するソースコード片をソースコード群から抽出するように構成したので、総当りで類似するソースコード片を抽出する場合に比べて高速に処理結果をえることができる。
【実施例２】
【００９３】
実施例１においては、ソースコードの任意の部分を比較の基準として類似のソースコード片を抽出する例について説明したが、この例に示した方式では基準となるソースコード片が複数ある場合には処理を何度も実行することが必要になり、効率的に作業をおこなうことができない。たとえば、複数のソースコードの不具合を修正し、これらの修正箇所のいずれかに類似するソースコード片を抽出したい場合などがこれに該当する。
【００９４】
このような場合、任意のフォルダに含まれるソースコードを比較元としてこれと類似するソースコード片を他のソースコード群から抽出することができれば便利である。この方式は、実施例１で説明した方式よりも類似ソースコード片の抽出に時間を要することになるが、全てのソースコードを総当りで調査する従来の方式よりも高速である。
【００９５】
まず、本実施例に係る類似ソースコード抽出装置の構成について説明する。図１４は、本実施例に係る類似ソースコード抽出装置の構成を示す機能ブロック図である。ここでは、説明が重複するため、実施例１と異なる部分についてのみ説明することとする。
【００９６】
同図に示すように、類似ソースコード抽出装置１０１は、制御部２０１と、ユーザインターフェース部３００と、記憶部４００とを有する。
【００９７】
制御部２０１は、類似ソースコード抽出装置１０１を全体制御する制御部であり、ソースコード指定部２２１と、パラメータ指定部２３０と、パラメータ入出力部２４０と、ソースコード取得部２５１と、構文解析部２６０と、処理ブロック抽出部２７１と、類似度計算部２８０と、結果出力部２９０とを有する。
【００９８】
ソースコード指定部２２１は、ソースコード選択画面を表示部３１０に表示し、比較元と比較先のソースコードの取得条件について利用者からの指定を受け付ける処理部である。
【００９９】
図１５は、ソースコード選択画面の一例を示すサンプル図である。この画面は、実施例１において図５の比較先ソースコード選択画面として示した画面に項目を追加し、比較先のソースコードの取得条件と同様に比較元のソースコードの取得条件も指定できるようにしたものである。
【０１００】
すなわち、利用者は、比較先となるソースコードを含むフォルダのパスを指定することができ、そのフォルダのサブフォルダに含まれるソースコードを比較対象外とするよう指定することができる。また、３階層化して管理されているソースコードのうち特定の階層に含まれるソースコードを比較対象外とするよう指定することもできる。そして、比較元となるソースコードについても同様の取得条件を指定することができる。
【０１０１】
なお、比較元については、ソースコードを含むフォルダのパスではなく、ソースコードそのもののパスを指定できるようにしてもよい。
【０１０２】
ソースコード取得部２５１は、ソースコード指定部２２１にて指定された取得条件に基づいて比較元および比較先となるソースコードをソースコード記憶部４１０から取得する処理部である。
【０１０３】
構文解析部２６０は、ソースコードを構文解析して構文木を作成するという機能の上では実施例１と同様であるが、比較元のソースコードの解析においてソースコード片ではなくソースコード全体を解析する点が異なる。
【０１０４】
処理ブロック抽出部２７１は、構文解析部２６０が作成した比較元のソースコードの構文木と比較先ソースコードの構文木から類似比較をおこなう部分を抽出する処理部である。具体的には、処理ブロック抽出部２７１は、比較元のソースコードの構文木と比較先ソースコードの構文木から関数を単位にして構成要素を抽出する。
【０１０５】
本実施例における類似ソースコード抽出方式においては、比較元のソースコード片と比較先のソースコード片の大きさを揃えるために関数単位で類似判定をおこなう。文単位やブロック単位のような小さな単位で比較をおこなうと類似比較の処理回数が増えて処理速度が低下し、また類似するソースコード片が多数出力されてしまい利用者が対応しきれなくなる可能性があるためである。
【０１０６】
結果出力部２９０は、類似度計算部２８０の計算結果を類似度が高い順に並び替えて出力する処理部である。図１６は、出力結果の一例を示すサンプル図である。同図に示すように、出力結果は、比較元のファイル名と関数名と行、比較先のファイル名と関数名と行、および類似度という７つの項目からなる。
【０１０７】
ファイル名は、ソースコード片を含むソースコードのファイル名を示す。関数名は、ソースコード片を含む関数もしくはメソッドの名前を示す。行は、ソースコードにおけるソースコード片の位置を行番号の範囲で表したものである。類似度は、類似度計算部２８０の計算結果を示す。
【０１０８】
次に、図１４に示した類似ソースコード抽出装置１０１の処理手順について説明する。図１７は、図１４に示した類似ソースコード抽出装置１０１の処理手順を示すフローチャートである。
【０１０９】
同図に示すように、まず、比較先ソースコード指定部２２１を通して比較元となるソースコードと比較先となるソースコードの取得条件を取得する（ステップＳ３０１）。また、パラメータ指定部２３０を通して類似判定のためのパラメータ情報も取得する（ステップＳ３０２）。
【０１１０】
そして、ソースコード取得部２５１が、ステップＳ３０１で取得した条件に合致する比較元のソースコードを一つ取得し（ステップＳ３０３）、構文解析部２６０が、これを構文解析して比較元ソースコードの構文木を作成する（ステップＳ３０４）。
【０１１１】
こうして作成された比較元ソースコードの構文木から、処理ブロック抽出部２７１が一つの関数の構成部分を抽出する（ステップＳ３０５）。
【０１１２】
そして、ソースコード取得部２５１が、ステップＳ３０１で取得した条件に合致する比較先のソースコードを一つ取得し（ステップＳ３０６）、構文解析部２６０が、これを構文解析して比較先ソースコードの構文木を作成する（ステップＳ３０７）。
【０１１３】
こうして作成された比較先ソースコードの構文木から、処理ブロック抽出部２７１が一つの関数の構成部分を抽出する（ステップＳ３０８）。
【０１１４】
そして、類似度計算部２８０が、ステップＳ３０５で抽出された比較元の構文木の関数部分とステップＳ３０８で抽出された比較先の構文木の関数部分とを類似比較して図１３で説明した手順で類似度の計算をおこなう（ステップＳ３０９）。
【０１１５】
比較先ソースコードの構文木に未処理の関数部分が残っている場合は（ステップＳ３１０否定）、ステップＳ３０８から処理を再開する。残っていない場合は（ステップＳ３１０肯定）、ステップＳ３０１で取得した条件に合致する比較先のソースコードに現在の比較元のソースファイルと類似比較をおこなっていないものが残っているか否かを確認する。類似比較をおこなっていない比較先のソースコードが残っている場合は（ステップＳ３１１否定）、ステップＳ３０６から処理を再開する。
【０１１６】
類似比較をおこなっていない比較先のソースコードが残っていない場合は（ステップＳ３１１肯定）、比較元ソースコードの構文木に未処理の関数部分が残っているか否かを確認する。未処理の関数部分が残っている場合は（ステップＳ３１２否定）、ステップＳ３０５から処理を再開する。未処理の関数部分が残っていない場合は（ステップＳ３１２肯定）、ステップＳ３０１で取得した条件に合致する未処理の比較元のソースコードが残っているか否かを確認する。未処理の比較元のソースコードが残っている場合は（ステップＳ３１３否定）、ステップＳ３０３から処理を再開する。
【０１１７】
未処理の比較元のソースコードが残っていない場合は（ステップＳ３１３肯定）、結果出力部２９０が、類似度計算部２８０の計算結果を類似度が高い順に並び替え（ステップＳ３１４）、これを出力して処理が完了する（ステップＳ３１５）。
【０１１８】
上述してきたように、本実施例では、任意のフォルダに含まれるソースコードを比較の基準とし、これと類似するソースコード片をソースコード群から抽出するように構成したので、複数のソースコード片を基準として類似するソースコード片の抽出をおこなうことができ、また、総当りで類似するソースコード片を抽出する場合に比べて高速に処理結果をえることができる。
【０１１９】
（付記１）所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出プログラムであって、
類似比較の基本となる比較元ソースコード片の指定を受け付ける比較元ソースコード片指定手順と、
前記比較元ソースコード片と類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定手順と、
前記比較元ソースコード片と類似比較される比較先ソースコード片を前記比較先ソースコード群から抽出する比較先ソースコード片抽出手順と、
前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算手順と、
前記類似度計算手順により算出された類似の度合いを一覧出力する結果出力手段と
をコンピュータに実行させることを特徴とする類似ソースコード抽出プログラム。
【０１２０】
（付記２）所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出プログラムであって、
類似比較の基本となる比較元ソースコードの指定を受け付ける比較元ソースコード指定手順と、
前記比較元ソースコードと類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定手順と、
前記比較元ソースコードから比較元ソースコード片を抽出し、前記比較先ソースコード群から前記比較元ソースコード片と類似比較する比較先ソースコード片を抽出するソースコード片抽出手順と、
前記ソースコード片抽出手順により抽出された前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算手順と、
前記類似度計算手順により算出された類似の度合いを一覧出力する結果出力手段と
をコンピュータに実行させることを特徴とする類似ソースコード抽出プログラム。
【０１２１】
（付記３）所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出プログラムであって、
類似比較の基本となる比較元ソースコード群の指定を受け付ける比較元ソースコード群指定手順と、
前記比較元ソースコード群と類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定手順と、
前記比較元ソースコード群から比較元ソースコード片を抽出し、前記比較先ソースコード群から前記比較元ソースコード片と類似比較する比較先ソースコード片を抽出するソースコード片抽出手順と、
前記ソースコード片抽出手順により抽出された前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算手順と、
前記類似度計算手順により算出された類似の度合いを一覧出力する結果出力手段と
をコンピュータに実行させることを特徴とする類似ソースコード抽出プログラム。
【０１２２】
（付記４）前記類似度計算手順における類似度合いの算出において用いられるパラメータ情報の指定を受け付けるパラメータ指定手順をさらにコンピュータに実行させ、
前記類似度計算手順は、前記パラメータ指定手順にて受け付けた前記パラメータを加味して類義度合いの算出をおこなうことを特徴とする付記１、２または３に記載の類似ソースコード抽出プログラム。
【０１２３】
（付記５）前記パラメータ指定手順にて受け付けた前記パラメータ情報を任意の名前と組み合わせて記憶手段に記憶するパラメータ記録手順をさらにコンピュータに実行させることを特徴とする付記４に記載の類似ソースコード抽出プログラム。
【０１２４】
（付記６）前記パラメータ記録手順により記憶手段に記憶された前記パラメータ情報を読み出し、これを前記パラメータ指定手順に引き渡すパラメータ読出し手順をさらにコンピュータに実行させることを特徴とする付記５に記載の類似ソースコード抽出プログラム。
【０１２５】
（付記７）前記類似度計算手順は、前記比較元ソースコード片と前記比較先ソースコード片とを構文解析して構成要素に分解し、構成要素の種類毎の類似・相違状況に構成要素の種類毎に定められた重みを加味して類似度合いの計算をおこなうことを特徴とする付記１〜６のいずれか一つに記載の類似ソースコード抽出プログラム。
【０１２６】
（付記８）前記パラメータ指定手順は、前記構成要素の種類毎に定められた重みの指定を受け付けることを特徴とする付記７に記載の類似ソースコード抽出プログラム。
【０１２７】
（付記９）前記類似度計算手順は、前記比較元ソースコード片と前記比較先ソースコード片とを構文解析して構成要素に分解し、構成要素の同一性を判定する所定のルールに基づいて構成要素の種類毎の類似・相違状況を取得し、類似度合いの計算をおこなうことを特徴とする付記１〜８のいずれか一つに記載の類似ソースコード抽出プログラム。
【０１２８】
（付記１０）前記パラメータ指定手順は、前記構成要素の同一性を判定する所定のルールの指定を受け付けることを特徴とする付記９に記載の類似ソースコード抽出プログラム。
【０１２９】
（付記１１）前記類似度計算手順は、前記比較元ソースコード片と前記比較先ソースコード片とを構文解析して構成要素に分解し、前記比較元ソースコード片側と前記比較先ソースコード片側それぞれの類似・相違状況に前記比較元ソースコード片側と前記比較先ソースコード片側それぞれに定められた重みを加味して類似度合いの計算をおこなうことを特徴とする付記１〜１０のいずれか一つに記載の類似ソースコード抽出プログラム。
【０１３０】
（付記１２）前記パラメータ指定手順は、前記比較元ソースコード片側と前記比較先ソースコード片側それぞれに定められた重みの指定を受け付けることを特徴とする付記１１に記載の類似ソースコード抽出プログラム。
【０１３１】
（付記１３）前記結果出力手順は、前記類似度計算手順が算出した類似の度合いを類似度が高い順に出力することを特徴とする付記１〜１２のいずれか一つに記載の類似ソースコード抽出プログラム。
【０１３２】
（付記１４）前記結果出力手順は、前記類似度計算手順が算出した類似の度合いとともに当該の類似の度合いの算出対象となったソースコード片を含むソースコードのファイル名とこのソースコードにおける当該のソースコードの位置情報とを出力することを特徴とする付記１〜１３のいずれか一つに記載の類似ソースコード抽出プログラム。
【０１３３】
（付記１５）所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出装置であって、
類似比較の基本となる比較元ソースコード片の指定を受け付ける比較元ソースコード片指定手段と、
前記比較元ソースコード片と類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定手段と、
前記比較元ソースコード片と類似比較される比較先ソースコード片を前記比較先ソースコード群から抽出する比較先ソースコード片抽出手段と、
前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算手段と、
前記類似度計算手段により算出された類似の度合いを一覧出力する結果出力手段と
を備えたことを特徴とする類似ソースコード抽出装置。
【０１３４】
（付記１６）所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出装置であって、
類似比較の基本となる比較元ソースコードの指定を受け付ける比較元ソースコード指定手段と、
前記比較元ソースコードと類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定手段と、
前記比較元ソースコードから比較元ソースコード片を抽出し、前記比較先ソースコード群から前記比較元ソースコード片と類似比較する比較先ソースコード片を抽出するソースコード片抽出手段と、
前記ソースコード片抽出手段により抽出された前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算手段と、
前記類似度計算手段により算出された類似の度合いを一覧出力する結果出力手段と
を備えたことを特徴とする類似ソースコード抽出装置。
【０１３５】
（付記１７）所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出装置であって、
類似比較の基本となる比較元ソースコード群の指定を受け付ける比較元ソースコード群指定手段と、
前記比較元ソースコード群と類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定手段と、
前記比較元ソースコード群から比較元ソースコード片を抽出し、前記比較先ソースコード群から前記比較元ソースコード片と類似比較する比較先ソースコード片を抽出するソースコード片抽出手段と、
前記ソースコード片抽出手段により抽出された前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算手段と、
前記類似度計算手段により算出された類似の度合いを一覧出力する結果出力手段と
を備えたことを特徴とする類似ソースコード抽出装置。
【０１３６】
（付記１８）所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出方法であって、
類似比較の基本となる比較元ソースコード片の指定を受け付ける比較元ソースコード片指定工程と、
前記比較元ソースコード片と類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定工程と、
前記比較元ソースコード片と類似比較される比較先ソースコード片を前記比較先ソースコード群から抽出する比較先ソースコード片抽出工程と、
前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算工程と、
前記類似度計算工程により算出された類似の度合いを一覧出力する結果出力手段と
を含んだことを特徴とする類似ソースコード抽出方法。
【０１３７】
（付記１９）所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出方法であって、
類似比較の基本となる比較元ソースコードの指定を受け付ける比較元ソースコード指定工程と、
前記比較元ソースコードと類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定工程と、
前記比較元ソースコードから比較元ソースコード片を抽出し、前記比較先ソースコード群から前記比較元ソースコード片と類似比較する比較先ソースコード片を抽出するソースコード片抽出工程と、
前記ソースコード片抽出工程により抽出された前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算工程と、
前記類似度計算工程により算出された類似の度合いを一覧出力する結果出力手段と
を含んだことを特徴とする類似ソースコード抽出方法。
【０１３８】
（付記２０）所定のプログラム言語で記述されたソースコードから類似のソースコード片を抽出する類似ソースコード抽出方法であって、
類似比較の基本となる比較元ソースコード群の指定を受け付ける比較元ソースコード群指定工程と、
前記比較元ソースコード群と類似するソースコード片が抽出される比較先ソースコード群の指定を受け付ける比較先ソースコード群指定工程と、
前記比較元ソースコード群から比較元ソースコード片を抽出し、前記比較先ソースコード群から前記比較元ソースコード片と類似比較する比較先ソースコード片を抽出するソースコード片抽出工程と、
前記ソースコード片抽出工程により抽出された前記比較元ソースコード片と前記比較先ソースコード片との類似比較をおこない、類似の度合いを算出する類似度計算工程と、
前記類似度計算工程により算出された類似の度合いを一覧出力する結果出力手段と
を含んだことを特徴とする類似ソースコード抽出方法。
【産業上の利用可能性】
【０１３９】
以上のように、本発明にかかる類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法は、所定のプログラム言語で記述されたソースファイルに含まれる類似のソースコード片の抽出に有用であり、特に、類似のソースコード片の抽出を高速におこなうことが必要な場合に適している。
【図面の簡単な説明】
【０１４０】
【図１】本実施例に係る類似ソースコード抽出方式の背景を説明するための説明図である。
【図２−１】従来の類似ソースコード抽出方式の概要を説明するための説明図である。
【図２−２】本実施例に係る類似ソースコード抽出方式の概要を説明するための説明図である。
【図３】本実施例に係る類似ソースコード抽出装置の構成を示す機能ブロック図である。
【図４】比較元ソースコード片選択画面の一例を示すサンプル図である。
【図５】比較先ソースコード選択画面の一例を示すサンプル図である。
【図６】パラメータ設定画面の一例を示すサンプル図である。
【図７】パラメータ設定保存画面の一例を示すサンプル図である。
【図８】パラメータ設定選択画面の一例を示すサンプル図である。
【図９】本実施例にかかる比較先ソースコード片の抽出処理を説明するための説明図である。
【図１０】本実施例に係るソースコードの類似度の算出処理を説明するための説明図である。
【図１１】出力結果の一例を示すサンプル図である。
【図１２】図３に示した類似ソースコード抽出装置の処理手順を示すフローチャートである。
【図１３】図１２に示した類似度計算処理の処理手順を示すフローチャートである。
【図１４】本実施例に係る類似ソースコード抽出装置の構成を示す機能ブロック図である。
【図１５】ソースコード選択画面の一例を示すサンプル図である。
【図１６】出力結果の一例を示すサンプル図である。
【図１７】図１４に示した類似ソースコード抽出装置の処理手順を示すフローチャートである。
【符号の説明】
【０１４１】
１０    比較元ソースコード片
２０    比較先ソースコード
３０    比較元ソースコード片の構文木
４０    比較先ソースコードの構文木
４１    比較先ソースコード片の構文木
４２    比較先ソースコード片の構文木
４３    比較先ソースコード片の構文木
４４    比較先ソースコード片の構文木
５０    配列
６０    配列
７０    同一項目と相違項目の集計結果
１００    類似ソースコード抽出装置
１０１    類似ソースコード抽出装置
２００    制御部
２０１    制御部
２１０    比較元ソースコード片指定部
２２０    比較先ソースコード指定部
２２１    ソースコード指定部
２３０    パラメータ指定部
２４０    パラメータ入出力部
２５０    ソースコード取得部
２５１    ソースコード取得部
２６０    構文解析部
２７０    比較先ソースコード片抽出部
２７１    処理ブロック抽出部
２８０    類似度計算部
２９０    結果出力部
３００    ユーザインターフェース部
３１０    表示部
３２０    操作部
４００    記憶部
４１０    ソースコード記憶部
４２０    パラメータ記憶部
【図１】
2006018693.tif 000004
【図２−１】
2006018693.tif 000005
【図２−２】
2006018693.tif 000006
【図３】
2006018693.tif 000007
【図４】
2006018693.tif 000008
【図５】
2006018693.tif 000009
【図６】
2006018693.tif 000010
【図７】
2006018693.tif 000011
【図８】
2006018693.tif 000012
【図９】
2006018693.tif 000013
【図１０】
2006018693.tif 000014
【図１１】
2006018693.tif 000015
【図１２】
2006018693.tif 000016
【図１３】
2006018693.tif 000017
【図１４】
2006018693.tif 000018
【図１５】
2006018693.tif 000019
【図１６】
2006018693.tif 000020
【図１７】
2006018693.tif 000021