JP5875961B2 - ソースコード類似度評価プログラム、ソースコード類似度評価装置、および、コンピュータ読み取り可能な記憶媒体 - Google Patents

ソースコード類似度評価プログラム、ソースコード類似度評価装置、および、コンピュータ読み取り可能な記憶媒体 Download PDF

Info

Publication number
JP5875961B2
JP5875961B2 JP2012204545A JP2012204545A JP5875961B2 JP 5875961 B2 JP5875961 B2 JP 5875961B2 JP 2012204545 A JP2012204545 A JP 2012204545A JP 2012204545 A JP2012204545 A JP 2012204545A JP 5875961 B2 JP5875961 B2 JP 5875961B2
Authority
JP
Japan
Prior art keywords
source code
comparison
comparison source
similarity
list
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.)
Expired - Fee Related
Application number
JP2012204545A
Other languages
English (en)
Other versions
JP2014059743A (ja
Inventor
吉村 健太郎
健太郎 吉村
康範 橋本
康範 橋本
三部 良太
良太 三部
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2012204545A priority Critical patent/JP5875961B2/ja
Priority to CN201310337262.2A priority patent/CN103678111B/zh
Publication of JP2014059743A publication Critical patent/JP2014059743A/ja
Application granted granted Critical
Publication of JP5875961B2 publication Critical patent/JP5875961B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明は、ソフトウェアを構成するソースコード群の類似度を評価する手段をコンピュータに実行させるためのプログラム、当該プログラムを記録したコンピュータ読み取り可能な記憶媒体、および、前記手段を備えたソースコード類似度評価装置に関するものである。
近年、ソフトウェアの適用範囲の拡大に伴って、レガシーソフトウェアと呼ばれるソフトウェアが拡大している。レガシーソフトウェアとは、システムへの新たな要求に対する機能追加や修正が繰り返された結果、ソフトウェアの規模や複雑さが増大し、保守が難しくなり、保守コストが増大しているソフトウェアのことをいう。
レガシーソフトウェアの保守コスト増大の原因の一つとして、いわゆるコードクローンと呼ばれている類似コード列の存在がある。コードクローンとは、ソースコードに含まれている同一または類似する複数のコード列のことであり、主にソースコードの流用を行うことにより生成されるものである。多数のコードクローンを含むソフトウェアでは、システム全体のコードサイズが増大することに加え、同一または類似する複数のコード列の一つに変更を加える際に、他のすべての箇所にも同様の変更を行わなければならないことが多く、保守コストを増大させる原因となっている。
コードクローンは、レガシーソフトウェアに対して機能追加を行った保守開発に於いて発生することが多いとされている。コードクローンは、追加される機能に類似した機能を実現するソフトウェアをベースソフトウェアとし、ベースソフトウェアを構成するソースコード群をコピーした上で改造して作られることが多いためである。本来であれば、ベースソフトウェアの類似した機能部分は、ソフトウェア部品として共通化すべきである。しかし、ソフトウェア開発に於いて開発期間や開発コストの短縮が強く要請されるため、多くのソフトウェア開発現場に於いて、コードクローンが作成されている。
ソフトウェアの保守コストを削減するため、このコードクローンを検出して、ソフトウェア部品として共通化することが、ソフトウェアの保守現場から要請されている。しかし、大規模ソフトウェアに対して、目視によるコードレビューでコードクローンを発見することは非効率である。
近年、上記課題を踏まえて、ソフトウェアを構成するソースコードに対して、コードクローンを検出する技術が開示されている。
特許文献1の課題には、「類似するソースコード片を高速に抽出することができる類似ソースコード抽出プログラム、類似ソースコード抽出装置および類似ソースコード抽出方法を提供すること。」と記載され、「解決手段」には、「比較元ソースコード片指定部210が比較との基準となるソースコード片の指定を受け付け、このソースコード片と類似するソースコード片を比較先ソースコード指定部220によって指定を受け付けられたソースコード群から抽出して結果出力部290から出力する。ソースコード群から比較元のソースコード片と類似比較されるソースコードを抽出する処理は、比較元のソースコード片から作成した構文木と、ソースコード群から作成した構文木とを参照して比較先ソースコード片抽出部270がおこなう。」と記載されている。
非特許文献1には、2つのファイルの比較を行うプログラムであるdiffのアルゴリズムの詳細が記載されている。
非特許文献2には、ソフトウェアのクローン検出に関する研究内容が記載されている。
特開2006−18693号公報
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
非特許文献1,2に記載された技術では、大量のソースコード(例えば数千ファイル)で構成される大規模ソフトウェアに適用すると、分析結果がファイル数の二乗で増加するため、類似関係の理解に多大な時間を要するという課題がある。
特許文献2に記載された技術では、ユーザが比較元ソースコードを指定するというものであるため、大量のソースコードで構成される大規模ソフトウェアに対して、効率的な分析を行うという目的には十分ではない。例えば、ソフトウェアが数万個のソースコードファイルで構成されているとき、その比較元ソースコード(ファイル)を、ユーザが全て指定することは現実的ではない。
本発明は、複数のソースコードファイルからなる2つのソフトウェアの類似度を評価するソースコード類似度評価プログラム、ソースコード類似度装置、および、ソースコード類似度評価プログラムを記録したコンピュータ読み取り可能な記憶媒体を提供することを目的とする。
前記課題を解決するために、本発明の一実施形態に係るソースコード類似度評価プログラムは、コンピュータを、比較元ソフトウェアの構成を示す比較元ソースコードリストと比較先ソフトウェアの構成を示す比較先ソースコードリストとを抽出するソースコードリスト抽出手段と、前記比較元ソースコードリストと前記比較先ソースコードリストとを比較して、両者の対応関係を解析する対応関係解析手段と、前記対応関係に基づいて、前記比較元ソースコードリストに含まれる各比較元ソースコードの比較対象となる比較先ソースコードを前記比較先ソースコードリストから特定する比較対象特定手段と、前記比較元ソースコードと前記比較対象特定手段で特定した前記比較先ソースコードとの類似度を計算する類似度計算手段と、前記比較対象特定手段で特定した前記比較先ソースコードのうち、最も高い類似度を備えた類似ソースコードを判定する類似度評価手段と、前記比較元ソースコード、および、前記比較元ソースコードと前記類似ソースコードとの類似度を対応づけて出力する出力手段として機能させるためのソースコード類似度評価プログラムとした。
その他の手段については、発明を実施するための形態のなかで説明する。
本発明によれば、複数のソースコードファイルからなる2つのソフトウェアの類似度を評価するソースコード類似度評価プログラム、ソースコード類似度装置、および、ソースコード類似度評価プログラムを記録したコンピュータ読み取り可能な記憶媒体を提供することが可能となる。
第1の実施形態に於けるソースコード類似度評価装置を示す概略の構成図である。 第1の実施形態に於けるソースコード類似度評価手段の動作を示す図である。 第1の実施形態に於ける開発成果物解析手段の処理を示すフローチャートである。 第1の実施形態に於ける比較元ソースコードリストと比較先ソースコードリストを示す図である。 第1の実施形態に於ける対応関係解析手段の処理を示すフローチャートである。 第1の実施形態に於ける対応関係リストを示す図である。 第1の実施形態に於ける比較対象特定手段の処理を示すフローチャートである。 第1の実施形態に於ける論理行定義DBを示す図である。 第1の実施形態に於ける類似度計算手段の差分分析処理を示す図である。 第1の実施形態に於ける類似度計算手段の処理を示す図である。 第1の実施形態と比較例に於ける類似度評価結果を示す図である。 第1の実施形態に於ける類似度評価手段の処理を示すフローチャートである。 第1の実施形態に於けるソースコードの類似関係情報を示す図である。 第1の実施形態に於ける類似関係図である。 第1の実施形態に於ける類似仕様書分析手段の処理を示すフローチャートである。 第1の実施形態に於ける類似仕様書情報を示す図である。
以降、本発明を実施するための形態を、各図を参照して詳細に説明する。
(第1の実施形態の構成)
図1は、第1の実施形態に於けるソースコード類似度評価装置を示す概略の構成図である。
ソースコード類似度評価装置10は、実行用プログラムや計算結果を保存するメモリ11と、ファイルを電磁的に記憶するファイルデータベース12と、演算処理を実行するプロセッサ13と、ユーザからの入力を受け付ける入力手段14と、ユーザに対して情報を出力する出力手段15と、ソースコード類似度評価プログラム17を記憶する記憶手段16と、前記したメモリ11、ファイルデータベース12、プロセッサ13、入力手段14、出力手段15、記憶手段16を接続して相互に通信を可能とするバス18とを備えている。
メモリ11は、例えばRAM(Random Access Memory)などで構成されており、2つのソフトウェアを構成するソースコード群間の類似度を評価するソースコード類似度評価手段20と、類似した比較先ソースコードに関連する詳細設計仕様書42b(図2、図4(b))とテスト仕様書43b(図2)とを抽出する類似仕様書分析手段30とを有している。
更にソースコード類似度評価手段20は、各ソフトウェアの構成を示すソースコードリストを抽出する開発成果物解析手段21(ソースコードリスト抽出手段)と、比較元ソースコードリストと比較先ソースコードリストとを比較して両者の対応関係を解析して判定する対応関係解析手段22と、この対応関係に基づいて、比較元ソースコードリストに含まれる比較元ソースコードの比較対象である比較先ソースコードを比較先ソースコードリストから特定する比較対象特定手段23と、比較元ソースコードと比較対象特定手段23で特定したソースコードとの類似度を計算する類似度計算手段24と、比較元ソースコードに最も高い類似度を備えた類似ソースコードを判定する類似度評価手段25とを備えている。
記憶手段16に記憶されているソースコード類似度評価プログラム17が当該メモリ11に読み込まれ、前記するプロセッサ13によって実行されることによって、ソースコード類似度評価手段20と類似仕様書分析手段30とが具現化される。
ファイルデータベース12は、例えばHDD(Hard Disk Drive)に代表されるストレージ装置であり、ファイルを電磁的に記憶するものである。
プロセッサ13は、例えばCPU(Central Processing Unit)であり、メモリ11に読み込まれたプログラムファイルを実行することにより、ソースコード類似度評価手段20や類似仕様書分析手段30を具現化し、当該ソースコード類似度評価装置10を制御する。
入力手段14は、例えば、マウス、キーボード、タブレットなどであり、ユーザがソースコード類似度評価装置10に指示を行うときに用いるものである。
出力手段15は、例えば、液晶表示装置やプリンタなどであり、ユーザに当該ソースコード類似度評価装置10の操作ガイダンスや処理結果などを出力して表示するものである。本実施形態の出力手段15は、比較元ソースコードおよびその類似度を出力する。
記憶手段16は、例えばHDDに代表されるストレージ装置であり、ファイルを電磁的に記憶するものである。
ソースコード類似度評価装置10は、図示しないネットワークインタフェースを介して外部ネットワーク100に接続され、外部ファイルデータベース110にもアクセス可能である。以下、本実施形態に於いて、ソースコード類似度評価装置10は、ファイルデータベース12に存在するソフトウェア(プロジェクト)を分析するものとして記載する。
(第1の実施形態の動作)
図2は、第1の実施形態に於けるソースコード類似度評価手段の動作を示す図である。
ソースコード類似度評価手段20は、ユーザインタフェース19を介してユーザ200の指示を受けると、比較元ソフトウェア格納部40aに格納されているソフトウェアと、比較先ソフトウェア格納部40bに格納されているソフトウェアとの類似度の評価を行う。ソースコード類似度評価手段20は、類似関係情報48を、ユーザインタフェース19を介してユーザ200に表示する。
比較元ソフトウェア格納部40aと比較先ソフトウェア格納部40bとは、ファイルデータベース12や外部ファイルデータベース110(図1)に格納されている。比較元ソフトウェア格納部40aは、例えば既存のソフトウェアを改造したものであり、ファイルデータベース12の所定のパスの下のフォルダ階層に、所定のプログラム言語で記述されたコードを含んだファイルである比較元ソースコード41aと、この比較元ソースコード41aの設計仕様が記載されている詳細設計仕様書42aと、この比較元ソースコード41aのテスト仕様が記載されているテスト仕様書43aとを備えている。なお、比較元ソースコード41aは複数であることが多く、例えば数千〜数万のオーダに達する場合もある。
比較先ソフトウェア格納部40bは、例えば、比較元ソフトウェアの改造元となっている既存のソフトウェアであり、ファイルデータベース12の所定のパスの下のフォルダ階層に、比較元ソースコード41aが記述されているのと同一のプログラム言語で記述されたコードを含んだファイルである比較先ソースコード41bと、当該比較先ソースコード41bの設計仕様が記載されている詳細設計仕様書42bと、当該比較先ソースコード41bのテスト仕様が記載されているテスト仕様書43bとを備えている。
以下、比較元ソースコード41aと比較先ソースコード41bを特に区別しないときには、単に「ソースコード41」と記載する。詳細設計仕様書42a,42bを特に区別しないときには、単に「詳細設計仕様書42」と記載する。テスト仕様書43a,43bを特に区別しないときには、単に「テスト仕様書43」と記載する。また、既存のソフトウェアのことを「ベースソフトウェア」と記載し、当該既存のソフトウェアを変更または改造したソフトウェアのことを「改造ソフトウェア」と記載する。
論理行定義DB(DataBase)26は、ソフトウェアを構成するソースコードの論理行が拡張子ごとに定義されているデータベースである。
ソースコード類似度評価手段20は、ソースコードの拡張子に基づいて論理行定義DB26を参照することにより、ソースコードの論理行の定義を取得し、当該論理行定義に基づいて比較元ソースコード41aや比較先ソースコード41bなどの論理行を抽出する。論理行定義DB26は、記憶手段16(図1)に格納されており、ソースコード類似度評価手段20によって参照される。
開発成果物解析手段21は、比較元ソフトウェア格納部40aを解析して、比較元ソフトウェアの構成を示す比較元ソースコードリスト44aを抽出し、比較先ソフトウェア格納部40bを解析して、比較先ソフトウェアの構成を示す比較先ソースコードリスト44bを抽出する。比較元ソースコードリスト44aは、比較元ソフトウェアを構成する比較元ソースコード41aの一覧である。比較先ソースコードリスト44bは、比較先ソフトウェアを構成する比較先ソースコード41bの一覧である。
対応関係解析手段22は、比較元ソースコードリスト44aと比較先ソースコードリスト44bとを比較して、両者の対応関係を解析して判定するものである。対応関係解析手段22は、比較元ソースコードリスト44aと比較先ソースコードリスト44bとに基づいて、比較元ソースコードリスト44aを構成する比較元ソースコード41aと対応関係にある比較先ソースコード41bを解析して判定し、対応関係リスト45を出力する。
対応関係リスト45は、比較元ソースコード41aと、当該比較元ソースコード41aと対応関係にある比較先ソースコード41bとの組合せの一覧である。
比較対象特定手段23は、対応関係リスト45に基づいて、比較元ソースコードリスト44aに含まれる各比較元ソースコード41aの比較対象を比較先ソースコードリスト44bから特定し、類似度計算手段24によって計算した類似度評価結果47を出力するものである。
類似度計算手段24は、比較元ソースコード41aと比較対象特定手段23で特定した比較先ソースコード41bとの類似度を計算するものである。
類似度評価結果47は、比較先ソースコードリスト44bに含まれる比較元ソースコード41aと、比較元ソースコードリスト44aに含まれる比較先ソースコード41bとの類似度を、それぞれ計算した結果である。
類似度評価手段25は、比較対象特定手段23で特定した比較先ソースコード41bのうち、最も高い類似度を備えた類似ソースコードを判定し、類似関係情報48を出力するものである。
類似関係情報48は、比較先ソースコードリスト44bに含まれる比較元ソースコード41aと、類似ソースコードと、この比較元ソースコード41aと類似ソースコードとの類似度とが格納されている。
ユーザインタフェース19は、入力手段14によってユーザ200の入力を受け付けると共に、出力手段15によって情報を出力することにより、ユーザ200に情報を提供する。出力手段15は、比較元ソースコード41aと、この比較元ソースコード41aと類似ソースコードとの類似度とを対応づけて出力する。
類似仕様書分析手段30は、比較元ソースコードリスト44aに記載の比較元ソースコード41aに仕様書が関連付けされていない場合には、類似ソースコードに係る仕様書を類似仕様書として提示するものである。類似仕様書分析手段30は、流用元である比較先ソースコード41bに基づいて、流用候補となる詳細設計仕様書42bとテスト仕様書43bを特定し、類似仕様書情報49を出力する。
図3(a),(b)は、第1の実施形態に於ける開発成果物解析手段の処理を示すフローチャートである。
図3(a)は、開発成果物解析手段21の全体処理を示すフローチャートである。
処理を開始すると、ステップS10に於いて、開発成果物解析手段21は、比較元ソフトウェア格納部40aのルートフォルダを指定して開発成果解析処理(図3(b))を行う。
ステップS11に於いて、開発成果物解析手段21は、比較先ソフトウェア格納部40bのルートフォルダを指定して開発成果解析処理(図3(b))を行う。ステップS11の処理が終了すると、図3(a)の全体処理は終了する。
図3(b)は、開発成果物解析手段21のソースコード格納部ごとの処理を示すフローチャートである。
処理を開始すると、ステップS20に於いて、開発成果物解析手段21は、ソースコード格納部として指定された当該フォルダのプロジェクトファイル(例えばmakefileなど)を探索する。ここでプロジェクトファイルとは、当該ソフトウェアの管理ファイルであり、当該ソフトウェアのソースファイルから実行ファイルを生成するルールなどが記載されているものである。
ステップS21〜S25に於いて、開発成果物解析手段21は、全プロジェクトファイルにつき処理を繰り返す。
ステップS22に於いて、開発成果物解析手段21は、当該プロジェクトファイルに係るソースコード41(ファイル名と相対パス名)を抽出する。
ステップS23に於いて、開発成果物解析手段21は、当該プロジェクトファイルに係る各ソースコード41の詳細設計仕様書42を抽出する。開発成果物解析手段21は、ソースコード41の相対パスを探索し、ソースコード41のファイル名と所定の関連性を有するファイル名を備えた詳細設計仕様書42を抽出している。
ステップS24に於いて、開発成果物解析手段21は、当該プロジェクトファイルに係る各ソースコード41のテスト仕様書43を抽出する。開発成果物解析手段21は、ソースコード41の相対パスを探索し、ソースコード41のファイル名と所定の関連性を有するファイル名を備えたテスト仕様書43を抽出している。
ステップS25に於いて、開発成果物解析手段21は、全てのプロジェクトファイルにつき処理を繰り返したか否かを判断する。開発成果物解析手段21は、当該判断条件が成立しなかったならば、ステップS21の処理に戻る。
ステップS26に於いて、開発成果物解析手段21は、当該所定フォルダのサブフォルダを探索する。
ステップS27〜S29に於いて、開発成果物解析手段21は、全サブフォルダにつき処理を繰り返す。
ステップS28に於いて、開発成果物解析手段21は、当該サブフォルダについて、開発成果解析処理(図3(b))を再帰的に行う。
ステップS29に於いて、開発成果物解析手段21は、全サブフォルダについて処理を繰り返したか否かを判断する。開発成果物解析手段21は、当該判断条件が成立しなかったならば、ステップS27の処理に戻り、当該判断条件が成立したならば、図3(b)の処理を終了する。
図4(a),(b)は、第1の実施形態に於ける比較元ソースコードリストと比較先ソースコードリストを示す図である。
図4(a)は、比較元ソースコードリスト44aを示す図である。
比較元ソースコードリスト44aは、各比較元ソースコード41aを識別するID欄44−1と、各比較元ソースコード41aのファイル名情報を格納するファイル名欄44−2と、各比較元ソースコード41aが格納された相対パス名情報を格納する相対パス名欄44−3と、各比較元ソースコード41aの論理的な行数であるSLOC(source lines of code)を格納する論理行数欄44−4と、各比較元ソースコード41aの詳細設計仕様書42aのファイル名を格納する詳細設計仕様書欄44−5と、各比較元ソースコード41aのテスト仕様書43aのファイル名を格納するテスト仕様書欄44−6と、を有している。
例えば、IDが1である比較元ソースコード41aのファイル「F01.c」は、相対パス「/D01」に格納され、論理行数は300行であり、詳細設計仕様書42aのファイル名は「F01_spec.doc」であり、テスト仕様書43aのファイル名は「F01_test.doc」である。
例えば、IDが4である比較元ソースコード41aのファイル「F06.c」は、相対パス「/D02」に格納され、論理行数は500行であり、詳細設計仕様書42bおよびテスト仕様書43bは存在していないため、詳細設計仕様書欄44−5とテスト仕様書欄44−6には、該当するファイルが存在しないことを示すN/A(Not Available)が格納されている。
図4(b)は、比較先ソースコードリスト44bを示す図である。
比較先ソースコードリスト44bは、比較元ソースコードリスト44aと同様に構成されている。
図5は、第1の実施形態に於ける対応関係解析手段の処理を示すフローチャートである。
処理を開始すると、ステップS30に於いて、対応関係解析手段22は、変数iを1で初期化する。変数iは、比較元ソースコードリスト44aに含まれた比較元ソースコード41aのIDを示している。ここで変数i=1なので、比較元ソースコードFi(41a)のファイル名は、「F01.c」である。
ステップS31に於いて、対応関係解析手段22は、変数jを1で初期化する。変数jは、比較先ソースコードリスト44bに含まれた比較先ソースコード41bのIDを示している。
ステップS32に於いて、対応関係解析手段22は、比較元ソースコードFi(41a)の相対パス名と、比較先ソースコードFj(41b)の相対パス名とが同一であるか否かを判断する。対応関係解析手段22は、当該判断条件が成立したならば(Yes)、ステップS33の処理を行い、当該判断条件が成立しなかったならば(No)、ステップS35の処理を行う。
ステップS33に於いて、対応関係解析手段22は、比較元ソースコードFi(41a)のファイル名と、比較先ソースコードFj(41b)のファイル名とが同一であるか否かを判断する。対応関係解析手段22は、当該判断条件が成立したならば(Yes)、ステップS34の処理を行い、当該判断条件が成立しなかったならば(No)、ステップS35に進む。
ステップS34に於いて、対応関係解析手段22は、比較元ソースコードFi(41a)と比較先ソースコードFj(41b)とを対応関係と判定し、対応関係リスト45に記録する。
ステップS35に於いて、対応関係解析手段22は、変数jが比較先ソースコードリスト44bのIDの最大値jmax(本実施形態では5)以上であるか否かを判断する。対応関係解析手段22は、当該判断条件が成立したならば(Yes)、ステップS37の処理を行い、当該判断条件が成立しなかったならば(No)、ステップS36の処理を行う。
ステップS36に於いて、対応関係解析手段22は、変数jに1を加算し、ステップS32の処理に戻る。これにより、対応関係解析手段22は、全ての比較先ソースコードリスト44bの各比較先ソースコード41bについて、ステップS32〜S34の処理を行うことができる。
ステップS37に於いて、対応関係解析手段22は、変数iが比較元ソースコードリスト44aのIDの最大値imax(実施形態では5)以上であるか否かを判断する。対応関係解析手段22は、当該判断条件が成立したならば(Yes)、図5の処理を終了し、当該判断条件が成立しなかったならば(No)、ステップS38の処理を行う。
ステップS38に於いて、対応関係解析手段22は、変数iに1を加算してステップS31の処理に戻る。これにより、対応関係解析手段22は、全ての比較元ソースコードリスト44aの各比較元ソースコード41aについて、ステップS31〜S35の処理を行うことができる。
図6は、第1の実施形態に於ける対応関係リストを示す図である。
対応関係リスト45には、比較元ソースコード41aのIDと、比較先ソースコード41bのIDとの対応関係が記載されている。比較元ソースコード41aのID=1と比較先ソースコード41bのID=1とは、対応関係を有している。比較元ソースコード41aのID=2と比較先ソースコード41bのID=2とは、対応関係を有している。比較元ソースコード41aのID=3と比較先ソースコード41bのID=4とは、対応関係を有している。
図7は、第1の実施形態に於ける比較対象特定手段の処理を示すフローチャートである。
処理を開始すると、ステップS40に於いて、比較対象特定手段23は、変数iを1で初期化する。変数iは、比較元ソースコードリスト44aに含まれる比較元ソースコードFi(41a)のIDを示している。
ステップS41に於いて、比較対象特定手段23は、比較元ソースコードFi(41a)に対応関係を有している比較先ソースコードFj(41b)が存在するか否かを判断する。比較対象特定手段23は、当該判断条件が成立したならば(Yes)、ステップS42の処理を行い、当該判断条件が成立しなかったならば(No)、ステップS44の処理を行う。
ステップS42に於いて、比較対象特定手段23は、対応関係リスト45に基づき、比較元ソースコードFi(41a)に対応する比較先ソースコードFj(41b)のIDを変数jにセットする。
ステップS43に於いて、比較対象特定手段23は、比較元ソースコードFi(41a)と比較先ソースコードFj(41b)の類似度計算処理を行ったのち、ステップS48の処理を行う。類似度計算処理は、後記する図10で詳細に説明する。
ステップS44に於いて、比較対象特定手段23は、変数jを1で初期化する。変数jは、比較先ソースコードリスト44bに含まれた比較先ソースコード41bのIDを示している。
ステップS45に於いて、比較対象特定手段23は、比較元ソースコードFi(41a)と比較先ソースコードFj(41b)の類似度計算処理を行う。類似度計算処理は、後記する図10で詳細に説明する。
ステップS46に於いて、比較対象特定手段23は、変数jが比較先ソースコードリスト44bのIDの最大値jmax(本実施形態では5)以上であるか否かを判断する。比較対象特定手段23は、当該判断条件が成立したならば(Yes)、ステップS48の処理を行い、当該判断条件が成立しなかったならば(No)、ステップS47の処理を行う。
ステップS47に於いて、比較対象特定手段23は、変数jに1を加算し、ステップS45の処理に戻る。
ステップS48に於いて、比較対象特定手段23は、変数iが比較元ソースコードリスト44aのIDの最大値imax(実施形態では5)以上であるか否かを判断する。比較対象特定手段23は、当該判断条件が成立したならば(Yes)、図7の処理を終了し、当該判断条件が成立しなかったならば(No)、ステップS49の処理を行う。
ステップS49に於いて、比較対象特定手段23は、変数iに1を加算し、ステップS41の処理に戻る。
図8は、第1の実施形態に於ける論理行定義DBを示す図である。
論理行定義DB26は、拡張子欄26−1と、論理行の区切り欄26−2と、コメント開始欄26−3と、コメント終了欄26−4とを有している。
拡張子欄26−1は、ファイル名の拡張子部分の情報を示している。ここで拡張子とは、ファイル名の末尾のピリオド以降の部分をいう。ソースコードは、ファイル名の拡張子部分によって、当該ソースコードが記述されているコンピュータ言語を示している。
論理行の区切り欄26−2は、当該拡張子に係るコンピュータ言語の論理行の区切りルールを示すものである。ソースコード類似度評価手段20は、当該論理行の区切りルールに基づいて、ソースコードの論理行数をカウントする。
コメント開始欄26−3は、当該拡張子に係るコンピュータ言語のコメントの開始ルールを示すものである。
コメント終了欄26−4は、当該拡張子に係るコンピュータ言語のコメントの終了ルールを示すものである。ソースコード類似度評価手段20は、ソースコードの論理行数をカウントするにあたり、コメント開始欄26−3とコメント終了欄26−4とに基づき、コメントを全て無視する。
図9は、第1の実施形態に於ける類似度計算手段の差分分析処理を示す図である。
ここでは、任意の二つの比較元ソースコードFi(41a)と比較先ソースコードFj(41b)との間の類似関係を例とする。
比較元ソースコードFi(41a)は、比較元ソースコード41aを論理行で表したものである。比較元ソースコードFi(41a)の論理行数は、L(Fi)で示している。
比較先ソースコードFj(41b)は、比較先ソースコード41bを論理行で表したものである。比較先ソースコードFj(41b)の論理行数は、L(Fj)で示している。
比較元ソースコードFi(41a)の共通行41cと、比較先ソースコードFj(41b)の共通行41dとは、同一の内容が記載されている。共通行41c,41dの行数は、共通行数L(Fi∧Fj)で示している。
差分分析処理S51では、比較元ソースコードFi(41a)と比較先ソースコードFj(41b)との差分を分析する。当該差分分析処理S51の詳細は、非特許文献1に記載されている。
差分分析処理S51の結果、ソースコード間差分Dij(46)が出力される。ソースコード間差分Dij(46)の各行の一桁目は、差分の内容を示している。行の1桁目が「<」ならば、当該行は比較元ソースコードFi(41a)にのみ含まれていることを示している。行の1桁目が「>」ならば、当該行は比較先ソースコードFj(41b)にのみ含まれていることを示している。ここでは、ソースコード間差分Dij(46)の全体行数を、L(Dij)とする。
比較元ソースコードFi(41a)と比較先ソースコードFj(41b)との間のソースコード間類似度Sijの計算式を、(式1)に示す。
Figure 0005875961
共通行数L(Fi∧Fj)の計算式を、(式2)に示す。
Figure 0005875961
独立行数L(Fi∨Fj)の計算式を、(式3)に示す。
Figure 0005875961
図10は、第1の実施形態に於ける類似度計算手段の処理を示す図である。
類似度計算手段24は、比較元ソースコードFi(41a)と比較先ソースコードFj(41b)の二つを入力とする。
論理行抽出処理S50に於いて、類似度計算手段24は、論理行定義DB26を参照して、比較元ソースコードFi(41a)、比較先ソースコードFj(41b)の論理行をそれぞれ抽出する。
差分分析処理S51に於いて、類似度計算手段24は、比較元ソースコードFi(41a)と比較先ソースコードFj(41b)とのソースコード間差分Dijを分析する。
差分行数計測処理S52に於いて、類似度計算手段24は、ソースコード間差分Dijの論理行数L(Dij)を計算する。
共通行数計算処理S53に於いて、類似度計算手段24は、(式2)に基づいて、ソースコード間の共通行数L(Fi∧Fj)を計算する。
独立行数計算処理S54に於いて、類似度計算手段24は、(式3)に基づいて、ソースコード間の独立行数L(Fi∨Fj)を計算する。
ソースコード間類似度計算処理S55に於いて、類似度計算手段24は、(式1)に基づいて共通行数L(Fi∧Fj)を独立行数L(Fi∨Fj)で除算し、ソースコード間類似度Sijを計算する。
図11(a),(b)は、第1の実施形態と比較例に於ける類似度評価結果を示す図である。
図11(a)は、第1の実施形態に於ける類似度評価結果47である。
類似度評価結果47の行方向は、比較元ソースコードリスト44aの各ファイルを示している。類似度評価結果47の列方向は、比較先ソースコードリスト44bの各ファイルを示している。各マトリクスの要素には、ソースコード間類似度Sijの計算結果が格納されている。
ここで、比較元ソースコードリスト44aのF01.c,F02.c,F04.cは、比較先ソースコードリスト44bに対応関係を有する比較先ソースコード41bが存在するので、当該対応関係を有する比較先ソースコード41bとの類似度が計算され、当該対応関係を有さない他のソースコード41との類似度は計算されない。
比較元ソースコードリスト44aに係る比較元ソースコード41aに、比較先ソースコードリスト44bに対応関係を有するソースコードが存在しないならば、比較先ソースコードリスト44bの全ての比較先ソースコード41bとの類似度が計算される。
図11(b)は、比較例に於ける類似度評価結果47cである。
ここで、比較例のソースコード類似度評価装置は、比較元ソースコードリスト44aの全ての比較元ソースコードFi(41a)と、比較先ソースコードリスト44bの全ての比較先ソースコードFj(41b)との類似度を計算するように構成されている。
本実施形態のソースコード類似度評価装置10は、予めソースコード間の対応関係を調査して、対応関係を有するソースコードの類似度のみを計算して類似度評価結果47を得ている。これにより、本実施形態のソースコード類似度評価装置10は、比較例よりも計算量を低減し、よって短時間に類似度評価結果47を得ることができる。
図12は、第1の実施形態に於ける類似度評価手段の処理を示すフローチャートである。
処理を開始すると、ステップS60に於いて、類似度評価手段25は、変数iを1で初期化する。変数iは、比較元ソースコードリスト44aに含まれる比較元ソースコードFi(41a)のIDを示している。
ステップS61に於いて、類似度評価手段25は、比較元ソースコードFi(41a)に対応先が存在するか否かを、対応関係リスト45に基づいて判断する。類似度評価手段25は、当該判断条件が成立したならば(Yes)、ステップS62の処理を行い、当該判断条件が成立しなかったならば(No)、ステップS63の処理を行う。
ステップS62に於いて、類似度評価手段25は、比較元ソースコードFi(41a)と対応関係を有する比較先ソースコードFj(41b)のIDを、変数jに設定し、ステップS64の処理を行う。ここで、変数jで示される比較先ソースコードFj(41b)は、変数iで示される比較元ソースコードFi(41a)の類似度を計算する類似ソースコードである。
ステップS63に於いて、類似度評価手段25は、比較元ソースコードFi(41a)との類似度が最大の比較先ソースコードFj(41b)のIDを変数jに設定し、ステップS64の処理を行う。ここで、変数jで示される比較先ソースコードFj(41b)は、変数iで示される比較元ソースコードFi(41a)との類似度が計算される「類似ソースコード」である。
ステップS64に於いて、類似度評価手段25は、比較元ソースコードFi(41a)の類似ファイル名に、比較先ソースコードFj(41b)のファイル名を設定する。
ステップS65に於いて、類似度評価手段25は、比較元ソースコードFi(41a)の類似相対パス名に、比較先ソースコードFj(41b)の相対パス名を設定する。
ステップS66に於いて、類似度評価手段25は、比較元ソースコードFi(41a)の類似度に、比較元ソースコードFi(41a)と比較先ソースコードFj(41b)との間の類似度を設定する。
ステップS67に於いて、類似度評価手段25は、変数iが比較元ソースコードリスト44aのIDの最大値(実施形態では5)以上であるか否かを判断する。類似度評価手段25は、当該判断条件が成立したならば(Yes)、図12の処理を終了し、当該判断条件が成立しなかったならば(No)、ステップS68の処理を行う。
ステップS68に於いて、類似度評価手段25は、変数iに1を加算してステップS61の処理に戻る。
図13は、第1の実施形態に於けるソースコードの類似関係情報を示す図である。
類似関係情報48は、各比較元ソースコード41aを識別するID欄48−1、各比較元ソースコード41aのファイル名情報を格納するファイル名欄48−2、各比較元ソースコード41aが格納された相対パス名情報を格納する相対パス名欄48−3、各比較元ソースコード41aの論理的な行数(SLOC)を格納する論理行数欄48−4と、比較元ソースコード41aに対応する比較先ソースコード41bのファイル名情報を格納する類似ファイル名欄48−5と、比較元ソースコード41aに対応する比較先ソースコード41bの相対パス名情報を格納する類似相対パス名欄48−6と、比較元ソースコード41aと比較先ソースコード41bとの類似度情報を格納する類似度欄48−7とを有している。
図14は、第1の実施形態に於ける類似関係図である。
類似関係図60は、類似関係情報48を、ユーザインタフェース19の出力手段15に示したものである。類似関係図60は、ルートディレクトリを根ノード、ディレクトリを中間ノード、ファイルを葉ノードとするツリー構造で表示している。
類似関係図60には、「root」と示されたルート61が、根ノードとして表示されている。根ノードであるルート61は、「D01」で示されたフォルダ62−1と、「D02」で示されたフォルダ62−2とが、中間ノードとして右方向に分岐している。
中間ノードであるフォルダ62−1は、「F01.c」で示されたファイル63−1と、「F02.c」で示されたファイル63−2とが、葉ノードとして右方向に分岐している。
中間ノードであるフォルダ62−2は、「F04.c」で示されたファイル63−3と、「F06.c」で示されたファイル63−4と、「F07.c」で示されたファイル63−5とが、葉ノードとして右方向に分岐している。以下、ファイル63−1〜63−5を特に区別しないときには、単にファイル63と記載する。
葉ノードであるファイル63−1〜63−5の右側には、それぞれのソースコードとしての論理行数と類似度とを示す横棒グラフ64−1〜64−5が表示されている。以下、横棒グラフ64−1〜64−5を特に区別しないときには、単に横棒グラフ64と記載する。
類似関係図60の下側には、凡例65が表示されている。凡例65には、白色で示された「クローン部」と、灰色で示された「オリジナル部」とが表示されている。
横棒グラフ64の長さは、対応するファイル63のソースコードとしての論理行数である。横棒グラフ64は、いずれも白色と灰色の2色で塗り分けられている。しかし、これに限られず、横棒グラフ64は、任意の二色以上の組合せで塗り分けられていてもよい。
ファイル63と、当該ファイル63に最も類似する比較先ソースコード41bとの類似度は、横棒グラフ64の全体面積に対する「クローン部」の面積割合で示されている。例えば、ファイル63−1の類似度が95%の場合には、横棒グラフ64−1の全体面積に対する「クローン部」の面積割合は95%である。
これにより、ユーザは、複数のソースコード群からなる2つのソフトウェアの類似性を容易に俯瞰できるので、容易にコードクローンであるソフトウェアを発見することができる。ユーザは更に、コードクローンのソフトウェアのうち、改造箇所の多いソースコードを容易に発見し、改造箇所に伴う不具合に対処することができる。
図15は、第1の実施形態に於ける類似仕様書分析手段の処理を示すフローチャートである。
処理を開始すると、ステップS70に於いて、類似仕様書分析手段30は、変数iを1で初期化する。変数iは、比較元ソースコードリスト44aに含まれた比較元ソースコードFi(41a)のIDを示している。
ステップS71に於いて、類似仕様書分析手段30は、比較元ソースコードFi(41a)に仕様書が存在するか否かを判断する。本実施形態に於いて、類似仕様書分析手段30は、比較元ソースコードFi(41a)の相対パスに、比較元ソースコードFi(41a)のファイル名と所定の関連性を有するファイル名の仕様書が存在するか否かによって仕様書の存在を判断する。類似仕様書分析手段30は、当該判断条件が成立したならば(Yes)、ステップS78の処理を行い、当該判断条件が成立しなかったならば(No)、ステップS72の処理を行う。
ステップS72に於いて、類似仕様書分析手段30は、比較元ソースコードFi(41a)に対応先が存在するか否かを、対応関係リスト45に基づいて判断する。類似仕様書分析手段30は、当該判断条件が成立したならば(Yes)、ステップS73の処理を行い、当該判断条件が成立しなかったならば(No)、ステップS74の処理を行う。
ステップS73に於いて、類似仕様書分析手段30は、比較元ソースコードFi(41a)と対応関係を有する比較先ソースコードFj(41b)のIDを、変数jに設定し、ステップS75の処理を行う。
ステップS74に於いて、類似仕様書分析手段30は、比較元ソースコードFi(41a)との類似度が最大の比較先ソースコードFj(41b)のIDを変数jに設定し、ステップS75の処理を行う。
ステップS75に於いて、類似仕様書分析手段30は、比較元ソースコードFi(41a)の類似ファイル名と類似度に、比較先ソースコードFj(41b)のファイル名と類似度を登録する。
ステップS76に於いて、類似仕様書分析手段30は、比較元ソースコードFi(41a)の類似設計仕様書に、比較先ソースコードFj(41b)の詳細設計仕様書42bを登録する。
ステップS77に於いて、類似仕様書分析手段30は、比較元ソースコードFi(41a)の類似テスト仕様書に、比較先ソースコードFj(41b)のテスト仕様書43bを登録する。
ステップS78に於いて、類似仕様書分析手段30は、変数iが比較元ソースコードリスト44aのIDの最大値imax(実施形態では5)以上であるか否かを判断する。類似仕様書分析手段30は、当該判断条件が成立したならば(Yes)、図15の処理を終了し、当該判断条件が成立しなかったならば(No)、ステップS79の処理を行う。
ステップS79に於いて、類似仕様書分析手段30は、変数iに1を加算してステップS71の処理に戻る。
図16は、第1の実施形態に於ける類似仕様書情報を示す図である。
類似仕様書情報49は、比較元ソースコードFi(41a)を識別するID欄49−1と、比較元ソースコードFi(41a)のファイル名情報を格納するファイル名欄49−2と、比較元ソースコードFi(41a)の詳細設計仕様書42aのファイル名を格納する詳細設計仕様書欄49−3と、比較元ソースコードFi(41a)のテスト仕様書43aのファイル名を格納するテスト仕様書欄49−4と、最も類似する比較先ソースコードFj(41b)のファイル名情報を格納する類似ファイル名欄49−5とを有している。
当該比較元ソースコードFi(41a)に、詳細設計仕様書42aが関連付けられていないときには、詳細設計仕様書欄49−3の括弧中に、当該比較元ソースコードFi(41a)に最も類似する比較先ソースコードFj(41b)の詳細設計仕様書42bのファイル名情報を記載する。
当該比較元ソースコードFi(41a)に、テスト仕様書43aが関連付けられていないときには、テスト仕様書欄49−4の括弧中に、当該比較元ソースコードFi(41a)に最も類似する比較先ソースコードFj(41b)のテスト仕様書43bのファイル名情報を記載する。
テスト仕様書欄49−4には更に、括弧中に類似テスト仕様書のファイル名情報が記載されている。類似ファイル名欄49−5には更に、括弧中に類似度の情報が記載されている。
この類似仕様書情報49により、ユーザ200は、比較先ソースコードリスト44bに含まれる比較先ソースコード41bの詳細設計仕様書42bおよびテスト仕様書43bを、その比較先ソースコード41bの類似度と共に、容易に取得することができる。
(第1の実施形態の効果)
以上説明した第1の実施形態では、次の(A)〜(G)のような効果がある。
(A) ソースコード類似度評価手段20は、個々のソフトウェアの対応関係を指示することなく、2つのソフトウェアの関係を評価して、類似関係図60を作成している。これにより、ユーザ200は、複数のソースコード群からなる2つのソフトウェアの類似性を容易に俯瞰できるので、容易にコードクローンであるソフトウェアを発見することができる。
(B)比較対象特定手段23は、比較元ソースコード41aが比較先ソースコードリスト44bのいずれかの比較先ソースコード41bに対応関係を有していると判定されていたならば、対応関係を有する比較先ソースコード41bを比較元ソースコード41aの比較対象として特定して、類似度を評価している。これにより、対応関係を有している比較元ソースコード41aの類似度を1回だけ評価すればよいので、計算量を減少させ、よって、大規模ソフトウェア同士の類似度評価を短時間で終了することができる。
(C) 対応関係解析手段22は、比較元ソースコード41aの相対パス名とファイル名とが、比較先ソースコードリスト44bのいずれかの比較先ソースコード41bの相対パス名とファイル名とに一致するならば、一致する比較先ソースコード41bは比較元ソースコード41aとの対応関係を有すると判定している。このように、該当フォルダを探索して得られる情報のみで、比較元ソースコード41aと比較先ソースコード41bとの対応関係を判定しているので、計算量を減少させ、よって、大規模ソフトウェア同士の類似度評価を短時間で終了することができる。
(D) 出力手段15は、比較元ソースコード41aが比較先ソースコードリスト44bのいずれかの比較先ソースコード41bに対応関係を有していない場合には、比較先ソースコードリスト44bの全ての比較先ソースコード41bとの類似度のうち、最も高い類似度を表示している。これにより、改造ソフトウェアである比較元ソースコード41aのファイル名が変更されていたとしても、最も適切な比較先ソースコード41bを選択して類似度を表示することができる。
(E) 出力手段15は、比較元ソースコード41aが格納された比較元ソフトウェア格納部40aのルートフォルダを根ノード、比較元ソースコード41aの相対パスを構成する各フォルダを内部ノード、比較元ソースコード41aの各類似度を葉ノードとするツリー図で表示している。これにより、比較元ソフトウェア格納部40aのフォルダ構成と、各フォルダに含まれたソースコードファイルの比較先との類似度とを、ユーザ200に分かりやすく表示することができる。
(F) ソースコード類似度評価手段20は、類似関係図60に於いて、比較元ソースコード41aの論理行数を横棒グラフ64の面積で表示すると共に、比較元ソースコード41aと最も類似度の高い比較先ソースコード41bとの類似度を色分けされた横棒グラフ64のいずれかの色の面積比で表示している。これにより、ユーザ200は、コードクローンのソフトウェアのうち、改造箇所の多い比較元ソースコード41aを容易に発見することができ、改造箇所に伴う不具合に対処することができる。
(G) 類似仕様書分析手段30は、自動で類似仕様書情報49を作成している。これにより、ユーザ200は、比較先ソースコードリスト44bに含まれる比較先ソースコード41bの詳細設計仕様書42bおよびテスト仕様書43bを、その比較先ソースコード41bの類似度と共に、容易に取得することができる。ユーザ200は更に、比較先ソースコード41bの類似度によって、詳細設計仕様書42bおよびテスト仕様書43bをどの程度まで流用可能かを判断することができる。
(変形例)
本発明は、上記実施形態に限定されることなく、本発明の趣旨を逸脱しない範囲で、変更実施が可能であり、例えば、次の(a)〜(e)のようなものがある。
(a) 本実施形態のソースコード類似度評価装置10は、ファイルデータベース12に存在するソフトウェア(プロジェクト)を分析している。しかし、これに限られず、ソースコード類似度評価装置10は、外部ファイルデータベース110に存在するソフトウェア(プロジェクト)を分析してもよく、ファイルデータベース12に存在するソフトウェアと、外部ファイルデータベース110に存在するソフトウェアとを比較して分析してもよい。
(b) 本実施形態のソースコード類似度評価装置10は、2つのフォルダを指定することによって、指定した2つのフォルダにそれぞれ存在する2つのソフトウェア(プロジェクト)を分析している。しかし、これに限られず、ソースコード類似度評価装置10は、2つのプロジェクトファイルを指定することにより、指定した2つのプロジェクトファイルに係る2つのソフトウェア(プロジェクト)を分析してもよい。
(c) 本実施形態のソースコード類似度評価装置10は、比較元ソースコードFi(41a)の相対パスに、比較元ソースコードFi(41a)のファイル名と所定の関連性を有するファイル名の仕様書が存在するか否かによって仕様書の存在を判断している。しかし、これに限られず、ソースコード類似度評価装置10は、プロジェクトファイルに比較元ソースコードFi(41a)と関連づけられている仕様書が存在するか否かによって、仕様書の存在を判断してもよい。
(d) ソースコード類似度評価装置10の出力手段15は、比較元ソースコード41aと類似ソースコードとの類似度を、色分けされた横棒グラフ64のいずれかの色の面積比で表している。しかし、これに限られず、出力手段15は、比較元ソースコード41aと類似ソースコードとの類似度を、横棒グラフ64の色彩や白黒の濃淡やパターンによって表してもよく、更に横棒グラフ64以外の任意のグラフ形式(円グラフ、散布図、レーダーチャート、バブルチャートなど)によって表してもよい。
(e) 本発明のソースコード類似度評価手段20を、コンピュータのアプリケーションプログラムとして実現し、当該アプリケーションプログラムを、コンピュータ読み取り可能な記憶媒体に記録して、ユーザに提供してもよい。
10 ソースコード類似度評価装置
11 メモリ
12 ファイルデータベース
13 プロセッサ
14 入力手段
15 出力手段
16 記憶手段
17 ソースコード類似度評価プログラム
18 バス
19 ユーザインタフェース
20 ソースコード類似度評価手段
21 開発成果物解析手段 (ソースコードリスト抽出手段)
22 対応関係解析手段
23 比較対象特定手段
24 類似度計算手段
25 類似度評価手段
26 論理行定義DB
30 類似仕様書分析手段
40a 比較元ソフトウェア格納部
40b 比較先ソフトウェア格納部
41 ソースコード
41a 比較元ソースコード
41b 比較先ソースコード
42,42a,42b 詳細設計仕様書
43,43a,43b テスト仕様書
44a 比較元ソースコードリスト
44b 比較先ソースコードリスト
45 対応関係リスト (対応関係)
46 ソースコード間差分
47 類似度評価結果
48 類似関係情報
49 類似仕様書情報
60 類似関係図
61 ルート
62 フォルダ
63 ファイル
64 横棒グラフ
100 外部ネットワーク
110 外部ファイルデータベース
200 ユーザ
S50 論理行抽出処理
S51 差分分析処理
S52 差分行数計測処理
S53 共通行数計算処理
S54 独立行数計算処理
S55 ファイル間類似度計算処理

Claims (10)

  1. コンピュータを、
    比較元ソフトウェアの構成を示す比較元ソースコードリストと比較先ソフトウェアの構成を示す比較先ソースコードリストとを抽出するソースコードリスト抽出手段と、
    前記比較元ソースコードリストと前記比較先ソースコードリストとを比較して、両者の対応関係を解析する対応関係解析手段と、
    前記対応関係に基づいて、前記比較元ソースコードリストに含まれる各比較元ソースコードの比較対象となる比較先ソースコードを前記比較先ソースコードリストから特定する比較対象特定手段と、
    前記比較元ソースコードと前記比較対象特定手段で特定した前記比較先ソースコードとの類似度を計算する類似度計算手段と、
    前記比較対象特定手段で特定した前記比較先ソースコードのうち、最も高い類似度を備えた類似ソースコードを判定する類似度評価手段と、
    前記比較元ソースコード、および、前記比較元ソースコードと前記類似ソースコードとの類似度を対応づけて出力する出力手段として
    機能させるためのソースコード類似度評価プログラム。
  2. 前記比較対象特定手段は、前記比較元ソースコードが前記比較先ソースコードリストのいずれかの比較先ソースコードに前記対応関係を有していると判定されていたならば、当該対応関係を有する比較先ソースコードを比較対象として特定し、前記比較元ソースコードが前記比較先ソースコードリストのいずれの比較先ソースコードにも前記対応関係を有していないと判定されていたならば、前記比較先ソースコードリストの全ての比較先ソースコードを比較対象として特定する、
    ことを特徴とする請求項1に記載のソースコード類似度評価プログラム。
  3. 前記ソースコードリスト抽出手段は更に、前記比較元ソフトウェアを構成する前記比較元ソースコードの相対パス名およびファイル名を取得して前記比較元ソースコードリストを抽出すると共に、前記比較先ソフトウェアを構成する比較先ソースコードの相対パス名およびファイル名を取得して前記比較先ソースコードリストを抽出し、
    前記対応関係解析手段は、前記比較元ソースコードの相対パス名とファイル名とが、前記比較先ソースコードリストのいずれかの比較先ソースコードの相対パス名とファイル名とに一致するならば、一致する比較先ソースコードは当該比較元ソースコードと前記対応関係を有すると判定する、
    ことを特徴とする請求項2に記載のソースコード類似度評価プログラム。
  4. 前記出力手段が出力する類似度は、前記比較元ソースコードが前記比較先ソースコードリストのいずれかの比較先ソースコードに前記対応関係を有する場合には、前記対応関係を有する比較先ソースコードとの類似度である、
    ことを特徴とする請求項1に記載のソースコード類似度評価プログラム。
  5. 前記出力手段が出力する類似度は、前記比較元ソースコードが前記比較先ソースコードリストのいずれの比較先ソースコードにも前記対応関係を有さない場合には、前記比較先ソースコードリストの全ての比較先ソースコードとの類似度のうち、最も高い類似度である、
    ことを特徴とする請求項1に記載のソースコード類似度評価プログラム。
  6. 前記出力手段は、前記比較元ソフトウェアのルートフォルダを根ノード、前記比較元ソースコードの相対パスに位置する各フォルダを内部ノード、前記比較元ソースコードおよび前記比較元ソースコードと前記類似ソースコードとの類似度を葉ノードとするツリー図で表示する、
    ことを特徴とする請求項1に記載のソースコード類似度評価プログラム。
  7. 前記出力手段は、前記比較元ソースコードと前記類似ソースコードとの類似度を色分けされた棒グラフのいずれかの色の面積比で表すと共に、前記比較元ソースコードの論理行数を前記棒グラフの全体面積で表す、
    ことを特徴とする請求項1に記載のソースコード類似度評価プログラム。
  8. 更にコンピュータを、
    前記比較元ソースコードに仕様書が関連付けされていない場合には、前記類似ソースコードの仕様書を類似仕様書として提示する類似仕様書分析手段として
    機能させることを特徴とする請求項1に記載のソースコード類似度評価プログラム。
  9. 請求項1ないし請求項8のいずれか1項に記載のソースコード類似度評価プログラムを記録した、
    ことを特徴とするコンピュータ読み取り可能な記憶媒体。
  10. 比較元ソフトウェアの構成を示す比較元ソースコードリストと比較先ソフトウェアの構成を示す比較先ソースコードリストとを抽出するソースコードリスト抽出手段と、
    前記比較元ソースコードリストと前記比較先ソースコードリストとを比較して、両者の対応関係を解析する対応関係解析手段と、
    前記対応関係に基づいて、前記比較元ソースコードリストに含まれる各比較元ソースコードの比較対象である比較先ソースコードを前記比較先ソースコードリストから特定する比較対象特定手段と、
    前記比較元ソースコードと前記比較対象特定手段で特定した前記比較先ソースコードとの類似度を計算する類似度計算手段と、
    前記比較対象特定手段で特定した前記比較先ソースコードのうち、最も高い類似度を備えた類似ソースコードを判定する類似度評価手段と、
    前記比較元ソースコード、および、前記比較元ソースコードと前記類似ソースコードとの類似度を対応づけて出力する出力手段と、
    を備えることを特徴とするソースコード類似度評価装置。
JP2012204545A 2012-09-18 2012-09-18 ソースコード類似度評価プログラム、ソースコード類似度評価装置、および、コンピュータ読み取り可能な記憶媒体 Expired - Fee Related JP5875961B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012204545A JP5875961B2 (ja) 2012-09-18 2012-09-18 ソースコード類似度評価プログラム、ソースコード類似度評価装置、および、コンピュータ読み取り可能な記憶媒体
CN201310337262.2A CN103678111B (zh) 2012-09-18 2013-08-05 源代码类似度评价方法以及源代码类似度评价装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012204545A JP5875961B2 (ja) 2012-09-18 2012-09-18 ソースコード類似度評価プログラム、ソースコード類似度評価装置、および、コンピュータ読み取り可能な記憶媒体

Publications (2)

Publication Number Publication Date
JP2014059743A JP2014059743A (ja) 2014-04-03
JP5875961B2 true JP5875961B2 (ja) 2016-03-02

Family

ID=50315751

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012204545A Expired - Fee Related JP5875961B2 (ja) 2012-09-18 2012-09-18 ソースコード類似度評価プログラム、ソースコード類似度評価装置、および、コンピュータ読み取り可能な記憶媒体

Country Status (2)

Country Link
JP (1) JP5875961B2 (ja)
CN (1) CN103678111B (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11099842B2 (en) 2019-01-08 2021-08-24 Saudi Arabian Oil Company Source code similarity detection using digital fingerprints

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104036156A (zh) * 2014-06-27 2014-09-10 麦永浩 一种对软件侵权行为的电子数据取证鉴定方法及系统
CN104123493B (zh) * 2014-07-31 2017-09-26 百度在线网络技术(北京)有限公司 应用程序的安全性检测方法和装置
US20230205736A1 (en) * 2021-12-24 2023-06-29 Vast Data Ltd. Finding similarities between files stored in a storage system

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4560608B2 (ja) * 2006-08-11 2010-10-13 国立大学法人神戸大学 類似度評価プログラム、類似度評価装置及び類似度評価方法
CN101315599A (zh) * 2007-05-29 2008-12-03 北京航空航天大学 源程序相似度检测方法及装置
JP5208635B2 (ja) * 2008-09-12 2013-06-12 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラミングを支援するための情報処理装置、情報処理システム、プログラミング支援方法およびプログラム
JP2010165082A (ja) * 2009-01-14 2010-07-29 Nomura Research Institute Ltd 開発管理情報収集システム
CN101697121A (zh) * 2009-10-26 2010-04-21 哈尔滨工业大学 一种基于程序源代码语义分析的代码相似度检测方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11099842B2 (en) 2019-01-08 2021-08-24 Saudi Arabian Oil Company Source code similarity detection using digital fingerprints

Also Published As

Publication number Publication date
JP2014059743A (ja) 2014-04-03
CN103678111B (zh) 2016-06-29
CN103678111A (zh) 2014-03-26

Similar Documents

Publication Publication Date Title
US20220327137A1 (en) Modifying field definitions to include post-processing instructions
US11068510B2 (en) Method and system for implementing efficient classification and exploration of data
KR101732764B1 (ko) 코드 클론 검출을 이용하는 지능형 코드 디퍼런싱을 수행하는 방법 및 시스템
CN102479252B (zh) 查询语句转换装置及查询语句转换方法
CN110532019B (zh) 一种软件代码片段历史追溯的方法
US11809223B2 (en) Collecting and annotating transformation tools for use in generating transformation programs
Yadwadkar et al. Discovery of Application Workloads from Network File Traces.
CN102236549A (zh) 跨动态边界的运行时分析的可视化
CN101739335A (zh) 建议的应用评估系统
JP5564448B2 (ja) ソフトウェアの類似性評価方法
JP5875961B2 (ja) ソースコード類似度評価プログラム、ソースコード類似度評価装置、および、コンピュータ読み取り可能な記憶媒体
CN104216946B (zh) 一种用于确定重打包应用程序的方法和装置
JP6631527B2 (ja) 情報処理装置、情報処理方法、及び、プログラム
Kamalabalan et al. Tool support for traceability of software artefacts
AU2022228142A1 (en) Intelligent change summarization for designers
US20180173687A1 (en) Automatic datacenter state summarization
KR20210103835A (ko) 인공지능 기반의 유행 예측 방법 및 장치
JP6662755B2 (ja) オブジェクト検索装置、オブジェクト検索方法、および、オブジェクト検索プログラム
JP6287506B2 (ja) データベースアクセス制御プログラム、データベースアクセス制御方法、及び情報処理装置
Alrabaee et al. Compiler provenance attribution
JP6677624B2 (ja) 分析装置、分析方法、および分析プログラム
CN116113939A (zh) 一种软件信息组织方法、装置和计算机可读介质
JP6413597B2 (ja) 分析プログラム、分析方法及び分析装置
KR102615660B1 (ko) 그래프 데이터베이스에 기반한 데이터 관계 추적 방법및 이를 실행하기 위하여 기록매체에 기록된 컴퓨터 프로그램
JP6087472B2 (ja) プログラム図作成装置、プログラム図作成方法、及びプログラム図作成プログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150210

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151009

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151020

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151210

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160105

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160120

R150 Certificate of patent or registration of utility model

Ref document number: 5875961

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees