JP2014059743A - ソースコード類似度評価プログラム、ソースコード類似度評価装置、および、コンピュータ読み取り可能な記憶媒体 - Google Patents
ソースコード類似度評価プログラム、ソースコード類似度評価装置、および、コンピュータ読み取り可能な記憶媒体 Download PDFInfo
- Publication number
- JP2014059743A JP2014059743A JP2012204545A JP2012204545A JP2014059743A JP 2014059743 A JP2014059743 A JP 2014059743A JP 2012204545 A JP2012204545 A JP 2012204545A JP 2012204545 A JP2012204545 A JP 2012204545A JP 2014059743 A JP2014059743 A JP 2014059743A
- 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.)
- Granted
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
【解決手段】ソースコード類似度評価プログラムは、ソフトウェアを構成するソースコードリストを抽出する開発成果物解析手段21と、比較元ソースコードリスト44aと比較先ソースコードリスト44bとを比較して、両者の対応関係を解析する対応関係解析手段22と、対応関係に基づいて、比較元ソースコードリスト44aに含まれる比較元の比較先ソースコード41bの比較対象を前記比較先ソースコードリスト44bから特定する比較対象特定手段23と、比較元ソースコード41aと比較対象特定手段23で特定したソースコードとの類似度を求める類似度計算手段24と、比較元ソースコード41aと類似度との組合せを出力する出力手段15とをコンピュータに実行させる。
【選択図】図2
Description
ソフトウェアの保守コストを削減するため、このコードクローンを検出して、ソフトウェア部品として共通化することが、ソフトウェアの保守現場から要請されている。しかし、大規模ソフトウェアに対して、目視によるコードレビューでコードクローンを発見することは非効率である。
近年、上記課題を踏まえて、ソフトウェアを構成するソースコードに対して、コードクローンを検出する技術が開示されている。
非特許文献2には、ソフトウェアのクローン検出に関する研究内容が記載されている。
その他の手段については、発明を実施するための形態のなかで説明する。
ソースコード類似度評価装置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とを有している。
記憶手段16に記憶されているソースコード類似度評価プログラム17が当該メモリ11に読み込まれ、前記するプロセッサ13によって実行されることによって、ソースコード類似度評価手段20と類似仕様書分析手段30とが具現化される。
プロセッサ13は、例えばCPU(Central Processing Unit)であり、メモリ11に読み込まれたプログラムファイルを実行することにより、ソースコード類似度評価手段20や類似仕様書分析手段30を具現化し、当該ソースコード類似度評価装置10を制御する。
入力手段14は、例えば、マウス、キーボード、タブレットなどであり、ユーザがソースコード類似度評価装置10に指示を行うときに用いるものである。
出力手段15は、例えば、液晶表示装置やプリンタなどであり、ユーザに当該ソースコード類似度評価装置10の操作ガイダンスや処理結果などを出力して表示するものである。本実施形態の出力手段15は、比較元ソースコードおよびその類似度を出力する。
記憶手段16は、例えばHDDに代表されるストレージ装置であり、ファイルを電磁的に記憶するものである。
ソースコード類似度評価手段20は、ユーザインタフェース19を介してユーザ200の指示を受けると、比較元ソフトウェア格納部40aに格納されているソフトウェアと、比較先ソフトウェア格納部40bに格納されているソフトウェアとの類似度の評価を行う。ソースコード類似度評価手段20は、類似関係情報48を、ユーザインタフェース19を介してユーザ200に表示する。
比較先ソフトウェア格納部40bは、例えば、比較元ソフトウェアの改造元となっている既存のソフトウェアであり、ファイルデータベース12の所定のパスの下のフォルダ階層に、比較元ソースコード41aが記述されているのと同一のプログラム言語で記述されたコードを含んだファイルである比較先ソースコード41bと、当該比較先ソースコード41bの設計仕様が記載されている詳細設計仕様書42bと、当該比較先ソースコード41bのテスト仕様が記載されているテスト仕様書43bとを備えている。
以下、比較元ソースコード41aと比較先ソースコード41bを特に区別しないときには、単に「ソースコード41」と記載する。詳細設計仕様書42a,42bを特に区別しないときには、単に「詳細設計仕様書42」と記載する。テスト仕様書43a,43bを特に区別しないときには、単に「テスト仕様書43」と記載する。また、既存のソフトウェアのことを「ベースソフトウェア」と記載し、当該既存のソフトウェアを変更または改造したソフトウェアのことを「改造ソフトウェア」と記載する。
ソースコード類似度評価手段20は、ソースコードの拡張子に基づいて論理行定義DB26を参照することにより、ソースコードの論理行の定義を取得し、当該論理行定義に基づいて比較元ソースコード41aや比較先ソースコード41bなどの論理行を抽出する。論理行定義DB26は、記憶手段16(図1)に格納されており、ソースコード類似度評価手段20によって参照される。
対応関係リスト45は、比較元ソースコード41aと、当該比較元ソースコード41aと対応関係にある比較先ソースコード41bとの組合せの一覧である。
類似度計算手段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と類似ソースコードとの類似度とを対応づけて出力する。
処理を開始すると、ステップS10に於いて、開発成果物解析手段21は、比較元ソフトウェア格納部40aのルートフォルダを指定して開発成果解析処理(図3(b))を行う。
ステップS11に於いて、開発成果物解析手段21は、比較先ソフトウェア格納部40bのルートフォルダを指定して開発成果解析処理(図3(b))を行う。ステップS11の処理が終了すると、図3(a)の全体処理は終了する。
処理を開始すると、ステップS20に於いて、開発成果物解析手段21は、ソースコード格納部として指定された当該フォルダのプロジェクトファイル(例えばmakefileなど)を探索する。ここでプロジェクトファイルとは、当該ソフトウェアの管理ファイルであり、当該ソフトウェアのソースファイルから実行ファイルを生成するルールなどが記載されているものである。
ステップS22に於いて、開発成果物解析手段21は、当該プロジェクトファイルに係るソースコード41(ファイル名と相対パス名)を抽出する。
ステップS23に於いて、開発成果物解析手段21は、当該プロジェクトファイルに係る各ソースコード41の詳細設計仕様書42を抽出する。開発成果物解析手段21は、ソースコード41の相対パスを探索し、ソースコード41のファイル名と所定の関連性を有するファイル名を備えた詳細設計仕様書42を抽出している。
ステップS24に於いて、開発成果物解析手段21は、当該プロジェクトファイルに係る各ソースコード41のテスト仕様書43を抽出する。開発成果物解析手段21は、ソースコード41の相対パスを探索し、ソースコード41のファイル名と所定の関連性を有するファイル名を備えたテスト仕様書43を抽出している。
ステップS25に於いて、開発成果物解析手段21は、全てのプロジェクトファイルにつき処理を繰り返したか否かを判断する。開発成果物解析手段21は、当該判断条件が成立しなかったならば、ステップS21の処理に戻る。
ステップS27〜S29に於いて、開発成果物解析手段21は、全サブフォルダにつき処理を繰り返す。
ステップS28に於いて、開発成果物解析手段21は、当該サブフォルダについて、開発成果解析処理(図3(b))を再帰的に行う。
ステップS29に於いて、開発成果物解析手段21は、全サブフォルダについて処理を繰り返したか否かを判断する。開発成果物解析手段21は、当該判断条件が成立しなかったならば、ステップS27の処理に戻り、当該判断条件が成立したならば、図3(b)の処理を終了する。
比較元ソースコードリスト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)が格納されている。
比較先ソースコードリスト44bは、比較元ソースコードリスト44aと同様に構成されている。
処理を開始すると、ステップS30に於いて、対応関係解析手段22は、変数iを1で初期化する。変数iは、比較元ソースコードリスト44aに含まれた比較元ソースコード41aのIDを示している。ここで変数i=1なので、比較元ソースコードFi(41a)のファイル名は、「F01.c」である。
ステップS32に於いて、対応関係解析手段22は、比較元ソースコードFi(41a)の相対パス名と、比較先ソースコードFj(41b)の相対パス名とが同一であるか否かを判断する。対応関係解析手段22は、当該判断条件が成立したならば(Yes)、ステップS33の処理を行い、当該判断条件が成立しなかったならば(No)、ステップS35の処理を行う。
ステップS33に於いて、対応関係解析手段22は、比較元ソースコードFi(41a)のファイル名と、比較先ソースコードFj(41b)のファイル名とが同一であるか否かを判断する。対応関係解析手段22は、当該判断条件が成立したならば(Yes)、ステップS34の処理を行い、当該判断条件が成立しなかったならば(No)、ステップS35に進む。
ステップS35に於いて、対応関係解析手段22は、変数jが比較先ソースコードリスト44bのIDの最大値jmax(本実施形態では5)以上であるか否かを判断する。対応関係解析手段22は、当該判断条件が成立したならば(Yes)、ステップS37の処理を行い、当該判断条件が成立しなかったならば(No)、ステップS36の処理を行う。
ステップS36に於いて、対応関係解析手段22は、変数jに1を加算し、ステップS32の処理に戻る。これにより、対応関係解析手段22は、全ての比較先ソースコードリスト44bの各比較先ソースコード41bについて、ステップS32〜S34の処理を行うことができる。
ステップS38に於いて、対応関係解析手段22は、変数iに1を加算してステップS31の処理に戻る。これにより、対応関係解析手段22は、全ての比較元ソースコードリスト44aの各比較元ソースコード41aについて、ステップS31〜S35の処理を行うことができる。
対応関係リスト45には、比較元ソースコード41aのIDと、比較先ソースコード41bのIDとの対応関係が記載されている。比較元ソースコード41aのID=1と比較先ソースコード41bのID=1とは、対応関係を有している。比較元ソースコード41aのID=2と比較先ソースコード41bのID=2とは、対応関係を有している。比較元ソースコード41aのID=3と比較先ソースコード41bのID=4とは、対応関係を有している。
処理を開始すると、ステップ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を示している。
ステップ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の処理に戻る。
論理行定義DB26は、拡張子欄26−1と、論理行の区切り欄26−2と、コメント開始欄26−3と、コメント終了欄26−4とを有している。
拡張子欄26−1は、ファイル名の拡張子部分の情報を示している。ここで拡張子とは、ファイル名の末尾のピリオド以降の部分をいう。ソースコードは、ファイル名の拡張子部分によって、当該ソースコードが記述されているコンピュータ言語を示している。
論理行の区切り欄26−2は、当該拡張子に係るコンピュータ言語の論理行の区切りルールを示すものである。ソースコード類似度評価手段20は、当該論理行の区切りルールに基づいて、ソースコードの論理行数をカウントする。
コメント開始欄26−3は、当該拡張子に係るコンピュータ言語のコメントの開始ルールを示すものである。
コメント終了欄26−4は、当該拡張子に係るコンピュータ言語のコメントの終了ルールを示すものである。ソースコード類似度評価手段20は、ソースコードの論理行数をカウントするにあたり、コメント開始欄26−3とコメント終了欄26−4とに基づき、コメントを全て無視する。
ここでは、任意の二つの比較元ソースコード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)とする。
類似度計算手段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を計算する。
類似度評価結果47の行方向は、比較元ソースコードリスト44aの各ファイルを示している。類似度評価結果47の列方向は、比較先ソースコードリスト44bの各ファイルを示している。各マトリクスの要素には、ソースコード間類似度Sijの計算結果が格納されている。
ここで、比較元ソースコードリスト44aのF01.c,F02.c,F04.cは、比較先ソースコードリスト44bに対応関係を有する比較先ソースコード41bが存在するので、当該対応関係を有する比較先ソースコード41bとの類似度が計算され、当該対応関係を有さない他のソースコード41との類似度は計算されない。
比較元ソースコードリスト44aに係る比較元ソースコード41aに、比較先ソースコードリスト44bに対応関係を有するソースコードが存在しないならば、比較先ソースコードリスト44bの全ての比較先ソースコード41bとの類似度が計算される。
ここで、比較例のソースコード類似度評価装置は、比較元ソースコードリスト44aの全ての比較元ソースコードFi(41a)と、比較先ソースコードリスト44bの全ての比較先ソースコードFj(41b)との類似度を計算するように構成されている。
本実施形態のソースコード類似度評価装置10は、予めソースコード間の対応関係を調査して、対応関係を有するソースコードの類似度のみを計算して類似度評価結果47を得ている。これにより、本実施形態のソースコード類似度評価装置10は、比較例よりも計算量を低減し、よって短時間に類似度評価結果47を得ることができる。
処理を開始すると、ステップ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)との類似度が計算される「類似ソースコード」である。
ステップ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の処理に戻る。
類似関係情報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とを有している。
類似関係図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と記載する。
類似関係図60の下側には、凡例65が表示されている。凡例65には、白色で示された「クローン部」と、灰色で示された「オリジナル部」とが表示されている。
横棒グラフ64の長さは、対応するファイル63のソースコードとしての論理行数である。横棒グラフ64は、いずれも白色と灰色の2色で塗り分けられている。しかし、これに限られず、横棒グラフ64は、任意の二色以上の組合せで塗り分けられていてもよい。
ファイル63と、当該ファイル63に最も類似する比較先ソースコード41bとの類似度は、横棒グラフ64の全体面積に対する「クローン部」の面積割合で示されている。例えば、ファイル63−1の類似度が95%の場合には、横棒グラフ64−1の全体面積に対する「クローン部」の面積割合は95%である。
これにより、ユーザは、複数のソースコード群からなる2つのソフトウェアの類似性を容易に俯瞰できるので、容易にコードクローンであるソフトウェアを発見することができる。ユーザは更に、コードクローンのソフトウェアのうち、改造箇所の多いソースコードを容易に発見し、改造箇所に伴う不具合に対処することができる。
処理を開始すると、ステップS70に於いて、類似仕様書分析手段30は、変数iを1で初期化する。変数iは、比較元ソースコードリスト44aに含まれた比較元ソースコードFi(41a)のIDを示している。
ステップS71に於いて、類似仕様書分析手段30は、比較元ソースコードFi(41a)に仕様書が存在するか否かを判断する。本実施形態に於いて、類似仕様書分析手段30は、比較元ソースコードFi(41a)の相対パスに、比較元ソースコードFi(41a)のファイル名と所定の関連性を有するファイル名の仕様書が存在するか否かによって仕様書の存在を判断する。類似仕様書分析手段30は、当該判断条件が成立したならば(Yes)、ステップS78の処理を行い、当該判断条件が成立しなかったならば(No)、ステップS72の処理を行う。
ステップS73に於いて、類似仕様書分析手段30は、比較元ソースコードFi(41a)と対応関係を有する比較先ソースコードFj(41b)のIDを、変数jに設定し、ステップS75の処理を行う。
ステップS74に於いて、類似仕様書分析手段30は、比較元ソースコードFi(41a)との類似度が最大の比較先ソースコードFj(41b)のIDを変数jに設定し、ステップS75の処理を行う。
ステップ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の処理に戻る。
類似仕様書情報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)に、テスト仕様書43aが関連付けられていないときには、テスト仕様書欄49−4の括弧中に、当該比較元ソースコードFi(41a)に最も類似する比較先ソースコードFj(41b)のテスト仕様書43bのファイル名情報を記載する。
テスト仕様書欄49−4には更に、括弧中に類似テスト仕様書のファイル名情報が記載されている。類似ファイル名欄49−5には更に、括弧中に類似度の情報が記載されている。
この類似仕様書情報49により、ユーザ200は、比較先ソースコードリスト44bに含まれる比較先ソースコード41bの詳細設計仕様書42bおよびテスト仕様書43bを、その比較先ソースコード41bの類似度と共に、容易に取得することができる。
以上説明した第1の実施形態では、次の(A)〜(G)のような効果がある。
本発明は、上記実施形態に限定されることなく、本発明の趣旨を逸脱しない範囲で、変更実施が可能であり、例えば、次の(a)〜(e)のようなものがある。
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に記載のソースコード類似度評価プログラム。 - 前記出力手段が出力する類似度は、前記比較元ソースコードが前記比較先ソースコードリストのいずれの比較先ソースコードにも前記対応関係を有さない場合には、前記比較先ソースコードリストの全ての比較先ソースコードとの類似度のうち、最も高い類似度である、
ことを特徴とする請求項1に記載のソースコード類似度評価プログラム。 - 前記出力手段は、前記比較元ソフトウェアのルートフォルダを根ノード、前記比較元ソースコードの相対パスに位置する各フォルダを内部ノード、前記比較元ソースコードおよび前記比較元ソースコードと前記類似ソースコードとの類似度を葉ノードとするツリー図で表示する、
ことを特徴とする請求項1に記載のソースコード類似度評価プログラム。 - 前記出力手段は、前記比較元ソースコードと前記類似ソースコードとの類似度を色分けされた棒グラフのいずれかの色の面積比で表すと共に、前記比較元ソースコードの論理行数を前記棒グラフの全体面積で表す、
ことを特徴とする請求項1に記載のソースコード類似度評価プログラム。 - 前記比較元ソースコードに仕様書が関連付けされていない場合には、前記類似ソースコードの仕様書を類似仕様書として提示する類似仕様書分析手段を、
更にコンピュータに実行させることを特徴とする請求項1に記載のソースコード類似度評価プログラム。 - 請求項1ないし請求項8のいずれか1項に記載のソースコード類似度評価プログラムを記録した、
ことを特徴とするコンピュータ読み取り可能な記憶媒体。 - 比較元ソフトウェアの構成を示す比較元ソースコードリストと比較先ソフトウェアの構成を示す比較先ソースコードリストとを抽出するソースコードリスト抽出手段と、
前記比較元ソースコードリストと前記比較先ソースコードリストとを比較して、両者の対応関係を解析する対応関係解析手段と、
前記対応関係に基づいて、前記比較元ソースコードリストに含まれる各比較元ソースコードの比較対象である比較先ソースコードを前記比較先ソースコードリストから特定する比較対象特定手段と、
前記比較元ソースコードと前記比較対象特定手段で特定した前記比較先ソースコードとの類似度を計算する類似度計算手段と、
前記比較対象特定手段で特定した前記比較先ソースコードのうち、最も高い類似度を備えた類似ソースコードを判定する類似度評価手段と、
前記比較元ソースコード、および、前記比較元ソースコードと前記類似ソースコードとの類似度を対応づけて出力する出力手段と、
を備えることを特徴とするソースコード類似度評価装置。
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 true JP2014059743A (ja) | 2014-04-03 |
JP5875961B2 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)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230205736A1 (en) * | 2021-12-24 | 2023-06-29 | Vast Data Ltd. | Finding similarities between files stored in a storage system |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104036156A (zh) * | 2014-06-27 | 2014-09-10 | 麦永浩 | 一种对软件侵权行为的电子数据取证鉴定方法及系统 |
CN104123493B (zh) * | 2014-07-31 | 2017-09-26 | 百度在线网络技术(北京)有限公司 | 应用程序的安全性检测方法和装置 |
US11099842B2 (en) | 2019-01-08 | 2021-08-24 | Saudi Arabian Oil Company | Source code similarity detection using digital fingerprints |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008046695A (ja) * | 2006-08-11 | 2008-02-28 | Kobe Univ | 類似度評価プログラム、類似度評価装置及び類似度評価方法 |
JP2010165082A (ja) * | 2009-01-14 | 2010-07-29 | Nomura Research Institute Ltd | 開発管理情報収集システム |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101315599A (zh) * | 2007-05-29 | 2008-12-03 | 北京航空航天大学 | 源程序相似度检测方法及装置 |
JP5208635B2 (ja) * | 2008-09-12 | 2013-06-12 | インターナショナル・ビジネス・マシーンズ・コーポレーション | プログラミングを支援するための情報処理装置、情報処理システム、プログラミング支援方法およびプログラム |
CN101697121A (zh) * | 2009-10-26 | 2010-04-21 | 哈尔滨工业大学 | 一种基于程序源代码语义分析的代码相似度检测方法 |
-
2012
- 2012-09-18 JP JP2012204545A patent/JP5875961B2/ja not_active Expired - Fee Related
-
2013
- 2013-08-05 CN CN201310337262.2A patent/CN103678111B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2008046695A (ja) * | 2006-08-11 | 2008-02-28 | Kobe Univ | 類似度評価プログラム、類似度評価装置及び類似度評価方法 |
JP2010165082A (ja) * | 2009-01-14 | 2010-07-29 | Nomura Research Institute Ltd | 開発管理情報収集システム |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20230205736A1 (en) * | 2021-12-24 | 2023-06-29 | Vast Data Ltd. | Finding similarities between files stored in a storage system |
Also Published As
Publication number | Publication date |
---|---|
JP5875961B2 (ja) | 2016-03-02 |
CN103678111A (zh) | 2014-03-26 |
CN103678111B (zh) | 2016-06-29 |
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 | |
CN102479252B (zh) | 查询语句转换装置及查询语句转换方法 | |
CN110532019B (zh) | 一种软件代码片段历史追溯的方法 | |
US11281864B2 (en) | Dependency graph based natural language processing | |
CN101739335A (zh) | 建议的应用评估系统 | |
KR20140001951A (ko) | 코드 클론 검출을 이용하는 지능형 코드 디퍼런싱을 수행하는 방법 및 시스템 | |
EP3671526A1 (en) | Dependency graph based natural language processing | |
CN102236549A (zh) | 跨动态边界的运行时分析的可视化 | |
Yadwadkar et al. | Discovery of Application Workloads from Network File Traces. | |
JP5875961B2 (ja) | ソースコード類似度評価プログラム、ソースコード類似度評価装置、および、コンピュータ読み取り可能な記憶媒体 | |
JP2012164211A (ja) | ソフトウェアの類似性評価方法 | |
CN104216946B (zh) | 一种用于确定重打包应用程序的方法和装置 | |
JP6631527B2 (ja) | 情報処理装置、情報処理方法、及び、プログラム | |
AU2022228142A1 (en) | Intelligent change summarization for designers | |
US10346450B2 (en) | Automatic datacenter state summarization | |
US9195940B2 (en) | Jabba-type override for correcting or improving output of a model | |
JP2011060062A (ja) | システム仕様変更の支援システム、支援方法及び支援プログラム | |
US20130218928A1 (en) | Information processing device | |
Alrabaee et al. | Compiler provenance attribution | |
JP6287506B2 (ja) | データベースアクセス制御プログラム、データベースアクセス制御方法、及び情報処理装置 | |
JP7275504B2 (ja) | 情報処理装置、分析モデル管理方法及び分析モデル管理プログラム | |
JP6677624B2 (ja) | 分析装置、分析方法、および分析プログラム | |
CN109710538A (zh) | 一种用于大规模系统中状态相关缺陷的静态检测方法 | |
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 |