(57)【要約】【課題】互いに類似する関数の組をより正確に抽出できるようにする。【解決手段】関数間類似度算出部１１２は、関数の組毎に関数間類似度を示す関数間類似度ファイルを生成する。テストケース間類似度算出部１３２は、テストケースの組毎にテストケース間類似度を示すテストケース間類似度ファイルを生成する。実行結果間類似度算出部１４２は、テストケースの組毎に実行結果間類似度を示す実行結果間類似度ファイルを生成する。総合類似度算出部１５０は、これらのファイルと総合類似度パラメータとを用いて、関数の組毎に総合類似度を算出する。【選択図】図１
2018136763.tif 000002
【特許請求の範囲】
【請求項１】
複数の関数に含まれる関数の組毎に関数同士の類似度である関数間類似度を示す関数間類似度ファイルと、
前記複数の関数に対する複数のテストケースに含まれるテストケースの組毎にテストケース同士の類似度であるテストケース間類似度を示すテストケース間類似度ファイルと、
前記複数のテストケースに含まれるテストケースの組毎にそれぞれのテストケースを実行して得られる実行結果同士の類似度である実行結果間類似度を示す実行結果間類似度ファイルと、
テストケース間類似度と実行結果間類似度とを考慮して得られる関数間類似度である総合類似度と関数間類似度とテストケース間類似度と実行結果間類似度との関係を示す総合類似度パラメータとを用いて、
前記複数の関数に含まれる関数の組毎に総合類似度を算出する総合類似度算出部
を備える類似関数抽出装置。
【請求項２】
関数毎に関数の特徴を示す関数特徴ファイルと、関数の組に対応する特徴の組と関数間類似度との関係を示すパラメータファイルを用いて、関数の組毎に関数間類似度を算出し、前記関数間類似度ファイルを生成する関数間類似度算出部を備える
請求項１に記載の類似関数抽出装置。
【請求項３】
関数毎に関数のソースコードから関数の特徴を抽出し、前記関数特徴ファイルを生成する関数特徴抽出部を備える
請求項２に記載の類似関数抽出装置。
【請求項４】
テストケース毎にテストケースの特徴を示すテストケース特徴ファイルと、テストケースの組に対応する特徴の組とテストケース間類似度との関係を示すテストケース間類似度パラメータとを用いて、テストケースの組毎にテストケース間類似度を算出し、前記テストケース間類似度ファイルを生成するテストケース間類似度算出部を備える
請求項２または請求項３に記載の類似関数抽出装置。
【請求項５】
テストケース毎にテストケースのソースコードからテストケースの特徴を抽出し、前記テストケース特徴ファイルを生成するテストケース特徴抽出部を備える
請求項４に記載の類似関数抽出装置。
【請求項６】
テストケース毎に実行結果を示す実行結果ファイルと、テストケースの組に対応する実行結果の組と実行結果間類似度との関係を示す実行結果間類似度パラメータとを用いて、テストケースの組毎に実行結果間類似度を算出し、前記実行結果間類似度ファイルを生成する実行結果間類似度算出部を備える
請求項４または請求項５に記載の類似関数抽出装置。
【請求項７】
テストケース毎にテストケースを実行し、前記実行結果ファイルを生成するテスト実行部を備える
請求項６に記載の類似関数抽出装置。
【請求項８】
前記類似関数抽出装置は、非対象の関数の組が満たす関数間類似度の条件である非対象条件を示す非対象条件ファイルと、前記関数間類似度ファイルとを用いて、非対象の関数の組を特定する非対象特定部を備え、
前記テストケース間類似度算出部は、非対象の関数の組に対応するテストケースの組を除いてテストケースの組毎にテストケース間類似度を算出し、非対象の関数の組に対応するテストケースの組を除いてテストケースの組毎にテストケース間類似度を示すファイルを前記テストケース間類似度ファイルとして生成する
請求項６または請求項７に記載の類似関数抽出装置。
【請求項９】
前記関数間類似度ファイルは、非類似の関数の組以外の関数の組毎に関数間類似度を示し、
前記非対象特定部は、さらに、前記関数間類似度ファイルを用いて、非類似の関数の組を非対象の関数の組として特定する
請求項８に記載の類似関数抽出装置。
【請求項１０】
前記パラメータファイルは、さらに、非類似の関数の組に対応する特徴の組が満たす非類似条件を示し、
前記関数間類似度算出部は、前記非類似条件に基づいて非類似の関数の組を特定し、非類似の関数の組以外の関数の組毎に関数間類似度を算出し、非類似の関数の組以外の関数の組毎に関数間類似度を示すファイルを前記関数間類似度ファイルとして生成する
請求項９に記載の類似関数抽出装置。
【請求項１１】
前記実行結果間類似度算出部は、非対象の関数の組に対応するテストケースの組を除いてテストケースの組毎に実行結果間類似度を算出し、非対象の関数の組に対応するテストケースの組を除いてテストケースの組毎に実行結果間類似度を示すファイルを前記実行結果間類似度ファイルとして生成する
請求項８から請求項１０のいずれか１項に記載の類似関数抽出装置。
【請求項１２】
前記総合類似度算出部は、非対象の関数の組を除いて関数の組毎に総合類似度を算出し、非対象の関数の組を除いて関数の組毎に総合類似度を算出する
請求項８から請求項１１のいずれか１項に記載の類似関数抽出装置。
【請求項１３】
関数の組毎の総合類似度を表示する表示部を備える
請求項１から請求項１２のいずれか１項に記載の類似関数抽出装置。
【請求項１４】
関数の組毎の総合類似度に基づいて類似の関数の組を特定する類似特定部と、
類似の関数の組を表示する表示部とを備える
請求項１から請求項１２のいずれか１項に記載の類似関数抽出装置。
【請求項１５】
複数の関数に含まれる関数の組毎に関数同士の類似度である関数間類似度を示す関数間類似度ファイルと、
前記複数の関数に対する複数のテストケースに含まれるテストケースの組毎にテストケース同士の類似度であるテストケース間類似度を示すテストケース間類似度ファイルと、
前記複数のテストケースに含まれるテストケースの組毎にそれぞれのテストケースを実行して得られる実行結果同士の類似度である実行結果間類似度を示す実行結果間類似度ファイルと、
テストケース間類似度と実行結果間類似度とを考慮して得られる関数間類似度である総合類似度と関数間類似度とテストケース間類似度と実行結果間類似度との関係を示す総合類似度パラメータとを用いて、
前記複数の関数に含まれる関数の組毎に総合類似度を算出する総合類似度算出部
としてコンピュータを機能させるための類似関数抽出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、類似関数を抽出する技術に関するものである。
【背景技術】
【０００２】
ソフトウェアの開発において、開発効率の向上および保守性の向上を図るため、一般的に、ソースコード内で互いに共通する処理が関数化されている。関数化によって得られた共通関数はライブラリにまとめられる。
しかし、関数化にかかる作業コストを省くため、共通関数とすべき処理がコピーアンドペーストされ、処理の一部分が追加、変更または削除されることがある。
また、共通関数とすべき処理の洗い出しが不足してしまい、構文上の実装が異なるが内容が互いに類似する処理を共通関数とすべき処理として見つけることができず、内容が互いに類似する処理が個別に開発されてしまうことがある。
【０００３】
肥大化したソースコードをスリム化してソフトウェアの保守性を高めることを目的として、ソースコードから互いに類似する処理を抽出する技術が従来から知られている。
特許文献１、非特許文献１および非特許文献２には、ソースコード内で互いに類似する処理を抽出することを支援する技術が開示されている。
特許文献１は、抽象構文木ベースの検出手法を開示している。特許文献１に開示された検出手法では、ソースコードの抽象構文木が生成され、抽象構文木における部分木の類似度が計算され、類似処理が検出される。
非特許文献１は、トークンベースの検出手法を開示している。非特許文献１に開示された検出手法では、ソースコードがトークン列に変換され、トークン列の類似度が計算され、類似処理が検出される。
非特許文献２は、メモリベースの検出手法を開示している。非特許文献２に開示された検出手法では、ソースコード中の各関数が終了した時点におけるメモリについて状態の予測が行われ、メモリの状態の類似度が計算され、類似処理が抽出される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−０１８６９３号公報
【非特許文献】
【０００５】
【非特許文献１】神谷  年洋、“ＣＣＦｉｎｄｅｒＸ”、［ｏｎｌｉｎｅ］、平成２０年１１月１６日、大阪大学大学院情報科学研究科井上研究室、［平成２７年１２月２７日検索］、インターネット（ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｃｃｆｉｎｄｅｒ．ｎｅｔ／ｃｃｆｉｎｄｅｒｘ−ｊ．ｈｔｍｌ）
【非特許文献２】Ｈ．Ｋｉｍ，Ｙ．Ｊｕｎｇ，Ｓ．Ｋｉｍ，ａｎｄ  Ｋ．Ｙｉ、「Ｍｅｃｃ：ｍｅｍｏｒｙ  ｃｏｍｐａｒｉｓｏｎ−ｂａｓｅｄ  ｃｌｏｎｅ  ｄｅｔｅｃｔｏｒ」、Ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  ３３ｒｄ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｃｏｎｆｅｒｅｎｃｅ  ｏｎ  Ｓｏｆｔｗａｒｅ  Ｅｎｇｉｎｅｅｒｉｎｇ、ＩＣＳＥ’１１、ｐ．  ３０１−３１０
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１または非特許文献１に開示された検出手法により、コピーアンドペーストされて一部分が追加、変更または削除された類似処理およびコピーアンドペーストされて全く変更されていない類似処理を検出することが可能である。
しかし、特許文献１または非特許文献１に開示された検出手法では、構文上の実装が異なるが内容が互いに類似する処理を検出することができない。
【０００７】
非特許文献２に開示された検出手法により、コピーアンドペーストされて一部分が追加、変更または削除された類似処理とコピーアンドペーストされて全く変更されていない類似処理とに加えて、構文上の実装が異なるが内容が互いに類似する処理を検出することが可能である。
しかし、非特許文献２に開示された検出手法では、メモリの状態の予測を行うために、プログラム全体をコンパイル可能な状態にする必要がある。そのため、準備コストが大きく、また、メモリの状態の予測にかかる計算時間が大きい。さらに、メモリにおいて起こり得る状態しか分からないため、実際の動作に応じて類似度を計算することができない。
【０００８】
本発明は、互いに類似する関数の組をより正確に抽出できるようにすることを目的とする。
【課題を解決するための手段】
【０００９】
本発明の類似関数抽出装置は、
関数間類似度ファイルとテストケース間類似度ファイルと実行結果間類似度ファイルと総合類似度パラメータとを用いて、複数の関数に含まれる関数の組毎に総合類似度を算出する総合類似度算出部を備える。
前記関数間類似度ファイルは、複数の関数に含まれる関数の組毎に関数同士の類似度である関数間類似度を示す。
前記テストケース間類似度ファイルは、前記複数の関数に対する複数のテストケースに含まれるテストケースの組毎にテストケース同士の類似度であるテストケース間類似度を示す。
前記実行結果間類似度ファイルは、前記複数のテストケースに含まれるテストケースの組毎にそれぞれのテストケースを実行して得られる実行結果同士の類似度である実行結果間類似度を示す。
前記総合類似度パラメータは、総合類似度と関数間類似度とテストケース間類似度と実行結果間類似度との関係を示す。
前記総合類似度は、テストケース間類似度と実行結果間類似度とを考慮して得られる関数間類似度である。
【発明の効果】
【００１０】
本発明によれば、関数の組毎に関数間類似度とテストケース間類似度と実行結果間類似度と用いて総合類似度が算出される。そのため、互いに類似する関数の組をより正確に抽出することが可能となる。
【図面の簡単な説明】
【００１１】
【図１】実施の形態１における類似関数抽出装置１００の構成図。
【図２】実施の形態１における類似関数抽出方法のフローチャート。
【図３】実施の形態１における関数間類似度ファイルの生成（Ｓ１１０）のフローチャート。
【図４】実施の形態１におけるソースコード２０１Ａを示す図。
【図５】実施の形態１におけるソースコード２０１Ｂを示す図。
【図６】実施の形態１におけるソースコード２０１Ｃを示す図。
【図７】実施の形態１におけるソースコード２０１Ｄを示す図。
【図８】実施の形態１におけるソースコード２０１Ｅを示す図。
【図９】実施の形態１におけるソースコード２０１Ｆを示す図。
【図１０】実施の形態１における関数特徴ファイル２１１を示す図。
【図１１】実施の形態１におけるパラメータファイル２１２を示す図。
【図１２】実施の形態１における関数間類似度ファイル２１３を示す図。
【図１３】実施の形態１における非対象ファイルの生成（Ｓ１２０）のフローチャート。
【図１４】実施の形態１における非対象条件ファイル２２１を示す図。
【図１５】実施の形態１における非対象ファイル２２２を示す図。
【図１６】実施の形態１におけるテストケース間類似度ファイルの生成（Ｓ１３０）のフローチャート。
【図１７】実施の形態１におけるソースコード２３１Ａを示す図。
【図１８】実施の形態１におけるテストケース特徴ファイル２３２を示す図。
【図１９】実施の形態１における対応関係ファイル２３３を示す図。
【図２０】実施の形態１におけるテストケース間類似度パラメータ２３４を示す図。
【図２１】実施の形態１におけるテストケース間類似度ファイル２３５を示す図。
【図２２】実施の形態１における実行結果間類似度ファイルの生成（Ｓ１４０）を示す図。
【図２３】実施の形態１における実行結果ファイル２４１を示す図。
【図２４】実施の形態１における実行結果間類似度パラメータ２４２を示す図。
【図２５】実施の形態１における実行結果間類似度ファイル２４３を示す図。
【図２６】実施の形態１における総合類似度ファイルの生成（Ｓ１５０）のフローチャート。
【図２７】実施の形態１における総合類似度パラメータ２５１を示す図。
【図２８】実施の形態１における総合類似度ファイル２５２を示す図。
【図２９】実施の形態における類似関数抽出装置１００のハードウェア構成図。
【発明を実施するための形態】
【００１２】
実施の形態および図面において、同じ要素および対応する要素には同じ符号を付している。同じ符号が付された要素の説明は適宜に省略または簡略化する。図中の矢印はデータの流れ又は処理の流れを主に示している。
【００１３】
実施の形態１．
互いに類似する関数の組を抽出するための形態について、図１から図２８に基づいて説明する。
【００１４】
＊＊＊構成の説明＊＊＊
図１に基づいて、類似関数抽出装置１００の構成を説明する。
類似関数抽出装置１００は、プロセッサ９０１とメモリ９０２と補助記憶装置９０３と入出力インタフェース９０４といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
【００１５】
プロセッサ９０１は、演算処理を行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）であり、他のハードウェアを制御する。例えば、プロセッサ９０１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、またはＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
メモリ９０２は揮発性の記憶装置である。メモリ９０２は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ９０２はＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。メモリ９０２に記憶されたデータは必要に応じて補助記憶装置９０３に保存される。
補助記憶装置９０３は不揮発性の記憶装置である。例えば、補助記憶装置９０３は、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）、またはフラッシュメモリである。補助記憶装置９０３に記憶されたデータは必要に応じてメモリ９０２にロードされる。
【００１６】
入出力インタフェース９０４は入力装置および出力装置が接続されるポートである。例えば、入出力インタフェース９０４はＵＳＢ端子であり、入力装置はキーボードおよびマウスであり、出力装置はディスプレイである。ＵＳＢはＵｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓの略称である。
【００１７】
類似関数抽出装置１００は、関数特徴抽出部１１１と関数間類似度算出部１１２と非対象特定部１２０といったソフトウェア要素を備える。
類似関数抽出装置１００は、テストケース特徴抽出部１３１とテストケース間類似度算出部１３２といったソフトウェア要素を備える。
類似関数抽出装置１００は、テスト実行部１４１と実行結果間類似度算出部１４２といったソフトウェア要素を備える。
類似関数抽出装置１００は、総合類似度算出部１５０と類似特定部１６０といったソフトウェア要素を備える。
ソフトウェア要素はソフトウェアで実現される要素である。
【００１８】
補助記憶装置９０３には、関数特徴抽出部１１１と関数間類似度算出部１１２と非対象特定部１２０とテストケース特徴抽出部１３１とテストケース間類似度算出部１３２とテスト実行部１４１と実行結果間類似度算出部１４２と総合類似度算出部１５０と類似特定部１６０としてコンピュータを機能させるための類似関数抽出プログラムが記憶されている。類似関数抽出プログラムは、メモリ９０２にロードされて、プロセッサ９０１によって実行される。
さらに、補助記憶装置９０３にはＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が記憶されている。ＯＳの少なくとも一部は、メモリ９０２にロードされて、プロセッサ９０１によって実行される。
つまり、プロセッサ９０１は、ＯＳを実行しながら、類似関数抽出プログラムを実行する。
類似関数抽出プログラムを実行して得られるデータは、メモリ９０２、補助記憶装置９０３、プロセッサ９０１内のレジスタまたはプロセッサ９０１内のキャッシュメモリといった記憶装置に記憶される。
【００１９】
メモリ９０２はデータを記憶する記憶部１９１として機能する。但し、他の記憶装置が、メモリ９０２の代わりに、又は、メモリ９０２と共に、記憶部１９１として機能してもよい。
入出力インタフェース９０４は、ディスプレイにデータを表示する表示部１９２として機能する。
【００２０】
類似関数抽出装置１００は、プロセッサ９０１を代替する複数のプロセッサを備えてもよい。複数のプロセッサは、プロセッサ９０１の役割を分担する。
【００２１】
類似関数抽出プログラムは、磁気ディスク、光ディスクまたはフラッシュメモリ等の不揮発性の記憶媒体にコンピュータ読み取り可能に記憶することができる。不揮発性の記憶媒体は、一時的でない有形の媒体である。
【００２２】
＊＊＊動作の説明＊＊＊
類似関数抽出装置１００の動作は類似関数抽出方法に相当する。また、類似関数抽出方法の手順は類似関数抽出プログラムの手順に相当する。
【００２３】
図２に基づいて、類似関数抽出方法を説明する。
ステップＳ１１０において、関数間類似度算出部１１２は、関数の組毎に関数間類似度を算出し、関数間類似度ファイルを生成する。
関数は、ソフトウェアに含まれる要素である。ソフトウェアには複数の関数が含まれる。
関数の組は、複数の関数に含まれる２つの関数から成る組み合わせである。
関数間類似度は、関数同士の類似度である。
関数間類似度ファイルは、関数の組毎に関数間類似度を示す。
【００２４】
図３に基づいて、関数間類似度ファイルの生成（Ｓ１１０）の手順を説明する。
ステップＳ１１１において、関数特徴抽出部１１１は、関数毎に関数のソースコードから関数の特徴を抽出する。関数のソースコードは、関数の内容が記述されたファイルであり、記憶部１９１に予め記憶されている。
【００２５】
具体的には、関数特徴抽出部１１１は、関数のソースコードに対して静的解析を行うことによって、関数の特徴を特定する。そして、関数特徴抽出部１１１は、特定された関数の特徴を関数のソースコードから抽出する。
例えば、関数の特徴は、関数名、論理行数およびトークンである。
関数名は、関数の名称である。
論理行数は、関数のソースコードに含まれる論理行の行数である。論理行は、空行とコメント行とを除いた行である。
トークンは、論理行に含まれる特定の要素である。
【００２６】
ステップＳ１１２において、関数特徴抽出部１１１は、関数毎に関数の特徴を示すファイルを生成する。生成されるファイルを関数特徴ファイルという。
【００２７】
図４から図９に、関数のソースコード２０１の具体例を示す。
図４は、ソースコード２０１Ａを示す。ソースコード２０１Ａは、関数Ａのソースコード２０１である。
図５は、ソースコード２０１Ｂを示す。ソースコード２０１Ｂは、関数Ｂのソースコード２０１である。ソースコード２０１Ｂはソースコード２０１Ａ（図４参照）を用いて作成された。具体的には、ソースコード２０１Ａの全体がコピーアンドペーストされて第１２行から第１４行が追加されて関数名が変更されることによって、ソースコード２０１Ｂは作成された。
つまり、関数Ａおよび関数Ｂは互いに類似する関数である
【００２８】
図６は、ソースコード２０１Ｃを示す。ソースコード２０１Ｃは、関数Ｃのソースコード２０１である。
図７は、ソースコード２０１Ｄを示す。ソースコード２０１Ｄは、関数Ｄのソースコード２０１である。ソースコード２０１Ｄはソースコード２０１Ｃ（図６参照）を用いて作成された。具体的には、ソースコード２０１Ｃの全体がコピーアンドペーストされて引数と戻り値とのそれぞれの型がｉｎｔ型からｄｏｕｂｌｅ型に変更されて関数名が変更されることによって、ソースコード２０１Ｄは作成された。
つまり、関数Ｃおよび関数Ｄは互いに類似する関数である。
【００２９】
図８は、ソースコード２０１Ｅを示す。ソースコード２０１Ｅは、関数Ｅのソースコード２０１である。
図９は、ソースコード２０１Ｆを示す。ソースコード２０１Ｆは、関数Ｆのソースコード２０１である。ソースコード２０１Ｆはソースコード２０１Ｅ（図８参照）を用いて作成された。具体的には、ソースコード２０１Ｅの全体がコピーアンドペーストされてｆｏｒ文がｗｈｉｌｅ文に変更されてｉｆ文およびｅｌｓｅ文が三項演算子に変更されて関数名が変更されることによって、ソースコード２０１Ｆは作成された。
つまり、関数Ｅおよび関数Ｆは互いに類似する関数である。具体的には、関数Ｅおよび関数Ｆにおいて、処理内容が互いに類似しているが構文上の実装が互いに異なる。
【００３０】
図１０に、関数特徴ファイル２１１を示す。
関数特徴ファイル２１１は、図４から図９に示すソースコード２０１を用いて生成される関数特徴ファイルである。
関数特徴ファイル２１１は、関数Ａから関数Ｆのそれぞれの関数名、論理行数およびトークン列を示している。トークン列は１つ以上のトークンである。
【００３１】
図３に戻り、ステップＳ１１３から説明を続ける。
ステップＳ１１３において、関数間類似度算出部１１２は、関数特徴ファイルと関数間類似度用のパラメータファイルとを用いて、関数の組毎に関数間類似度を算出する。
関数間類似度用のパラメータファイルは、１つ以上の関数間類似度パラメータを含む。
関数間類似度パラメータは、関係式または非類似条件を示す。
関係式は、関数の組に対応する特徴の組と関数間類似度との関係を示す式である。言い換えると、関係式は、関数の組に対応する特徴の組を用いて関数間類似度を算出するために計算される式である。
非類似条件は、非類似の関数の組に対応する特徴の組が満たす条件である。
非類似の関数の組は、類似しない２つの関数である。
第１関数と第２関数との組に対応する特徴の組は、第１関数の特徴と第２関数の特徴との組である。
【００３２】
具体的には、関数間類似度算出部１１２は、非類似条件に基づいて非類似の関数の組を特定し、非類似の関数の組以外の関数の組毎に関数間類似度を算出する。
【００３３】
ステップＳ１１４において、関数間類似度算出部１１２は、非類似の関数の組毎に関数間類似度を示すファイルを生成する。生成されるファイルが関数間類似度ファイルである。
【００３４】
図１１に、パラメータファイル２１２を示す。パラメータファイル２１２は、関数間類似度用のパラメータファイルの具体例である。
パラメータファイル２１２は、５つの関数間類似度パラメータを含んでいる。
５つの関数間類似度パラメータには優先度が昇順に設定されている。
【００３５】
第１行から第４行までの関数間類似度パラメータは、非類似条件を示している。関数の組において、一方の関数を第１関数といい、他方の関数を第２関数という。
第１行の非類似条件は、第１関数の論理行数が１００未満という条件である。
第２行の非類似条件は、第２関数の論理行数が１００未満という条件である。
第３行の非類似条件は、第１関数の論理行数が第２関数の論理行数の２倍以上という条件である。
第４行の非類似条件は、第２関数の論理行数が第１関数の論理行数の２倍以上という条件である。
【００３６】
第５行の関数間類似度パラメータは、関係式を示している。
ｓｉｍｉｌａｒｉｔｙ（ｙ）は、種類ｙの特徴の類似度を意味する。
【００３７】
例えば、関数間類似度算出部１１２は、関数の組毎に関数間類似度を以下のように算出する。関数間類似度を算出する対象となる関数の組を対象の関数の組という。
まず、関数間類似度算出部１１２は、図１０の関数特徴ファイル２１１から、対象の関数の組に対応する特徴の組を抽出する。対象の関数の組に対応する特徴の組を対象の特徴の組という。対象の関数の組が関数Ａと関数Ｂとの組である場合、関数間類似度算出部１１２は、関数Ａの特徴と関数Ｂの特徴とを関数特徴ファイル２１１から抽出する。関数Ａの特徴と関数Ｂの特徴との組が対象の特徴の組である。
次に、関数間類似度算出部１１２は、図１１のパラメータファイル２１２に関数間類似度パラメータとして示される非類似条件の優先度順に、対象の特徴の組が第１行から第４行までのいずれかの非類似条件を満たすか判定する。いずれかの非類似条件が満たされた場合、関数間類似度算出部１１２は、その非類似条件よりも優先度が低い非類似条件の判定を行わない。
対象の特徴の組が第１行から第４行までのいずれかの非類似条件を満たす場合、関数間類似度算出部１１２は、対象の関数の組が非類似の関数の組であると判定する。
対象の特徴の組が第１行から第４行までのいずれの非類似条件も満たさない場合、関数間類似度算出部１１２は、対象の特徴の組を用いて、図１１のパラメータファイル２１２に関数間類似度パラメータとして示される第５行の関係式を計算する。算出される値が関数間類似度である。
【００３８】
図１２に、関数間類似度ファイル２１３を示す。
関数間類似度ファイル２１３は、図１０の関数特徴ファイル２１１と図１１のパラメータファイル２１２とを用いて生成される関数間類似度ファイルである。
ＡからＦまでのアルファベットは、関数名に対応している。
バツ印が記されたセルに対応する関数の組は、非類似の関数の組である。
非類似の関数の組以外の関数の組に対応するセルに記された値は、関数間類似度である。
【００３９】
図２に戻り、ステップＳ１２０から説明を続ける。
ステップＳ１２０において、非対象特定部１２０は、非対象の関数の組を特定し、非対象ファイルを生成する。
非対象ファイルは、非対象の関数の組を示す。
非対象の関数の組は、ステップＳ１３０以降の処理の対象とならない関数の組である。
具体的には、非対象の関数の組は、類似の関数の組と非類似の関数の組である。類似の関数の組は類似する２つの関数であり、非類似の関数の組は類似しない２つの関数の組である。
【００４０】
図１３に基づいて、非対象ファイルの生成（Ｓ１２０）の手順を説明する。
ステップＳ１２１において、非対象特定部１２０は、関数間類似度ファイルを用いて、非類似の関数の組を非対象の関数の組として特定する。
【００４１】
具体的には、非対象特定部１２０は、対象の関数の組が非対象の関数の組であるか以下のように判定する。
非対象特定部１２０は、対象の関数の組の関数間類似度が関数間類似度ファイルに登録されているか判定する。
対象の関数の組の関数間類似度が関数間類似度ファイルに登録されていない場合、非対象特定部１２０は、対象の関数の組が非対象の関数の組であると判定する。
【００４２】
ステップＳ１２２において、非対象特定部１２０は、関数間類似度ファイルと非対象条件ファイルとを用いて、非対象の関数の組を特定する。
非対象条件ファイルは、非対象条件を示す。
非対象条件は、非対象の関数の組が満たす関数間類似度の条件である。
【００４３】
具体的には、非対象特定部１２０は、対象の関数の組が非対象の関数の組であるか以下のように判定する。
まず、非対象特定部１２０は、対象の関数の組の関数間類似度を関数間類似度ファイルから取得する。
次に、非対象特定部１２０は、取得された関数間類似度が非対象条件ファイルに示されるいずれかの非対象条件を満たすか判定する。
取得された関数間類似度が非対象条件ファイルに示されるいずれかの非対象条件を満たす場合、非対象特定部１２０は、対象の関数の組が非対象の関数の組であると判定する。
【００４４】
ステップＳ１２３において、非対象特定部１２０は、非対象の関数の組を示すファイルを生成する。生成されるファイルが非対象ファイルである。
【００４５】
図１４に、非対象条件ファイル２２１を示す。非対象条件ファイル２２１は、非対象条件ファイルの具体例である。
非対象条件ファイル２２１は、２つの非対象条件を示している。
２つの非対象条件には優先度が昇順に設定されている。
【００４６】
第１行の非対象条件は、類似の関数の組が満たす関数間類似度の条件である。具体的には、第１行の非対象条件は、関数間類似度が９０以上という条件である。
第２行の非対象条件は、非類似の関数の組が満たす関数間類似度の条件である。具体的には、第２行の非対象条件は、関数間類似度が３０未満という条件である。
【００４７】
例えば、非対象特定部１２０は、関数の組毎に、図１４の非対象条件ファイル２２１に基づいて以下のように動作する。対象の関数の組の関数間類似度を対象の関数間類似度という。
非対象特定部１２０は、対象の関数間類似度が第１行の非対象条件を満たすか判定する。
対象の関数間類似度が第１行の非対象条件を満たす場合、非対象特定部１２０は、対象の関数の組が類似の関数の組であると判定する。類似の関数の組は非対象の関数の組である。
対象の関数間類似度が第１行の非対象条件を満たさない場合、非対象特定部１２０は、対象の関数間類似度が第２行の非対象条件を満たすか判定する。
対象の関数間類似度が第２行の非対象条件を満たす場合、非対象特定部１２０は、対象の関数の組が非類似の関数の組であると判定する。非類似の関数の組は非対象の関数の組である。
対象の関数間類似度が第２行の非対象条件を満たさない場合、非対象特定部１２０は、対象の関数の組が非対象の関数の組でないと判定する。
【００４８】
図１５に、非対象ファイル２２２を示す。
非対象ファイル２２２は、図１２の関数間類似度ファイル２１３と図１４の非対象条件ファイル２２１とを用いて生成される非対象ファイルである。
ＡからＦまでのアルファベットは、関数名に対応している。
マル印またはバツ印が記されたセルに対応する関数の組は、非対象の関数の組である。
マル印が記されたセルに対応する関数の組は、類似の関数の組である。
バツ印が記されたセルに対応する関数の組は、非類似の関数の組である。
空白のセルに対応する関数の組は、非対象の関数の組ではない。
【００４９】
アルファベットとハイフンと数字との組み合わせ（例えば、Ａ−１）は、テストケースの名称に対応している。テストケースについては後述する。
【００５０】
図２に戻り、ステップＳ１３０から説明を続ける。
ステップＳ１３０において、テストケース間類似度算出部１３２は、テストケースの組毎にテストケース間類似度を算出し、テストケース間類似度ファイルを生成する。
テストケースは、関数に対するテストの内容を示す。複数の関数に対して複数のテストケースが存在する。
テストケースの組は、複数のテストケースに含まれる２つのテストケースから成る組み合わせである。
テストケース間類似度は、テストケース同士の類似度である。
テストケース間類似度ファイルは、テストケースの組毎にテストケース間類似度を示す。
【００５１】
図１６に基づいて、テストケース間類似度ファイルの生成（Ｓ１３０）の手順を説明する。
ステップＳ１３１において、テストケース特徴抽出部１３１は、テストケース毎にテストケースのソースコードからテストケースの特徴を抽出する。テストケースのソースコードは、テストケースの内容が記述されたファイルであり、記憶部１９１に予め記憶されている。
【００５２】
具体的には、テストケース特徴抽出部１３１は、テストケースのソースコードに対して静的解析を行うことによって、テストケースの特徴を特定する。そして、テストケース特徴抽出部１３１は、特定されたテストケースの特徴をテストケースのソースコードから抽出する。
例えば、テストケースの特徴は、テストケース名、入力値、期待値およびトークンである。
テストケース名は、テストケースの名称である。
入力値は、テストケースの入力となる値である。具体的には、入力値は、テストケースの変数に設定される値である。テストケースの変数は、テストケースのソースコードに含まれる変数である。例えば、テストケースの変数は、テストケースに対応する関数で使用されるグローバル変数、および、テストケースに対応する関数に受け渡される引数として用いられる変数である。
【００５３】
テストケースに対応する関数は、テストケースによるテストの対象となる関数である。
具体的には、テストケースに対応する関数は、テストケースのソースコードに記述された呼び出し文によって呼び出される関数である。
【００５４】
期待値は、テストケースに対応する関数から得られる値として正しい値である。
トークンは、テストケースのソースコードに含まれる特定の要素である。
【００５５】
ステップＳ１３２において、テストケース特徴抽出部１３１は、テストケース毎にテストケースの特徴を示すファイルを生成する。生成されるファイルをテストケース特徴ファイルという。
【００５６】
図１７に、テストケースのソースコード２３１の具体例を示す。
図１７に示すソースコード２３１Ａは、テストケースＡ−１のソースコード２３１である。テストケースＡ−１は、関数Ａに対応する第１テストケースである。
以下、関数ｘに対応する第ｎテストケースをテストケースｘ−ｎという。
【００５７】
図１８に、テストケース特徴ファイル２３２を示す。
テストケース特徴ファイル２３２は、図１７のソースコード２３１Ａを用いて生成されるテストケース特徴ファイルである。
テストケース特徴ファイル２３２は、テストケース毎にテストケース名、入力値、期待値およびトークン列を示している。トークン列は１つ以上のトークンである。
テストケースＡ−１以外のテストケースに関しては記載を省略している。
【００５８】
図１６に戻り、ステップＳ１３３から説明を続ける。
ステップＳ１３３において、テストケース特徴抽出部１３１は、テストケース毎にテストケースのソースコードからテストケース名と関数名とを抽出する。抽出される関数名はテストケースに対応する関数の名称である。
具体的には、テストケース特徴抽出部１３１は、テストケースのソースコードに対して静的解析を行うことによって、テストケース名と関数名とを特定する。そして、テストケース特徴抽出部１３１は、特定されたテストケース名と関数名とをテストケースのソースコードから抽出する。
【００５９】
ステップＳ１３４において、テストケース特徴抽出部１３１は、テストケースと関数とが互いに対応付けられたファイルを生成する。生成されるファイルを対応関係ファイルという。
具体的には、対応関係ファイルは、テストケース毎にテストケース名と関数名とを示す。
【００６０】
図１９に、対応関係ファイル２３３を示す。対応関係ファイル２３３は、対応関係ファイルの具体例である。
対応関係ファイル２３３は、テストケース毎にテストケース名と関数名とを示している。関数名で識別される関数は、テストケース名で識別されるテストケースに対応する関数である。
【００６１】
図１６に戻り、ステップＳ１３５から説明を続ける。
ステップＳ１３５において、テストケース間類似度算出部１３２は、テストケース特徴ファイルとテストケース間類似度パラメータとを用いて、テストケースの組毎にテストケース間類似度を算出する。
テストケース間類似度パラメータは、テストケースの組に対応する特徴の組とテストケース間類似度との関係を示す。
【００６２】
具体的には、テストケース間類似度算出部１３２は、非対象ファイルを用いて非対象の関数の組を特定し、非対象の関数の組に対応するテストケースの組を除いてテストケースの組毎にテストケース間類似度を算出する。
【００６３】
ステップＳ１３６において、テストケース間類似度算出部１３２は、テストケースの組毎にテストケース間類似度を示すファイルを生成する。
具体的には、テストケース間類似度算出部１３２は、非対象の関数の組に対応するテストケースの組を除いてテストケースの組毎にテストケース間類似度を示すファイルを生成する。
ステップＳ１３６で生成されるファイルがテストケース間類似度ファイルである。
【００６４】
図２０に、テストケース間類似度パラメータ２３４を示す。テストケース間類似度パラメータ２３４はテストケース間類似度パラメータの具体例である。
テストケース間類似度パラメータ２３４は関係式を示している。この関係式は、テストケースの組に対応する特徴の組を用いてテストケース間類似度を算出するために計算される式である。ｓｉｍｉｌａｒｉｔｙ（ｙ）は、種類ｙの特徴の類似度を意味する。
【００６５】
例えば、テストケース間類似度算出部１３２は、非対象の関数の組に対応するテストケースの組を除いてテストケースの組毎にテストケース間類似度を以下のように算出する。
まず、テストケース間類似度算出部１３２は、図１５の非対象ファイル２２２を参照し、空白のセルに対応する関数の組を特定する。特定される関数の組は、非対象の関数の組ではない関数の組、すなわち、対象の関数の組である。
そして、テストケース間類似度算出部１３２は、対象の関数の組毎に以下の処理を行う。
【００６６】
まず、テストケース間類似度算出部１３２は、図１９の対応関係ファイル２３３を用いて、対象の関数の組に対応するテストケースの組を特定する。対象の関数の組に対応するテストケースの組を対象のテストケースの組という。対象の関数の組が関数Ａと関数Ｂとの組である場合、テストケース間類似度算出部１３２は、関数Ａに対応付けられたテストケース名（テストケースＡ−ｎ）と関数Ｂに対応付けられたテストケース名（テストケースＢ−ｎ）とを対応関係ファイル２３３から抽出する。ｎは１または２である。テストケースＡ−ｎとテストケースＢ−ｎとの組が、対象のテストケースの組である。
次に、テストケース間類似度算出部１３２は、図１８のテストケース特徴ファイル２３２から、対象のテストケースの組に対応する特徴の組を抽出する。対象のテストケースの組に対応する特徴の組を対象の特徴の組という。対象のテストケースの組がテストケースＡ−ｎとテストケースＢ−ｎとの組である場合、テストケース間類似度算出部１３２は、テストケースＡ−ｎの特徴とテストケースＢ−ｎの特徴とをテストケース特徴ファイル２３２から抽出する。テストケースＡ−ｎの特徴とテストケースＢ−ｎの特徴との組が対象の特徴の組である。
そして、テストケース間類似度算出部１３２は、対象の特徴の組を用いて、図２０のテストケース間類似度パラメータ２３４として示される関係式を計算する。算出される値がテストケース間類似度である。
【００６７】
図２１に、テストケース間類似度ファイル２３５を示す。
テストケース間類似度ファイル２３５は、図１８のテストケース特徴ファイル２３２と図１９の対応関係ファイル２３３と図２０のテストケース間類似度パラメータ２３４とを用いて算出されたテストケース間類似度を図１５の非対象ファイル２２２に設定することによって生成されるテストケース間類似度ファイルである。
【００６８】
図２に戻り、ステップＳ１４０から説明を続ける。
ステップＳ１４０において、実行結果間類似度算出部１４２は、テストケースの組毎に実行結果間類似度を算出し、実行結果間類似度ファイルを生成する。
テストケースを実行して得られる結果を実行結果という。
実行結果間類似度は、実行結果同士の類似度である。
実行結果間類似度ファイルは、テストケースの組毎に実行結果間類似度を示す。
【００６９】
図２２に基づいて、実行結果間類似度ファイルの生成（Ｓ１４０）の手順を説明する。
ステップＳ１４１において、テスト実行部１４１は、テストケース毎にテストケースを実行する。これにより、テストケース毎に実行結果が得られる。
例えば、実行結果は、テストケース名、入力値、実績値および呼び出し履歴である。
実行結果におけるテストケース名および入力値は、実行されたテストケースの特徴におけるテストケース名および入力値と同じである。
実績値は、テストケースに対応する関数から得られた値である。
呼び出し履歴は、呼び出された関数の呼び出し順である。
【００７０】
ステップＳ１４２において、テスト実行部１４１は、テストケース毎に実行結果を示すファイルを生成する。生成されるファイルを実行結果ファイルという。
【００７１】
図２３に、実行結果ファイル２４１を示す。
実行結果ファイル２４１は、図１７のテストケースのソースコード２３１Ａが実行された場合に生成される実行結果ファイルである。
実行結果ファイル２４１は、テストケース毎にテストケース名、入力値、実績値および呼び出し履歴を示している。テストケースＡ−１以外のテストケースに関しては記載を省略している。
【００７２】
図２２に戻り、ステップＳ１４３から説明を続ける。
ステップＳ１４３において、実行結果間類似度算出部１４２は、実行結果ファイルと実行結果間類似度パラメータとを用いて、テストケースの組毎に実行結果間類似度を算出する。
実行結果間類似度パラメータは、テストケースの組に対応する実行結果の組と実行結果間類似度との関係を示す。
【００７３】
具体的には、実行結果間類似度算出部１４２は、非対象ファイルを用いて非対象の関数の組を特定し、非対象の関数の組に対応するテストケースの組を除いてテストケースの組毎に実行結果間類似度を算出する。
【００７４】
ステップＳ１４４において、実行結果間類似度算出部１４２は、テストケースの組毎に実行結果間類似度を示すファイルを生成する。
具体的には、実行結果間類似度算出部１４２は、非対象の関数の組に対応するテストケースの組を除いてテストケースの組毎に実行結果間類似度を示すファイルを生成する。
ステップＳ１４４で生成されるファイルが実行結果間類似度ファイルである。
【００７５】
図２４に、実行結果間類似度パラメータ２４２を示す。実行結果間類似度パラメータ２４２は実行結果間類似度パラメータの具体例である。
実行結果間類似度パラメータ２４２は関係式を示している。この関係式は、テストケースの組に対応する実行結果の組を用いて実行結果間類似度を算出するために計算される式である。ｓｉｍｉｌａｒｉｔｙ（ｚ）は、種類ｚの実行結果の類似度を意味する。
【００７６】
例えば、実行結果間類似度算出部１４２は、非対象の関数の組に対応するテストケースの組を除いてテストケースの組毎に実行結果間類似度を以下のように算出する。
まず、実行結果間類似度算出部１４２は、図１５の非対象ファイル２２２を参照し、空白のセルに対応する関数の組を特定する。特定される関数の組は、非対象の関数の組ではない関数の組、すなわち、対象の関数の組である。
そして、実行結果間類似度算出部１４２は、対象の関数の組毎に以下の処理を行う。
【００７７】
まず、実行結果間類似度算出部１４２は、図１９の対応関係ファイル２３３を用いて、対象の関数の組に対応するテストケースの組を特定する。対象の関数の組に対応するテストケースの組を対象のテストケースの組という。対象の関数の組が関数Ａと関数Ｂとの組である場合、実行結果間類似度算出部１４２は、関数Ａに対応付けられたテストケース名（テストケースＡ−ｎ）と関数Ｂに対応付けられたテストケース名（テストケースＢ−ｎ）とを対応関係ファイル２３３から抽出する。ｎは１または２である。テストケースＡ−ｎとテストケースＢ−ｎとの組が、対象のテストケースの組である。
次に、実行結果間類似度算出部１４２は、図２３の実行結果ファイル２４１から、対象のテストケースの組に対応する実行結果の組を取得する。対象のテストケースの組に対応する実行結果の組を対象の実行結果の組という。対象のテストケースの組がテストケースＡ−ｎとテストケースＢ−ｎとの組である場合、実行結果間類似度算出部１４２は、テストケースＡ−ｎの実行結果とテストケースＢ−ｎの実行結果とを実行結果ファイル２４１から取得する。テストケースＡ−ｎの実行結果とテストケースＢ−ｎの実行結果との組が対象の実行結果の組である。
そして、実行結果間類似度算出部１４２は、対象の実行結果の組を用いて、図２４の実行結果間類似度パラメータ２４２として示される関係式を計算する。算出される値が実行結果間類似度である。
【００７８】
図２５に、実行結果間類似度ファイル２４３を示す。
実行結果間類似度ファイル２４３は、図１９の対応関係ファイル２３３と図２３の実行結果ファイル２４１と図２４の実行結果間類似度パラメータ２４２とを用いて算出された実行結果間類似度を図１５の非対象ファイル２２２に設定することによって生成される実行結果間類似度ファイルである。
【００７９】
図２に戻り、ステップＳ１５０から説明を続ける。
ステップＳ１５０において、総合類似度算出部１５０は、関数の組毎に総合類似度を算出し、総合類似度ファイルを生成する。
総合類似度は、テストケース間類似度と実行結果間類似度とを考慮して得られる関数間類似度である。
総合類似度ファイルは、関数の組毎に総合類似度を示す。
【００８０】
図２６に基づいて、総合類似度ファイルの生成（ステップＳ１５０）の手順を説明する。
ステップＳ１５１において、総合類似度算出部１５０は、関数間類似度ファイルとテストケース間類似度ファイルと実行結果間類似度ファイルと総合類似度パラメータとを用いて、関数の組毎に総合類似度を算出する。
総合類似度パラメータは、関数間類似度とテストケース間類似度と実行結果間類似度と総合類似度との関係を示す。
【００８１】
具体的には、総合類似度算出部１５０は、非対象の関数の組を除いて関数の組毎に総合類似度を算出する。
【００８２】
ステップＳ１５２において、総合類似度算出部１５０は、関数の組毎に総合類似度を示すファイルを生成する。
具体的には、総合類似度算出部１５０は、非対象の関数の組を除いて関数の組毎に総合類似度を示すファイルを生成する。
ステップＳ１５２で生成されるファイルが総合類似度ファイルである。
【００８３】
図２７に、総合類似度パラメータ２５１を示す。総合類似度パラメータ２５１は総合類似度パラメータの具体例である。
総合類似度パラメータ２５１は関係式を示している。関係式は、関数間類似度とテストケース間類似度と実行結果間類似度とを用いて総合類似度を算出するために計算される式である。
ＭＡＸ（Ｖ１，Ｖ２）はＶ１とＶ２とのうちの大きい方の値を意味する。
「関数」は関数間類似度を意味し、「テストケース」はテストケース間類似度を意味し、「実行結果」は実行結果間類似度を意味する。
【００８４】
例えば、総合類似度算出部１５０は、非対象の関数の組を除いて関数の組毎に総合類似度を以下のように算出する。
まず、総合類似度算出部１５０は、図１５の非対象ファイル２２２を参照し、空白のセルに対応する関数の組を特定する。特定される関数の組は、非対象の関数の組ではない関数の組、すなわち、対象の関数の組である。
そして、総合類似度算出部１５０は、対象の関数の組毎に以下の処理を行う。
【００８５】
まず、総合類似度算出部１５０は、図１２の関数間類似度ファイル２１３から、対象の関数の組に対応する関数間類似度を取得する。
次に、総合類似度算出部１５０は、図２１のテストケース間類似度ファイル２３５から、対象の関数の組に対応するテストケース間類似度を取得する。
次に、総合類似度算出部１５０は、図２５の実行結果間類似度ファイル２４３から、対象の関数の組に対応する実行結果間類似度を取得する。
そして、総合類似度算出部１５０は、関数間類似度とテストケース間類似度と実行結果間類似度とを用いて、図２７の総合類似度パラメータ２５１として示される関係式を計算する。算出される値が総合類似度である。
【００８６】
図２８に、総合類似度ファイル２５２を示す。
総合類似度ファイル２５２は、図１９の対応関係ファイル２３３と図１２の関数間類似度ファイル２１３と図２１のテストケース間類似度ファイル２３５と図２５の実行結果間類似度ファイル２４３と図２７の総合類似度パラメータ２５１とを用いて生成される総合類似度ファイルである。
【００８７】
図２に戻り、ステップＳ１６０を説明する。
ステップＳ１６０において、表示部１９２は、関数毎の総合類似度をディスプレイに表示する。具体的には、表示部１９２は、総合類似度ファイルをディスプレイに表示する。
【００８８】
また、類似特定部１６０は、非対象ファイルと総合類似度ファイルとを用いて類似の関数の組を特定し、表示部１９２は類似の関数の組をディスプレイに表示する。
具体的には、類似特定部１６０は、非対象ファイルを参照し、類似の関数の組を特定する。さらに、類似特定部１６０は、総合類似度ファイルを用いて類似条件を満たす総合類似度に対応する関数の組を特定する。特定される関数の組が類似の関数の組である。類似条件は、類似の関数の組に対応する総合類似度が満たす条件である。例えば、類似条件は、総合類似度が９０以上という条件である。
【００８９】
＊＊＊実施の形態１の効果＊＊＊
実施の形態１によれば、コピーアンドペーストされて一部分が追加、変更または削除された類似処理とコピーアンドペーストされて全く変更されていない類似処理とに加えて、構文上の実装が異なるが内容が互いに類似する処理を検出することが可能となる。
また、テスト可能な状態であれば、プログラム全体をコンパイル可能な状態にする必要がないため、準備コストが小さい。
さらに、組み合わせる類似度計算それぞれに閾値または重みづけを設定することによって非類似関数および類似関数が早期に特定され、類似度を計算する時間の削減、および、類似度を計算する精度の向上を図ることができる。その結果、ソフトウェア開発が効率化され、さらに、保守性が向上する。
【００９０】
＊＊＊実施の形態の補足＊＊＊
実施の形態において、類似関数抽出装置１００の機能はハードウェアで実現してもよい。
図２９に、類似関数抽出装置１００の機能がハードウェアで実現される場合の構成を示す。
類似関数抽出装置１００は処理回路９９０を備える。処理回路９９０はプロセッシングサーキットリともいう。
処理回路９９０は、関数特徴抽出部１１１と関数間類似度算出部１１２と非対象特定部１２０とテストケース特徴抽出部１３１とテストケース間類似度算出部１３２とテスト実行部１４１と実行結果間類似度算出部１４２と総合類似度算出部１５０と類似特定部１６０と記憶部１９１とを実現する専用の電子回路である。
例えば、処理回路９９０は、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ、ＡＳＩＣ、ＦＰＧＡまたはこれらの組み合わせである。ＧＡはＧａｔｅ  Ａｒｒａｙの略称であり、ＡＳＩＣはＡｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔの略称であり、ＦＰＧＡはＦｉｅｌｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙの略称である。
【００９１】
類似関数抽出装置１００は、処理回路９９０を代替する複数の処理回路を備えてもよい。複数の処理回路は、処理回路９９０の役割を分担する。
【００９２】
実施の形態は、好ましい形態の例示であり、本発明の技術的範囲を制限することを意図するものではない。実施の形態は、部分的に実施してもよいし、他の形態と組み合わせて実施してもよい。フローチャート等を用いて説明した手順は、適宜に変更してもよい。
【符号の説明】
【００９３】
１００  類似関数抽出装置、１１１  関数特徴抽出部、１１２  関数間類似度算出部、１２０  非対象特定部、１３１  テストケース特徴抽出部、１３２  テストケース間類似度算出部、１４１  テスト実行部、１４２  実行結果間類似度算出部、１５０  総合類似度算出部、１６０  類似特定部、１９１  記憶部、２０１  ソースコード、２１１  関数特徴ファイル、２１２  パラメータファイル、２１３  関数間類似度ファイル、２２１  非対象条件ファイル、２２２  非対象ファイル、２３１  ソースコード、２３２  テストケース特徴ファイル、２３３  対応関係ファイル、２３４  テストケース間類似度パラメータ、２３５  テストケース間類似度ファイル、２４１  実行結果ファイル、２４２  実行結果間類似度パラメータ、２４３  実行結果間類似度ファイル、２５１  総合類似度パラメータ、２５２  総合類似度ファイル、９０１  プロセッサ、９０２  メモリ、９０３  補助記憶装置、９０４  入出力インタフェース、９９０  処理回路。
【図１】
2018136763.tif 000003
【図２】
2018136763.tif 000004
【図３】
2018136763.tif 000005
【図４】
2018136763.tif 000006
【図５】
2018136763.tif 000007
【図６】
2018136763.tif 000008
【図７】
2018136763.tif 000009
【図８】
2018136763.tif 000010
【図９】
2018136763.tif 000011
【図１０】
2018136763.tif 000012
【図１１】
2018136763.tif 000013
【図１２】
2018136763.tif 000014
【図１３】
2018136763.tif 000015
【図１４】
2018136763.tif 000016
【図１５】
2018136763.tif 000017
【図１６】
2018136763.tif 000018
【図１７】
2018136763.tif 000019
【図１８】
2018136763.tif 000020
【図１９】
2018136763.tif 000021
【図２０】
2018136763.tif 000022
【図２１】
2018136763.tif 000023
【図２２】
2018136763.tif 000024
【図２３】
2018136763.tif 000025
【図２４】
2018136763.tif 000026
【図２５】
2018136763.tif 000027
【図２６】
2018136763.tif 000028
【図２７】
2018136763.tif 000029
【図２８】
2018136763.tif 000030
【図２９】
2018136763.tif 000031