JP2018136763A - 類似関数抽出装置および類似関数抽出プログラム - Google Patents
類似関数抽出装置および類似関数抽出プログラム Download PDFInfo
- Publication number
- JP2018136763A JP2018136763A JP2017031065A JP2017031065A JP2018136763A JP 2018136763 A JP2018136763 A JP 2018136763A JP 2017031065 A JP2017031065 A JP 2017031065A JP 2017031065 A JP2017031065 A JP 2017031065A JP 2018136763 A JP2018136763 A JP 2018136763A
- Authority
- JP
- Japan
- Prior art keywords
- similarity
- function
- inter
- test case
- file
- 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
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
Description
しかし、関数化にかかる作業コストを省くため、共通関数とすべき処理がコピーアンドペーストされ、処理の一部分が追加、変更または削除されることがある。
また、共通関数とすべき処理の洗い出しが不足してしまい、構文上の実装が異なるが内容が互いに類似する処理を共通関数とすべき処理として見つけることができず、内容が互いに類似する処理が個別に開発されてしまうことがある。
特許文献1、非特許文献1および非特許文献2には、ソースコード内で互いに類似する処理を抽出することを支援する技術が開示されている。
特許文献1は、抽象構文木ベースの検出手法を開示している。特許文献1に開示された検出手法では、ソースコードの抽象構文木が生成され、抽象構文木における部分木の類似度が計算され、類似処理が検出される。
非特許文献1は、トークンベースの検出手法を開示している。非特許文献1に開示された検出手法では、ソースコードがトークン列に変換され、トークン列の類似度が計算され、類似処理が検出される。
非特許文献2は、メモリベースの検出手法を開示している。非特許文献2に開示された検出手法では、ソースコード中の各関数が終了した時点におけるメモリについて状態の予測が行われ、メモリの状態の類似度が計算され、類似処理が抽出される。
しかし、特許文献1または非特許文献1に開示された検出手法では、構文上の実装が異なるが内容が互いに類似する処理を検出することができない。
しかし、非特許文献2に開示された検出手法では、メモリの状態の予測を行うために、プログラム全体をコンパイル可能な状態にする必要がある。そのため、準備コストが大きく、また、メモリの状態の予測にかかる計算時間が大きい。さらに、メモリにおいて起こり得る状態しか分からないため、実際の動作に応じて類似度を計算することができない。
関数間類似度ファイルとテストケース間類似度ファイルと実行結果間類似度ファイルと総合類似度パラメータとを用いて、複数の関数に含まれる関数の組毎に総合類似度を算出する総合類似度算出部を備える。
前記関数間類似度ファイルは、複数の関数に含まれる関数の組毎に関数同士の類似度である関数間類似度を示す。
前記テストケース間類似度ファイルは、前記複数の関数に対する複数のテストケースに含まれるテストケースの組毎にテストケース同士の類似度であるテストケース間類似度を示す。
前記実行結果間類似度ファイルは、前記複数のテストケースに含まれるテストケースの組毎にそれぞれのテストケースを実行して得られる実行結果同士の類似度である実行結果間類似度を示す。
前記総合類似度パラメータは、総合類似度と関数間類似度とテストケース間類似度と実行結果間類似度との関係を示す。
前記総合類似度は、テストケース間類似度と実行結果間類似度とを考慮して得られる関数間類似度である。
互いに類似する関数の組を抽出するための形態について、図1から図28に基づいて説明する。
図1に基づいて、類似関数抽出装置100の構成を説明する。
類似関数抽出装置100は、プロセッサ901とメモリ902と補助記憶装置903と入出力インタフェース904といったハードウェアを備えるコンピュータである。これらのハードウェアは、信号線を介して互いに接続されている。
メモリ902は揮発性の記憶装置である。メモリ902は、主記憶装置またはメインメモリとも呼ばれる。例えば、メモリ902はRAM(Random Access Memory)である。メモリ902に記憶されたデータは必要に応じて補助記憶装置903に保存される。
補助記憶装置903は不揮発性の記憶装置である。例えば、補助記憶装置903は、ROM(Read Only Memory)、HDD(Hard Disk Drive)、またはフラッシュメモリである。補助記憶装置903に記憶されたデータは必要に応じてメモリ902にロードされる。
類似関数抽出装置100は、テストケース特徴抽出部131とテストケース間類似度算出部132といったソフトウェア要素を備える。
類似関数抽出装置100は、テスト実行部141と実行結果間類似度算出部142といったソフトウェア要素を備える。
類似関数抽出装置100は、総合類似度算出部150と類似特定部160といったソフトウェア要素を備える。
ソフトウェア要素はソフトウェアで実現される要素である。
さらに、補助記憶装置903にはOS(Operating System)が記憶されている。OSの少なくとも一部は、メモリ902にロードされて、プロセッサ901によって実行される。
つまり、プロセッサ901は、OSを実行しながら、類似関数抽出プログラムを実行する。
類似関数抽出プログラムを実行して得られるデータは、メモリ902、補助記憶装置903、プロセッサ901内のレジスタまたはプロセッサ901内のキャッシュメモリといった記憶装置に記憶される。
入出力インタフェース904は、ディスプレイにデータを表示する表示部192として機能する。
類似関数抽出装置100の動作は類似関数抽出方法に相当する。また、類似関数抽出方法の手順は類似関数抽出プログラムの手順に相当する。
ステップS110において、関数間類似度算出部112は、関数の組毎に関数間類似度を算出し、関数間類似度ファイルを生成する。
関数は、ソフトウェアに含まれる要素である。ソフトウェアには複数の関数が含まれる。
関数の組は、複数の関数に含まれる2つの関数から成る組み合わせである。
関数間類似度は、関数同士の類似度である。
関数間類似度ファイルは、関数の組毎に関数間類似度を示す。
ステップS111において、関数特徴抽出部111は、関数毎に関数のソースコードから関数の特徴を抽出する。関数のソースコードは、関数の内容が記述されたファイルであり、記憶部191に予め記憶されている。
例えば、関数の特徴は、関数名、論理行数およびトークンである。
関数名は、関数の名称である。
論理行数は、関数のソースコードに含まれる論理行の行数である。論理行は、空行とコメント行とを除いた行である。
トークンは、論理行に含まれる特定の要素である。
図4は、ソースコード201Aを示す。ソースコード201Aは、関数Aのソースコード201である。
図5は、ソースコード201Bを示す。ソースコード201Bは、関数Bのソースコード201である。ソースコード201Bはソースコード201A(図4参照)を用いて作成された。具体的には、ソースコード201Aの全体がコピーアンドペーストされて第12行から第14行が追加されて関数名が変更されることによって、ソースコード201Bは作成された。
つまり、関数Aおよび関数Bは互いに類似する関数である
図7は、ソースコード201Dを示す。ソースコード201Dは、関数Dのソースコード201である。ソースコード201Dはソースコード201C(図6参照)を用いて作成された。具体的には、ソースコード201Cの全体がコピーアンドペーストされて引数と戻り値とのそれぞれの型がint型からdouble型に変更されて関数名が変更されることによって、ソースコード201Dは作成された。
つまり、関数Cおよび関数Dは互いに類似する関数である。
図9は、ソースコード201Fを示す。ソースコード201Fは、関数Fのソースコード201である。ソースコード201Fはソースコード201E(図8参照)を用いて作成された。具体的には、ソースコード201Eの全体がコピーアンドペーストされてfor文がwhile文に変更されてif文およびelse文が三項演算子に変更されて関数名が変更されることによって、ソースコード201Fは作成された。
つまり、関数Eおよび関数Fは互いに類似する関数である。具体的には、関数Eおよび関数Fにおいて、処理内容が互いに類似しているが構文上の実装が互いに異なる。
関数特徴ファイル211は、図4から図9に示すソースコード201を用いて生成される関数特徴ファイルである。
関数特徴ファイル211は、関数Aから関数Fのそれぞれの関数名、論理行数およびトークン列を示している。トークン列は1つ以上のトークンである。
ステップS113において、関数間類似度算出部112は、関数特徴ファイルと関数間類似度用のパラメータファイルとを用いて、関数の組毎に関数間類似度を算出する。
関数間類似度用のパラメータファイルは、1つ以上の関数間類似度パラメータを含む。
関数間類似度パラメータは、関係式または非類似条件を示す。
関係式は、関数の組に対応する特徴の組と関数間類似度との関係を示す式である。言い換えると、関係式は、関数の組に対応する特徴の組を用いて関数間類似度を算出するために計算される式である。
非類似条件は、非類似の関数の組に対応する特徴の組が満たす条件である。
非類似の関数の組は、類似しない2つの関数である。
第1関数と第2関数との組に対応する特徴の組は、第1関数の特徴と第2関数の特徴との組である。
パラメータファイル212は、5つの関数間類似度パラメータを含んでいる。
5つの関数間類似度パラメータには優先度が昇順に設定されている。
第1行の非類似条件は、第1関数の論理行数が100未満という条件である。
第2行の非類似条件は、第2関数の論理行数が100未満という条件である。
第3行の非類似条件は、第1関数の論理行数が第2関数の論理行数の2倍以上という条件である。
第4行の非類似条件は、第2関数の論理行数が第1関数の論理行数の2倍以上という条件である。
similarity(y)は、種類yの特徴の類似度を意味する。
まず、関数間類似度算出部112は、図10の関数特徴ファイル211から、対象の関数の組に対応する特徴の組を抽出する。対象の関数の組に対応する特徴の組を対象の特徴の組という。対象の関数の組が関数Aと関数Bとの組である場合、関数間類似度算出部112は、関数Aの特徴と関数Bの特徴とを関数特徴ファイル211から抽出する。関数Aの特徴と関数Bの特徴との組が対象の特徴の組である。
次に、関数間類似度算出部112は、図11のパラメータファイル212に関数間類似度パラメータとして示される非類似条件の優先度順に、対象の特徴の組が第1行から第4行までのいずれかの非類似条件を満たすか判定する。いずれかの非類似条件が満たされた場合、関数間類似度算出部112は、その非類似条件よりも優先度が低い非類似条件の判定を行わない。
対象の特徴の組が第1行から第4行までのいずれかの非類似条件を満たす場合、関数間類似度算出部112は、対象の関数の組が非類似の関数の組であると判定する。
対象の特徴の組が第1行から第4行までのいずれの非類似条件も満たさない場合、関数間類似度算出部112は、対象の特徴の組を用いて、図11のパラメータファイル212に関数間類似度パラメータとして示される第5行の関係式を計算する。算出される値が関数間類似度である。
関数間類似度ファイル213は、図10の関数特徴ファイル211と図11のパラメータファイル212とを用いて生成される関数間類似度ファイルである。
AからFまでのアルファベットは、関数名に対応している。
バツ印が記されたセルに対応する関数の組は、非類似の関数の組である。
非類似の関数の組以外の関数の組に対応するセルに記された値は、関数間類似度である。
ステップS120において、非対象特定部120は、非対象の関数の組を特定し、非対象ファイルを生成する。
非対象ファイルは、非対象の関数の組を示す。
非対象の関数の組は、ステップS130以降の処理の対象とならない関数の組である。
具体的には、非対象の関数の組は、類似の関数の組と非類似の関数の組である。類似の関数の組は類似する2つの関数であり、非類似の関数の組は類似しない2つの関数の組である。
ステップS121において、非対象特定部120は、関数間類似度ファイルを用いて、非類似の関数の組を非対象の関数の組として特定する。
非対象特定部120は、対象の関数の組の関数間類似度が関数間類似度ファイルに登録されているか判定する。
対象の関数の組の関数間類似度が関数間類似度ファイルに登録されていない場合、非対象特定部120は、対象の関数の組が非対象の関数の組であると判定する。
非対象条件ファイルは、非対象条件を示す。
非対象条件は、非対象の関数の組が満たす関数間類似度の条件である。
まず、非対象特定部120は、対象の関数の組の関数間類似度を関数間類似度ファイルから取得する。
次に、非対象特定部120は、取得された関数間類似度が非対象条件ファイルに示されるいずれかの非対象条件を満たすか判定する。
取得された関数間類似度が非対象条件ファイルに示されるいずれかの非対象条件を満たす場合、非対象特定部120は、対象の関数の組が非対象の関数の組であると判定する。
非対象条件ファイル221は、2つの非対象条件を示している。
2つの非対象条件には優先度が昇順に設定されている。
第2行の非対象条件は、非類似の関数の組が満たす関数間類似度の条件である。具体的には、第2行の非対象条件は、関数間類似度が30未満という条件である。
非対象特定部120は、対象の関数間類似度が第1行の非対象条件を満たすか判定する。
対象の関数間類似度が第1行の非対象条件を満たす場合、非対象特定部120は、対象の関数の組が類似の関数の組であると判定する。類似の関数の組は非対象の関数の組である。
対象の関数間類似度が第1行の非対象条件を満たさない場合、非対象特定部120は、対象の関数間類似度が第2行の非対象条件を満たすか判定する。
対象の関数間類似度が第2行の非対象条件を満たす場合、非対象特定部120は、対象の関数の組が非類似の関数の組であると判定する。非類似の関数の組は非対象の関数の組である。
対象の関数間類似度が第2行の非対象条件を満たさない場合、非対象特定部120は、対象の関数の組が非対象の関数の組でないと判定する。
非対象ファイル222は、図12の関数間類似度ファイル213と図14の非対象条件ファイル221とを用いて生成される非対象ファイルである。
AからFまでのアルファベットは、関数名に対応している。
マル印またはバツ印が記されたセルに対応する関数の組は、非対象の関数の組である。
マル印が記されたセルに対応する関数の組は、類似の関数の組である。
バツ印が記されたセルに対応する関数の組は、非類似の関数の組である。
空白のセルに対応する関数の組は、非対象の関数の組ではない。
ステップS130において、テストケース間類似度算出部132は、テストケースの組毎にテストケース間類似度を算出し、テストケース間類似度ファイルを生成する。
テストケースは、関数に対するテストの内容を示す。複数の関数に対して複数のテストケースが存在する。
テストケースの組は、複数のテストケースに含まれる2つのテストケースから成る組み合わせである。
テストケース間類似度は、テストケース同士の類似度である。
テストケース間類似度ファイルは、テストケースの組毎にテストケース間類似度を示す。
ステップS131において、テストケース特徴抽出部131は、テストケース毎にテストケースのソースコードからテストケースの特徴を抽出する。テストケースのソースコードは、テストケースの内容が記述されたファイルであり、記憶部191に予め記憶されている。
例えば、テストケースの特徴は、テストケース名、入力値、期待値およびトークンである。
テストケース名は、テストケースの名称である。
入力値は、テストケースの入力となる値である。具体的には、入力値は、テストケースの変数に設定される値である。テストケースの変数は、テストケースのソースコードに含まれる変数である。例えば、テストケースの変数は、テストケースに対応する関数で使用されるグローバル変数、および、テストケースに対応する関数に受け渡される引数として用いられる変数である。
具体的には、テストケースに対応する関数は、テストケースのソースコードに記述された呼び出し文によって呼び出される関数である。
トークンは、テストケースのソースコードに含まれる特定の要素である。
図17に示すソースコード231Aは、テストケースA−1のソースコード231である。テストケースA−1は、関数Aに対応する第1テストケースである。
以下、関数xに対応する第nテストケースをテストケースx−nという。
テストケース特徴ファイル232は、図17のソースコード231Aを用いて生成されるテストケース特徴ファイルである。
テストケース特徴ファイル232は、テストケース毎にテストケース名、入力値、期待値およびトークン列を示している。トークン列は1つ以上のトークンである。
テストケースA−1以外のテストケースに関しては記載を省略している。
ステップS133において、テストケース特徴抽出部131は、テストケース毎にテストケースのソースコードからテストケース名と関数名とを抽出する。抽出される関数名はテストケースに対応する関数の名称である。
具体的には、テストケース特徴抽出部131は、テストケースのソースコードに対して静的解析を行うことによって、テストケース名と関数名とを特定する。そして、テストケース特徴抽出部131は、特定されたテストケース名と関数名とをテストケースのソースコードから抽出する。
具体的には、対応関係ファイルは、テストケース毎にテストケース名と関数名とを示す。
対応関係ファイル233は、テストケース毎にテストケース名と関数名とを示している。関数名で識別される関数は、テストケース名で識別されるテストケースに対応する関数である。
ステップS135において、テストケース間類似度算出部132は、テストケース特徴ファイルとテストケース間類似度パラメータとを用いて、テストケースの組毎にテストケース間類似度を算出する。
テストケース間類似度パラメータは、テストケースの組に対応する特徴の組とテストケース間類似度との関係を示す。
具体的には、テストケース間類似度算出部132は、非対象の関数の組に対応するテストケースの組を除いてテストケースの組毎にテストケース間類似度を示すファイルを生成する。
ステップS136で生成されるファイルがテストケース間類似度ファイルである。
テストケース間類似度パラメータ234は関係式を示している。この関係式は、テストケースの組に対応する特徴の組を用いてテストケース間類似度を算出するために計算される式である。similarity(y)は、種類yの特徴の類似度を意味する。
まず、テストケース間類似度算出部132は、図15の非対象ファイル222を参照し、空白のセルに対応する関数の組を特定する。特定される関数の組は、非対象の関数の組ではない関数の組、すなわち、対象の関数の組である。
そして、テストケース間類似度算出部132は、対象の関数の組毎に以下の処理を行う。
次に、テストケース間類似度算出部132は、図18のテストケース特徴ファイル232から、対象のテストケースの組に対応する特徴の組を抽出する。対象のテストケースの組に対応する特徴の組を対象の特徴の組という。対象のテストケースの組がテストケースA−nとテストケースB−nとの組である場合、テストケース間類似度算出部132は、テストケースA−nの特徴とテストケースB−nの特徴とをテストケース特徴ファイル232から抽出する。テストケースA−nの特徴とテストケースB−nの特徴との組が対象の特徴の組である。
そして、テストケース間類似度算出部132は、対象の特徴の組を用いて、図20のテストケース間類似度パラメータ234として示される関係式を計算する。算出される値がテストケース間類似度である。
テストケース間類似度ファイル235は、図18のテストケース特徴ファイル232と図19の対応関係ファイル233と図20のテストケース間類似度パラメータ234とを用いて算出されたテストケース間類似度を図15の非対象ファイル222に設定することによって生成されるテストケース間類似度ファイルである。
ステップS140において、実行結果間類似度算出部142は、テストケースの組毎に実行結果間類似度を算出し、実行結果間類似度ファイルを生成する。
テストケースを実行して得られる結果を実行結果という。
実行結果間類似度は、実行結果同士の類似度である。
実行結果間類似度ファイルは、テストケースの組毎に実行結果間類似度を示す。
ステップS141において、テスト実行部141は、テストケース毎にテストケースを実行する。これにより、テストケース毎に実行結果が得られる。
例えば、実行結果は、テストケース名、入力値、実績値および呼び出し履歴である。
実行結果におけるテストケース名および入力値は、実行されたテストケースの特徴におけるテストケース名および入力値と同じである。
実績値は、テストケースに対応する関数から得られた値である。
呼び出し履歴は、呼び出された関数の呼び出し順である。
実行結果ファイル241は、図17のテストケースのソースコード231Aが実行された場合に生成される実行結果ファイルである。
実行結果ファイル241は、テストケース毎にテストケース名、入力値、実績値および呼び出し履歴を示している。テストケースA−1以外のテストケースに関しては記載を省略している。
ステップS143において、実行結果間類似度算出部142は、実行結果ファイルと実行結果間類似度パラメータとを用いて、テストケースの組毎に実行結果間類似度を算出する。
実行結果間類似度パラメータは、テストケースの組に対応する実行結果の組と実行結果間類似度との関係を示す。
具体的には、実行結果間類似度算出部142は、非対象の関数の組に対応するテストケースの組を除いてテストケースの組毎に実行結果間類似度を示すファイルを生成する。
ステップS144で生成されるファイルが実行結果間類似度ファイルである。
実行結果間類似度パラメータ242は関係式を示している。この関係式は、テストケースの組に対応する実行結果の組を用いて実行結果間類似度を算出するために計算される式である。similarity(z)は、種類zの実行結果の類似度を意味する。
まず、実行結果間類似度算出部142は、図15の非対象ファイル222を参照し、空白のセルに対応する関数の組を特定する。特定される関数の組は、非対象の関数の組ではない関数の組、すなわち、対象の関数の組である。
そして、実行結果間類似度算出部142は、対象の関数の組毎に以下の処理を行う。
次に、実行結果間類似度算出部142は、図23の実行結果ファイル241から、対象のテストケースの組に対応する実行結果の組を取得する。対象のテストケースの組に対応する実行結果の組を対象の実行結果の組という。対象のテストケースの組がテストケースA−nとテストケースB−nとの組である場合、実行結果間類似度算出部142は、テストケースA−nの実行結果とテストケースB−nの実行結果とを実行結果ファイル241から取得する。テストケースA−nの実行結果とテストケースB−nの実行結果との組が対象の実行結果の組である。
そして、実行結果間類似度算出部142は、対象の実行結果の組を用いて、図24の実行結果間類似度パラメータ242として示される関係式を計算する。算出される値が実行結果間類似度である。
実行結果間類似度ファイル243は、図19の対応関係ファイル233と図23の実行結果ファイル241と図24の実行結果間類似度パラメータ242とを用いて算出された実行結果間類似度を図15の非対象ファイル222に設定することによって生成される実行結果間類似度ファイルである。
ステップS150において、総合類似度算出部150は、関数の組毎に総合類似度を算出し、総合類似度ファイルを生成する。
総合類似度は、テストケース間類似度と実行結果間類似度とを考慮して得られる関数間類似度である。
総合類似度ファイルは、関数の組毎に総合類似度を示す。
ステップS151において、総合類似度算出部150は、関数間類似度ファイルとテストケース間類似度ファイルと実行結果間類似度ファイルと総合類似度パラメータとを用いて、関数の組毎に総合類似度を算出する。
総合類似度パラメータは、関数間類似度とテストケース間類似度と実行結果間類似度と総合類似度との関係を示す。
具体的には、総合類似度算出部150は、非対象の関数の組を除いて関数の組毎に総合類似度を示すファイルを生成する。
ステップS152で生成されるファイルが総合類似度ファイルである。
総合類似度パラメータ251は関係式を示している。関係式は、関数間類似度とテストケース間類似度と実行結果間類似度とを用いて総合類似度を算出するために計算される式である。
MAX(V1,V2)はV1とV2とのうちの大きい方の値を意味する。
「関数」は関数間類似度を意味し、「テストケース」はテストケース間類似度を意味し、「実行結果」は実行結果間類似度を意味する。
まず、総合類似度算出部150は、図15の非対象ファイル222を参照し、空白のセルに対応する関数の組を特定する。特定される関数の組は、非対象の関数の組ではない関数の組、すなわち、対象の関数の組である。
そして、総合類似度算出部150は、対象の関数の組毎に以下の処理を行う。
次に、総合類似度算出部150は、図21のテストケース間類似度ファイル235から、対象の関数の組に対応するテストケース間類似度を取得する。
次に、総合類似度算出部150は、図25の実行結果間類似度ファイル243から、対象の関数の組に対応する実行結果間類似度を取得する。
そして、総合類似度算出部150は、関数間類似度とテストケース間類似度と実行結果間類似度とを用いて、図27の総合類似度パラメータ251として示される関係式を計算する。算出される値が総合類似度である。
総合類似度ファイル252は、図19の対応関係ファイル233と図12の関数間類似度ファイル213と図21のテストケース間類似度ファイル235と図25の実行結果間類似度ファイル243と図27の総合類似度パラメータ251とを用いて生成される総合類似度ファイルである。
ステップS160において、表示部192は、関数毎の総合類似度をディスプレイに表示する。具体的には、表示部192は、総合類似度ファイルをディスプレイに表示する。
具体的には、類似特定部160は、非対象ファイルを参照し、類似の関数の組を特定する。さらに、類似特定部160は、総合類似度ファイルを用いて類似条件を満たす総合類似度に対応する関数の組を特定する。特定される関数の組が類似の関数の組である。類似条件は、類似の関数の組に対応する総合類似度が満たす条件である。例えば、類似条件は、総合類似度が90以上という条件である。
実施の形態1によれば、コピーアンドペーストされて一部分が追加、変更または削除された類似処理とコピーアンドペーストされて全く変更されていない類似処理とに加えて、構文上の実装が異なるが内容が互いに類似する処理を検出することが可能となる。
また、テスト可能な状態であれば、プログラム全体をコンパイル可能な状態にする必要がないため、準備コストが小さい。
さらに、組み合わせる類似度計算それぞれに閾値または重みづけを設定することによって非類似関数および類似関数が早期に特定され、類似度を計算する時間の削減、および、類似度を計算する精度の向上を図ることができる。その結果、ソフトウェア開発が効率化され、さらに、保守性が向上する。
実施の形態において、類似関数抽出装置100の機能はハードウェアで実現してもよい。
図29に、類似関数抽出装置100の機能がハードウェアで実現される場合の構成を示す。
類似関数抽出装置100は処理回路990を備える。処理回路990はプロセッシングサーキットリともいう。
処理回路990は、関数特徴抽出部111と関数間類似度算出部112と非対象特定部120とテストケース特徴抽出部131とテストケース間類似度算出部132とテスト実行部141と実行結果間類似度算出部142と総合類似度算出部150と類似特定部160と記憶部191とを実現する専用の電子回路である。
例えば、処理回路990は、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックIC、GA、ASIC、FPGAまたはこれらの組み合わせである。GAはGate Arrayの略称であり、ASICはApplication Specific Integrated Circuitの略称であり、FPGAはField Programmable Gate Arrayの略称である。
Claims (15)
- 複数の関数に含まれる関数の組毎に関数同士の類似度である関数間類似度を示す関数間類似度ファイルと、
前記複数の関数に対する複数のテストケースに含まれるテストケースの組毎にテストケース同士の類似度であるテストケース間類似度を示すテストケース間類似度ファイルと、
前記複数のテストケースに含まれるテストケースの組毎にそれぞれのテストケースを実行して得られる実行結果同士の類似度である実行結果間類似度を示す実行結果間類似度ファイルと、
テストケース間類似度と実行結果間類似度とを考慮して得られる関数間類似度である総合類似度と関数間類似度とテストケース間類似度と実行結果間類似度との関係を示す総合類似度パラメータとを用いて、
前記複数の関数に含まれる関数の組毎に総合類似度を算出する総合類似度算出部
を備える類似関数抽出装置。 - 関数毎に関数の特徴を示す関数特徴ファイルと、関数の組に対応する特徴の組と関数間類似度との関係を示すパラメータファイルを用いて、関数の組毎に関数間類似度を算出し、前記関数間類似度ファイルを生成する関数間類似度算出部を備える
請求項1に記載の類似関数抽出装置。 - 関数毎に関数のソースコードから関数の特徴を抽出し、前記関数特徴ファイルを生成する関数特徴抽出部を備える
請求項2に記載の類似関数抽出装置。 - テストケース毎にテストケースの特徴を示すテストケース特徴ファイルと、テストケースの組に対応する特徴の組とテストケース間類似度との関係を示すテストケース間類似度パラメータとを用いて、テストケースの組毎にテストケース間類似度を算出し、前記テストケース間類似度ファイルを生成するテストケース間類似度算出部を備える
請求項2または請求項3に記載の類似関数抽出装置。 - テストケース毎にテストケースのソースコードからテストケースの特徴を抽出し、前記テストケース特徴ファイルを生成するテストケース特徴抽出部を備える
請求項4に記載の類似関数抽出装置。 - テストケース毎に実行結果を示す実行結果ファイルと、テストケースの組に対応する実行結果の組と実行結果間類似度との関係を示す実行結果間類似度パラメータとを用いて、テストケースの組毎に実行結果間類似度を算出し、前記実行結果間類似度ファイルを生成する実行結果間類似度算出部を備える
請求項4または請求項5に記載の類似関数抽出装置。 - テストケース毎にテストケースを実行し、前記実行結果ファイルを生成するテスト実行部を備える
請求項6に記載の類似関数抽出装置。 - 前記類似関数抽出装置は、非対象の関数の組が満たす関数間類似度の条件である非対象条件を示す非対象条件ファイルと、前記関数間類似度ファイルとを用いて、非対象の関数の組を特定する非対象特定部を備え、
前記テストケース間類似度算出部は、非対象の関数の組に対応するテストケースの組を除いてテストケースの組毎にテストケース間類似度を算出し、非対象の関数の組に対応するテストケースの組を除いてテストケースの組毎にテストケース間類似度を示すファイルを前記テストケース間類似度ファイルとして生成する
請求項6または請求項7に記載の類似関数抽出装置。 - 前記関数間類似度ファイルは、非類似の関数の組以外の関数の組毎に関数間類似度を示し、
前記非対象特定部は、さらに、前記関数間類似度ファイルを用いて、非類似の関数の組を非対象の関数の組として特定する
請求項8に記載の類似関数抽出装置。 - 前記パラメータファイルは、さらに、非類似の関数の組に対応する特徴の組が満たす非類似条件を示し、
前記関数間類似度算出部は、前記非類似条件に基づいて非類似の関数の組を特定し、非類似の関数の組以外の関数の組毎に関数間類似度を算出し、非類似の関数の組以外の関数の組毎に関数間類似度を示すファイルを前記関数間類似度ファイルとして生成する
請求項9に記載の類似関数抽出装置。 - 前記実行結果間類似度算出部は、非対象の関数の組に対応するテストケースの組を除いてテストケースの組毎に実行結果間類似度を算出し、非対象の関数の組に対応するテストケースの組を除いてテストケースの組毎に実行結果間類似度を示すファイルを前記実行結果間類似度ファイルとして生成する
請求項8から請求項10のいずれか1項に記載の類似関数抽出装置。 - 前記総合類似度算出部は、非対象の関数の組を除いて関数の組毎に総合類似度を算出し、非対象の関数の組を除いて関数の組毎に総合類似度を算出する
請求項8から請求項11のいずれか1項に記載の類似関数抽出装置。 - 関数の組毎の総合類似度を表示する表示部を備える
請求項1から請求項12のいずれか1項に記載の類似関数抽出装置。 - 関数の組毎の総合類似度に基づいて類似の関数の組を特定する類似特定部と、
類似の関数の組を表示する表示部とを備える
請求項1から請求項12のいずれか1項に記載の類似関数抽出装置。 - 複数の関数に含まれる関数の組毎に関数同士の類似度である関数間類似度を示す関数間類似度ファイルと、
前記複数の関数に対する複数のテストケースに含まれるテストケースの組毎にテストケース同士の類似度であるテストケース間類似度を示すテストケース間類似度ファイルと、
前記複数のテストケースに含まれるテストケースの組毎にそれぞれのテストケースを実行して得られる実行結果同士の類似度である実行結果間類似度を示す実行結果間類似度ファイルと、
テストケース間類似度と実行結果間類似度とを考慮して得られる関数間類似度である総合類似度と関数間類似度とテストケース間類似度と実行結果間類似度との関係を示す総合類似度パラメータとを用いて、
前記複数の関数に含まれる関数の組毎に総合類似度を算出する総合類似度算出部
としてコンピュータを機能させるための類似関数抽出プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017031065A JP6789844B2 (ja) | 2017-02-22 | 2017-02-22 | 類似関数抽出装置および類似関数抽出プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017031065A JP6789844B2 (ja) | 2017-02-22 | 2017-02-22 | 類似関数抽出装置および類似関数抽出プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2018136763A true JP2018136763A (ja) | 2018-08-30 |
JP6789844B2 JP6789844B2 (ja) | 2020-11-25 |
Family
ID=63366831
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017031065A Active JP6789844B2 (ja) | 2017-02-22 | 2017-02-22 | 類似関数抽出装置および類似関数抽出プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6789844B2 (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101996009B1 (ko) * | 2018-11-22 | 2019-07-03 | 넷마블 주식회사 | 테스트케이스 작성 지원 방법 및 이를 수행하는 서버 및 사용자 단말 |
CN114385492A (zh) * | 2021-12-30 | 2022-04-22 | 大连理工大学 | 一种基于差分测试的高级综合工具优化选项缺陷检测方法 |
JP7290784B1 (ja) | 2022-04-18 | 2023-06-13 | 中国長江三峡集団有限公司 | コード類似性に基づくファジーテスト方法、装置及び記憶媒体 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08241193A (ja) * | 1995-01-17 | 1996-09-17 | At & T Corp | コード・セグメント解析方法。 |
JP2009266045A (ja) * | 2008-04-26 | 2009-11-12 | Fujitsu Ltd | テスト仕様作成支援プログラム及びテスト仕様作成支援方法 |
JP2012256220A (ja) * | 2011-06-09 | 2012-12-27 | Nec Corp | 判定作業支援システム、判定作業支援方法、及びプログラム |
JP2014134956A (ja) * | 2013-01-10 | 2014-07-24 | Nec Corp | 障害分析支援装置、障害分析支援方法、及びプログラム |
-
2017
- 2017-02-22 JP JP2017031065A patent/JP6789844B2/ja active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08241193A (ja) * | 1995-01-17 | 1996-09-17 | At & T Corp | コード・セグメント解析方法。 |
JP2009266045A (ja) * | 2008-04-26 | 2009-11-12 | Fujitsu Ltd | テスト仕様作成支援プログラム及びテスト仕様作成支援方法 |
JP2012256220A (ja) * | 2011-06-09 | 2012-12-27 | Nec Corp | 判定作業支援システム、判定作業支援方法、及びプログラム |
JP2014134956A (ja) * | 2013-01-10 | 2014-07-24 | Nec Corp | 障害分析支援装置、障害分析支援方法、及びプログラム |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101996009B1 (ko) * | 2018-11-22 | 2019-07-03 | 넷마블 주식회사 | 테스트케이스 작성 지원 방법 및 이를 수행하는 서버 및 사용자 단말 |
CN114385492A (zh) * | 2021-12-30 | 2022-04-22 | 大连理工大学 | 一种基于差分测试的高级综合工具优化选项缺陷检测方法 |
JP7290784B1 (ja) | 2022-04-18 | 2023-06-13 | 中国長江三峡集団有限公司 | コード類似性に基づくファジーテスト方法、装置及び記憶媒体 |
JP2023158623A (ja) * | 2022-04-18 | 2023-10-30 | 中国長江三峡集団有限公司 | コード類似性に基づくファジーテスト方法、装置及び記憶媒体 |
Also Published As
Publication number | Publication date |
---|---|
JP6789844B2 (ja) | 2020-11-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8762912B2 (en) | Tiered schematic-driven layout synchronization in electronic design automation | |
US9177096B2 (en) | Timing closure using transistor sizing in standard cells | |
Zhang et al. | Fault localization based only on failed runs | |
US11321510B2 (en) | Systems and methods for machine intelligence based malicious design alteration insertion | |
JP6789844B2 (ja) | 類似関数抽出装置および類似関数抽出プログラム | |
JP2009129127A (ja) | プログラムの不変物抽出処理プログラム,処理装置,および処理方法,ならびに該プログラムを記憶する記憶媒体 | |
US20190272158A1 (en) | Program code generation apparatus | |
JP6847330B2 (ja) | アタックツリー生成装置、アタックツリー生成方法およびアタックツリー生成プログラム | |
Avetisyan et al. | LLVM-based code clone detection framework | |
US20150100929A1 (en) | Reverse synthesis of digital netlists | |
WO2019102786A1 (ja) | ソースコード分割装置、ソースコード解析装置、ソースコード分割方法及びソースコード分割プログラム | |
JP6559376B2 (ja) | テストケース選択装置およびテストケース選択プログラム | |
US8595665B2 (en) | Guiding design actions for complex failure modes | |
WO2018154657A1 (ja) | 等価性検証装置および等価性検証プログラム | |
JPWO2019142266A1 (ja) | テストケース生成装置、テストケース生成方法およびテストケース生成プログラム | |
US8949766B2 (en) | Detecting corresponding paths in combinationally equivalent circuit designs | |
Hashemi et al. | Graph centrality algorithms for hardware trojan detection at gate-level netlists | |
Huang et al. | A Hardware Trojan Trigger Localization Method in RTL based on Control Flow Features | |
JP6547345B2 (ja) | テストケース生成プログラム、テストケース生成方法およびテストケース生成装置 | |
US20210326130A1 (en) | Scale calculation apparatus and computer readable medium | |
JP7315023B2 (ja) | ルール生成装置およびルール生成プログラム | |
JP2006268165A (ja) | 集積回路のタイミング解析装置、集積回路のタイミング最適化装置、集積回路のタイミング解析方法、集積回路のタイミング最適化方法、集積回路基板の製造方法、制御プログラムおよび可読記録媒体 | |
JP6242170B2 (ja) | 回路設計支援装置及びプログラム | |
US8539403B2 (en) | Reducing observability of memory elements in circuits | |
McKendrick et al. | Leveraging FPGA primitives to improve word reconstruction during netlist reverse engineering |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20190919 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20200811 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20200812 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20200902 |
|
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: 20201006 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20201104 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6789844 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |