(57)【要約】【課題】ソースコードの類似度を算出及び評価する類似度評価プログラムにおいて、ソースコードが多数であっても、正確かつ短時間で類似度を算出する。【解決手段】類似度評価プログラム５は、コンピュータの記憶部２に記憶されたソースコード群の中から、ユーザにより選択された参照ソースコード及び類似度の算出対象となる２つ以上の対象ソースコードを標準化して、夫々にトークン列を作成する手順を制御部４に実行させる。また、作成された参照ソースコード及び対象ソースコードの各トークン列から相関マトリックスが夫々作成され、夫々の相関マトリックスを二値化された画像とみなして、テクスチャ特徴量が算出され、これらのテクスチャ特徴量を参照ベクトルとし、夫々の相関マトリックスに対応する各参照ベクトル間の距離を算出することにより、対象ソースコードの類似度を算出する手順を制御部４に実行させて、対象ソースコード間の類似度を算出する。【選択図】図２
2008046695.tif 000002
【特許請求の範囲】
【請求項１】
複数の一次元データ列間の類似度を算出して評価する類似度評価プログラムであって、
コンピュータの記憶装置に記憶された一次元データ列群の中から、ユーザにより任意に選択された複数の一次元データ列を参照データとして登録する参照データ登録手順と、
前記一次元データ列群の中から、類似度の算出対象となる少なくとも２つ以上の一次元データ列を対象データ列として登録する対象データ列登録手順と、
前記参照データと対象データ列から、前記参照データと対象データ列との相関マトリックスを夫々作成する相関マトリックス作成手順と、
前記作成された夫々の相関マトリックスを二値化された画像とみなして、各相関マトリックスにおいて複数のテクスチャ特徴量を算出するテクスチャ特徴量算出手順と、
前記複数のテクスチャ特徴量を参照ベクトルとし、夫々の相関マトリックスに対応する各参照ベクトル間の距離を算出することにより、前記対象データ列の類似度を算出する類似度算出手順と、をコンピュータに実行させることを特徴とする類似度評価プログラム。
【請求項２】
所定のプログラム言語で作成された複数のソースコード間の類似度を算出して評価する類似度評価プログラムであって、
コンピュータの記憶装置に記憶されたソースコード群の中から、ユーザにより任意に選択された複数のソースコードを参照ソースコードとして登録し、該参照ソースコードを標準化して、参照ソースコードトークン列を作成する参照ソースコード登録手順と、
前記ソースコード群の中から、類似度の算出対象となる少なくとも２つ以上のソースコードを対象ソースコードとして登録し、該対象ソースコードを標準化して、夫々の対象ソースコードについて対象ソースコードトークン列を作成する対象ソースコード登録手順と、
前記参照ソースコードトークン列及び対象ソースコードトークン列から、前記参照ソースコードと対象ソースコードとの相関マトリックスを夫々作成する相関マトリックス作成手順と、
前記作成された夫々の相関マトリックスを二値化された画像とみなして、各相関マトリックスにおいて複数のテクスチャ特徴量を算出するテクスチャ特徴量算出手順と、
前記複数のテクスチャ特徴量を参照ベクトルとし、夫々の相関マトリックスに対応する各参照ベクトル間の距離を算出することにより、前記対象ソースコードの類似度を算出する類似度算出手順と、を更にコンピュータに実行させることを特徴とする請求項１に記載の類似度評価プログラム。
【請求項３】
前記類似度算出手順の結果を、前記コンピュータと接続された画像表示装置に一覧表示する結果表示手順を更にコンピュータに実行させることを特徴とする請求項１又は請求項２に記載の類似度評価プログラム。
【請求項４】
複数の一次元データ列間の類似度を算出して評価する類似度評価装置であって、
前記複数の一次元データ列を記憶する記憶手段と、
前記記憶手段に記憶された一次元データ列群の中から、ユーザにより任意に選択された複数の一次元データ列を参照データとして登録する参照データ登録手段と、
前記記憶手段に記憶された一次元データ列群の中から、類似度の算出対象となる少なくとも２つ以上の一次元データ列を対象データ列として登録する対象データ列登録手段と、
前記参照データ登録手段により登録された参照データと前記対象データ列登録手段により登録された対象データ列から、前記参照データと対象データ列との相関マトリックスを夫々作成する相関マトリックス作成手段と、
前記相関マトリックス作成手段により作成された夫々の相関マトリックスを二値化された画像とみなして、各相関マトリックスにおいて複数のテクスチャ特徴量を算出するテクスチャ特徴量算出手段と、
前記テクスチャ特徴量算出手段により算出された複数のテクスチャ特徴量を参照ベクトルとし、夫々の相関マトリックスに対応する各参照ベクトル間の距離を算出することにより、前記対象データ列の類似度を算出する類似度算出手段と、を備えたことを特徴とする類似度評価装置。
【請求項５】
所定のプログラム言語で作成された複数のソースコード間の類似度を算出して評価する類似度評価装置であって、
前記複数のソースコードを記憶する記憶手段と、
前記記憶手段に記憶されたソースコード群の中から、ユーザにより任意に選択された複数のソースコードを参照ソースコードとして登録し、該参照ソースコードを標準化して、参照ソースコードトークン列を作成する参照ソースコード登録手段と、
前記記憶手段に記憶されたソースコード群の中から、類似度の算出対象となる少なくとも２つ以上のソースコードを対象ソースコードとして登録し、該対象ソースコードを標準化して、夫々の対象ソースコードについて対象ソースコードトークン列を作成する対象ソースコード登録手段と、
前記参照ソースコード登録手段により作成された参照ソースコードトークン列と前記対象ソースコード登録手段により作成された対象ソースコードトークン列から、前記参照ソースコードと対象ソースコードとの相関マトリックスを夫々作成する相関マトリックス作成手段と、
前記相関マトリックス作成手段により作成された夫々の相関マトリックスを二値化された画像とみなして、各相関マトリックスにおいて複数のテクスチャ特徴量を算出するテクスチャ特徴量算出手段と、
前記テクスチャ特徴量算出手段により算出された複数のテクスチャ特徴量を参照ベクトルとし、夫々の相関マトリックスに対応する各参照ベクトル間の距離を算出することにより、前記対象ソースコードの類似度を算出する類似度算出手段と、を備えたことを特徴とするソースコード類似度評価装置。
【請求項６】
前記類似度算出手段の結果を一覧表示する結果表示手段を更に備えたことを特徴とする請求項４又は請求項５に記載の類似度評価装置。
【請求項７】
複数の一次元データ列間の類似度を算出して評価する類似度評価方法であって、
コンピュータの記憶装置に記憶された一次元データ列群の中から、ユーザにより任意に選択された複数の一次元データ列を参照データとして登録するステップと、
前記一次元データ列群の中から、類似度の算出対象となる少なくとも２つ以上の一次元データ列を対象データ列として登録するステップと、
前記参照データと対象データ列から、前記参照データと対象データ列との相関マトリックスを夫々作成するステップと、
前記作成された夫々の相関マトリックスを二値化された画像とみなして、各相関マトリックスにおいて複数のテクスチャ特徴量を算出するステップと、
前記複数のテクスチャ特徴量を参照ベクトルとし、夫々の相関マトリックスに対応する各参照ベクトル間の距離を算出することにより、前記対象データ列の類似度を算出するステップと、を含むことを特徴とする類似度評価方法。
【請求項８】
所定のプログラム言語で作成された複数のソースコード間の類似度を算出して評価する類似度評価方法であって、
コンピュータの記憶装置に記憶されたソースコード群の中から、ユーザにより任意に選択された複数のソースコードを参照ソースコードとして登録し、該参照ソースコードを標準化して、参照ソースコードトークン列を作成するステップと、
前記ソースコード群の中から、類似度の算出対象となる少なくとも２つ以上のソースコードを対象ソースコードとして登録し、該対象ソースコードを標準化して、夫々の対象ソースコードについて対象ソースコードトークン列を作成するステップと、
前記参照ソースコードトークン列と対象ソースコードトークン列から、前記参照ソースコードと対象ソースコードとの相関マトリックスを夫々作成するステップと、
前記作成された夫々の相関マトリックスを二値化された画像とみなして、各相関マトリックスにおいて複数のテクスチャ特徴量算出するステップと、
前記複数のテクスチャ特徴量を参照ベクトルとし、夫々の相関マトリックスに対応する各参照ベクトル間の距離を算出することにより、前記対象ソースコードの類似度を算出するステップと、を含むことを特徴とするソースコード類似度評価方法。
【請求項９】
前記算出された少なくとも２つ以上の対象データ列の類似度を、前記コンピュータと接続された画像表示装置に一覧表示するステップを更に含むことを特徴とする請求項７又は請求項８に記載の類似度評価方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の一次元データ列間の類似度評価プログラム、類似度評価装置及び類似度評価方法に関する。
【背景技術】
【０００２】
コードクローンとは、ソースコード中の同一又は極めて類似したコード断片を指す。コードクローンは、バグの温床になる虞があり、ソフトウェアの修正を困難にするため、ソフトウェア管理・保守における大きな問題となっている。従って、ソフトウェアの開発やその管理においては、新たにコードクローンを作らない工夫が必要であり、また、既存のコードクローンを検出し、除去（リファクタリング）する取り組みが重要となる。
【０００３】
また、近年では、ソフトウェア開発現場において、プログラムソース資源の再利用による開発効率向上を目的とした、分類・検索システムの需要が高まっている。このようなシステムの実現のために、コードクローンを検出する様々なコードクローン検出ツールが提案されている。
【０００４】
上記のような、既存のコードクローン検出ツールの中でも、最も盛んに研究開発が行われているコードクローン検出ツールが、非特許文献１に示されるCCFinderである。コードクローンは、主にソースコードを再利用する際に生じるが、元のソースコードがそのまま使用されることは少なく、通常は、変数名・関数名の変更や構造の変更等の改変が行われる。従って、単に文字列を比較するのみではコードクローンの発見に十分な効果が得られない。しかし、上記のCCfinderは、入力されたソースコードに対し、まず字句解析処理を行い、トークン列化し、規定の文字列に変換する標準化処理を行う。この処理により得られた２つのトークン列は表形式で表現され、文字列ベースによるマッチングが行われるので、上記CCfinderは、ソースコードに変数名・関数名の変更等があってもソースコードの類似度を検出することができる。
【０００５】
また、非特許文献２に示されるように、Baxterらが開発したCloneDRは、抽象構文木（Abstract Syntax Tree：AST）の部分木の比較によりソースコードの類似度を検出するものである。このASTとは、プログラムソースを、そのまま木構造に変換した構文木（Parse Tree）から、コンパイルに不要なトークンを取り除いたものである。この手法は、入力ソースコードから形成されたASTの各ノードのハッシュ値が同じであるなら、それらはコードクローンであると判断するものである。
【０００６】
更に別の角度からのアプローチとして、意味的構造を用いたソースコードの類似度検出方法がある。例えば、非特許文献３に示されるように、Marcusらは、ソースコード中のコメントや識別子等のテキストを調べ、意味的・構造的情報に基づいたクラスタリングを行っている。ソースコード断片から抽出した意味的・構造的情報に、潜在的意味解析（Latent Semantic Analysis : LSA）を適用して得られたプロファイルを用い、グラフ理論的なアプローチにより、部品を意味的に類似したクラスタにまとめるという手法を、MOSAICというツールにより実現している。この手法では、類似した構造や機能をもつ関数の識別ができないため、他の構造情報ベースのコードクローン検出手法と統合する必要がある。
【非特許文献１】CCFinder Official Site.インターネット＜URL : http://ccfinder.net/ccfinderx.html.＞
【非特許文献２】I.D. Baxter, A. Yahin, L. Moura, M. Sant’Anna, and L. Bier. On finding duplication and near-duplication in large software systems.In IEEE International Conference on Softwave Maintenance, pp. 368-377, 1995
【非特許文献３】Andrian Marcus and Jonathan I. Maletic. Identification of High-Level Concept Clones in Source Code.In 16th IEEE International Conference on Softwave Maintenance, pp. 107-115, 2001
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記の各非特許文献に記載の類似度検出ツール等は、夫々に長所及び短所があり、コードクローンの定義自体も微妙に異なる為、特に他のツールよりも優れているものはなかった。また、近年では、大学のプログラミング授業等において、受講生に課題として特定のプログラムを作成させることが広く行われているが、指導員等がこれらを採点したり、プログラムの盗用がないかを発見する上で、プログラムソースコードの類似度を検出する技術が必要となる。しかし、上記のソースコード類似度検出ツールは、大学のプログラミング授業等における採点支援ツールとして、その要求を十分に満たすものとは言えなかった。
【０００８】
更に、上記のソースコード類似度検出ツールは、主に、類似度の算出対象となる全てのソースコードの夫々を直接比較するため、比較対象のソースコードが多数あるときには、それらの類似度算出における計算量が膨大となり、ソースコード間の類似度を算出するのに多くの時間を要した。
【０００９】
本発明は、上記課題を解決するものであって、複数の一次元データ列（例えば、プログラムソースコード）に共通する有効な類似度尺度を用いることにより、それら一次元データの類似度算出時間を削減し、また、多対一のソースコードの類似度の評価を正確かつ短時間で行うことを可能とする類似度評価検出プログラム、類似度評価装置及び類似度評価方法を提供するものである。
【課題を解決するための手段】
【００１０】
上記課題を解決するため、請求項１に記載の発明は、複数の一次元データ列間の類似度を算出して評価する類似度評価プログラムであって、コンピュータの記憶装置に記憶された一次元データ列群の中から、ユーザにより任意に選択された複数の一次元データ列を参照データとして登録する参照データ登録手順と、前記一次元データ列群の中から、類似度の算出対象となる少なくとも２つ以上の一次元データ列を対象データ列として登録する対象データ列登録手順と、前記参照データと対象データ列から、前記参照データと対象データ列との相関マトリックスを夫々作成する相関マトリックス作成手順と、前記作成された夫々の相関マトリックスを二値化された画像とみなして、各相関マトリックスにおいて複数のテクスチャ特徴量を算出するテクスチャ特徴量算出手順と、前記複数のテクスチャ特徴量を参照ベクトルとし、夫々の相関マトリックスに対応する各参照ベクトル間の距離を算出することにより、前記対象データ列の類似度を算出する類似度算出手順と、をコンピュータに実行させるものである。
【００１１】
また、請求項２に記載の発明は、請求項１に記載の類似度評価プログラムにおいて、所定のプログラム言語で作成された複数のソースコード間の類似度を算出して評価するものであって、コンピュータの記憶装置に記憶されたソースコード群の中から、ユーザにより任意に選択された複数のソースコードを参照ソースコードとして登録し、該参照ソースコードを標準化して、参照ソースコードトークン列を作成する参照ソースコード登録手順と、前記ソースコード群の中から、類似度の算出対象となる少なくとも２つ以上のソースコードを対象ソースコードとして登録し、該対象ソースコードを標準化して、夫々の対象ソースコードについて対象ソースコードトークン列を作成する対象ソースコード登録手順と、前記参照ソースコードトークン列及び対象ソースコードトークン列から、前記参照ソースコードと対象ソースコードとの相関マトリックスを夫々作成する相関マトリックス作成手順と、前記作成された夫々の相関マトリックスを二値化された画像とみなして、各相関マトリックスにおいて複数のテクスチャ特徴量を算出するテクスチャ特徴量算出手順と、前記複数のテクスチャ特徴量を参照ベクトルとし、夫々の相関マトリックスに対応する各参照ベクトル間の距離を算出することにより、前記対象ソースコードの類似度を算出する類似度算出手順と、を更にコンピュータに実行させるものである。
【００１２】
請求項３に記載の発明は、請求項１又は請求項２に記載の類似度評価プログラムにおいて、前記類似度算出手順の結果を、前記コンピュータと接続された画像表示装置に一覧表示する結果表示手順を更にコンピュータに実行させるものである。
【００１３】
請求項４に記載の発明は、請求項３に記載の類似度評価装置において、複数の一次元データ列間の類似度を算出して評価するものであって、前記複数の一次元データ列を記憶する記憶手段と、前記記憶手段に記憶された一次元データ列群の中から、ユーザにより任意に選択された複数の一次元データ列を参照データとして登録する参照データ登録手段と、前記記憶手段に記憶された一次元データ列群の中から、類似度の算出対象となる少なくとも２つ以上の一次元データ列を対象データ列として登録する対象データ列登録手段と、前記参照データ登録手段により登録された参照データと前記対象データ列登録手段により登録された対象データ列から、前記参照データと対象データ列との相関マトリックスを夫々作成する相関マトリックス作成手段と、前記相関マトリックス作成手段により作成された夫々の相関マトリックスを二値化された画像とみなして、各相関マトリックスにおいて複数のテクスチャ特徴量を算出するテクスチャ特徴量算出手段と、前記テクスチャ特徴量算出手段により算出された複数のテクスチャ特徴量を参照ベクトルとし、夫々の相関マトリックスに対応する各参照ベクトル間の距離を算出することにより、前記対象データ列の類似度を算出する類似度算出手段と、を備えたものである。
【００１４】
請求項５に記載の発明は、請求項４に記載の類似度評価装置において、所定のプログラム言語で作成された複数のソースコード間の類似度を算出して評価する類似度評価装置であって、前記複数のソースコードを記憶する記憶手段と、前記記憶手段に記憶されたソースコード群の中から、ユーザにより任意に選択された複数のソースコードを参照ソースコードとして登録し、該参照ソースコードを標準化して、参照ソースコードトークン列を作成する参照ソースコード登録手段と、前記記憶手段に記憶されたソースコード群の中から、類似度の算出対象となる少なくとも２つ以上のソースコードを対象ソースコードとして登録し、該対象ソースコードを標準化して、夫々の対象ソースコードについて対象ソースコードトークン列を作成する対象ソースコード登録手段と、前記参照ソースコード登録手段により作成された参照ソースコードトークン列と前記対象ソースコード登録手段により作成された対象ソースコードトークン列から、前記参照ソースコードと対象ソースコードとの相関マトリックスを夫々作成する相関マトリックス作成手段と、前記相関マトリックス作成手段により作成された夫々の相関マトリックスを二値化された画像とみなして、各相関マトリックスにおいて複数のテクスチャ特徴量を算出するテクスチャ特徴量算出手段と、前記テクスチャ特徴量算出手段により算出された複数のテクスチャ特徴量を参照ベクトルとし、夫々の相関マトリックスに対応する各参照ベクトル間の距離を算出することにより、前記対象ソースコードの類似度を算出する類似度算出手段と、を備えたものである。
【００１５】
請求項６に記載の発明は、請求項４又は請求項５に記載の類似度評価装置において、前記類似度算出手段の結果を一覧表示する結果表示手段を更に備えたことものである。
【００１６】
請求項７に記載の発明は、複数の一次元データ列間の類似度を算出して評価する類似度評価方法であって、コンピュータの記憶装置に記憶された一次元データ列群の中から、ユーザにより任意に選択された複数の一次元データ列を参照データとして登録するステップと、前記一次元データ列群の中から、類似度の算出対象となる少なくとも２つ以上の一次元データ列を対象データ列として登録するステップと、前記参照データと対象データ列から、前記参照データと対象データ列との相関マトリックスを夫々作成するステップと、前記作成された夫々の相関マトリックスを二値化された画像とみなして、各相関マトリックスにおいて複数のテクスチャ特徴量を算出するステップと、前記複数のテクスチャ特徴量を参照ベクトルとし、夫々の相関マトリックスに対応する各参照ベクトル間の距離を算出することにより、前記対象データ列の類似度を算出するステップと、を含むものである。
【００１７】
請求項８に記載の発明は、請求項７に記載の類似度評価方法において、所定のプログラム言語で作成された複数のソースコード間の類似度を算出して評価するものであって、コンピュータの記憶装置に記憶されたソースコード群の中から、ユーザにより任意に選択された複数のソースコードを参照ソースコードとして登録し、該参照ソースコードを標準化して、参照ソースコードトークン列を作成するステップと、前記ソースコード群の中から、類似度の算出対象となる少なくとも２つ以上のソースコードを対象ソースコードとして登録し、該対象ソースコードを標準化して、夫々の対象ソースコードについて対象ソースコードトークン列を作成するステップと、前記参照ソースコードトークン列と対象ソースコードトークン列から、前記参照ソースコードと対象ソースコードとの相関マトリックスを夫々作成するステップと、前記作成された夫々の相関マトリックスを二値化された画像とみなして、各相関マトリックスにおいて複数のテクスチャ特徴量算出するステップと、前記複数のテクスチャ特徴量を参照ベクトルとし、夫々の相関マトリックスに対応する各参照ベクトル間の距離を算出することにより、前記対象ソースコードの類似度を算出するステップと、を含むものである。
【００１８】
請求項９に記載の発明は、請求項７又は請求項８に記載の類似度評価方法において、前記算出された少なくとも２つ以上の対象データ列の類似度を、前記コンピュータと接続された画像表示装置に一覧表示するステップを更に含むものである。
【発明の効果】
【００１９】
請求項１、４及び７の発明によれば、対比される一次元データ列の夫々についての参照ベクトルを用いて類似度が算出されるので、各一次元データ列の各々のテキストデータを直接比較するよりも、はるかに高速に類似度の算出が行われるようになる。
【００２０】
また、対象データ及び参照データから作成された参照ベクトルは、参照データ又は対象データが変更されない限り、何度も繰り返し用いることができるので、多対一の対象データ間の類似度の算出及び評価を極めて高速に行うことが可能となる。
【００２１】
請求項２、３、５、６、８及び９の発明によれば、上記の一次元データ列がソースプログラムであるときに、上記と同様の効果が得られる。また、ソースプログラムは類似度の算出にあたって標準化されるため、一見類似していないように見えるソースプログラム間の類似度も正確に算出することができ、ソースプログラム間の類似度を的確に評価することが可能となる。
【発明を実施するための最良の形態】
【００２２】
以下に、本発明の一実施形態に係る類似度評価プログラムを用いた類似度評価装置について、図１を参照して説明する。類似度評価装置１は、ソースコード等の複数の一次元データ列を記憶する記憶手段であるハードディスク等の記憶部２（請求項における記憶装置）と、ユーザーインタフェース部３と、類似度評価装置１全体を制御する制御部４と、を備える。この記憶部２には、本実施形態に係る類似度評価プログラム５が記憶されている。
【００２３】
上記の類似度評価プログラム５は、制御部４を、参照ソースコード登録手段である参照ソースコード登録部１１（又は参照データ登録手段である参照データ登録部）、対象ソースコード登録手段である対象ソースコード登録部１２（又は対象データ登録手段である対象データ登録部）、相関マトリックス作成手段である相関マトリックス作成部１３、テクスチャ特徴量算出手段であるテクスチャ特徴量算出部１４、及び類似度算出手段である類似度算出部１５として機能させる。
【００２４】
また、類似度評価装置１には、結果表示手段である結果表示部６（請求項における画像表示装置）が接続される。この結果表示部６の画像上には、上記の類似度算出部１５において算出された対象ソースコード(対象データ列)の類似度が表示される。
【００２５】
次に、本実施形態の類似度評価プログラム５の概要について、図２及び図３を参照して説明する。類似度評価プログラム５は、複数の一次元データ列間の類似度を算出して評価するものであるが、本実施形態においては、プログラムソースコード（以下、ソースコードという）の類似度を評価する場合について説明する。
【００２６】
上記の制御部４は、類似度評価プログラム５に基づいて、以下の手順をコンピュータに実行させる。まず、類似度評価プログラム５と同じく、上記の記憶部２に記憶されたソースコード群の中から、ユーザが複数のソースコードを参照ソースコードとして選出すると、制御部４は、これらの参照ソースコードに対して後述する標準化の処理を行い、参照ソースコードトークン列を作成する（Ｓ１の参照ソースコード登録手順）。なお、ソースコードに限らず、複数の一次元データ列間の類似度を算出して評価する場合も、制御部４は、記憶部２に記憶された一次元データ列群の中から、ユーザにより任意に選択された複数の一次元データ列を参照データとして登録し、データ列の特徴に応じた処理を行う（請求項における参照データ登録手順に相当）。
【００２７】
次に、ユーザが、上記の記憶部２に記憶されたソースコードの中から、類似度の算出対象となる少なくとも２つ以上のソースコードを対象ソースコードとして抽出すると、制御部４は、上記参照ソースコードと同様に、夫々の対象ソースコードについて対象ソースコードトークン列を作成する（Ｓ２の対象ソースコード登録手順）。ここで、多対一のソースコードの類似度の算出するとき、すなわち、ある１つの対象ソースコードに対する複数の対象ソースコードの類似度を夫々に算出するとき、上記の１つの対象ソースコードを対象ソースコードβとし、複数の対象ソースコードを対象ソースコードαとする。また、以下の説明において、単に対象ソースコードというときは、上記の対象ソースコードα及び対象ソースコードβの両方をいうものとする。なお、複数の一次元データ列間の類似度を算出して評価する場合も、上記の参照データ登録手順と同様である。
【００２８】
続いて、制御部４は、上記の参照ソースコードトークン列及び対象ソースコードトークン列から、上記の参照ソースコードと各対象ソースコードとの相関マトリックスを夫々作成する（Ｓ３の相関マトリックス作成手順）。
【００２９】
次に、制御部４は、作成された２つの相関マトリックスを二値化された画像とみなして、夫々の相関マトリックスについてテクスチャ特徴量を算出する（Ｓ４のテクスチャ特徴量算出手順）。
【００３０】
そして、制御部４は、算出されたテクスチャ特徴量を参照ベクトルとし、夫々の相関マトリックスに対応する各参照ベクトル間の距離を算出することにより、上記の対象ソースコード間の類似度を算出する（Ｓ５の類似度算出手順）。また、上記の類似度算出手順Ｓ５で得られた結果は、結果表示部６に一覧表示される（Ｓ７の結果表示手順）。
【００３１】
上記の参照ソースコード登録手順Ｓ１、対象ソースコード登録手順Ｓ２、相関マトリックス作成手順Ｓ３、テクスチャ特徴量算出手順Ｓ４及び類似度算出手順Ｓ５の各手順は、図４に示されるSourceCodeNormalizer、CodeCloneFinder、TexturalFeatures及びSourceCodeSimilarityの４つのクラスライブラリにより構成されるプログラム（SourceCodeSimilarityCalculating）に基づいて制御部４が実行する。ここで、図４に示されるSimpleSourceCodeSearchは、上記のクラスライブラリを用いるためのCUIアプリケーションである。例えば、ユーザが１つのソースコードを入力すると、制御部４は、このソースコードと予め登録されていた参照ソースコードとから参照ベクトルを算出し、別に登録されていた複数の対象ソースコードの参照ベクトルとの距離を夫々算出し、その近い順に対象ソースコードをソートして、その結果を結果表示部６に一覧表示する。以下に、上記の各手順と夫々のクラスライブラリについて簡単な解説を行う。
【００３２】
まず、上記の参照ソースコード登録手順Ｓ１について説明する。まず、ユーザはソースコードの類似度の算出に先立ち、記憶部２に記憶されたソースコード群Sより、m個の参照ソースコードs1，s2，・・・，smを選出する。これら選出された参照ソースコードSi'は下記の一般式（１）により表される。なお、選出方法は任意であるが、類似度を比較するソースコードの特徴をより良く反映するため、ユーザは互いに相関の低い参照ソースコードを選出することが望ましい。
【数１】
2008046695.tif 000003
【００３３】
次に、制御部４は、選出された参照ソースコードSi'の標準化を行う。ここでいう標準化とは、ソースコードから、類似度の比較において、コメント部のような直接的には関係のない情報を除去し、トークン単位で分割し、また、それらの定数及び変数を置換する処理をいう。この処理は、表１に示されるように、SourceCode、CommentRemover、ConstantRemover及びVariableTableの４つのクラスから構成されるSourceCodeNormalizerライブラリに基づいて制御部４が実行する。上記のSourceCodeは、ソースコードファイルを読み込み、CommentRemover、ConstantRemover及びVariableTableクラスにより標準化されたトークン列を受け取り、これを記録装置に保持させる機能を持つクラスである。また、CommentRemoverは、コメント文を削除するクラスであり、このConstantRemoverは、「“」と「”」で囲まれた文字列や、定数を規定の文字列に変換する。VariableTableは、変数の置換を担当するクラスである。これらのクラスが用いられることにより、制御部４は、ソースコード中のコメントを除去し、定数を所定の決められたトークンへ置換し又は変数名をその型を表すトークンへ置換する処理を行う。
【００３４】
【表１】
2008046695.tif 000004
【００３５】
上記手順により標準化されるソースコード及び標準化されたトークン列の具体例を図５（ａ）（ｂ）に示す。図５（ａ）に示される元のソースコード（Source Code 1及びSource Code 2）を標準化したものが、図５（ｂ）に示されるトークン列（Normalized Source Code 1及びNormalized Source Code 2）である。一見して相互の類似度が低く見えるようなソースコード間であっても、ソースコードの標準化により、それらの類似度を的確に算出することが可能となる。
【００３６】
そして、参照ソースコードを標準化して得られた参照ソースコードトークン列T'iは、下記の一般式（２）により表される。ここで、nは参照ソースコードトークン列T'iを構成するトークンの総数を示している。
【数２】
2008046695.tif 000005
【００３７】
また、対象ソースコードの登録手順Ｓ２も、参照ソースコード登録手順Ｓ１と同様に、上記のSourceCodeNormalizerライブラリに基づいて制御部４が実行する。まず、類似度の算出対象であるm個のソースコードs1，s2，・・・，smが、上記のソースコード群Sから抽出され、上記と同様の手順により、夫々対象ソースコードトークン列T1，T2が作成される。なお、対象ソースコードは、必ずしも２つに限定されるものではない。ここで、作成される対象ソースコードトークン列Tjは、下記の数式（３）のように表される。なお、nは対象ソースコードトークン列Tjを構成する総トークン数を示している。
【数３】
2008046695.tif 000006
【００３８】
次に、相関マトリックス作成手順Ｓ３について説明する。本手順では、CCFinderで用いられている表形式の表現が採用される。この相関マトリックス作成手順を制御部４に実行させるプログラムがCodeCloneFinderライブラリである。このCodeCloneFinderライブラリは、単一のCodeCloneMatrixクラスで構成される。また、CodeCloneMatrixクラスは、２つのソースコードクラスのインスタンスを受け取り、相関マトリックスを作成、保持する。相関マトリックスは、目的に応じてbitmapプロパティを通じてビットマップ画像の形で、又はbyteArrayプロパティを通じて２次元byte型配列の形で作成される。
【００３９】
上記のCodeCloneMatrixクラスにより作成された相関マトリックスは、図６に示されるように、２つのソースファイルから夫々作成されたトークン列を縦及び横軸に並べた共起マトリックスである。なお、図６におけるＡ，Ｂ，Ｃ，Ｄは、夫々標準化されたトークンを表している。
【００４０】
相関マトリックスの各セルには、縦と横の要素が一致すれば“１”が出力され、一致しなければ“０”が出力される。そして、マトリックス上に表現された“１”と“０”の分布から２つのトークン列間の類似度が算出される。仮に、２つのソースコードが同一である場合には、作成されたマトリックスにおいて、左上から右下にかけて、対角線上に“１”が表示されることになる。また、この直線の左右の領域の“１”の分布は線対称となる。
【００４１】
この様なマトリックスは、例えば、２つの対象ソースコードs1，s2が抽出されているとき、対象ソースコードs1に対応する対象ソースコードトークン列T1と参照ソースコードトークン列T'1，T'2，・・・，T'mの夫々について、また同様に、対象ソースコードs2に対応する対象ソースコードトークンT2と参照ソースコードトークン列T'1，T'2，・・・，T'mの夫々について作成される。
【００４２】
続いて、テクスチャ特徴量算出手順Ｓ４について説明する。ここで、テクスチャ特徴量とは、画像の特徴を定量化したものをいう。テクスチャ特徴量の算出方法は、一般に統計的特徴の抽出、局所的幾何学的特徴による解析、モデル当てはめによる解析、構造的解析の４つの方法に大別される。これらのうち、統計的なテクスチャ特徴量の算出法には、濃度ヒストグラム、同時生起行列、差分統計計算量、ランレングス行列、パワースペクトルを用いるもの等がある。
【００４３】
上記の各方法によって得られる統計量は夫々に異なるが、本実施形態においては、同時生起行列を用いてテクスチャ特徴量を算出するものとし、算出されたテクスチャ特徴量を参照ベクトルとする。ここで、仮に、４つの参照ソースコードを用い、５種類のテクスチャ特徴量が算出されたとすると、類似度を求めたいソースコードの夫々に対して、２０次元の参照ベクトルが算出されることになる。
【００４４】
上記の同時生起行列は、画像領域上において、δだけ離れたピクセル間の階調の変化の生起確率を成分とした行列である。上記のδは、図７に示されるように、距離と角度を用いてδ＝(d,θ)として又はx軸方向とy軸方向の変位を用いてδ=(dx,dy)として表される。
【００４５】
ここでは、横方向Nx画素，縦方向Ny画素の画像について考える。画像に含まれる画素の階調が、０からNg−１までの離散的な値をとるとき、同時生起行列Pδは、画像の大きさに依らずNg階の正方行列となる。その要素Pδ(i,j)(i,j＝0,1,2,・・・,Ng−1)は、階調iの点から一定の変位δ＝(d,θ)だけ離れた点の階調がjである確率であり、数式（４）の様に表される。なお、上記のg，i及びjは何れも任意の数である。また、cδ(i,j)は、階調iの点から一定の変位δだけ離れた点の階調がjである組の数であり、Rδは、δだけ離れた点の組の総数である。
【数４】
2008046695.tif 000007
【００４６】
また、Rδは、δ＝(dx,dy)のとき、数式（５）のように表される。
【数５】
2008046695.tif 000008
【００４７】
図８は、Nx＝4,Ny＝4の画像に対する、d＝1の場合の同時生起行列を示す。なお、δ＝(d,0°)と(d,180°)，(d,45°)と(d,225°)，(d,90°)と(d,270°)，また(d,135°)と(d,315°)は同じ同時生起行列となる。
【００４８】
Haralickらは、同時生起行列を用いて１４種類のテクスチャ特徴量を定義している。ここでは、上記１４種類のうち、代表的な５種類のテクスチャ特徴量を以下に紹介する。
【００４９】
（i）ASM（Angular Second Moment）：
ASMは、テクスチャの一様性を示し、数式（６）により算出される。なお、Pδ(i,j)が大きな値を持つとASMは大きくなる。つまり、テクスチャの一様性が高いと判断できる。
【数６】
2008046695.tif 000009
【００５０】
（ii）CON（Contrast）：
CONは、濃度変化の強さを示し、数式（７）により算出される。画素対の濃度差|i.j|の画素全体についての平均であり、濃度差の高い画素対が多いほど値が大きくなる。
【数７】
2008046695.tif 000010
【００５１】
（iii）COR（Correlation）：
CORは、相関の強さを示し、数式（８）により算出される。この値は、画像内に特定のパターンが現れる場合に大きくなる。なお、μx,μy及びσx,σyは夫々、数式（９）に示されるPx(j)，Py(i)の平均と標準偏差である。
【数８】
2008046695.tif 000011
【数９】
2008046695.tif 000012
【００５２】
（iv）IDM（Inverse Difference Moment）：
IDMは、濃度変化の一様性を示し、数式（１１）により算出される。これは画像が局所的な変化に乏しい場合に大きな値を持つ。
【数１０】
2008046695.tif 000013
【００５３】
（v）ENT（Entropy）：
ENTは、画像の複雑さの尺度であると同時に情報量も表しており、数式（１２）により算出される。これはPδ(i,j)の値が均等に割り当てられている程大きくなる。つまり、ENTが大きい場合には、画像中に多くの階調が満遍なく利用されていることを示す。
【数１１】
2008046695.tif 000014
【００５４】
本実施形態においては、上記の相関マトリックス作成手順Ｓ３で作成されたマトリックスを二値化された画像とみなして、テクスチャ特徴量が算出される。ここでは、特に対角方向の要素の相関が重要であるので、例えば、ユーザが、m個の参照ソースコードを選出し、２つの対象ソースコードs1，s2を抽出したとき、制御部４は、これらの対象ソースコードの夫々について、斜め１３５度、すなわちδ＝(d,135°)におけるテクスチャ特徴量を、m個の参照ソースコードに対して求める。これにより、対象ソースコードs1に対応する参照ベクトルr1及び対象ソースコードs2に対応する参照ベクトルr2が作成される。上記の１４種類のテクスチャ特徴量のうち、k種類の特徴量が算出されたとき、テクスチャ特徴量rは、一般式（１３）で表され、対象ソースコードs1，s2の夫々に対するテクスチャ特徴量r1，r2の大きさ（要素数）は何れもkmとなる。
【数１２】
2008046695.tif 000015
【００５５】
上記のテクスチャ特徴量算出手順Ｓ４は、TexturalFeaturesライブラリに基づいて制御部４が実行する。このTexturalFeaturesライブラリは、表２に示されるように、CoOccurrenceMatrix、BitmapCoMatrix、ByteArrayCoMatrix及びBasicFeaturesの４つのクラスから構成される。BitmapCoMatrix及びByteArrayCoMatrixは、抽象クラスCoOccurrenceMatrixを共通の親とし、夫々ビットマップ画像及び２次元byte配列から相関マトリックスを作成し、保持するクラスである。一般に、画像を操作するよりもbyte配列を操作する方が高速であり、CodeCloneFinderで作成された相関マトリックスを画像として表示する必要がない場合は、２次元byte配列の利用が推奨される。上記のBasicFeaturesは、CoOccurenceMatrixのインスタンスとδを指定して、対応するテクスチャ特徴量を算出、保持するクラスである。
【００５６】
【表２】
2008046695.tif 000016
【００５７】
以下に、参照ベクトルを用いた類似度算出手順Ｓ５について説明する。２つの対象ソースコードs1，s2間の類似度Rs1,s2は、ソースコードs1の参照ベクトルr1及びソースコードs2の参照ベクトルr2を用いて、数式（１４）により算出される。なお、ここで、wj(0＜wj ＜1.0,  j＝1,・・・,k)は、j番目のテクスチャ特徴量に対する重みである。
【数１３】
2008046695.tif 000017
【００５８】
上記の類似度算出手順Ｓ５を制御部４に実行させるSourceCodeSimilarityライブラリは、単一のReferenceVectorクラスから構成される。このReferenceVectorクラスは、SourceCodeクラスと対応する参照ベクトルを保持するクラスである。互いの参照ベクトル間の距離を算出するdistanceTo()メソッドを有し、間接的にソースコード間の類似度を算出するのに用いられる。
【００５９】
以下に、本実施形態に係る類似度評価プログラム５を用いた類似度評価装置１によるソースプログラム類似度評価方法について、図９乃至図１２を参照して説明する。本実施形態において、類似度の算出対象となるソースプログラムの使用言語はjava  J2SE  5.0とし、また、開発環境はEclipse  SDK  3.1.1とする。ここでは、ある１つの対象ソースコードβ（以下、検索ソースコードという）に対する複数の対象ソースコードαの類似度を算出するものとする。
【００６０】
上記の各手順は、ユーザが、図９に示されるようなCUIを有するアプリケーションであるSimpleSourceCodeSearchに基づき制御部４が実行する。図９は、結果表示部６に一覧表示される類似度評価装置１のメインメニューを示しており、ユーザは、このメインメニューから参照ソースコードや対象ソースコードの登録及び除去を行ったり、類似度比較を行う等の操作を選択し、実行することができる。
【００６１】
アプリケーションの操作手順は以下の通りである。まず、ユーザはメインメニューにて“１”を入力し、参照ソースコードの入力モードに切り替えた後、参照ソースコードを任意の数だけ登録する。この登録手順は、必ずしも上記のCUIによるものとは限られず、GUIによるものでもよい。例えば、ユーザがコンピュータに接続されたマウス等を操作して、ファイル名をコピー＆ペーストすることにより、複数の参照ソースコードを一度に登録することができる。
【００６２】
ソースコードは、登録される度に上述のSourceCodeクラスによって標準化され、記憶部２に保持される。参照ソースコードの登録時に、既に対象ソースコードが登録されている場合は、制御部４は、それらについてのテクスチャ特徴量の算出を行う。登録された参照ソースコードは、図１０に示される様に、結果表示部６に一覧表示される。上記のSimpleSourceCodeSearchには、登録された参照ソースコードを閲覧するためのコマンドも用意されている。また、SimpleSourceCodeSearchを用いてユーザは一度登録された参照ソースコードを消去することや、追加登録を行うこともできる。
【００６３】
上記の一覧表示処理の後、ユーザはメインメニューにて“４”を入力し、対象ソースコードの入力モードに切り替えて、類似度の算出対象である対象ソースコードを登録する。登録された対象ソースコードは直ちに標準化され、登録済みの参照ソースコードとの相関マトリックスの作成及びテクスチャ特徴量の算出が行われる。算出されたテクスチャ特徴量は、ReferenceVectorクラスのインスタンスとして、参照ベクトルとソースコードが組になった形で記憶部２に保持される。登録された対象ソースコードは、図１１に示される様に、一覧表示される。また、上記のテクスチャ特徴量算出手順Ｓ４の実行に要した時間も表示される。なお、ユーザは対象ソースコードの登録後に、一度登録された参照ソースコードを消去することや追加登録を行うこともできる。
【００６４】
続いて、ユーザは、メインメニューにて“６”を入力し、検索ソースコードを入力するモードに切り替え、検索ソースコードを入力する。なお、請求項における対象ソースコードには、この検索ソースコードも含まれる。入力された検索ソースコードは標準化され、参照ソースコードとの相関マトリックスの作成、テクスチャ特徴量算出を経て参照ベクトルの作成が行われる。
【００６５】
その後、直ちに対象ソースコードと参照ソースコードとの相関マトリックスから作成された参照ベクトルと、検索ソースコードと参照ソースコードとの相関マトリックスから作成された参照ベクトルと、の夫々の参照ベクトル間の距離が算出されることにより、検索ソースコードに対する対象ソースコードの類似度の算出が行われる。そして、対象ソースコードは、図１２に示されるように、検索ソースコードとの類似度が高い順に、算出された類似度と共に一覧表示される。
【００６６】
上記のように、対比されるソースコードの夫々についての参照ベクトルを用いて類似度を算出すると、各ソースコードの各々のテキストデータを直接比較するよりも、はるかに高速で類似度の算出が行われるようになる。
【００６７】
また、上記の対象ソースコードの登録による参照ベクトルの作成については、入力された対象ソースコードの数が多くなるほど、参照ソースコードとの相関マトリックスの作成や、テクスチャ特徴量算出に多くの時間を要することになる。しかし、対象ソースコードと参照ソースコードとの相関マトリックスから作成された参照ベクトルについては、一度作成されると、参照ソースコード又は対象ソースコードが変更されない限り、何度も繰り返し用いることができる。従って、検索ソースコードと対象ソースコードとの類似度の算出の都度、対象ソースコードと参照ソースコードとの相関マトリックスに基づいて参照ベクトルを作成する必要はない。また、検索ソースコードと参照ソースコードとの相関マトリックスに基づく参照ベクトルの作成については、検索ソースコードと対象ソースコードとの類似度の算出の度に行う必要があるが、検索ソースコードは１つのソースコードであるから、この検索ソースコードの登録による参照ベクトルの作成は、極めて短時間に行われる。従って、本実施形態の類似度評価方法を用いることにより、多対一のソースコードの類似度の算出及び評価を、極めて高速に行うことが可能となる。
【００６８】
以下に、本実施形態の類似度評価方法の有効性を検証するための実施例について説明する。本実施例では、大学のプログラミング授業における採点支援を目的とした類似度評価方法について示す。ここでいう採点支援とは、ソースコード盗用の発見と模範解答とのマッチングの二点を自動化することを指す。実験の対象となるデータは、神戸大学工学部情報知能工学科「情報知能工学演習IV」Java（登録商標）プログラム課題において、受講生が作成したものであり、ファイル総数は434である。なお、コンピュータにはSONY VAIO VGN-S94PSが用いられ、このコンピュータの計算機環境は、CPUがIntel(R) Pentium（登録商標）(R) M processor 2.26GHz、主記憶容量が1.00GB RAMであった。
【００６９】
実験対象となるソースコードは、Infoseekのテレビ番組表で公開されているiEPGファイルの情報を保存・出力するというJava（登録商標）プログラム課題であり、これはEPGCollectorFromInfoseek、EPGManager、EPGItem及びPerformerItemの４つのクラスにより構成される。これらのうち、EPGCollectorFromInfoseek及びPerformerItemの２つのクラスは担当教員によって予めほぼ完成されており、受講者はEPGManagerクラスの４つのメソッドとEPGItemクラス１つのメソッドを各自記述する。授業用WEBページ上で各メソッド記述のヒントや推奨APIの提示が行われており、また、いくつかの課題メソッドは、部分的に記述がなされた状態の穴埋め形式となっているため、提出されたソースコード間の類似度は高いことが予想される。
【００７０】
本実施例では、まず、ユーザ（担当教員）は、受講生から提出されたソースコードから適当に選んだ任意個数のソースコードが参照ソースコードとして登録すると、制御部４は、参照ソースコードを含む全てのソースコードに対し、参照ベクトルの算出を行う。次に、ユーザは単一のソースコードを選び、これを検索ソースコードとすると、制御部４は、検索ソースコードとこれを含む全てのソースコード間で、上記の数式（１４）に従って類似度を算出する。
【００７１】
本実施例では、参照ソースコードの数による性能の違いを検証するため、参照ソースコードの個数を１,３,５,７,１４と変えて実験が行われた。また、テクスチャ特徴量による性能の違いを検証するため、参照ベクトルの算出に用いられるテクスチャ特徴量として、ASM、CON、COR、ENT及びIDMの夫々が用いられた場合と、５つの特徴量全てが用いられた場合の夫々について実験が行われた。なお、これらの設定による性能の違いを評価するため、以下では、同一のソースコードx-A0-EPGManager.javaを検索ソースコードとして類似度の算出に用いることとした。
【００７２】
この課題では、作成されるプログラム（ファイル名）に命名規則が与えられて、同じファイル名を持つソースコードは同じ意図を持って作成されているので、類似したソースコードであると考えられる。なお、本実施例において、検索ソースコードとして用いられるx-A0-EPGManager.javaと同じEPGManager.javaという名称のソースコードは、全ソースコード中に７３個含まれていた。以下では、これらを適合ソースコードと呼ぶものとする。
【００７３】
算出された類似度に従って、検索ソースコードに類似した５０個又は７３個の対象ソースコードが選出され、以下の評価式（１５）に従って評価が行われた。
【数１４】
2008046695.tif 000018
【００７４】
上記の５種類全てのテクスチャ特徴量が用いられ、参照ソースコード数を１，３，５，７，１４と変えた場合における、各対象ソースコードと各参照ソースコードとの夫々の組み合わせについて、異なる参照ソースコードを用いて８回ずつ実験が行われた。図１３は、上記実験の評価の平均と標準偏差を示す。同図より、参照ソースコード数が１の場合は、評価が低く分散も大きいが、３，５，７，１４と増えるに従って高くなっている。従って、参照ソースコードは複数個用いられることが望ましい。
【００７５】
図１４は、参照ソースコード数を１４に固定し、テクスチャ特徴量の算出に上記のASM、CON、COR、ENT及びIDMの夫々が用いられた場合とこれら５種類全てが用いられた場合について同様の実験を行った結果を示す。この場合も、参照ソースコードを変えて夫々８回の実験が行われ、評価の平均と標準偏差が算出された。対象ソースコード群に含まれる適合ソースコードの最大数が５０の場合は、特徴量による差は僅かあるが、７３の場合は評価が大きく分かれる。５つの特徴量の全てが用いられた場合については、高い評価となっているが、斜め方向の相関を表すCORもこれに近い評価を示している。従って、CORが単独で用いられた場合でも、５種類の特徴量全てが用いられた場合に匹敵する性能が得られることが期待される。
【００７６】
図１５は、テクスチャ特徴量としてCORのみを用いた場合と５種類全てを用いた場合について、類似度の算出時間の平均と標準偏差を示したものである。参照ソースコード数が７以下の場合は、算出時間の増加はあまり観測されないが、参照ソースコード数が１４の場合は、急激に算出時間が増加している。この結果からは明確ではないが、全体的には、参照ソースコード数が増加するに従って、算出時間が増加傾向にあり、参照ソースコード数と算出時間はトレードオフの関係にあると予想される。また、テクスチャ特徴量としてCORのみを用い、参照ソースコード数を１４とした場合でも、５種類全てのテクスチャ特徴量を用い、参照ソースコード数を７とした場合と同等の算出時間であり、テクスチャ特徴量としてCORのみを用いた場合の算出時間が短いことがわかる。これらの結果より、テクスチャ特徴量としてCORのみを用いることにより、算出時間の増加を抑えつつ、評価の高い類似度の算出を行うことができると言える。
【００７７】
また、全検索結果を集計した結果、検索ソースコードx-A0-EPGManagerに対する類似度が最も高いと判断された対象ソースコードx-A39-EPGManagerと類似度が最も低いとされた対象ソースコードx-A38-EPGManagerとを直接比較し、出力結果が実際の類似度を反映できているかを検証した。図１６乃至図１８は、検索ソースコードx-A0-EPGManager、対象ソースコードx-A39-EPGManager及びx-A38-EPGManagerのプログラムソースコード本文の同一箇所の抜粋である。これらのソースコード本文を目視で比較したところ、x-A0-EPGManager（図１６）とx-A39-EPGManager（図１７）には類似した記述が多く見られ、x-A0-EPGManager（図１６）とx-A38-EPGManager（図１８）とを比較した場合に比べて、明らかに類似度が高いことが確認された。これら３つのソースプログラムは、例えば、多くの部分において、x-A0-EPGManagerとx-A39-EPGManagerとは同様の記述方式を採っている部分が多いが、x-A38-EPGManagerは、他の２つと処理の順序が異なる場合があり、冗長な部分も見られる。強調した箇所の様に、同じ目的であっても処理の仕方が若干異なる箇所も確認された。
【００７８】
次に、x-A0-EPGManagerとx-A39-EPGManagerとの相関マトリックス及びx-A0-EPGManagerとx-A38-EPGManagerとの相関マトリックスの夫々を図１９及び図２０に示す。図１９に示される相関マトリックスでは、左上から右下に向かって斜め方向の直線がはっきりと確認できるが、これは２つのソースコード間に共起するトークンが多いことを示す。一方、図２０に示される相関マトリックスにも多くの類似した部分列は見られるが、図１９に示されるように、はっきりとした斜め方向の直線は見られない。このことからもx-A0-EPGManagerに対し、x-A39-EPGManagerがx-A38-EPGManagerより高い類似度をもつことが確認できる。これらより、本実施形態の類似度評価方法が、実際に類似度の高いテキストに対して、正確な類似度を算出できること及び僅かな構造や処理順序の改変についても、類似度の差を算出できることが分かる。
【図面の簡単な説明】
【００７９】
【図１】本発明の一実施形態に係る類似度評価装置のブロック構成図。
【図２】本発明の一実施形態に係る類似度評価プログラムにより実行される手順の概略を示す図。
【図３】上記手順を示すフローチャート。
【図４】上記プログラムを構成するクロスライブラリを示す図。
【図５】（ａ）（ｂ）はソースコードの標準化処理の例を説明する図。
【図６】ソースコードトークン列から作成される相関マトリックスの例を示す図。
【図７】変位δ＝（ｄ，θ）とδ＝（ｄｘ，ｄｙ）の関係の例を示す図。
【図８】（ａ）〜（ｅ）は同時生起行列の例を示す図。
【図９】類似度評価装置の表示部に表示されるメインメニューの例を示す図。
【図１０】参照ソースコードの登録例を示す図。
【図１１】対象ソースコードの登録例を示す図。
【図１２】類似度算出結果の表示例を示す図。
【図１３】選択された参照ソースコードの数による類似度評価の比較例を示す図。
【図１４】テクスチャ特徴量の種類による類似度評価の比較例を示す図。
【図１５】選択された参照ソースコードの数及びテクスチャ特徴量の種類による類似度算出時間の比較例を示す図
【図１６】x-A0-EPGManager.javaのソースコードの一部を示す図。
【図１７】x-A39-EPGManager.javaのソースコードの一部を示す図。
【図１８】x-A38-EPGManager.javaのソースコードの一部を示す図。
【図１９】x-A0-EPGManager.javaとx-A39-EPGManager.javaとの相関マトリックスを示す図。
【図２０】x-A0-EPGManager.javaとx-A38-EPGManager.javaとの相関マトリックスを示す図。
【符号の説明】
【００８０】
１    類似度評価装置
２    記憶部（記憶装置）
３    ユーザインタフェース部
４    制御部
５    類似度評価プログラム
６    結果表示部（結果表示手段）
１１    参照ソースコード登録部（参照ソースコード登録手段）
１２    対象ソースコード登録部（対象ソースコード登録手段）
１３    相関マトリックス作成部（相関マトリックス作成手段）
１４    テクスチャ特徴量算出部（テクスチャ特徴量算出手段）
１５    類似度算出部（類似度算出手段）
【図１】
2008046695.tif 000019
【図２】
2008046695.tif 000020
【図３】
2008046695.tif 000021
【図４】
2008046695.tif 000022
【図５】
2008046695.tif 000023
【図６】
2008046695.tif 000024
【図８】
2008046695.tif 000025
【図１６】
2008046695.tif 000026
【図１７】
2008046695.tif 000027
【図１８】
2008046695.tif 000028
【図１９】
2008046695.tif 000029
【図２０】
2008046695.tif 000030
【図７】
2008046695.tif 000031
【図９】
2008046695.tif 000032
【図１０】
2008046695.tif 000033
【図１１】
2008046695.tif 000034
【図１２】
2008046695.tif 000035
【図１３】
2008046695.tif 000036
【図１４】
2008046695.tif 000037
【図１５】
2008046695.tif 000038