(57)【要約】【課題】コードクローンされたソースコードのテストを効率的に行うコードクローンのテスト装置および方法を提供する。【解決手段】サーバ100内に、ソースコードファイル２、コードクローン出力ファイル３、テスト結果ファイル４、コードクローンマージファイル７を備え、またサーバ100内のハードウェア資源により実現される、機能ブロックとしての、データ設定処理部８、コードクローン検出・マージ処理部９、テスト結果設定処理部10を備える。コードクローン検出・マージ処理部９は、ソースコードファイル２に格納されたソフトウェアソースプログラムからコードクローンセットを検出し、マージする。テスト結果設定処理部10は、検出したコードクローンセットの内１つのコードクローンをテストし、テストされたソースコード行にテストケース番号を設定してコードクローンセット全体がテストされたことを表示する。【選択図】図１
2009104489.tif 000002
【特許請求の範囲】
【請求項１】
コードクローンセットを含むソフトウェアソースプログラムをソースコードファイルに格納するデータ設定手段と、
前記ソースコードファイルに格納された前記ソフトウェアソースプログラムから前記コードクローンセットを検出するコードクローン検出手段と、
検出した前記コードクローンセットの内１つのコードクローンをテストし、テストされたソースコード行にテストケース番号を設定して前記コードクローンセット全体がテストされたことを表示するテスト結果設定処理手段、
を有することを特徴とするコードクローンのテスト装置。
【請求項２】
前記ソースコードファイルに格納された複数のコードクローンセットの同一順序配列のコードクローンセットを検出してマージ処理するコードクローン検出・マージ処理手段を有することを特徴とする請求項１記載のコードクローンセットのテスト装置。
【請求項３】
前記コードクローン検出・マージ処理手段は、コードクローンセットの同一順序配列の検出に用いる閾値を持ち、該閾値により意図した以外のコードクローンセット間のソースコード行数を検出しないようにしたことを特徴とする請求項２記載のコードクローンセットのテスト装置。
【請求項４】
前記マージされた前記複数のコードクローンセットを格納するコードクローンマージファイルと、該コードクローンマージファイルに格納された前記マージされた前記複数のコードクローンセットにわたる一連のソースコードを読込み、テストが実施されていない部分を自動的に検出する変更テストケース抽出処理手段を有することを特徴とする請求項２または３記載のコードクローンのテスト装置。
【請求項５】
前記テストが実施されていないソースコードのテスト仕様を半自動生成する変更テスト仕様作成処理手段を有することを特徴とする請求項４記載のコードクローンのテスト装置。
【請求項６】
コードクローンセットを含むソフトウェアソースプログラムを格納する過程と、
格納された前記ソフトウェアソースプログラムから前記コードクローンセットを検出する過程と、
前記コードクローンセットの内１つのコードクローンをテストする過程と、
前記コードクローンについてテストされたソースコード行にテストケース番号を設定し前記コードクローンセット全体がテストされたことを表示する過程と、
を含むことを特徴とするコードクローンのテスト方法。
【請求項７】
複数のコードクローンセットの同一順序配列のコードクローンセットを検出してマージする過程を含むことを特徴とする請求項６記載のコードクローンセットのテスト方法。
【請求項８】
前記マージされた前記複数のコードクローンセットにわたる一連のソースコードについて、テストが実施されていない部分を自動的に検出する過程を含むことを特徴とする請求項７記載のコードクローンのテスト方法。
【請求項９】
前記テストが実施されていないソースコードのテスト仕様を半自動生成する過程を含むことを特徴とする請求項８記載のコードクローンのテスト方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、組み込みソフトウェアを含むソフトウェアソースコードプログラムのテストに関し、特にコードクローンされたソースコードのテストの効率化を図るコードクローンのテスト装置および方法に関する。
【背景技術】
【０００２】
ソフトウェア開発においてはコードクローンがよく使われる。コードクローンは、ソースコード中の重複したコード列を指し、ソースコードの全部または一部をコピーアンドペーストして多数のコードクローンを含むソフトウェアを生成している。しかし一つのコードクローンに変更を加えると他のコードクローンにも同様の変更を行わなければならないことが多く、ソフトウェアの修正に掛かるコストが増大する原因になっている。
【０００３】
特許文献１は、コードクローン検出ツールの出力結果から、ソースコードの類似度を計測する技術を開示している。
特許文献２は、コードクローンの検出方法についての技術を開示している。
【０００４】
特許文献３は、プログラムを流用する場合、流用元で行っていたチェック項目を流用先に流用可能にする技術を開示している。
非特許文献１は、コードクローンセット間の依存関係をチェーンドクローンとして定義し、チェーンドクローンのリファクタリング方法について開示している。
【０００５】
非特許文献２は、コードクローン検出ツールについて紹介している。
【特許文献１】特開２００３−２１６４２５号公報
【特許文献２】特開２００３−２９９７８号公報
【特許文献３】特開平５−２５０２１３号公報
【非特許文献１】吉田則裕  他４名「コードクローン間の依存関係に基づくリファタリング支援」情報処理学会論文誌  Vol.48，No.3，Mar. 2007，pp.1431-1442
【非特許文献２】小堀一雄  「コードクローン検出ツールを使って「コピペ」したコードを見つけよう」ソフトウェア・テストＰＲＥＳＳ  Vol.4，pp.124,技術評論社(2007)
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ソフトウェアのソースコードのテストでは、一般に、ソースコードの一通りの命令を網羅するC0カバレッジテスト、分岐のtrueやfalseを網羅するC1カバレッジテスト、条件の組み合わせを網羅するC2カバレッジテストなどが行われる。
【０００７】
またソースコードのテスト方法としては、上記カバレッジを網羅するテスト仕様を作成してステップごとに確認する方法、テストプログラムを作成して自動実施する方法等がある。さらにテストプログラムを生成・実行・検証するXUNITなどのツールを用いる場合もある。
【０００８】
ソースコードには、あるコードの全部または一部を再利用するため、コピーアンドペーストで複製したコードクローンが存在する。再利用するには再利用部分を関数とするのが原則であるが、一部異なる部分があるなど関数化できずにコードクローンをする場合がある。従来ではコードクローンされた部分がどこにあるのかを区別できないため、コードクローンの有無に関わらずソースコードのテストを行っており、不必要なテストに労力やテスト機材の使用を許してきた。
【０００９】
一方、上記特許文献１では、ソースコードの類似度を計測できるが、テストには利用できない。また上記特許文献２では、コードクローンの検出には利用できるが、テストには利用できない。また、上記特許文献３では、プログラムを流用する場合、流用元で行っていたチェック項目を流用先に流用できるが、テストに適用できるかは言及されていない。さらに、上記非特許文献１は、チェーンドクローンを定義しているが、変数の参照関係によるコードクローン関数間のチェーンであり、テストは関数で閉じているため、テストには利用できない。また上記非特許文献２は、コードクローン検出ツールの紹介であり、テストには触れていない。
【００１０】
したがって本発明は、上記のコードクローンされたソースコードのテストを効率的に行うコードクローンのテスト装置および方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
本発明のコードクローンのテスト装置は、コードクローンセットを含むソフトウェアソースプログラムをソースコードファイルに格納するデータ設定手段と、前記ソースコードファイルに格納された前記ソフトウェアソースプログラムから前記コードクローンセットを検出するコードクローン検出手段と、検出した前記コードクローンセットの内１つのコードクローンをテストし、テストされたソースコード行にテストケース番号を設定して前記コードクローンセット全体がテストされたことを表示するテスト結果設定処理手段、を有することを特徴とする。
【００１２】
また本発明のコードクローンのテスト方法は、コードクローンセットを含むソフトウェアソースプログラムを格納する過程と、格納された前記ソフトウェアソースプログラムから前記コードクローンセットを検出する過程と、前記コードクローンセットの内１つのコードクローンをテストする過程と、前記コードクローンについてテストされたソースコード行にテストケース番号を設定し前記コードクローンセット全体がテストされたことを表示する過程と、を含むことを特徴とする。
【発明の効果】
【００１３】
本発明によれば、従来、コピーアンドペーストで複製した部分について行っていたテストを省略することができ、また複製して一部変更したソースコードのテストも効率的に行うことができる。また本発明によれば、あるコードの全部または一部を再利用するためにコピーアンドペーストで複製したコードクローンについてテストされたソースコード行が明確になり、重複したソースコードのテストを防止できる。また、コピーアンドペーストで複製しさらに一部変更したソースコードについて、変更部分の未テストの部分が明確になり、また変更を必要とするテスト仕様およびテストケースも特定できることから、変更部分のテスト仕様の作成と実行を半自動で行えるようになる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の実施の形態を、図面を参照しながら説明する。
図１は、本発明の実施形態に係るコードクローンのテスト装置を具現するシステムの構成概要を示す図である。図１のシステム構成において、コードクローンテスト装置１は、サーバ100内において構成され、コードクローンテスト装置１はネットワーク200を介してクライアント300に結合される。そしてコードクローンテスト装置１は、サーバ100内のハードウェア資源である記憶装置中に、ソースコードファイル２、コードクローン出力ファイル３、テスト結果ファイル４、テスト仕様ファイル５、変更テスト仕様ファイル６、コードクローンマージファイル７を備え、またサーバ100内のハードウェア資源である中央処理装置(ＣＰＵ)，入出力装置，記憶装置等により実現される、機能ブロックとしての、データ設定処理部８、コードクローン検出・マージ処理部９、テスト結果設定処理部10、
変更テストケース抽出処理部11、変更テスト仕様作成処理部12を備えて構成される。ここでサーバ100は当業者に周知のコンピュータハードウェア資源によって実現されているもので、例えばコンピュータハードウェア資源としてＣＰＵ、記憶装置(ＲＯＭ，ＲＡＭ，ＨＤＤを含む)、入出力装置(通信Ｉ/Ｆ，ディスプレイ，プリンタ，マウス，キーボードなどを含む)などを備えている。
【００１５】
ネットワーク200は、クライアント300とサーバ100(コードクローンテスト装置１)とを連携するもので、ＬＡＮ、公衆網（インターネットを含む）など、周知のネットワーク技術を用いることができる。
【００１６】
クライアント300は、ネットワーク200経由でサーバ100(コードクローンテスト装置１)に繋がれ、周知のクライアントが有するコンピュータハードウェア資源を用いてサーバ100(コードクローンテスト装置１)に対する処理の起動やデータの表示、データの設定を行う。
【００１７】
ソースコードファイル２は、本発明の適用対象となるソースコードを格納するファイルであり、図２にソースコードファイル２の構成例を示す。これについては後述する。
コードクローン出力ファイル３は、コードクローン検出ツール、例えば、非特許文献２で紹介されているCCFinderXなどを用いて検出したデータを格納するファイルであり、図３にコードクローン出力ファイル３の構成例を示す。これについては後述する。
【００１８】
テスト結果ファイル４は、ソースコードに対応して実施されたテスト結果をテストケース番号として格納するファイルであり、図４にテスト結果ファイル４の構成例を示す。これについては後述する。
【００１９】
テスト仕様ファイル５は、コードクローン部分に関係するテスト仕様を格納するファイルであり、図５にテスト仕様ファイル５の構成例を示す。これについては後述する。
変更テスト仕様ファイル６は、コードクローンから変更した部分のテスト仕様を格納するファイルであり、図６に変更テスト仕様ファイル６の構成例を示す。これについては後述する。
【００２０】
コードクローンマージファイル７は、コードクローンセット間でマージできると判断されたコードクローンセットの組のデータを格納するファイルであり、図１１にコードクローンマージファイル７の構成例を示す。これについては後述する。
【００２１】
データ設定処理部８は、ソースコードファイル２に該当するソースコードデータを設定する処理を実行する。図１２にデータ設定処理部８の動作を説明するフローチャートを示す。これについては後述する。
【００２２】
コードクローン検出・マージ処理部９は、コードクローン検出ツール、例えば上述したCCFinderXなどによりコードクローンセットを検出し、また、コードクローンセット間でマージ可否を判断する処理を実行する。図１３にコードクローン検出・マージ処理部９の動作を説明するフローチャートを示す。これについては後述する。
【００２３】
テスト結果設定処理部10は、コードクローン部分を含むソースコードのテスト仕様またはテストプログラムをテスト仕様ファイル５に登録し、テストを実行し、テストしたソースコードに対応したテストケース番号をテスト結果ファイル４に格納する処理を実行する。図１４にテスト結果設定処理部10の動作を説明するフローチャートを示す。これについては後述する。
【００２４】
変更テストケース抽出処理部11は、マージされたコードクローンセットの変更部分のソースコードに対応したテストケースを抽出し変更テスト仕様ファイル６に格納する処理を実行する。図１５に変更テストケース抽出処理部11の動作を説明するフローチャートを示す。これについては後述する。
【００２５】
変更テスト仕様作成処理部12は、マージされたコードクローンセットの変更部分のソースコードに対応したテスト仕様を半自動で作成し変更テスト仕様ファイル６に格納する処理を実行する。図１６に変更テスト仕様作成処理部12の動作を説明するフローチャートを示す。これについては後述する。
【００２６】
以上において図１におけるシステム構成の概要を説明したので、以下ではその詳細を説明することにする。なお図１のコードクローンテスト装置１内の構成要素間の処理の流れを太線の矢印で、またデータの流れを細線の矢印で示す。
【００２７】
図２は、本発明の実施形態に係るソースコードファイルの構成例を示す図である。図２に示すようにソースコードファイル２は、ソースコードファイル名21とソースコード22から構成される。ソースコード22の部分には、図に示していないがソースコードファイル名21に対応した一連のソースコードを格納する。
【００２８】
図３は、本発明の実施形態に係るコードクローン出力ファイルの構成例を示す図である。図３に示すようにコードクローン出力ファイル３は、コードクローンセット名31、ソースコードファイル名32、開始行番号(図示番号33)、終了行番号(図示番号34)から構成される。そしてコードクローンセット名31には同一コードの組について同一名称(例えば、cloneset1)を付している。ソースコードファイル名32には、当該同一コードのソースコードファイル名を格納する。また開始行番号(図示番号33)には当該同一コードが始まるコードの行番号を格納し、さらに終了行番号(図示番号34)には、当該同一コードが終了するコードの行番号を格納する。
【００２９】
図４は、本発明の実施形態に係るテスト結果ファイルの構成例を示す図である。図４に示すようにテスト結果ファイル４には、ソースコードファイル名41、行番号(図示番号42)、テスト対象関数・テストケース番号(図示番号43)から構成される。そしてソースコードファイル名41には、コードクローンが存在するソースコードファイル名を格納する。行番号(図示番号42)には、コードクローン出力ファイル３の開始行番号から終了行番号までの一連の行番号またはコードクローンマージファイル７にコードクローンセット名が存在する場合はコードクローンマージファイル７の開始行番号から終了行番号までの一連の行番号を格納する。テスト対象関数・テストケース番号(図示番号43)には、行番号(図示番号42)に対応したテスト仕様の単位に相当するテスト対象関数名とテストケース番号を格納する。テストケース番号は複数のテストケースが当該ソースコード行に該当する場合は複数となる。
【００３０】
図５は、本発明の実施形態に係るテスト仕様ファイルの構成例を示す図である。図５に示すようにテスト仕様ファイル５は、テスト対象関数・ソースコードファイル名51、テストケース番号またはテストプログラム番号(図示番号52)、入力値(図示番号53)、検証値(図示番号54)から構成される。そしてテスト対象関数・ソースコードファイル名51には、テスト仕様の識別をするためにテスト対象関数名およびソースコードファイル名を格納する。テストケース番号またはテストプログラム番号(図示番号52)には、テストケースを識別する番号または当該テストケースを実行するテストプログラムがある場合は当該テストプログラムを識別する番号を格納する。入力値(図示番号53)には、当該テストケースのルートを通すために必要な入力値を格納する。検証値(図示番号54)には、ソースコードが妥当かを検証するための検証値を格納する。
【００３１】
図６は、本発明の実施形態に係る変更テスト仕様ファイルの構成例を示す図である。図６に示すように変更テスト仕様ファイル６は、図５に示したテスト仕様ファイル５の変更部分を格納するもので、テスト対象関数・ソースコードファイル名61、テストケース番号またはテストプログラム番号(図示番号62)、入力値(図示番号63)、検証値(図示番号64)から構成される。そしてテスト対象関数・ソースコードファイル名61には、テスト仕様の識別をするためにテスト対象関数名およびソースコードファイル名を格納する。テストケース番号またはテストプログラム番号(図示番号62)には、テストケースを識別する番号または当該テストケースを実行するテストプログラムがある場合は当該テストプログラムを識別する番号を格納する。入力値(図示番号63)には、当該テストケースのルートを通すために必要な入力値を格納する。検証値(図示番号64)には、ソースコードが妥当かを検証するための検証値を格納する。
【００３２】
図７は、本発明の実施形態に係るコードクローン検出・マージ処理部９のコードクローン検出処理により得られたコードクローン検出表示例を示す図である。図７に示すようにコードクローン検出ツール、例えば上述したCCFinderXなどを用いて検出されたコードクローンのソースコード(図７に示す111行〜122行参照)を例えば網掛けなどを施して検出されたコードクローンのソースコードが明確になるように表示する。
【００３３】
図８は、本発明の実施形態に係るコードクローン検出・マージ処理部９のコードクローン検出・マージ処理により得られたコードクローン検出・マージ表示例を示す図である。図８に示す表示例では、例示された網掛け矩形部の左右、すなわち、網掛け矩形部81,82、網掛け矩形部83,84、網掛け矩形部85,86、がそれぞれ同一コードクローンセットを示している。また縦の３つのコードクローンセット(網掛け矩形部82,84,86)が左側の３つのクローンセットをマージしたマージコードクローンセットを示している。
【００３４】
図９は、本発明の実施形態に係るテスト結果設定処理部10によるテスト結果設定例を示す図である。図９に示すようにソースコードの行番号に対応して実施されたテストのテストケース番号がソースコード行の右余白に設定される。図示例では、実施されたテストに対応してテストケース番号１およびテストケース番号２が設定されたことを示しており、テストが実施されなかったソースコードは空白にされている。
【００３５】
図１０は、本発明の実施形態に係るテスト結果設定処理部10の処理により得られたテスト結果設定・表示例を示す図である。図１０に示す例では、図８に示したコードクローン検出・マージ表示例に対応したテスト結果のテストケース番号(テストケース番号1,2,3を(ａ)で代表標記)と、新たに設定されたテストケース番号「1a」が図１０の右端に表示される。図示例は、第１画面(左部)と第２画面(右部)とを図の最上部の数字によって区別して２画面を左右に表示し、第１画面(左部)では実施したテストケースの行番号105のテストケース番号(図示番号91)及び行番号117のテストケース番号(図示番号92)が変更対象のテストケース番号として摘出され、第２画面(右部)では実施されてテストケースの行番号255のテストケース番号(図示番号93)及び行番号267のテストケース番号(図示番号94)が新たにテストケース番号「1a」が設定されたことを示している。
【００３６】
図１１は、本発明の実施形態に係るコードクローンマージファイルの構成例を示す図である。図１１に示すようにコードクローンマージファイル７は、マージ名71、コードクローンセット名72、ソースコードファイル名73、開始行番号(図示番号74)、終了行番号(図示番号75)から構成される。そしてマージ名71はコードクローンセットの順序が同じものについて同一名称となるようにしている。コードクローンセット名72はコードクローンセットの順序が同じコードクローンセット名を格納する。ソースコードファイル名73にはコードクローンセットの順序が同じコードクローンがあるソースコードファイル名を格納す
る。また開始行番号(図示番号74)には、当該クローンセット名の順序で最初のコードクローンセットの開始行番号を格納する。さらに、終了行番号(図示番号75)には、当該コードクローンセット名の順序で最後のコードクローンセットの終了行番号を格納する。なお、図示例は、図８に示したコードクローン検出・マージ表示例に対応するものである。
【００３７】
以上までの各構成要素の詳細説明をベースに次に本発明の実施形態に係るコードクローンのテスト装置の動作を各処理部の動作の流れおよび以下に示す動作を説明するフローチャートを用いて説明する。なお図示省略しているが、クライアント300の利用者端末にはサーバ100へのログインにより初期画面が表示され、この初期画面でコードクローンテスト装置１を起動させることになる。つまりクライアント300の利用者端末においてまず初めにデータ設定処理部８を始動させる。以下に示す各処理部においても図１に示した処理の流れおよびデータの流れに基づいて処理を遂行することになる。
【００３８】
図１２は、本発明の実施形態に係るデータ設定処理部８の動作を説明するフローチャートである。以下に示すフローチャートにおいてはステップを‘Ｓ’と略記する。図１２においてステップS1ではソースコードファイル２に対象とするソースコードを書き込み、ソースコードファイル名21(図２参照)をソースコードファイル２に登録する。そして処理を終了する。
【００３９】
図１３は、本発明の実施形態に係るコードクローン検出・マージ処理部９の動作を説明するフローチャートである。図１３においてステップS11では、ソースコードファイル２から対象とするソースコードを読み込む。ステップS12では、コードクローン検出ツール(図示せず)により、コードクローンを検出する。なお、CCFinderXなどのコードクローン検出ツール(図示せず)は、コードクローンテスト装置１と同様に、サーバ100内に用意されていてアクセス可能にされるか、又はネットワーク200を経てアクセス可能にされる。次にステップS13では、コードクローン出力ファイル３にコードクローン検出ツール(図示せず)によって得たデータを書き込む。
【００４０】
次にステップS14では、コードクローン出力ファイル３を読み込む。ステップS15では、同一ソースコードファイル名に複数のコードクローンセット名があるか否かを判定し、複数のコードクローンセット名がない場合はステップS20の処理に飛ぶ。複数のコードクローンセット名がある場合にステップS16では、当該コードクローンセット名の間隔の行数が閾値より小さいか否かを判定し、大きい場合はステップS20の処理に飛ぶ。この場合、閾値は利用者が任意に設定できる。閾値より小さいとステップS17では、コードクローンセット名の名前と順序を例えばワークメモリ(図示せず)に(一時)記憶する。
【００４１】
ステップS18では、他のソースコードファイル名に上記に(一時)記憶したコードクローンセット名の名前と順序が同じものがあるか否かを判定し、同じものがない場合にはステップS20の処理に飛ぶ。同じものがある場合にステップS19では、当該コードクローンセット名の配列にマージ名を付けてコードクローンマージファイル７のマージ名71、コードクローンセット名72、ソースコードファイル名73、開始行番号(図示番号74)、終了行番号(図示番号75)の各項目(図１１参照)に書き込む。ステップS20では、コードクローン出力ファイル３のソースコードファイル名32(図３参照)の全てを確認し、確認できた場合は処理を終了する。未確認のものがある場合にはステップS15に戻る。
【００４２】
図１４は、本発明の実施形態に係るテスト結果設定処理部10の動作を説明するフローチャートである。図１４においてステップS21では、コードクローン出力ファイル３およびコードクローンマージファイル７、ソースコードファイル２を読み込む。ステップS22では、同一コードクローンセット名の複数あるソースコードファイル名のうち１つのソースコードファイル名のコードクローンが該当する関数についてのテスト仕様をテスト仕様フ
ァイル５に登録する。コードクローンセット名にマージ名が付いている場合は、同一マージ名の複数のソースコードファイル名のうち１つのソースコードファイル名のコードクローンが該当する関数についてのテスト仕様をテスト仕様ファイル５に登録する。
【００４３】
ステップS23では、ステップS22の処理で登録したテスト仕様についてテストを実行する。この場合、手動でテストを行う場合と、テストプログラムによって自動でテストを行う場合と、XUNITなどのテストツール(図示せず)によって自動でテストを行う場合とがある。なお、上述したXUNITなどのテストツール(図示せず)は、コードクローンテスト装置１と同様に、サーバ100内に用意されていてアクセス可能にされるか、又はネットワーク200を経てアクセス可能にされる。ステップS24では、実行したテストケース番号をテストを実行したソースコードファイル名の行に対応付けてテスト結果ファイル４に書き込む。この場合、書き込む行番号は、マージ名が付いていないコードクローンセット名についてはコードクローン出力ファイル３の開始行番号から終了行番号について書き込み、マージ名が付いているコードクローンセット名についてはコードクローンマージファイル７の開始行番号から終了行番号について書き込みを行う。ステップS25では、同一コードクローンセット名の他のソースコードファイル名の行に対応して同様にテストケース番号をテスト結果ファイル４に書き込む。そして処理を終了する。
【００４４】
図１５は、本発明の実施形態に係る変更テストケース抽出処理部11の動作を説明するフローチャートである。図１５においてステップS31では、テスト結果ファイル４およびコードクローンマージファイル７を読み込む。ステップS32では、コードクローンマージファイル７の同一マージ名71(図１１参照)で開始行番号(図示番号74)から終了行番号(図示番号75)の中でテスト結果ファイル４のテストケース番号が記載されていない行番号の範囲を抽出する。当該行番号はコードクローンセット間の行が該当する。ステップS33では、上記ステップS32の処理で抽出したコードクローンセット間の行でテストケース番号が記載されているもののテスト対象関数とテストケース番号を抽出する。ステップS34では、上記ステップS33の処理で抽出したテスト対象関数とテストケース番号に相当するテスト仕様をテスト仕様ファイル５から読み込んで、変更テスト仕様ファイル６に書き込む。そして処理を終了する。
【００４５】
図１６は、本発明の実施形態に係る変更テスト仕様作成処理部12の動作を説明するフローチャートである。図１６においてステップS41では、変更テスト仕様ファイル６を読み込む。ステップS42では、変更テスト仕様ファイル６のテストケースを修正する。分岐が追加されているなどテストケースの修正で対応できない場合は、テストケースを新規に変更テスト仕様ファイル６に追加する。そして処理を終了する。
【００４６】
以上に述べたことを綜合すると、本発明の実施形態に係るコードクローンのテスト装置は、ソースコードファイルに設定されたソースコードのコードクローンセットを、コードクローン検出ツール、例えば上述したCCFinderXなどを用いることにより検出する。そして検出したコードクローンセットのうち１つのコードクローンをテストした場合、他のコードクローンは同一ソースコードであるので既にテストされたものと見做してテストを省略することができる。また、コードクローンをした後に一部を変更して利用する場合もあり、この場合には、複数のコードクローンセットが同一順序で配列していることにより検出できる。検出する際にはコードクローンセット間のソースコード行数に閾値を設けることで意図した以外の検出を排除することができる。またマージしたコードクローンセットの場合には、一部変更した部分をテストする必要があり、テスト仕様を半自動で生成する。
【００４７】
テスト結果の設定は、当該コードクローンセットまたは当該マージしたコードクローンセットに対応するテスト仕様についてテストを実行し、ソースコードに対応するテストケ
ース番号を特定することで対応する。なお、XUNITなどのテストツールを利用することでテストの実行とカバレッジを自動的に把握することもできる。
【００４８】
マージしたコードクローンセットの一部変更した部分をテストする方法として、変更部分はコードクローンセット間のソースコードとして検出できるので、当該ソースコードがどのテスト仕様のどのテストケースであるかを把握できる。変更部分は分岐に関与しないコードと分岐を含んだコードが存在する。分岐に関与しないコードの変更部分は、テストケースの入力値または検証値の追加・削除・変更で対応できる。一方、分岐を含んだコードの変更部分は、テストケースの追加・削除・変更も含まれる。
【００４９】
分岐に関与しないコードの変更部分におけるテスト仕様のテストケースについて、対応するテストケースは、テストを実施したマージしたコードクローンセットのテストケースにより自動的に抽出することができる。当該テストケースを人手で入力値または検証値を追加・削除・変更するので半自動となる。分岐を含んだコードの変更部分におけるテスト仕様のテストケースについて、テスト仕様は自動的に抽出できるが、テストケースの追加・削除・変更を人手で行うことになり半自動となる。
【００５０】
なおコードクローンされた部分にバグが発見されて変更した場合に、当該変更部分が、マージ対象のコードクローンセット間の先のコードクローンセットの終了行と後のコードクローン開始行の間のソースコード行として容易に検出でき、変更忘れによるバグ発生を防止でき、ソフトウェア開発の品質向上に貢献することができる。
【図面の簡単な説明】
【００５１】
【図１】本発明の実施形態に係るコードクローンのテスト装置を具現するシステムの構成概要を示す図である。
【図２】本発明の実施形態に係るソースコードファイルの構成例を示す図である。
【図３】本発明の実施形態に係るコードクローン出力ファイルの構成例を示す図である。
【図４】本発明の実施形態に係るテスト結果ファイルの構成例を示す図である。
【図５】本発明の実施形態に係るテスト仕様ファイルの構成例を示す図である。
【図６】本発明の実施形態に係る変更テスト仕様ファイルの構成例を示す図である。
【図７】本発明の実施形態に係るコードクローン検出・マージ処理部のコードクローン検出処理により得られたコードクローン検出表示例を示す図である。
【図８】本発明の実施形態に係るコードクローン検出・マージ処理部のコードクローン検出・マージ処理により得られたコードクローン検出・マージ表示例を示す図である。
【図９】本発明の実施形態に係るテスト結果設定処理部によるテスト結果設定例を示す図である。
【図１０】本発明の実施形態に係るテスト結果設定処理部の設定処理により得られたテスト結果設定・表示例を示す図である。
【図１１】本発明の実施形態に係るコードクローンマージファイルの構成例を示す図である。
【図１２】本発明の実施形態に係るデータ設定処理部の動作を説明するフローチャートである。
【図１３】本発明の実施形態に係るコードクローン検出・マージ処理部の動作を説明するフローチャートである。
【図１４】本発明の実施形態に係るテスト結果設定処理部の動作を説明するフローチャートである。
【図１５】本発明の実施形態に係る変更テストケース抽出処理部の動作を説明するフローチャートである。
【図１６】本発明の実施形態に係る変更テスト仕様作成処理部の動作を説明するフローチャートである。
【符号の説明】
【００５２】
１  コードクローンテスト装置
２  ソースコードファイル
３  コードクローン出力ファイル
４  テスト結果ファイル
５  テスト仕様ファイル
６  変更テスト仕様ファイル
７  コードクローンマージファイル
８  データ設定処理部
９  コードクローン検出・マージ処理部
10  テスト結果設定処理部
11  変更テストケース抽出処理部
12  テスト結果設定処理部
100   サーバ
200   ネットワーク
300   クライアント
【図１】
2009104489.tif 000003
【図２】
2009104489.tif 000004
【図３】
2009104489.tif 000005
【図４】
2009104489.tif 000006
【図５】
2009104489.tif 000007
【図６】
2009104489.tif 000008
【図７】
2009104489.tif 000009
【図８】
2009104489.tif 000010
【図９】
2009104489.tif 000011
【図１０】
2009104489.tif 000012
【図１１】
2009104489.tif 000013
【図１２】
2009104489.tif 000014
【図１３】
2009104489.tif 000015
【図１４】
2009104489.tif 000016
【図１５】
2009104489.tif 000017
【図１６】
2009104489.tif 000018