(57)【要約】【課題】ファイルレベルで適用されるコードクローン検出ツールを用いてメソッドレベルのクローン分析を行う方法を提供する。【解決手段】データ処理装置が、分析対象のフォルダ内の全てのソースファイルの各々の中で定義されている各メソッドに対して一意に識別するIDを割り当て、IDと当該メソッドを含むソースファイルのファイルパスと当該メソッドの位置情報とを対応付けてメソッドリストを作成するステップと、ソースファイルの各々をメソッドに分割し、メソッドリストに基づいて、１ファイルが１メソッドからなりIDをファイル名とするメソッド単位ファイルを当該メソッドを含むソースファイルと同じファイルパスの位置にそれぞれ作成するステップと、作成されたメソッド単位ファイルに対してファイルレベルで適用されるコードクローン検出ツールを適用することによりクローン分析を行うステップと、を備える。【選択図】図１
2015064808.tif 000002
【特許請求の範囲】
【請求項１】
ファイルレベルのクローン分析に適用されるコードクローン検出ツールを用いてメソッドレベルのクローン分析をデータ処理装置により行う方法であって、前記データ処理装置が、
分析対象のフォルダ内の全てのソースファイルの各々の中で定義されている各メソッドに対して一意に識別するIDを割り当てるとともに、割り当てたIDと当該メソッドを含むソースファイルのファイルパスと当該ソースファイル内における当該メソッドの位置情報とを対応付けてメソッドリストを作成するステップと、
前記ソースファイルの各々をメソッドに分割し、前記メソッドリストに基づいて、１ファイルが１メソッドからなり前記IDをファイル名とするメソッド単位ファイルを当該メソッドを含むソースファイルと同じファイルパスの位置にそれぞれ作成するステップと、
作成された前記メソッド単位ファイルに対して前記コードクローン検出ツールを適用することによりクローン分析を行うステップと、有することを特徴とする
メソッドレベルのクローン分析方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションのソースコードに関してメソッドレベルでクローン分析を行う方法に関する。
【背景技術】
【０００２】
ソフトウェア開発において、プログラマは実装目的とする処理と同等の処理を行う機能を既存のソースコードからコピー＆ペーストして、機能を実装することが多い。このような場合、流用元のソースコードにバグが存在していると、流用して実装したソースコードにバグもコピーしている可能性が高い。また、その修正による影響範囲を特定することも難しくなる。
【０００３】
類似度の高いファイルを特定できない場合、全ファイルに対して影響がないかを調査する必要があり、膨大な工数がかかる。最近はプログラムの大規模化及び複雑化が進んでいるため、開発者にとって類似ロジックの特定は非常に重要であり、コードクローン検出ツール等を利用したクローン分析を実施するケースも少なくない。
【０００４】
ここで、コピー＆ペースト等により流用されたソースコード間の類似率を分析し算出することを「クローン分析」と称する。また、その類似しているコードを「コードクローン」と称し、クローン分析を実施するツールを「コードクローン検出ツール」と称する。
【０００５】
既存のコードクローン検出ツールには、ソースコードをトークンに分割し、ユーザ定義名および定数を特定の記号に置き換え、一致部分をコードクローンとして検出する機能を有するツールがある。
【０００６】
クローン分析を実施することによって、類似度の高いファイルを特定し、そのバグが類似したファイルにも存在しないかを調査することが可能となるとともに、その修正による影響範囲を特定することが容易となる。
【０００７】
特許文献１は、コードクローン検出後のリファクタリング方法についての技術を開示している。
特許文献２は、プログラムの文脈に基づいて類似するロジックを検出する技術を開示している。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００９−１７６０６４号公報
【特許文献２】特開２０１０−１４０４３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
上記特許文献１は、コードクローン検出後のリファクタリング方法に関する提案であり、
コードクローン検出前の処理すなわちクローン分析自体に関しては触れられていない。
上記特許文献２は、既存のコードクローン検出ツールの方法とは異なる検出方法に関する提案である。
【００１０】
既存のコードクローン検出ツールを利用した従来のクローン分析では、ファイルレベルでコードクローンを分析する。つまり、入力はファイルであり、クローン分析の出力結果もファイルレベルとなる。しかし、開発者はファイルレベルでソースコードを流用することは少なく、より小さいメソッドレベルで流用することが多い。よってメソッドレベルでのクローン分析が開発者にとってより実用的であると考える。
【００１１】
本発明の目的は、既存のファイルレベルのコードクローン検出ツールを利用し、メソッドレベルのクローン分析を実施する方法を提供することである。
【課題を解決するための手段】
【００１２】
既存のコードクローン検出ツールによれば、従来から単一ソースファイル内又はソースファイル間でのクローン分析が可能である。そのため、分析対象のソースファイルから、実体定義されている各メソッドを切り出し、１ファイル内に１メソッドのみ定義されているファイル（以下「メソッド単位ファイル」と称する）を作成する。作成したメソッド単位ファイルは、メソッド名が開始行に、メソッド実体定義スコープの最終中括弧が最終行に記述されるような形態となる。
【００１３】
また、この時、ソースファイルに実体定義されている各メソッドに対して、一意に割り当てられるIDを紐づけ、そのIDを、作成したメソッド単位ファイルのファイル名とする。これにより、そのファイル名から、分析対象の母体ソースファイルのファイルパス及びメソッド名等がトレース可能となる。
【００１４】
メソッド単位ファイルは、ファイルであるので既存のコードクローン検出ツールを適用してファイルレベルのクローン分析を実施することができる。これにより、実質的にメソッドレベルのクローン分析が可能となる。このクローン分析結果のファイル名にはメソッドに対して一意に割り当てられているIDが紐づいているため、メソッドレベルでのクローン分析結果を取得することが可能となる。
【００１５】
本発明の態様は、ファイルレベルのクローン分析に適用されるコードクローン検出ツールを用いてメソッドレベルのクローン分析をデータ処理装置により行う方法であって、前記データ処理装置が、分析対象のフォルダ内の全てのソースファイルの各々の中で定義されている各メソッドに対して一意に識別するIDを割り当てるとともに、割り当てたIDと当該メソッドを含むソースファイルのファイルパスと当該ソースファイル内における当該メソッドの位置情報とを対応付けてメソッドリストを作成するステップと、前記ソースファイルの各々をメソッドに分割し、前記メソッドリストに基づいて、１ファイルが１メソッドからなり前記IDをファイル名とするメソッド単位ファイルを当該メソッドを含むソースファイルと同じファイルパスの位置にそれぞれ作成するステップと、作成された前記メソッド単位ファイルに対して前記コードクローン検出ツールを適用することによりクローン分析を行うステップと、有することを特徴とする。
【発明の効果】
【００１６】
本発明によれば、既存のコードクローン検出ツールを利用した従来のクローン分析の方法をそのまま利用し、メソッドレベルでコードクローンを特定できる。従来のファイルレベルのクローン分析と比べてメソッドレベルのクローン分析は、開発者に対し従来よりも詳細な情報を提供することが可能となる
【００１７】
さらに、従来のソースファイル間でのクローン分析に比べ、メソッドレベルでコードクローンを特定できるため、開発者はその情報を利用して、リファクタリング時に類似度の高いメソッドを共通化することや、コード修正時に類似不良の摘出漏れを防止することが容易となる。
【００１８】
また本発明によれば、開発工数の削減や開発後の保守性の面でも多大な効果を発揮することに期待できる。
【図面の簡単な説明】
【００１９】
【図１】図１は、本発明によるメソッドレベルのクローン分析方法のフローの一例を概略的に示した図である。
【図２】図２は、クローン分析対象の複数のソースファイルを含むフォルダ構成の一例を示す図である。
【図３】図３は、クローン分析対象のソースファイル(crl.c)の一例を示す図である。
【図４】図４は、クローン分析対象のソースファイル(aes_x86core.c)の一例を示す図である。
【図５】図５は、ソースファイルのリストであるソースリストの一例を示す図である。
【図６】図６は、ソースファイルを分割して作成したメソッドリストの一例を示す図である。
【図７】図７は、図３のソースファイルの分割後のメソッド単位ファイルの１つ（1.c）を示す図である。
【図８】図８は、図３のソースファイルの分割後のメソッド単位ファイルの１つ（2.c）を示す図である。
【図９】図９は、図４のソースファイルの分割後のメソッド単位ファイルの１つ（3.c）を示す図である。
【図１０】図１０は、図４のソースファイルの分割後のメソッド単位ファイルの１つ（4.c）を示す図である。
【図１１】図９は、図４のソースファイルの分割後のメソッド単位ファイルの１つ（5.c）を示す図である。
【図１２】図９は、図４のソースファイルの分割後のメソッド単位ファイルの１つ（6.c）を示す図である。
【図１３】図９は、図４のソースファイルの分割後のメソッド単位ファイルの１つ（7.c）を示す図である。
【図１４】図１４は、メソッドレベルのクローン分析結果の一例を示す図である。
【図１５】図１５は、メソッドレベルのクローン分析結果により作成した、１メソッドからなるファイル間のクローン関係の一例を示す図である。
【発明を実施するための形態】
【００２０】
以下、本発明の実施形態を図面により詳細に説明する。なお、ソースファイルをメソッド単位で分割する形態に関しては、オープンソースであるOpenSSLの２つのソースファイル(apps\crl.cおよびcrypto\aes\aes_x86core.c)を例に挙げて説明する。
【００２１】
図１は、本発明によるメソッドレベルのクローン分析方法のフローの一例を概略的に示した図である。
【００２２】
このフローの処理を実現するためのシステムは、適宜のコンピュータであるデータ処理装置を備え、データ処理装置に導入された所定のプログラムをメモリに読み込みＣＰＵが実行することにより、図１の各ステップの処理機能が実現される。よって、所定のプログラムを導入されたデータ処理装置は、メソッドレベルのクローン分析装置として機能することとなる。図１の各ステップは、メソッドレベルのクローン分析装置に備わる各処理部の機能に対応する。さらにこのデータ処理装置は、当該所定のプログラムを格納するとともに、分析対象のソースファイル、分析準備過程で作成するソースリスト及びメソッドリスト等の中間データ、コードクローン検出ツール、並びに分析結果及びその整形データ等の各ファイルを格納するための記憶装置を備える。また、このデータ処理装置は、分析対象のソースファイルを指定したり分析結果を表示及び整形したりするための入出力装置を備えている。なお、システム構成については多様な変形形態が考えられる。
【００２３】
図１のステップ１１では、クローン分析の対象とするフォルダを作成し、分析対象の全てのソースファイルを所定の階層構造にて格納する。図２は、クローン分析の対象とする複数のソースファイルを含むフォルダの構成の一例を示したものである。
【００２４】
図３は、クローン分析対象のソースファイルのうちの１つであるcrl.cのソースコードの記述を示したものである。
【００２５】
図４は、クローン分析対象のソースファイルのうちの別の１つであるaes_x86core.cのソースコードの記述を示したものである。
【００２６】
図１のステップ１２では、図２に示した分析対象のフォルダから、分割前の全てのソースファイルのソースリストを作成する。図５は、作成されるソースリストを示したものである。ソースリストの作成方法としては、コマンドプロンプトによるdirコマンド、またはエクスプローラの検索機能によって、拡張子を限定し検索することで取得可能である。
【００２７】
図１のステップ１３では、ソースリストに記載されている全てのソースファイルを解析し、必要なデータを取得してメソッドリストを作成する。図６は、メソッドリストの一例を示す。メソッドリストには、メソッド毎に割り当てられる「ID」、当該メソッドを含むソースファイルの「ファイルパス」、当該メソッドの「メソッド名」、当該メソッドの当該ソースファイル内における位置情報である「開始行」及び「終了行」のデータ項目がある。IDは、フォルダ階層によらず分析対象フォルダ内で一意のキーとする。
【００２８】
図１のステップ１４では、各ソースファイルをメソッド単位に分割し、メソッドリストに基づいて、分割されたメソッド単位を含んでいた元の母体ソースファイルと同じ階層（同じファイルパスの位置）に、メソッド単位ファイルを作成する。メソッド単位ファイルは、分割されたメソッド単位の１つを含む。ソースファイルをメソッド単位に分割してメソッド単位ファイルを作成する具体的手法としては、メソッドリストに記述されているファイルパスからソースファイルを開き、開始行および終了行に記載されているコードを以下のファイル命名規則の通り作成する方法を用いる。
ファイル命名規則：[ID].[拡張子]
よって、IDは、メソッド単位ファイルのファイル名となる。
【００２９】
図７及び図８はそれぞれ図３のソースファイルを母体ソースファイルとして分割した各メソッド単位ファイルを、図９〜図１３はそれぞれ図４のソースファイルを母体ソースファイルとして分割した各メソッド単位ファイルを示す。分割後のメソッド単位ファイルは、先頭行にメソッド名定義、最終行にメソッド定義スコープの最終中括弧の形態となる。
【００３０】
図１のステップ１５において、図５のソースリストを参照し、ファイル分割前の各ソースファイルを分析対象のフォルダから削除する。これにより、フォルダ内にはメソッド単位ファイルのみが存在することとなる。
【００３１】
図１のステップ１６において、クローン分析対象のフォルダに対してクローン分析を実施する。メソッド単位ファイルを通常のファイルとして扱い、ファイル毎にクローン分析を実施する。
【００３２】
図１のステップ１７では、メソッドレベルのクローン分析結果を作成する。クローン分析の出力結果には、ID付きのファイル名が記述されている。従って、分析結果とメソッドリストとを突き合わせることにより、元のソースファイルについてのメソッドレベルのクローン分析結果として整形することができる。図１４は、メソッド単位ファイルの各々に対するクローン分析結果であるクローン率を、メソッドリストの各レコードと対応付けて示したものである。図１５は、比較元と比較先の２つのソースファイルをそれぞれメソッド単位ファイルに分割してクローン分析を行い、メソッド単位ファイル間のクローン分析結果であるクローン率を、メソッドレベルのクローン関係として示したものである。
【図１】
2015064808.tif 000003
【図２】
2015064808.tif 000004
【図３】
2015064808.tif 000005
【図４】
2015064808.tif 000006
【図５】
2015064808.tif 000007
【図６】
2015064808.tif 000008
【図７】
2015064808.tif 000009
【図８】
2015064808.tif 000010
【図９】
2015064808.tif 000011
【図１０】
2015064808.tif 000012
【図１１】
2015064808.tif 000013
【図１２】
2015064808.tif 000014
【図１３】
2015064808.tif 000015
【図１４】
2015064808.tif 000016
【図１５】
2015064808.tif 000017