(57)【要約】【課題】コードクローンの分析は、ソフトウェアの大規模化に伴って計算量が増大する。【解決手段】ソースコード類似度評価プログラムは、ソフトウェアを構成するソースコードリストを抽出する開発成果物解析手段２１と、比較元ソースコードリスト４４ａと比較先ソースコードリスト４４ｂとを比較して、両者の対応関係を解析する対応関係解析手段２２と、対応関係に基づいて、比較元ソースコードリスト４４ａに含まれる比較元の比較先ソースコード４１ｂの比較対象を前記比較先ソースコードリスト４４ｂから特定する比較対象特定手段２３と、比較元ソースコード４１ａと比較対象特定手段２３で特定したソースコードとの類似度を求める類似度計算手段２４と、比較元ソースコード４１ａと類似度との組合せを出力する出力手段１５とをコンピュータに実行させる。【選択図】図２
2014059743.tif 000002
【特許請求の範囲】
【請求項１】
比較元ソフトウェアの構成を示す比較元ソースコードリストと比較先ソフトウェアの構成を示す比較先ソースコードリストとを抽出するソースコードリスト抽出手段と、
前記比較元ソースコードリストと前記比較先ソースコードリストとを比較して、両者の対応関係を解析する対応関係解析手段と、
前記対応関係に基づいて、前記比較元ソースコードリストに含まれる各比較元ソースコードの比較対象となる比較先ソースコードを前記比較先ソースコードリストから特定する比較対象特定手段と、
前記比較元ソースコードと前記比較対象特定手段で特定した前記比較先ソースコードとの類似度を計算する類似度計算手段と、
前記比較対象特定手段で特定した前記比較先ソースコードのうち、最も高い類似度を備えた類似ソースコードを判定する類似度評価手段と、
前記比較元ソースコード、および、前記比較元ソースコードと前記類似ソースコードとの類似度を対応づけて出力する出力手段と、
をコンピュータに実行させるためのソースコード類似度評価プログラム。
【請求項２】
前記比較対象特定手段は、前記比較元ソースコードが前記比較先ソースコードリストのいずれかの比較先ソースコードに前記対応関係を有していると判定されていたならば、当該対応関係を有する比較先ソースコードを比較対象として特定し、前記比較元ソースコードが前記比較先ソースコードリストのいずれの比較先ソースコードにも前記対応関係を有していないと判定されていたならば、前記比較先ソースコードリストの全ての比較先ソースコードを比較対象として特定する、
ことを特徴とする請求項１に記載のソースコード類似度評価プログラム。
【請求項３】
前記ソースコードリスト抽出手段は更に、前記比較元ソフトウェアを構成する前記比較元ソースコードの相対パス名およびファイル名を取得して前記比較元ソースコードリストを抽出すると共に、前記比較先ソフトウェアを構成する比較先ソースコードの相対パス名およびファイル名を取得して前記比較先ソースコードリストを抽出し、
前記対応関係解析手段は、前記比較元ソースコードの相対パス名とファイル名とが、前記比較先ソースコードリストのいずれかの比較先ソースコードの相対パス名とファイル名とに一致するならば、一致する比較先ソースコードは当該比較元ソースコードと前記対応関係を有すると判定する、
ことを特徴とする請求項２に記載のソースコード類似度評価プログラム。
【請求項４】
前記出力手段が出力する類似度は、前記比較元ソースコードが前記比較先ソースコードリストのいずれかの比較先ソースコードに前記対応関係を有する場合には、前記対応関係を有する比較先ソースコードとの類似度である、
ことを特徴とする請求項１に記載のソースコード類似度評価プログラム。
【請求項５】
前記出力手段が出力する類似度は、前記比較元ソースコードが前記比較先ソースコードリストのいずれの比較先ソースコードにも前記対応関係を有さない場合には、前記比較先ソースコードリストの全ての比較先ソースコードとの類似度のうち、最も高い類似度である、
ことを特徴とする請求項１に記載のソースコード類似度評価プログラム。
【請求項６】
前記出力手段は、前記比較元ソフトウェアのルートフォルダを根ノード、前記比較元ソースコードの相対パスに位置する各フォルダを内部ノード、前記比較元ソースコードおよび前記比較元ソースコードと前記類似ソースコードとの類似度を葉ノードとするツリー図で表示する、
ことを特徴とする請求項１に記載のソースコード類似度評価プログラム。
【請求項７】
前記出力手段は、前記比較元ソースコードと前記類似ソースコードとの類似度を色分けされた棒グラフのいずれかの色の面積比で表すと共に、前記比較元ソースコードの論理行数を前記棒グラフの全体面積で表す、
ことを特徴とする請求項１に記載のソースコード類似度評価プログラム。
【請求項８】
前記比較元ソースコードに仕様書が関連付けされていない場合には、前記類似ソースコードの仕様書を類似仕様書として提示する類似仕様書分析手段を、
更にコンピュータに実行させることを特徴とする請求項１に記載のソースコード類似度評価プログラム。
【請求項９】
請求項１ないし請求項８のいずれか１項に記載のソースコード類似度評価プログラムを記録した、
ことを特徴とするコンピュータ読み取り可能な記憶媒体。
【請求項１０】
比較元ソフトウェアの構成を示す比較元ソースコードリストと比較先ソフトウェアの構成を示す比較先ソースコードリストとを抽出するソースコードリスト抽出手段と、
前記比較元ソースコードリストと前記比較先ソースコードリストとを比較して、両者の対応関係を解析する対応関係解析手段と、
前記対応関係に基づいて、前記比較元ソースコードリストに含まれる各比較元ソースコードの比較対象である比較先ソースコードを前記比較先ソースコードリストから特定する比較対象特定手段と、
前記比較元ソースコードと前記比較対象特定手段で特定した前記比較先ソースコードとの類似度を計算する類似度計算手段と、
前記比較対象特定手段で特定した前記比較先ソースコードのうち、最も高い類似度を備えた類似ソースコードを判定する類似度評価手段と、
前記比較元ソースコード、および、前記比較元ソースコードと前記類似ソースコードとの類似度を対応づけて出力する出力手段と、
を備えることを特徴とするソースコード類似度評価装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアを構成するソースコード群の類似度を評価する手段をコンピュータに実行させるためのプログラム、当該プログラムを記録したコンピュータ読み取り可能な記憶媒体、および、前記手段を備えたソースコード類似度評価装置に関するものである。
【背景技術】
【０００２】
近年、ソフトウェアの適用範囲の拡大に伴って、レガシーソフトウェアと呼ばれるソフトウェアが拡大している。レガシーソフトウェアとは、システムへの新たな要求に対する機能追加や修正が繰り返された結果、ソフトウェアの規模や複雑さが増大し、保守が難しくなり、保守コストが増大しているソフトウェアのことをいう。
【０００３】
レガシーソフトウェアの保守コスト増大の原因の一つとして、いわゆるコードクローンと呼ばれている類似コード列の存在がある。コードクローンとは、ソースコードに含まれている同一または類似する複数のコード列のことであり、主にソースコードの流用を行うことにより生成されるものである。多数のコードクローンを含むソフトウェアでは、システム全体のコードサイズが増大することに加え、同一または類似する複数のコード列の一つに変更を加える際に、他のすべての箇所にも同様の変更を行わなければならないことが多く、保守コストを増大させる原因となっている。
【０００４】
コードクローンは、レガシーソフトウェアに対して機能追加を行った保守開発に於いて発生することが多いとされている。コードクローンは、追加される機能に類似した機能を実現するソフトウェアをベースソフトウェアとし、ベースソフトウェアを構成するソースコード群をコピーした上で改造して作られることが多いためである。本来であれば、ベースソフトウェアの類似した機能部分は、ソフトウェア部品として共通化すべきである。しかし、ソフトウェア開発に於いて開発期間や開発コストの短縮が強く要請されるため、多くのソフトウェア開発現場に於いて、コードクローンが作成されている。
ソフトウェアの保守コストを削減するため、このコードクローンを検出して、ソフトウェア部品として共通化することが、ソフトウェアの保守現場から要請されている。しかし、大規模ソフトウェアに対して、目視によるコードレビューでコードクローンを発見することは非効率である。
近年、上記課題を踏まえて、ソフトウェアを構成するソースコードに対して、コードクローンを検出する技術が開示されている。
【０００５】
特許文献１の課題には、「類似するソースコード片を高速に抽出することができる類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法を提供すること。」と記載され、「解決手段」には、「比較元ソースコード片指定部２１０が比較との基準となるソースコード片の指定を受け付け、このソースコード片と類似するソースコード片を比較先ソースコード指定部２２０によって指定を受け付けられたソースコード群から抽出して結果出力部２９０から出力する。ソースコード群から比較元のソースコード片と類似比較されるソースコードを抽出する処理は、比較元のソースコード片から作成した構文木と、ソースコード群から作成した構文木とを参照して比較先ソースコード片抽出部２７０がおこなう。」と記載されている。
【０００６】
非特許文献１には、２つのファイルの比較を行うプログラムであるdiffのアルゴリズムの詳細が記載されている。
非特許文献２には、ソフトウェアのクローン検出に関する研究内容が記載されている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−１８６９３号公報
【非特許文献】
【０００８】
【非特許文献１】J. W. Hunt and M. D. McIlroy, “ An Algorithm for Differential File Comparison",BellTelephone Laboratories Computing Science Technical Report #41, July 1976.
【非特許文献２】Rainer Koschke, “Survey of Research on Software Clones", Dagstuhl Seminar Proceedings 06301,19.04.2007
【発明の概要】
【発明が解決しようとする課題】
【０００９】
非特許文献１，２に記載された技術では、大量のソースコード（例えば数千ファイル）で構成される大規模ソフトウェアに適用すると、分析結果がファイル数の二乗で増加するため、類似関係の理解に多大な時間を要するという課題がある。
【００１０】
特許文献２に記載された技術では、ユーザが比較元ソースコードを指定するというものであるため、大量のソースコードで構成される大規模ソフトウェアに対して、効率的な分析を行うという目的には十分ではない。例えば、ソフトウェアが数万個のソースコードファイルで構成されているとき、その比較元ソースコード（ファイル）を、ユーザが全て指定することは現実的ではない。
【００１１】
本発明は、複数のソースコードファイルからなる２つのソフトウェアの類似度を評価するソースコード類似度評価プログラム、ソースコード類似度装置、および、ソースコード類似度評価プログラムを記録したコンピュータ読み取り可能な記憶媒体を提供することを目的とする。
【課題を解決するための手段】
【００１２】
上記の課題を解決するために、請求項１に記載の発明では、比較元ソフトウェアの構成を示す比較元ソースコードリストと比較先ソフトウェアの構成を示す比較先ソースコードリストとを抽出するソースコードリスト抽出手段と、前記比較元ソースコードリストと前記比較先ソースコードリストとを比較して、両者の対応関係を解析する対応関係解析手段と、前記対応関係に基づいて、前記比較元ソースコードリストに含まれる各比較元ソースコードの比較対象となる比較先ソースコードを前記比較先ソースコードリストから特定する比較対象特定手段と、前記比較元ソースコードと前記比較対象特定手段で特定した前記比較先ソースコードとの類似度を計算する類似度計算手段と、前記比較対象特定手段で特定した前記比較先ソースコードのうち、最も高い類似度を備えた類似ソースコードを判定する類似度評価手段と、前記比較元ソースコード、および、前記比較元ソースコードと前記類似ソースコードとの類似度を対応づけて出力する出力手段と、をコンピュータに実行させるためのソースコード類似度評価プログラムとした。
その他の手段については、発明を実施するための形態のなかで説明する。
【発明の効果】
【００１３】
本発明によれば、複数のソースコードファイルからなる２つのソフトウェアの類似度を評価するソースコード類似度評価プログラム、ソースコード類似度装置、および、ソースコード類似度評価プログラムを記録したコンピュータ読み取り可能な記憶媒体を提供することが可能となる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施形態に於けるソースコード類似度評価装置を示す概略の構成図である。
【図２】第１の実施形態に於けるソースコード類似度評価手段の動作を示す図である。
【図３】第１の実施形態に於ける開発成果物解析手段の処理を示すフローチャートである。
【図４】第１の実施形態に於ける比較元ソースコードリストと比較先ソースコードリストを示す図である。
【図５】第１の実施形態に於ける対応関係解析手段の処理を示すフローチャートである。
【図６】第１の実施形態に於ける対応関係リストを示す図である。
【図７】第１の実施形態に於ける比較対象特定手段の処理を示すフローチャートである。
【図８】第１の実施形態に於ける論理行定義ＤＢを示す図である。
【図９】第１の実施形態に於ける類似度計算手段の差分分析処理を示す図である。
【図１０】第１の実施形態に於ける類似度計算手段の処理を示す図である。
【図１１】第１の実施形態と比較例に於ける類似度評価結果を示す図である。
【図１２】第１の実施形態に於ける類似度評価手段の処理を示すフローチャートである。
【図１３】第１の実施形態に於けるソースコードの類似関係情報を示す図である。
【図１４】第１の実施形態に於ける類似関係図である。
【図１５】第１の実施形態に於ける類似仕様書分析手段の処理を示すフローチャートである。
【図１６】第１の実施形態に於ける類似仕様書情報を示す図である。
【発明を実施するための形態】
【００１５】
以降、本発明を実施するための形態を、各図を参照して詳細に説明する。
【００１６】
（第１の実施形態の構成）
【００１７】
図１は、第１の実施形態に於けるソースコード類似度評価装置を示す概略の構成図である。
ソースコード類似度評価装置１０は、実行用プログラムや計算結果を保存するメモリ１１と、ファイルを電磁的に記憶するファイルデータベース１２と、演算処理を実行するプロセッサ１３と、ユーザからの入力を受け付ける入力手段１４と、ユーザに対して情報を出力する出力手段１５と、ソースコード類似度評価プログラム１７を記憶する記憶手段１６と、前記したメモリ１１、ファイルデータベース１２、プロセッサ１３、入力手段１４、出力手段１５、記憶手段１６を接続して相互に通信を可能とするバス１８とを備えている。
メモリ１１は、例えばＲＡＭ（Random Access Memory）などで構成されており、２つのソフトウェアを構成するソースコード群間の類似度を評価するソースコード類似度評価手段２０と、類似した比較先ソースコードに関連する詳細設計仕様書４２ｂ（図２、図４（ｂ））とテスト仕様書４３ｂ（図２）とを抽出する類似仕様書分析手段３０とを有している。
【００１８】
更にソースコード類似度評価手段２０は、各ソフトウェアの構成を示すソースコードリストを抽出する開発成果物解析手段２１（ソースコードリスト抽出手段）と、比較元ソースコードリストと比較先ソースコードリストとを比較して両者の対応関係を解析して判定する対応関係解析手段２２と、この対応関係に基づいて、比較元ソースコードリストに含まれる比較元ソースコードの比較対象である比較先ソースコードを比較先ソースコードリストから特定する比較対象特定手段２３と、比較元ソースコードと比較対象特定手段２３で特定したソースコードとの類似度を計算する類似度計算手段２４と、比較元ソースコードに最も高い類似度を備えた類似ソースコードを判定する類似度評価手段２５とを備えている。
記憶手段１６に記憶されているソースコード類似度評価プログラム１７が当該メモリ１１に読み込まれ、前記するプロセッサ１３によって実行されることによって、ソースコード類似度評価手段２０と類似仕様書分析手段３０とが具現化される。
【００１９】
ファイルデータベース１２は、例えばＨＤＤ（Hard Disk Drive）に代表されるストレージ装置であり、ファイルを電磁的に記憶するものである。
プロセッサ１３は、例えばＣＰＵ（Central Processing Unit）であり、メモリ１１に読み込まれたプログラムファイルを実行することにより、ソースコード類似度評価手段２０や類似仕様書分析手段３０を具現化し、当該ソースコード類似度評価装置１０を制御する。
入力手段１４は、例えば、マウス、キーボード、タブレットなどであり、ユーザがソースコード類似度評価装置１０に指示を行うときに用いるものである。
出力手段１５は、例えば、液晶表示装置やプリンタなどであり、ユーザに当該ソースコード類似度評価装置１０の操作ガイダンスや処理結果などを出力して表示するものである。本実施形態の出力手段１５は、比較元ソースコードおよびその類似度を出力する。
記憶手段１６は、例えばＨＤＤに代表されるストレージ装置であり、ファイルを電磁的に記憶するものである。
【００２０】
ソースコード類似度評価装置１０は、図示しないネットワークインタフェースを介して外部ネットワーク１００に接続され、外部ファイルデータベース１１０にもアクセス可能である。以下、本実施形態に於いて、ソースコード類似度評価装置１０は、ファイルデータベース１２に存在するソフトウェア（プロジェクト）を分析するものとして記載する。
【００２１】
（第１の実施形態の動作）
【００２２】
図２は、第１の実施形態に於けるソースコード類似度評価手段の動作を示す図である。
ソースコード類似度評価手段２０は、ユーザインタフェース１９を介してユーザ２００の指示を受けると、比較元ソフトウェア格納部４０ａに格納されているソフトウェアと、比較先ソフトウェア格納部４０ｂに格納されているソフトウェアとの類似度の評価を行う。ソースコード類似度評価手段２０は、類似関係情報４８を、ユーザインタフェース１９を介してユーザ２００に表示する。
【００２３】
比較元ソフトウェア格納部４０ａと比較先ソフトウェア格納部４０ｂとは、ファイルデータベース１２や外部ファイルデータベース１１０（図１）に格納されている。比較元ソフトウェア格納部４０ａは、例えば既存のソフトウェアを改造したものであり、ファイルデータベース１２の所定のパスの下のフォルダ階層に、所定のプログラム言語で記述されたコードを含んだファイルである比較元ソースコード４１ａと、この比較元ソースコード４１ａの設計仕様が記載されている詳細設計仕様書４２ａと、この比較元ソースコード４１ａのテスト仕様が記載されているテスト仕様書４３ａとを備えている。なお、比較元ソースコード４１ａは複数であることが多く、例えば数千〜数万のオーダに達する場合もある。
比較先ソフトウェア格納部４０ｂは、例えば、比較元ソフトウェアの改造元となっている既存のソフトウェアであり、ファイルデータベース１２の所定のパスの下のフォルダ階層に、比較元ソースコード４１ａが記述されているのと同一のプログラム言語で記述されたコードを含んだファイルである比較先ソースコード４１ｂと、当該比較先ソースコード４１ｂの設計仕様が記載されている詳細設計仕様書４２ｂと、当該比較先ソースコード４１ｂのテスト仕様が記載されているテスト仕様書４３ｂとを備えている。
以下、比較元ソースコード４１ａと比較先ソースコード４１ｂを特に区別しないときには、単に「ソースコード４１」と記載する。詳細設計仕様書４２ａ，４２ｂを特に区別しないときには、単に「詳細設計仕様書４２」と記載する。テスト仕様書４３ａ，４３ｂを特に区別しないときには、単に「テスト仕様書４３」と記載する。また、既存のソフトウェアのことを「ベースソフトウェア」と記載し、当該既存のソフトウェアを変更または改造したソフトウェアのことを「改造ソフトウェア」と記載する。
【００２４】
論理行定義ＤＢ（DataBase）２６は、ソフトウェアを構成するソースコードの論理行が拡張子ごとに定義されているデータベースである。
ソースコード類似度評価手段２０は、ソースコードの拡張子に基づいて論理行定義ＤＢ２６を参照することにより、ソースコードの論理行の定義を取得し、当該論理行定義に基づいて比較元ソースコード４１ａや比較先ソースコード４１ｂなどの論理行を抽出する。論理行定義ＤＢ２６は、記憶手段１６（図１）に格納されており、ソースコード類似度評価手段２０によって参照される。
【００２５】
開発成果物解析手段２１は、比較元ソフトウェア格納部４０ａを解析して、比較元ソフトウェアの構成を示す比較元ソースコードリスト４４ａを抽出し、比較先ソフトウェア格納部４０ｂを解析して、比較先ソフトウェアの構成を示す比較先ソースコードリスト４４ｂを抽出する。比較元ソースコードリスト４４ａは、比較元ソフトウェアを構成する比較元ソースコード４１ａの一覧である。比較先ソースコードリスト４４ｂは、比較先ソフトウェアを構成する比較先ソースコード４１ｂの一覧である。
【００２６】
対応関係解析手段２２は、比較元ソースコードリスト４４ａと比較先ソースコードリスト４４ｂとを比較して、両者の対応関係を解析して判定するものである。対応関係解析手段２２は、比較元ソースコードリスト４４ａと比較先ソースコードリスト４４ｂとに基づいて、比較元ソースコードリスト４４ａを構成する比較元ソースコード４１ａと対応関係にある比較先ソースコード４１ｂを解析して判定し、対応関係リスト４５を出力する。
対応関係リスト４５は、比較元ソースコード４１ａと、当該比較元ソースコード４１ａと対応関係にある比較先ソースコード４１ｂとの組合せの一覧である。
【００２７】
比較対象特定手段２３は、対応関係リスト４５に基づいて、比較元ソースコードリスト４４ａに含まれる各比較元ソースコード４１ａの比較対象を比較先ソースコードリスト４４ｂから特定し、類似度計算手段２４によって計算した類似度評価結果４７を出力するものである。
類似度計算手段２４は、比較元ソースコード４１ａと比較対象特定手段２３で特定した比較先ソースコード４１ｂとの類似度を計算するものである。
類似度評価結果４７は、比較先ソースコードリスト４４ｂに含まれる比較元ソースコード４１ａと、比較元ソースコードリスト４４ａに含まれる比較先ソースコード４１ｂとの類似度を、それぞれ計算した結果である。
類似度評価手段２５は、比較対象特定手段２３で特定した比較先ソースコード４１ｂのうち、最も高い類似度を備えた類似ソースコードを判定し、類似関係情報４８を出力するものである。
類似関係情報４８は、比較先ソースコードリスト４４ｂに含まれる比較元ソースコード４１ａと、類似ソースコードと、この比較元ソースコード４１ａと類似ソースコードとの類似度とが格納されている。
ユーザインタフェース１９は、入力手段１４によってユーザ２００の入力を受け付けると共に、出力手段１５によって情報を出力することにより、ユーザ２００に情報を提供する。出力手段１５は、比較元ソースコード４１ａと、この比較元ソースコード４１ａと類似ソースコードとの類似度とを対応づけて出力する。
【００２８】
類似仕様書分析手段３０は、比較元ソースコードリスト４４ａに記載の比較元ソースコード４１ａに仕様書が関連付けされていない場合には、類似ソースコードに係る仕様書を類似仕様書として提示するものである。類似仕様書分析手段３０は、流用元である比較先ソースコード４１ｂに基づいて、流用候補となる詳細設計仕様書４２ｂとテスト仕様書４３ｂを特定し、類似仕様書情報４９を出力する。
【００２９】
図３（ａ），（ｂ）は、第１の実施形態に於ける開発成果物解析手段の処理を示すフローチャートである。
【００３０】
図３（ａ）は、開発成果物解析手段２１の全体処理を示すフローチャートである。
処理を開始すると、ステップＳ１０に於いて、開発成果物解析手段２１は、比較元ソフトウェア格納部４０ａのルートフォルダを指定して開発成果解析処理（図３（ｂ））を行う。
ステップＳ１１に於いて、開発成果物解析手段２１は、比較先ソフトウェア格納部４０ｂのルートフォルダを指定して開発成果解析処理（図３（ｂ））を行う。ステップＳ１１の処理が終了すると、図３（ａ）の全体処理は終了する。
【００３１】
図３（ｂ）は、開発成果物解析手段２１のソースコード格納部ごとの処理を示すフローチャートである。
処理を開始すると、ステップＳ２０に於いて、開発成果物解析手段２１は、ソースコード格納部として指定された当該フォルダのプロジェクトファイル(例えばmakefileなど)を探索する。ここでプロジェクトファイルとは、当該ソフトウェアの管理ファイルであり、当該ソフトウェアのソースファイルから実行ファイルを生成するルールなどが記載されているものである。
【００３２】
ステップＳ２１〜Ｓ２５に於いて、開発成果物解析手段２１は、全プロジェクトファイルにつき処理を繰り返す。
ステップＳ２２に於いて、開発成果物解析手段２１は、当該プロジェクトファイルに係るソースコード４１（ファイル名と相対パス名）を抽出する。
ステップＳ２３に於いて、開発成果物解析手段２１は、当該プロジェクトファイルに係る各ソースコード４１の詳細設計仕様書４２を抽出する。開発成果物解析手段２１は、ソースコード４１の相対パスを探索し、ソースコード４１のファイル名と所定の関連性を有するファイル名を備えた詳細設計仕様書４２を抽出している。
ステップＳ２４に於いて、開発成果物解析手段２１は、当該プロジェクトファイルに係る各ソースコード４１のテスト仕様書４３を抽出する。開発成果物解析手段２１は、ソースコード４１の相対パスを探索し、ソースコード４１のファイル名と所定の関連性を有するファイル名を備えたテスト仕様書４３を抽出している。
ステップＳ２５に於いて、開発成果物解析手段２１は、全てのプロジェクトファイルにつき処理を繰り返したか否かを判断する。開発成果物解析手段２１は、当該判断条件が成立しなかったならば、ステップＳ２１の処理に戻る。
【００３３】
ステップＳ２６に於いて、開発成果物解析手段２１は、当該所定フォルダのサブフォルダを探索する。
ステップＳ２７〜Ｓ２９に於いて、開発成果物解析手段２１は、全サブフォルダにつき処理を繰り返す。
ステップＳ２８に於いて、開発成果物解析手段２１は、当該サブフォルダについて、開発成果解析処理（図３（ｂ））を再帰的に行う。
ステップＳ２９に於いて、開発成果物解析手段２１は、全サブフォルダについて処理を繰り返したか否かを判断する。開発成果物解析手段２１は、当該判断条件が成立しなかったならば、ステップＳ２７の処理に戻り、当該判断条件が成立したならば、図３（ｂ）の処理を終了する。
【００３４】
図４（ａ）,（ｂ）は、第１の実施形態に於ける比較元ソースコードリストと比較先ソースコードリストを示す図である。
【００３５】
図４（ａ）は、比較元ソースコードリスト４４ａを示す図である。
比較元ソースコードリスト４４ａは、各比較元ソースコード４１ａを識別するＩＤ欄４４−１と、各比較元ソースコード４１ａのファイル名情報を格納するファイル名欄４４−２と、各比較元ソースコード４１ａが格納された相対パス名情報を格納する相対パス名欄４４−３と、各比較元ソースコード４１ａの論理的な行数であるＳＬＯＣ（source lines of code）を格納する論理行数欄４４−４と、各比較元ソースコード４１ａの詳細設計仕様書４２ａのファイル名を格納する詳細設計仕様書欄４４−５と、各比較元ソースコード４１ａのテスト仕様書４３ａのファイル名を格納するテスト仕様書欄４４−６と、を有している。
例えば、ＩＤが１である比較元ソースコード４１ａのファイル「Ｆ０１．ｃ」は、相対パス「／Ｄ０１」に格納され、論理行数は３００行であり、詳細設計仕様書４２ａのファイル名は「Ｆ０１＿ｓｐｅｃ．ｄｏｃ」であり、テスト仕様書４３ａのファイル名は「Ｆ０１＿ｔｅｓｔ．ｄｏｃ」である。
例えば、ＩＤが４である比較元ソースコード４１ａのファイル「Ｆ０６．ｃ」は、相対パス「／Ｄ０２」に格納され、論理行数は５００行であり、詳細設計仕様書４２ｂおよびテスト仕様書４３ｂは存在していないため、詳細設計仕様書欄４４−５とテスト仕様書欄４４−６には、該当するファイルが存在しないことを示すＮ／Ａ（Not Available）が格納されている。
【００３６】
図４（ｂ）は、比較先ソースコードリスト４４ｂを示す図である。
比較先ソースコードリスト４４ｂは、比較元ソースコードリスト４４ａと同様に構成されている。
【００３７】
図５は、第１の実施形態に於ける対応関係解析手段の処理を示すフローチャートである。
処理を開始すると、ステップＳ３０に於いて、対応関係解析手段２２は、変数ｉを１で初期化する。変数ｉは、比較元ソースコードリスト４４ａに含まれた比較元ソースコード４１ａのＩＤを示している。ここで変数ｉ＝１なので、比較元ソースコードＦｉ（４１ａ）のファイル名は、「Ｆ０１．ｃ」である。
【００３８】
ステップＳ３１に於いて、対応関係解析手段２２は、変数ｊを１で初期化する。変数ｊは、比較先ソースコードリスト４４ｂに含まれた比較先ソースコード４１ｂのＩＤを示している。
ステップＳ３２に於いて、対応関係解析手段２２は、比較元ソースコードＦｉ（４１ａ）の相対パス名と、比較先ソースコードＦｊ（４１ｂ）の相対パス名とが同一であるか否かを判断する。対応関係解析手段２２は、当該判断条件が成立したならば（Ｙｅｓ）、ステップＳ３３の処理を行い、当該判断条件が成立しなかったならば（Ｎｏ）、ステップＳ３５の処理を行う。
ステップＳ３３に於いて、対応関係解析手段２２は、比較元ソースコードＦｉ（４１ａ）のファイル名と、比較先ソースコードＦｊ（４１ｂ）のファイル名とが同一であるか否かを判断する。対応関係解析手段２２は、当該判断条件が成立したならば（Ｙｅｓ）、ステップＳ３４の処理を行い、当該判断条件が成立しなかったならば（Ｎｏ）、ステップＳ３５に進む。
【００３９】
ステップＳ３４に於いて、対応関係解析手段２２は、比較元ソースコードＦｉ（４１ａ）と比較先ソースコードＦｊ（４１ｂ）とを対応関係と判定し、対応関係リスト４５に記録する。
ステップＳ３５に於いて、対応関係解析手段２２は、変数ｊが比較先ソースコードリスト４４ｂのＩＤの最大値ｊｍａｘ（本実施形態では５）以上であるか否かを判断する。対応関係解析手段２２は、当該判断条件が成立したならば（Ｙｅｓ）、ステップＳ３７の処理を行い、当該判断条件が成立しなかったならば（Ｎｏ）、ステップＳ３６の処理を行う。
ステップＳ３６に於いて、対応関係解析手段２２は、変数ｊに１を加算し、ステップＳ３２の処理に戻る。これにより、対応関係解析手段２２は、全ての比較先ソースコードリスト４４ｂの各比較先ソースコード４１ｂについて、ステップＳ３２〜Ｓ３４の処理を行うことができる。
【００４０】
ステップＳ３７に於いて、対応関係解析手段２２は、変数ｉが比較元ソースコードリスト４４ａのＩＤの最大値ｉｍａｘ（実施形態では５）以上であるか否かを判断する。対応関係解析手段２２は、当該判断条件が成立したならば（Ｙｅｓ）、図５の処理を終了し、当該判断条件が成立しなかったならば（Ｎｏ）、ステップＳ３８の処理を行う。
ステップＳ３８に於いて、対応関係解析手段２２は、変数ｉに１を加算してステップＳ３１の処理に戻る。これにより、対応関係解析手段２２は、全ての比較元ソースコードリスト４４ａの各比較元ソースコード４１ａについて、ステップＳ３１〜Ｓ３５の処理を行うことができる。
【００４１】
図６は、第１の実施形態に於ける対応関係リストを示す図である。
対応関係リスト４５には、比較元ソースコード４１ａのＩＤと、比較先ソースコード４１ｂのＩＤとの対応関係が記載されている。比較元ソースコード４１ａのＩＤ＝１と比較先ソースコード４１ｂのＩＤ＝１とは、対応関係を有している。比較元ソースコード４１ａのＩＤ＝２と比較先ソースコード４１ｂのＩＤ＝２とは、対応関係を有している。比較元ソースコード４１ａのＩＤ＝３と比較先ソースコード４１ｂのＩＤ＝４とは、対応関係を有している。
【００４２】
図７は、第１の実施形態に於ける比較対象特定手段の処理を示すフローチャートである。
処理を開始すると、ステップＳ４０に於いて、比較対象特定手段２３は、変数ｉを１で初期化する。変数ｉは、比較元ソースコードリスト４４ａに含まれる比較元ソースコードＦｉ（４１ａ）のＩＤを示している。
ステップＳ４１に於いて、比較対象特定手段２３は、比較元ソースコードＦｉ（４１ａ）に対応関係を有している比較先ソースコードＦｊ（４１ｂ）が存在するか否かを判断する。比較対象特定手段２３は、当該判断条件が成立したならば（Ｙｅｓ）、ステップＳ４２の処理を行い、当該判断条件が成立しなかったならば（Ｎｏ）、ステップＳ４４の処理を行う。
ステップＳ４２に於いて、比較対象特定手段２３は、対応関係リスト４５に基づき、比較元ソースコードＦｉ（４１ａ）に対応する比較先ソースコードＦｊ（４１ｂ）のＩＤを変数ｊにセットする。
ステップＳ４３に於いて、比較対象特定手段２３は、比較元ソースコードＦｉ（４１ａ）と比較先ソースコードＦｊ（４１ｂ）の類似度計算処理を行ったのち、ステップＳ４８の処理を行う。類似度計算処理は、後記する図１０で詳細に説明する。
ステップＳ４４に於いて、比較対象特定手段２３は、変数ｊを１で初期化する。変数ｊは、比較先ソースコードリスト４４ｂに含まれた比較先ソースコード４１ｂのＩＤを示している。
【００４３】
ステップＳ４５に於いて、比較対象特定手段２３は、比較元ソースコードＦｉ（４１ａ）と比較先ソースコードＦｊ（４１ｂ）の類似度計算処理を行う。類似度計算処理は、後記する図１０で詳細に説明する。
ステップＳ４６に於いて、比較対象特定手段２３は、変数ｊが比較先ソースコードリスト４４ｂのＩＤの最大値ｊｍａｘ（本実施形態では５）以上であるか否かを判断する。比較対象特定手段２３は、当該判断条件が成立したならば（Ｙｅｓ）、ステップＳ４８の処理を行い、当該判断条件が成立しなかったならば（Ｎｏ）、ステップＳ４７の処理を行う。
ステップＳ４７に於いて、比較対象特定手段２３は、変数ｊに１を加算し、ステップＳ４５の処理に戻る。
ステップＳ４８に於いて、比較対象特定手段２３は、変数ｉが比較元ソースコードリスト４４ａのＩＤの最大値ｉｍａｘ（実施形態では５）以上であるか否かを判断する。比較対象特定手段２３は、当該判断条件が成立したならば（Ｙｅｓ）、図７の処理を終了し、当該判断条件が成立しなかったならば（Ｎｏ）、ステップＳ４９の処理を行う。
ステップＳ４９に於いて、比較対象特定手段２３は、変数ｉに１を加算し、ステップＳ４１の処理に戻る。
【００４４】
図８は、第１の実施形態に於ける論理行定義ＤＢを示す図である。
論理行定義ＤＢ２６は、拡張子欄２６−１と、論理行の区切り欄２６−２と、コメント開始欄２６−３と、コメント終了欄２６−４とを有している。
拡張子欄２６−１は、ファイル名の拡張子部分の情報を示している。ここで拡張子とは、ファイル名の末尾のピリオド以降の部分をいう。ソースコードは、ファイル名の拡張子部分によって、当該ソースコードが記述されているコンピュータ言語を示している。
論理行の区切り欄２６−２は、当該拡張子に係るコンピュータ言語の論理行の区切りルールを示すものである。ソースコード類似度評価手段２０は、当該論理行の区切りルールに基づいて、ソースコードの論理行数をカウントする。
コメント開始欄２６−３は、当該拡張子に係るコンピュータ言語のコメントの開始ルールを示すものである。
コメント終了欄２６−４は、当該拡張子に係るコンピュータ言語のコメントの終了ルールを示すものである。ソースコード類似度評価手段２０は、ソースコードの論理行数をカウントするにあたり、コメント開始欄２６−３とコメント終了欄２６−４とに基づき、コメントを全て無視する。
【００４５】
図９は、第１の実施形態に於ける類似度計算手段の差分分析処理を示す図である。
ここでは、任意の二つの比較元ソースコードＦｉ（４１ａ）と比較先ソースコードＦｊ（４１ｂ）との間の類似関係を例とする。
比較元ソースコードＦｉ（４１ａ）は、比較元ソースコード４１ａを論理行で表したものである。比較元ソースコードＦｉ（４１ａ）の論理行数は、Ｌ（Ｆｉ）で示している。
比較先ソースコードＦｊ（４１ｂ）は、比較先ソースコード４１ｂを論理行で表したものである。比較先ソースコードＦｊ（４１ｂ）の論理行数は、Ｌ（Ｆｊ）で示している。
比較元ソースコードＦｉ（４１ａ）の共通行４１ｃと、比較先ソースコードＦｊ（４１ｂ）の共通行４１ｄとは、同一の内容が記載されている。共通行４１ｃ，４１ｄの行数は、共通行数Ｌ（Ｆｉ∧Ｆｊ）で示している。
差分分析処理Ｓ５１では、比較元ソースコードＦｉ（４１ａ）と比較先ソースコードＦｊ（４１ｂ）との差分を分析する。当該差分分析処理Ｓ５１の詳細は、非特許文献１に記載されている。
差分分析処理Ｓ５１の結果、ソースコード間差分Ｄｉｊ（４６）が出力される。ソースコード間差分Ｄｉｊ（４６）の各行の一桁目は、差分の内容を示している。行の１桁目が「＜」ならば、当該行は比較元ソースコードＦｉ（４１ａ）にのみ含まれていることを示している。行の１桁目が「＞」ならば、当該行は比較先ソースコードＦｊ（４１ｂ）にのみ含まれていることを示している。ここでは、ソースコード間差分Ｄｉｊ（４６）の全体行数を、Ｌ（Ｄｉｊ）とする。
【００４６】
比較元ソースコードＦｉ（４１ａ）と比較先ソースコードＦｊ（４１ｂ）との間のソースコード間類似度Ｓｉｊの計算式を、（式１）に示す。
【数１】
2014059743.tif 000003
【００４７】
共通行数Ｌ（Ｆｉ∧Ｆｊ）の計算式を、（式２）に示す。
【数２】
2014059743.tif 000004
【００４８】
独立行数Ｌ（Ｆｉ∨Ｆｊ）の計算式を、（式３）に示す。
【数３】
2014059743.tif 000005
【００４９】
図１０は、第１の実施形態に於ける類似度計算手段の処理を示す図である。
類似度計算手段２４は、比較元ソースコードＦｉ（４１ａ）と比較先ソースコードＦｊ（４１ｂ）の二つを入力とする。
論理行抽出処理Ｓ５０に於いて、類似度計算手段２４は、論理行定義ＤＢ２６を参照して、比較元ソースコードＦｉ（４１ａ）、比較先ソースコードＦｊ（４１ｂ）の論理行をそれぞれ抽出する。
差分分析処理Ｓ５１に於いて、類似度計算手段２４は、比較元ソースコードＦｉ（４１ａ）と比較先ソースコードＦｊ（４１ｂ）とのソースコード間差分Ｄｉｊを分析する。
差分行数計測処理Ｓ５２に於いて、類似度計算手段２４は、ソースコード間差分Ｄｉｊの論理行数Ｌ（Ｄｉｊ）を計算する。
共通行数計算処理Ｓ５３に於いて、類似度計算手段２４は、（式２）に基づいて、ソースコード間の共通行数Ｌ（Ｆｉ∧Ｆｊ）を計算する。
独立行数計算処理Ｓ５４に於いて、類似度計算手段２４は、（式３）に基づいて、ソースコード間の独立行数Ｌ（Ｆｉ∨Ｆｊ）を計算する。
ソースコード間類似度計算処理Ｓ５５に於いて、類似度計算手段２４は、（式１）に基づいて共通行数Ｌ（Ｆｉ∧Ｆｊ）を独立行数Ｌ（Ｆｉ∨Ｆｊ）で除算し、ソースコード間類似度Ｓｉｊを計算する。
【００５０】
図１１（ａ）,（ｂ）は、第１の実施形態と比較例に於ける類似度評価結果を示す図である。
【００５１】
図１１（ａ）は、第１の実施形態に於ける類似度評価結果４７である。
類似度評価結果４７の行方向は、比較元ソースコードリスト４４ａの各ファイルを示している。類似度評価結果４７の列方向は、比較先ソースコードリスト４４ｂの各ファイルを示している。各マトリクスの要素には、ソースコード間類似度Ｓｉｊの計算結果が格納されている。
ここで、比較元ソースコードリスト４４ａのＦ０１．ｃ，Ｆ０２．ｃ，Ｆ０４．ｃは、比較先ソースコードリスト４４ｂに対応関係を有する比較先ソースコード４１ｂが存在するので、当該対応関係を有する比較先ソースコード４１ｂとの類似度が計算され、当該対応関係を有さない他のソースコード４１との類似度は計算されない。
比較元ソースコードリスト４４ａに係る比較元ソースコード４１ａに、比較先ソースコードリスト４４ｂに対応関係を有するソースコードが存在しないならば、比較先ソースコードリスト４４ｂの全ての比較先ソースコード４１ｂとの類似度が計算される。
【００５２】
図１１（ｂ）は、比較例に於ける類似度評価結果４７ｃである。
ここで、比較例のソースコード類似度評価装置は、比較元ソースコードリスト４４ａの全ての比較元ソースコードＦｉ（４１ａ）と、比較先ソースコードリスト４４ｂの全ての比較先ソースコードＦｊ（４１ｂ）との類似度を計算するように構成されている。
本実施形態のソースコード類似度評価装置１０は、予めソースコード間の対応関係を調査して、対応関係を有するソースコードの類似度のみを計算して類似度評価結果４７を得ている。これにより、本実施形態のソースコード類似度評価装置１０は、比較例よりも計算量を低減し、よって短時間に類似度評価結果４７を得ることができる。
【００５３】
図１２は、第１の実施形態に於ける類似度評価手段の処理を示すフローチャートである。
処理を開始すると、ステップＳ６０に於いて、類似度評価手段２５は、変数ｉを１で初期化する。変数ｉは、比較元ソースコードリスト４４ａに含まれる比較元ソースコードＦｉ（４１ａ）のＩＤを示している。
ステップＳ６１に於いて、類似度評価手段２５は、比較元ソースコードＦｉ（４１ａ）に対応先が存在するか否かを、対応関係リスト４５に基づいて判断する。類似度評価手段２５は、当該判断条件が成立したならば（Ｙｅｓ）、ステップＳ６２の処理を行い、当該判断条件が成立しなかったならば（Ｎｏ）、ステップＳ６３の処理を行う。
ステップＳ６２に於いて、類似度評価手段２５は、比較元ソースコードＦｉ（４１ａ）と対応関係を有する比較先ソースコードＦｊ（４１ｂ）のＩＤを、変数ｊに設定し、ステップＳ６４の処理を行う。ここで、変数ｊで示される比較先ソースコードＦｊ（４１ｂ）は、変数ｉで示される比較元ソースコードＦｉ（４１ａ）の類似度を計算する類似ソースコードである。
ステップＳ６３に於いて、類似度評価手段２５は、比較元ソースコードＦｉ（４１ａ）との類似度が最大の比較先ソースコードＦｊ（４１ｂ）のＩＤを変数ｊに設定し、ステップＳ６４の処理を行う。ここで、変数ｊで示される比較先ソースコードＦｊ（４１ｂ）は、変数ｉで示される比較元ソースコードＦｉ（４１ａ）との類似度が計算される「類似ソースコード」である。
【００５４】
ステップＳ６４に於いて、類似度評価手段２５は、比較元ソースコードＦｉ（４１ａ）の類似ファイル名に、比較先ソースコードＦｊ（４１ｂ）のファイル名を設定する。
ステップＳ６５に於いて、類似度評価手段２５は、比較元ソースコードＦｉ（４１ａ）の類似相対パス名に、比較先ソースコードＦｊ（４１ｂ）の相対パス名を設定する。
ステップＳ６６に於いて、類似度評価手段２５は、比較元ソースコードＦｉ（４１ａ）の類似度に、比較元ソースコードＦｉ（４１ａ）と比較先ソースコードＦｊ（４１ｂ）との間の類似度を設定する。
ステップＳ６７に於いて、類似度評価手段２５は、変数ｉが比較元ソースコードリスト４４ａのＩＤの最大値（実施形態では５）以上であるか否かを判断する。類似度評価手段２５は、当該判断条件が成立したならば（Ｙｅｓ）、図１２の処理を終了し、当該判断条件が成立しなかったならば（Ｎｏ）、ステップＳ６８の処理を行う。
ステップＳ６８に於いて、類似度評価手段２５は、変数ｉに１を加算してステップＳ６１の処理に戻る。
【００５５】
図１３は、第１の実施形態に於けるソースコードの類似関係情報を示す図である。
類似関係情報４８は、各比較元ソースコード４１ａを識別するＩＤ欄４８−１、各比較元ソースコード４１ａのファイル名情報を格納するファイル名欄４８−２、各比較元ソースコード４１ａが格納された相対パス名情報を格納する相対パス名欄４８−３、各比較元ソースコード４１ａの論理的な行数（ＳＬＯＣ）を格納する論理行数欄４８−４と、比較元ソースコード４１ａに対応する比較先ソースコード４１ｂのファイル名情報を格納する類似ファイル名欄４８−５と、比較元ソースコード４１ａに対応する比較先ソースコード４１ｂの相対パス名情報を格納する類似相対パス名欄４８−６と、比較元ソースコード４１ａと比較先ソースコード４１ｂとの類似度情報を格納する類似度欄４８−７とを有している。
【００５６】
図１４は、第１の実施形態に於ける類似関係図である。
類似関係図６０は、類似関係情報４８を、ユーザインタフェース１９の出力手段１５に示したものである。類似関係図６０は、ルートディレクトリを根ノード、ディレクトリを中間ノード、ファイルを葉ノードとするツリー構造で表示している。
類似関係図６０には、「ｒｏｏｔ」と示されたルート６１が、根ノードとして表示されている。根ノードであるルート６１は、「Ｄ０１」で示されたフォルダ６２−１と、「Ｄ０２」で示されたフォルダ６２−２とが、中間ノードとして右方向に分岐している。
中間ノードであるフォルダ６２−１は、「Ｆ０１．ｃ」で示されたファイル６３−１と、「Ｆ０２．ｃ」で示されたファイル６３−２とが、葉ノードとして右方向に分岐している。
中間ノードであるフォルダ６２−２は、「Ｆ０４．ｃ」で示されたファイル６３−３と、「Ｆ０６．ｃ」で示されたファイル６３−４と、「Ｆ０７．ｃ」で示されたファイル６３−５とが、葉ノードとして右方向に分岐している。以下、ファイル６３−１〜６３−５を特に区別しないときには、単にファイル６３と記載する。
【００５７】
葉ノードであるファイル６３−１〜６３−５の右側には、それぞれのソースコードとしての論理行数と類似度とを示す横棒グラフ６４−１〜６４−５が表示されている。以下、横棒グラフ６４−１〜６４−５を特に区別しないときには、単に横棒グラフ６４と記載する。
類似関係図６０の下側には、凡例６５が表示されている。凡例６５には、白色で示された「クローン部」と、灰色で示された「オリジナル部」とが表示されている。
横棒グラフ６４の長さは、対応するファイル６３のソースコードとしての論理行数である。横棒グラフ６４は、いずれも白色と灰色の２色で塗り分けられている。しかし、これに限られず、横棒グラフ６４は、任意の二色以上の組合せで塗り分けられていてもよい。
ファイル６３と、当該ファイル６３に最も類似する比較先ソースコード４１ｂとの類似度は、横棒グラフ６４の全体面積に対する「クローン部」の面積割合で示されている。例えば、ファイル６３−１の類似度が９５％の場合には、横棒グラフ６４−１の全体面積に対する「クローン部」の面積割合は９５％である。
これにより、ユーザは、複数のソースコード群からなる２つのソフトウェアの類似性を容易に俯瞰できるので、容易にコードクローンであるソフトウェアを発見することができる。ユーザは更に、コードクローンのソフトウェアのうち、改造箇所の多いソースコードを容易に発見し、改造箇所に伴う不具合に対処することができる。
【００５８】
図１５は、第１の実施形態に於ける類似仕様書分析手段の処理を示すフローチャートである。
処理を開始すると、ステップＳ７０に於いて、類似仕様書分析手段３０は、変数ｉを１で初期化する。変数ｉは、比較元ソースコードリスト４４ａに含まれた比較元ソースコードＦｉ（４１ａ）のＩＤを示している。
ステップＳ７１に於いて、類似仕様書分析手段３０は、比較元ソースコードＦｉ（４１ａ）に仕様書が存在するか否かを判断する。本実施形態に於いて、類似仕様書分析手段３０は、比較元ソースコードＦｉ（４１ａ）の相対パスに、比較元ソースコードＦｉ（４１ａ）のファイル名と所定の関連性を有するファイル名の仕様書が存在するか否かによって仕様書の存在を判断する。類似仕様書分析手段３０は、当該判断条件が成立したならば（Ｙｅｓ）、ステップＳ７８の処理を行い、当該判断条件が成立しなかったならば（Ｎｏ）、ステップＳ７２の処理を行う。
【００５９】
ステップＳ７２に於いて、類似仕様書分析手段３０は、比較元ソースコードＦｉ（４１ａ）に対応先が存在するか否かを、対応関係リスト４５に基づいて判断する。類似仕様書分析手段３０は、当該判断条件が成立したならば（Ｙｅｓ）、ステップＳ７３の処理を行い、当該判断条件が成立しなかったならば（Ｎｏ）、ステップＳ７４の処理を行う。
ステップＳ７３に於いて、類似仕様書分析手段３０は、比較元ソースコードＦｉ（４１ａ）と対応関係を有する比較先ソースコードＦｊ（４１ｂ）のＩＤを、変数ｊに設定し、ステップＳ７５の処理を行う。
ステップＳ７４に於いて、類似仕様書分析手段３０は、比較元ソースコードＦｉ（４１ａ）との類似度が最大の比較先ソースコードＦｊ（４１ｂ）のＩＤを変数ｊに設定し、ステップＳ７５の処理を行う。
【００６０】
ステップＳ７５に於いて、類似仕様書分析手段３０は、比較元ソースコードＦｉ（４１ａ）の類似ファイル名と類似度に、比較先ソースコードＦｊ（４１ｂ）のファイル名と類似度を登録する。
ステップＳ７６に於いて、類似仕様書分析手段３０は、比較元ソースコードＦｉ（４１ａ）の類似設計仕様書に、比較先ソースコードＦｊ（４１ｂ）の詳細設計仕様書４２ｂを登録する。
ステップＳ７７に於いて、類似仕様書分析手段３０は、比較元ソースコードＦｉ（４１ａ）の類似テスト仕様書に、比較先ソースコードＦｊ（４１ｂ）のテスト仕様書４３ｂを登録する。
ステップＳ７８に於いて、類似仕様書分析手段３０は、変数ｉが比較元ソースコードリスト４４ａのＩＤの最大値ｉｍａｘ（実施形態では５）以上であるか否かを判断する。類似仕様書分析手段３０は、当該判断条件が成立したならば（Ｙｅｓ）、図１５の処理を終了し、当該判断条件が成立しなかったならば（Ｎｏ）、ステップＳ７９の処理を行う。
ステップＳ７９に於いて、類似仕様書分析手段３０は、変数ｉに１を加算してステップＳ７１の処理に戻る。
【００６１】
図１６は、第１の実施形態に於ける類似仕様書情報を示す図である。
類似仕様書情報４９は、比較元ソースコードＦｉ（４１ａ）を識別するＩＤ欄４９−１と、比較元ソースコードＦｉ（４１ａ）のファイル名情報を格納するファイル名欄４９−２と、比較元ソースコードＦｉ（４１ａ）の詳細設計仕様書４２ａのファイル名を格納する詳細設計仕様書欄４９−３と、比較元ソースコードＦｉ（４１ａ）のテスト仕様書４３ａのファイル名を格納するテスト仕様書欄４９−４と、最も類似する比較先ソースコードＦｊ（４１ｂ）のファイル名情報を格納する類似ファイル名欄４９−５とを有している。
【００６２】
当該比較元ソースコードＦｉ（４１ａ）に、詳細設計仕様書４２ａが関連付けられていないときには、詳細設計仕様書欄４９−３の括弧中に、当該比較元ソースコードＦｉ（４１ａ）に最も類似する比較先ソースコードＦｊ（４１ｂ）の詳細設計仕様書４２ｂのファイル名情報を記載する。
当該比較元ソースコードＦｉ（４１ａ）に、テスト仕様書４３ａが関連付けられていないときには、テスト仕様書欄４９−４の括弧中に、当該比較元ソースコードＦｉ（４１ａ）に最も類似する比較先ソースコードＦｊ（４１ｂ）のテスト仕様書４３ｂのファイル名情報を記載する。
テスト仕様書欄４９−４には更に、括弧中に類似テスト仕様書のファイル名情報が記載されている。類似ファイル名欄４９−５には更に、括弧中に類似度の情報が記載されている。
この類似仕様書情報４９により、ユーザ２００は、比較先ソースコードリスト４４ｂに含まれる比較先ソースコード４１ｂの詳細設計仕様書４２ｂおよびテスト仕様書４３ｂを、その比較先ソースコード４１ｂの類似度と共に、容易に取得することができる。
【００６３】
（第１の実施形態の効果）
以上説明した第１の実施形態では、次の（Ａ）〜（Ｇ）のような効果がある。
【００６４】
（Ａ）  ソースコード類似度評価手段２０は、個々のソフトウェアの対応関係を指示することなく、２つのソフトウェアの関係を評価して、類似関係図６０を作成している。これにより、ユーザ２００は、複数のソースコード群からなる２つのソフトウェアの類似性を容易に俯瞰できるので、容易にコードクローンであるソフトウェアを発見することができる。
【００６５】
（Ｂ）比較対象特定手段２３は、比較元ソースコード４１ａが比較先ソースコードリスト４４ｂのいずれかの比較先ソースコード４１ｂに対応関係を有していると判定されていたならば、対応関係を有する比較先ソースコード４１ｂを比較元ソースコード４１ａの比較対象として特定して、類似度を評価している。これにより、対応関係を有している比較元ソースコード４１ａの類似度を１回だけ評価すればよいので、計算量を減少させ、よって、大規模ソフトウェア同士の類似度評価を短時間で終了することができる。
【００６６】
（Ｃ）  対応関係解析手段２２は、比較元ソースコード４１ａの相対パス名とファイル名とが、比較先ソースコードリスト４４ｂのいずれかの比較先ソースコード４１ｂの相対パス名とファイル名とに一致するならば、一致する比較先ソースコード４１ｂは比較元ソースコード４１ａとの対応関係を有すると判定している。このように、該当フォルダを探索して得られる情報のみで、比較元ソースコード４１ａと比較先ソースコード４１ｂとの対応関係を判定しているので、計算量を減少させ、よって、大規模ソフトウェア同士の類似度評価を短時間で終了することができる。
【００６７】
（Ｄ）  出力手段１５は、比較元ソースコード４１ａが比較先ソースコードリスト４４ｂのいずれかの比較先ソースコード４１ｂに対応関係を有していない場合には、比較先ソースコードリスト４４ｂの全ての比較先ソースコード４１ｂとの類似度のうち、最も高い類似度を表示している。これにより、改造ソフトウェアである比較元ソースコード４１ａのファイル名が変更されていたとしても、最も適切な比較先ソースコード４１ｂを選択して類似度を表示することができる。
【００６８】
（Ｅ）  出力手段１５は、比較元ソースコード４１ａが格納された比較元ソフトウェア格納部４０ａのルートフォルダを根ノード、比較元ソースコード４１ａの相対パスを構成する各フォルダを内部ノード、比較元ソースコード４１ａの各類似度を葉ノードとするツリー図で表示している。これにより、比較元ソフトウェア格納部４０ａのフォルダ構成と、各フォルダに含まれたソースコードファイルの比較先との類似度とを、ユーザ２００に分かりやすく表示することができる。
【００６９】
（Ｆ）  ソースコード類似度評価手段２０は、類似関係図６０に於いて、比較元ソースコード４１ａの論理行数を横棒グラフ６４の面積で表示すると共に、比較元ソースコード４１ａと最も類似度の高い比較先ソースコード４１ｂとの類似度を色分けされた横棒グラフ６４のいずれかの色の面積比で表示している。これにより、ユーザ２００は、コードクローンのソフトウェアのうち、改造箇所の多い比較元ソースコード４１ａを容易に発見することができ、改造箇所に伴う不具合に対処することができる。
【００７０】
（Ｇ）  類似仕様書分析手段３０は、自動で類似仕様書情報４９を作成している。これにより、ユーザ２００は、比較先ソースコードリスト４４ｂに含まれる比較先ソースコード４１ｂの詳細設計仕様書４２ｂおよびテスト仕様書４３ｂを、その比較先ソースコード４１ｂの類似度と共に、容易に取得することができる。ユーザ２００は更に、比較先ソースコード４１ｂの類似度によって、詳細設計仕様書４２ｂおよびテスト仕様書４３ｂをどの程度まで流用可能かを判断することができる。
【００７１】
（変形例）
本発明は、上記実施形態に限定されることなく、本発明の趣旨を逸脱しない範囲で、変更実施が可能であり、例えば、次の（ａ）〜（ｅ）のようなものがある。
【００７２】
（ａ）  本実施形態のソースコード類似度評価装置１０は、ファイルデータベース１２に存在するソフトウェア（プロジェクト）を分析している。しかし、これに限られず、ソースコード類似度評価装置１０は、外部ファイルデータベース１１０に存在するソフトウェア（プロジェクト）を分析してもよく、ファイルデータベース１２に存在するソフトウェアと、外部ファイルデータベース１１０に存在するソフトウェアとを比較して分析してもよい。
【００７３】
（ｂ）  本実施形態のソースコード類似度評価装置１０は、２つのフォルダを指定することによって、指定した２つのフォルダにそれぞれ存在する２つのソフトウェア（プロジェクト）を分析している。しかし、これに限られず、ソースコード類似度評価装置１０は、２つのプロジェクトファイルを指定することにより、指定した２つのプロジェクトファイルに係る２つのソフトウェア（プロジェクト）を分析してもよい。
【００７４】
（ｃ）  本実施形態のソースコード類似度評価装置１０は、比較元ソースコードＦｉ（４１ａ）の相対パスに、比較元ソースコードＦｉ（４１ａ）のファイル名と所定の関連性を有するファイル名の仕様書が存在するか否かによって仕様書の存在を判断している。しかし、これに限られず、ソースコード類似度評価装置１０は、プロジェクトファイルに比較元ソースコードＦｉ（４１ａ）と関連づけられている仕様書が存在するか否かによって、仕様書の存在を判断してもよい。
【００７５】
（ｄ）  ソースコード類似度評価装置１０の出力手段１５は、比較元ソースコード４１ａと類似ソースコードとの類似度を、色分けされた横棒グラフ６４のいずれかの色の面積比で表している。しかし、これに限られず、出力手段１５は、比較元ソースコード４１ａと類似ソースコードとの類似度を、横棒グラフ６４の色彩や白黒の濃淡やパターンによって表してもよく、更に横棒グラフ６４以外の任意のグラフ形式（円グラフ、散布図、レーダーチャート、バブルチャートなど）によって表してもよい。
【００７６】
（ｅ）  本発明のソースコード類似度評価手段２０を、コンピュータのアプリケーションプログラムとして実現し、当該アプリケーションプログラムを、コンピュータ読み取り可能な記憶媒体に記録して、ユーザに提供してもよい。
【符号の説明】
【００７７】
１０  ソースコード類似度評価装置
１１  メモリ
１２  ファイルデータベース
１３  プロセッサ
１４  入力手段
１５  出力手段
１６  記憶手段
１７  ソースコード類似度評価プログラム
１８  バス
１９  ユーザインタフェース
２０  ソースコード類似度評価手段
２１  開発成果物解析手段  （ソースコードリスト抽出手段）
２２  対応関係解析手段
２３  比較対象特定手段
２４  類似度計算手段
２５  類似度評価手段
２６  論理行定義ＤＢ
３０  類似仕様書分析手段
４０ａ  比較元ソフトウェア格納部
４０ｂ  比較先ソフトウェア格納部
４１  ソースコード
４１ａ  比較元ソースコード
４１ｂ  比較先ソースコード
４２，４２ａ，４２ｂ  詳細設計仕様書
４３，４３ａ，４３ｂ  テスト仕様書
４４ａ  比較元ソースコードリスト
４４ｂ  比較先ソースコードリスト
４５  対応関係リスト  （対応関係）
４６  ソースコード間差分
４７  類似度評価結果
４８  類似関係情報
４９  類似仕様書情報
６０  類似関係図
６１  ルート
６２  フォルダ
６３  ファイル
６４  横棒グラフ
１００  外部ネットワーク
１１０  外部ファイルデータベース
２００  ユーザ
Ｓ５０  論理行抽出処理
Ｓ５１  差分分析処理
Ｓ５２  差分行数計測処理
Ｓ５３  共通行数計算処理
Ｓ５４  独立行数計算処理
Ｓ５５  ファイル間類似度計算処理
【図１】
2014059743.tif 000006
【図２】
2014059743.tif 000007
【図３】
2014059743.tif 000008
【図４】
2014059743.tif 000009
【図５】
2014059743.tif 000010
【図６】
2014059743.tif 000011
【図７】
2014059743.tif 000012
【図８】
2014059743.tif 000013
【図９】
2014059743.tif 000014
【図１０】
2014059743.tif 000015
【図１１】
2014059743.tif 000016
【図１２】
2014059743.tif 000017
【図１３】
2014059743.tif 000018
【図１４】
2014059743.tif 000019
【図１５】
2014059743.tif 000020
【図１６】
2014059743.tif 000021