JP6971835B2 - 要素類似判定装置、要素類似判定方法及び要素類似判定プログラム - Google Patents
要素類似判定装置、要素類似判定方法及び要素類似判定プログラム Download PDFInfo
- Publication number
- JP6971835B2 JP6971835B2 JP2017248674A JP2017248674A JP6971835B2 JP 6971835 B2 JP6971835 B2 JP 6971835B2 JP 2017248674 A JP2017248674 A JP 2017248674A JP 2017248674 A JP2017248674 A JP 2017248674A JP 6971835 B2 JP6971835 B2 JP 6971835B2
- Authority
- JP
- Japan
- Prior art keywords
- evaluation value
- function
- name
- target
- word
- 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.)
- Active
Links
Images
Landscapes
- Stored Programmes (AREA)
Description
特許文献1には、関数の記述文字列と、関数内に存在する要素の名称と、関数の構文と、関数メトリクスといった情報を比較して、類似性がある関数をコードクローンとして検出することが記載されている。
この発明は、ソースコードにおける要素の類似性を適切に評価可能にすることを目的とする。
ソースコードに含まれる各関数で、対象とする複数の要素それぞれが使用されるか否かに応じて、前記各関数について要素毎の要素評価値を計算する要素評価値計算部と、
前記各関数で、対象とする複数の要素それぞれの名称の一部を含む名称の要素が使用されるか否かに応じて、前記各関数について要素毎の名称評価値を計算する名称評価値計算部と、
前記要素評価値計算部によって計算された前記要素評価値と、前記名称評価値計算部によって計算された前記名称評価値とに基づき、前記複数の要素間の類似度を計算する結果統合部と
を備える。
***構成の説明***
図1を参照して、実施の形態1に係る要素類似判定装置10の構成を説明する。
要素類似判定装置10は、コンピュータである。
要素類似判定装置10は、プロセッサ11と、メモリ12と、ストレージ13と、通信インタフェース14とのハードウェアを備える。プロセッサ11は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
ストレージ13には、要素類似判定装置10の各機能構成要素の機能を実現するプログラムが格納されている。このプログラムは、プロセッサ11によりメモリ12に読み込まれ、プロセッサ11によって実行される。これにより、要素類似判定装置10の各機能構成要素の機能が実現される。
要素評価値計算部21は、ソースコード構造分析情報31と、評価対象要素群32とを入力として、要素関連度一覧表33を生成する。
要素評価値計算部21は、機能構成要素として、直接/間接カウント計算部211と、要素カウント計算部212と、要素統合評価計算部213とを備える。
名称評価値計算部22は、ソースコード構造分析情報31と、評価対象要素群32とを入力として、名称関連度一覧表34を生成する。
名称評価値計算部22は、機能構成要素として、ワード群抽出部221と、単独ワード群抽出部222と、ワード重み群抽出部223と、ワードカウント計算部224と、関数内ワード群抽出部225と、ワード重み計算部226と、名称統合評価値計算部227とを備える。
結果統合部23は、要素関連度一覧表33と、名称関連度一覧表34とを入力として、評価一覧表35を生成する。
結果統合部23は、要素関連性評価値群計算部231と、関連性評価値計算部232と、ベクトル類似度計算部233とを備える。
ソースコード構造分析情報31は、ソースコードの解析ツール等により取得される情報である。ソースコード構造分析情報31は、ソースコードに含まれる各要素311と各関数314とについての情報である。
各要素311は、構造名称312と、名称313とを含む。構造名称312は、要素311を一意に特定する文字列であり、要素311を持つオブジェクト等の名称である。名称313は、要素311そのものを表す文字列であり、異なる要素311又は関数314が同一の名称を持つことがありえる。
各関数314は、構造名称315と、名称316と、使用要素317と、呼出し関数318とを含む。構造名称315は、関数314を一意に特定する文字列であり、関数314を持つオブジェクト等の名称である。名称316は、関数314そのものを表す文字列であり、異なる関数314又は要素311が同一の名称を持つことがありえる。使用要素317は、関数314で使用される要素311の情報を0個以上並べたものである。使用要素317において、同一の要素311の重複はありえるものとする。つまり、1つの関数314において同一の要素311を複数回使用している場合、使用要素317においても同一の要素311が複数個存在する。呼出し関数318は、関数314で呼び出される他の関数314の情報を0個以上並べたものである。使用要素317において、同一の要素311の重複がありえることと同様に、呼出し関数318において、同一の関数314の重複はありえるものとする。
評価対象要素群32は、複数の評価対象要素を含む。評価対象要素は、類似性を評価する対象の要素である。評価対象要素群32は、各評価対象要素について、構造名称312を含む。
要素関連度一覧表33は、評価対象要素群32が示す各評価対象要素を対象の要素として、対象の要素について関数毎に、直接使用カウントと、間接使用カウントと、要素評価値とを含む。
直接使用カウントは、対象の関数で対象の要素が直接使用される回数である。間接使用カウントは、対象の関数から呼び出された他の関数で対象の要素が間接的に使用される回数である。要素評価値は、直接使用カウントと間接使用カウントとに基づき計算された評価値である。
名称関連度一覧表34は、評価対象要素群32が示す各評価対象要素を対象の要素として、対象の要素の名称を分解したワードについて、関数毎に、ワード使用カウントと、名称評価値とを含む。
ワード使用カウントは、対象の関数で対象のワードが使用される回数である。名称評価値は、対象の要素の名称が分解されたワードについてのワード使用カウントに基づき計算された評価値である。
評価対象要素群32が示す各評価対象要素間の類似度を示す。各評価対象要素間の類似度は、要素関連度一覧表33が示す要素評価値と、名称関連度一覧表34が示す名称評価値とから計算される。
図10から図33を参照して、実施の形態1に係る要素類似判定装置10の動作を説明する。
実施の形態1に係る要素類似判定装置10の動作は、実施の形態1に係る要素類似判定方法に相当する。また、実施の形態1に係る要素類似判定装置10の動作は、実施の形態1に係る要素類似判定プログラムの処理に相当する。
図10に示す処理を実行することにより、要素評価値計算部21は、ソースコードに含まれる各関数で、対象とする複数の要素それぞれが使用されるか否かに応じて、各関数について要素毎の要素評価値を計算する。具体的には、要素評価値計算部21は、評価対象要素群32が示す各評価対象要素を対象の要素として、各関数で対象の要素が使用される要素使用回数に応じて、各関数についての対象の要素の要素評価値を計算する。
要素評価値計算部21は、ソースコード構造分析情報31におけるj番目の関数を対象の関数とし、評価対象要素群32におけるi番目の要素を対象の要素として、直接/間接カウント計算部211を呼び出し、直接使用カウント(xi,j,0)と、間接使用カウント(xi,j,1)とを特定する。
要素評価値計算部21は、要素カウント計算部212を呼び出し、ステップS11で特定された直接使用カウント(xi,j,0)及び間接使用カウント(xi,j,1)から、要素評価値(yi,j)を計算する。
ここでは、要素評価値計算部21は、要素統合評価計算部213により、数11に示すように、要素評価値(yi,j)を計算する。
要素評価値計算部21は、全ての関数についてステップS11及びステップS12の処理が実行されたか否かを判定する。関数とは、ソースコード構造分析情報31が示す関数314のことである。
要素評価値計算部21は、全ての関数について処理が実行された場合には、処理をステップS14に進める。一方、要素評価値計算部21は、処理が実行されていない関数が残っている場合には、変数jに1を加算した上で、処理をステップS11に戻す。
要素評価値計算部21は、全ての対象の要素についてステップS11及びステップS12の処理が実行されたか否かを判定する。対象の要素とは、評価対象要素群32が示す評価対象要素である。
要素評価値計算部21は、全ての対象の要素について処理が実行された場合には、処理をステップS15に進める。一方、要素評価値計算部21は、処理が実行されていない対象の要素が残っている場合には、変数iに1を加算し、変数jに1を設定した上で、処理をステップS11に戻す。
要素評価値計算部21は、各関数及び対象の各要素について、ステップS11で特定された直接使用カウント及び間接使用カウントと、ステップS12で計算された要素評価値とを要素関連度一覧表33としてメモリ12又はストレージ13に書き込む。
直接/間接カウント計算部211は、図10のステップS11で呼び出される。
直接/間接カウント計算部211は、要素カウント計算部212を呼び出し、対象の関数及び対象の要素について、要素使用カウントを特定する。直接/間接カウント計算部211は、特定された要素使用カウントを、対象の関数及び対象の要素についての直接使用カウントとしてメモリ12に書き込む。対象の関数及び対象の要素とは、図10のステップS11で指定されている変数jが示す関数及び変数iが示す要素である。
直接/間接カウント計算部211は、要素カウント計算部212を呼び出し、対象の関数においてi番目に呼び出される関数と、対象の要素とについて、要素使用カウントを特定する。
直接/間接カウント計算部211は、ステップS22で特定された要素使用カウントを、対象の関数及び対象の要素についての間接使用カウントに加算する。なお、図11に示す処理における間接使用カウントは、初期値として0が設定されメモリ12に記憶されている。
直接/間接カウント計算部211は、対象の関数において呼び出される全ての呼出し関数についてステップS22及びステップS23の処理が実行されたか否かを判定する。
直接/間接カウント計算部211は、全ての呼出し関数について処理が実行された場合には、処理を終了する。一方、直接/間接カウント計算部211は、処理が実行されていない呼出し関数が残っている場合には、変数iに1を加算した上で、処理をステップS22に戻す。
要素カウント計算部212は、図11のステップS21及びステップS22で呼び出される。
要素カウント計算部212は、対象の関数におけるi番目の要素が、対象の要素と一致するか否かを判定する。対象の関数及び対象の要素は、要素カウント計算部212の呼出し元である図11のステップS21で直接使用カウントの特定対象となっている関数及び要素、又は、ステップS22で間接使用カウントの特定対象となっている関数及び要素である。
要素カウント計算部212は、一致する場合には、処理をステップS32に進める。一方、要素カウント計算部212は、一致しない場合には、処理をステップS33に進める。
要素カウント計算部212は、要素使用カウントに1を加算する。なお、図12に示す処理における要素使用カウントは、初期値として0が設定されメモリ12に記憶されている。
要素カウント計算部212は、対象の関数で使用される全ての要素について、ステップS31で処理が実行されたか否かを判定する。
要素カウント計算部212は、全ての要素について処理が実行された場合には、処理を終了する。一方、要素カウント計算部212は、処理が実行されていない要素が残っている場合には、変数iに1を加算した上で、処理をステップS31に戻す。
図10のステップS11が対象の関数をRefreshProductとし、対象の要素をptrProduct−>ProductNameとして処理が実行されたとする。
すると、図13に示すように、図11のステップS21で実行される図12のステップ31からステップS33で、対象の関数をRefreshProductにおいて使用される各要素について順に、対象の要素であるptrProduct−>ProductNameと一致するか否かが判定される。図13では、対象の関数をRefreshProductにおいて1箇所でptrProduct−>ProductNameが使用されている。そのため、図14に示すように、対象の関数がRefreshProductであり、対象の要素がptrProduct−>ProductNameである場合の要素使用カウントは1になる。つまり、直接使用カウントは1になる。
また、図15に示すように、図11のステップS22からステップS24で、対象の関数をRefreshProductで呼び出される呼出し関数について順に要素使用カウントがカウントされる。すると、呼出し関数であるFindProductにおいて、ptrProduct−>ProductNameが1度使用されており、要素使用カウントは1になる。つまり間接使用カウントは1になる。
つまり、図16に示すように、対象の関数がRefreshProductであり、対象の要素がptrProduct−>ProductNameである場合には、直接使用カウントは1であり、間接使用カウントは1である。そして、図10のステップS12で直接使用カウント(xi,j,0)に1、間接使用カウント(xi,j,1)に1が代入されて、要素評価値が計算される。ここでは、要素評価値は1.155と計算されたとする。すると、図17に示すように、図10のステップS15で、要素関連度一覧表33における対象の関数がRefreshProductであり、対象の要素がptrProduct−>ProductNameである場合の欄に値が書き込まれる。
名称評価値計算部22は、ソースコードに含まれる各関数で、対象とする複数の要素それぞれの名称の一部であるワードを含む名称の要素が使用されるか否かに応じて、各関数について要素毎の名称評価値を計算する。具体的には、名称評価値計算部22は、評価対象要素群32が示す各評価対象要素を対象として、各関数で前記対象の要素の名称の一部を含む名称の要素が使用される名称使用回数に応じて、各関数についての対象の要素の名称評価値を計算する。
名称評価値計算部22は、評価対象要素群32におけるi番目の要素を対象の要素として、ワード群抽出部221を呼び出し、対象の要素の名称の一部を含むワード群を取得する。
名称評価値計算部22は、ステップS41で取得されたワード群を入力として、ワード重み群抽出部223を呼び出し、ワード群に含まれる各ワードについての重みを示すワード重み群を取得する。
名称評価値計算部22は、ソースコード構造分析情報31におけるj番目の関数を対象の関数とし、ワード群におけるk番目のワードを対象のワードとして、ワードカウント計算部224を呼び出し、ワード使用カウント(xi,j,k)を特定する。
名称評価値計算部22は、ワード群に含まれる全てのワードについてステップS43の処理が実行されたか否かを判定する。
名称評価値計算部22は、全てのワードについて処理が実行された場合には、処理をステップS45に進める。一方、名称評価値計算部22は、処理が実行されていないワードが残っている場合には、変数kに1を加算した上で、処理をステップS43に戻す。
名称評価値計算部22は、ステップS42で取得されたワード重み群と、ステップS43で特定されたワード使用カウント(xi,j,k)とから、ワード評価値(ci,j,k)と、名称評価値(ui,j)とを計算する。
ここでは、名称評価値計算部22は、名称統合評価値計算部227により、数12に示すように、ワード評価値(ci,j,k)と、名称評価値(ui,j)とを計算する。
名称評価値計算部22は、全ての関数についてステップS43からステップS45の処理が実行されたか否かを判定する。関数とは、ソースコード構造分析情報31が示す関数314のことである。
名称評価値計算部22は、全ての関数について処理が実行された場合には、処理をステップS47に進める。一方、名称評価値計算部22は、処理が実行されていない関数が残っている場合には、変数jに1を加算し、変数kに1を設定した上で、処理をステップS43に戻す。
名称評価値計算部22は、全ての対象の要素についてステップS43からステップS45の処理が実行されたか否かを判定する。対象の要素とは、評価対象要素群32が示す評価対象要素である。
名称評価値計算部22は、全ての対象の要素について処理が実行された場合には、処理をステップS48に進める。一方、名称評価値計算部22は、処理が実行されていない対象の要素が残っている場合には、変数iに1を加算した上で、処理をステップS41に戻す。
名称評価値計算部22は、各関数及び対象の各要素について、ステップS45で特定されたワード評価値及び名称評価値を要素関連度一覧表33としてメモリ12又はストレージ13に書き込む。
ワード群抽出部221は、図18のステップS41で呼び出される。また、ワード群抽出部221は、後述する図23のステップS91で呼び出される。
ワード群抽出部221は、対象の要素の名称の文字列に対して、単独ワード群抽出部222を呼び出し、対象の要素の名称に含まれる文字列である単独ワード群を取得する。対象の要素とは、図18のステップS41又は図23のステップS91で指定されている変数iが示す要素である。
ワード群抽出部221は、選択されたi個の単独ワードの組合せを連結してワードを生成する。ワード群抽出部221は、生成したワードをメモリ12に記憶されたワード群に追加する。
ワード群抽出部221は、変数iがステップS51で取得された単独ワード群に含まれる単独ワードの数未満であるか否かを判定する。
ワード群抽出部221は、変数iが単独ワードの数未満である場合には、変数iに1を加算した上で、処理をステップS52に戻す。一方、ワード群抽出部221は、変数iが単独ワードの数以上である場合には、処理を終了する。
単独ワード群抽出部222は、図19のステップS51で呼び出される。
単独ワード群抽出部222は、対象の文字列のi番目の文字が大文字か否かを判定する。対象の文字列とは、対象の要素の名称の文字列である。
単独ワード群抽出部222は、i番目の文字が大文字である場合には、処理をステップS62に進める。一方、単独ワード群抽出部222は、i番目の文字が大文字でない場合には、処理をステップS63に進める。
単独ワード群抽出部222は、対象の文字列のi+1番目の文字が大文字か、又は、存在しない否かを判定する。
単独ワード群抽出部222は、i+1番目の文字が大文字である場合には、処理をステップS64に進める。一方、単独ワード群抽出部222は、i+1番目の文字が大文字でない場合には、処理をステップS66に進める。
単独ワード群抽出部222は、対象の文字列のi+1番目の文字が大文字か否かを判定する。
単独ワード群抽出部222は、i+1番目の文字が大文字である場合には、処理をステップS65に進める。一方、単独ワード群抽出部222は、i+1番目の文字が大文字でない場合には、処理をステップS66に進める。
単独ワード群抽出部222は、対象の文字列のi+2番目の文字が大文字又は存在しないか否かを判定する。
単独ワード群抽出部222は、i+2番目の文字が大文字である又は存在しない場合には、処理をステップS66に進める。一方、単独ワード群抽出部222は、i+2番目の文字が大文字でなく、かつ、存在する場合には、処理をステップS65に進める。
単独ワード群抽出部222は、i番目の文字とi+1番目の文字との間で、対象の文字列を分割する。
単独ワード群抽出部222は、対象の文字列のi+1番目の文字が対象の文字列の最後の文字であるか否かを判定する。
単独ワード群抽出部222は、i+1番目の文字が最後の文字である場合には、処理をステップS67に進める。一方、単独ワード群抽出部222は、i+1番目の文字が最後の文字でない場合には、変数iに1を加算した上で、処理をステップS61に戻す。
単独ワード群抽出部222は、ステップS65で分割されて生成された文字列の集合を単独ワード群としてメモリ12に書き込む。
ワード重み群抽出部223は、図18のステップS42で呼び出される。
ワード重み群抽出部223は、ソースコード構造分析情報31におけるj番目の関数を対象の関数とし、ステップS41で取得されたワード群のうちk番目のワードを対象のワードとして、ワードカウント計算部224を呼び出し、ワード使用カウント及びワード使用率(rj,k)を取得する。
ワード重み群抽出部223は、ステップS71で取得されたワード使用カウントが1以上であるか否かを判定する。
ワード重み群抽出部223は、ワード使用カウントが1以上である場合には、処理をステップS73に進める。一方、ワード重み群抽出部223は、ワード使用カウントが0である場合には、処理をステップS74に進める。
ワード重み群抽出部223は、ワード使用関数数(dk)に1を加算する。なお、ワード使用関数数(dk)は、初期値として0が設定されメモリ12に記憶されている。
ワード重み群抽出部223は、全ての関数についてステップS71からステップS73の処理が実行されたか否かを判定する。関数とは、ソースコード構造分析情報31が示す関数314のことである。
ワード重み群抽出部223は、全ての関数について処理が実行された場合には、処理をステップS75に進める。一方、ワード重み群抽出部223は、処理が実行されていない関数が残っている場合には、変数jに1を加算した上で、処理をステップS71に戻す。
ワード重み群抽出部223は、ステップS71で取得されたワード使用率(rj,k)と、ステップS73で特定されたワード使用関数数(dk)とに基づき、ワード重み(wj,k)を計算する。
ここでは、ワード重み群抽出部223は、ワード重み計算部226により、数13に示すように、ワード重み(wj,k)を計算する。
ワード重み群抽出部223は、変数kがステップS41で取得されたワード群に含まれるワードの数未満であるか否かを判定する。
ワード重み群抽出部223は、変数kがワードの数未満である場合には、変数kに1を加算し、変数jに1を設定した上で、処理をステップS71に戻す。一方、ワード重み群抽出部223は、変数kがワードの数以上である場合には、処理を終了する。
ワードカウント計算部224は、図18のステップS43及び図21のステップS71で呼び出される。
ワードカウント計算部224は、対象の関数について、関数内ワード群抽出部225を呼び出し、関数内に存在するワードの集合である関数内ワード群を取得する。対象の関数とは、図18のステップS43又は図21のステップS71で指定されている変数jが示す関数である。
ワードカウント計算部224は、ステップS81で取得された関数内ワード群のうちi番目のワードが、対象のワードと一致するか否かを判定する。対象のワードとは、図18のステップS43又は図21のステップS71で指定されている変数kが示すワードである。
ワードカウント計算部224は、i番目のワードが対象のワードと一致する場合には、処理をステップS83に進める。一方、ワードカウント計算部224は、i番目のワードが対象のワードと一致しない場合には、処理をステップS84に進める。
ワードカウント計算部224は、ワード使用カウントに1を加算する。ワード使用カウントは、初期値として0が設定されメモリ12に記憶されている。
ワードカウント計算部224は、ステップS81で取得された関数内ワード群の全てのワードについてステップS82の処理が実行されたか否かを判定する。
ワードカウント計算部224は、全てのワードについて処理が実行された場合には、処理をステップS85に進める。一方、ワードカウント計算部224は、処理が実行されていないワードが残っている場合には、変数iに1を加算した上で、処理をステップS82に戻す。
ワードカウント計算部224は、ステップS83で特定されたワード使用カウントを、ステップS81で取得された関数内ワード群に含まれるワード数で除して、ワード使用率(rj,k)を計算する。ワードカウント計算部224は、計算されたワード使用率(rj,k)をメモリ12に書き込む。
関数内ワード群抽出部225は、図22のステップS81で呼び出される。
関数内ワード群抽出部225は、対象の関数におけるi番目の要素を対象の要素として、ワード群抽出部221を呼び出し、対象の要素の名称の一部を含むワード群を取得する。対象の関数とは、図21のステップS71で指定されている変数jが示す関数である。
関数内ワード群抽出部225は、ステップS91で取得されたワード群を、メモリ12に記憶された関数内ワード群に追加する。
関数内ワード群抽出部225は、対象の関数における全ての要素についてステップS91及びステップS92の処理が実行されたか否かを判定する。
関数内ワード群抽出部225は、全ての要素について処理が実行された場合には、処理を終了する。一方、関数内ワード群抽出部225は、処理が実行されていない要素が残っている場合には、変数iに1を加算した上で、処理をステップS91に戻す。
図18のステップS41が対象の要素をProductNameとして実行されたとする。
すると、図19のステップS51で実行される図20のステップS61からステップS67で、ProductNameが分割され、図24に示すようにProductとNameとを単独ワードとして含む単独ワード群が特定される。そして、図19のステップS52で単独ワード群の組合せとして、図25に示すように、ProductとNameとProductNameとをワードとして含むワード群が特定される。
すると、図22のステップS82からステップS84で、図28に示すように関数内ワード群における対象ワードProductが特定され、図29に示すように対象ワードProductの数がカウントされる。そして、図22のステップS85で、図30に示すように関数RefreshProductにおける対象ワードProductのワード使用率が特定される。
図18のステップS45で、ワード重み及びワード使用カウントから、ワード評価値及び名称評価値が計算され、名称関連度一覧表34が生成される。
結果統合部23は、要素評価値計算部21によって計算された要素評価値と、名称評価値計算部22によって計算された名称評価値とに基づき、複数の要素間の類似度を計算する。具体的には、結果統合部23は、複数の要素の間の各関数についての要素評価値の類似度合い及び名称評価値の類似度合いに応じて、複数の要素間の類似度を計算する。
結果統合部23は、対象の要素群と、対象の関数群と、対象の要素評価値群と、対象の名称評価値群とについて、要素関連性評価値群計算部231を呼び出し、各要素について関数毎の要素関連性評価値を取得する。
対象の要素群とは、評価対象要素群32が示す全ての評価対象要素である。対象の関数群とは、ソースコード構造分析情報31が示す全ての関数314である。対象の要素評価値群とは、要素関連度一覧表33が示す全ての要素評価値である。対象の名称評価値群とは、名称関連度一覧表34が示す全ての名称評価値である。
結果統合部23は、対象とする2つの要素それぞれについての関数毎の要素関連性評価値に基づき、対象とする2つの要素の類似度を計算する。
ここでは、結果統合部23は、ベクトル類似度計算部233により、数14に示すように、対象とする2つの要素の類似度を計算する。
結果統合部23は、各組合せについて計算された類似度を、評価一覧表35としてメモリ12又はストレージ13に書き込む。
要素関連性評価値群計算部231は、図32のステップS101で呼び出される。
要素関連性評価値群計算部231は、評価対象要素群32におけるi番目の要素を対象の要素とし、ソースコード構造分析情報31におけるj番目の関数を対象の関数として、要素評価値と名称評価値とに基づき、要素関連性評価値を計算する。
ここでは、要素関連性評価値群計算部231は、関連性評価値計算部232により、数15に示すように、要素関連性評価値を計算する。
要素関連性評価値群計算部231は、全ての関数について処理が実行されたか否かを判定する。関数とは、ソースコード構造分析情報31が示す関数314のことである。
要素関連性評価値群計算部231は、全ての関数について処理が実行された場合には、処理をステップS113に進める。一方、要素関連性評価値群計算部231は、処理が実行されていない関数が残っている場合には、変数jに1を加算した上で、処理をステップS111に戻す。
要素関連性評価値群計算部231は、全ての対象の要素についてステップS111の処理が実行されたか否かを判定する。対象の要素とは、評価対象要素群32が示す評価対象要素である。
要素関連性評価値群計算部231は、全ての対象の要素について処理が実行された場合には、処理を終了する。一方、要素関連性評価値群計算部231は、処理が実行されていない対象の要素が残っている場合には、変数iに1を加算し、変数jに1を設定した上で、処理をステップS111に戻す。
以上のように、実施の形態1に係る要素類似判定装置10は、ソースコードに含まれる各関数における要素の使用と、各関数における要素の名称の使用とに基づき、要素間の類似度を計算する。
これにより、ソースコードにおける要素の類似性を適切に評価することが可能である。その結果、類似する要素を適切に特定することが可能になり、ソースコードの冗長性を減らすことができる。そして、ソースコードの修正工数の削減、及び、メモリ使用量の削減に繋がる。
しかし、要素recA.ElemFooと、要素recB.ElemBarとは、各関数でそのまま使用されず、媒介要素を介して使用される場合がある。例えば、要素recA.ElemFooは、媒介要素FooOfElemを介して使用される場合がある。そのため、単純に要素recA.ElemFooと、要素recB.ElemBarとが各関数で使用される回数に基づき要素の類似性を評価しようとしても、類似性を適切に評価できない可能性がある。
ここで、媒介要素は、元の要素と類似する名称を用いる可能性が高い。そのため、要素recA.ElemFooの名称の一部の文字列を含む名称の要素と、要素recB.ElemBarの名称の一部の文字列を含む名称の要素とが各関数で使用される回数に基づき要素の類似性を評価することが考えられる。この方法では、同じような名称を多く使用するソースコードでは適切に要素の類似性を評価できない可能性がある。
これにより、対象とする要素が関数において媒介変数を介して使用される場合にも、一定の類似性を見出すことが可能となる。また、同じような名称を多く使用するソースコードであっても、媒介変数を介して使用されていない限り一定の類似性を見出すことが可能となる。
対象とする要素が各関数で使用される回数に基づき類似性を評価した場合には、関数f4と関数f5との間では、使用回数が一致しており、類似していると判断できる。しかし、関数f6と関数f7との間では、使用回数が一致せず、類似していると判断できない。
一方、対象とする要素の名称の一部の文字列を含む名称の要素が各関数で使用される回数に基づく類似性を評価した場合には、関数f4と関数f5との間と、関数f6と関数f7との間との両方で回数が概ね一致しており、類似していると判断できる。但し、他の関数でも同様の名称が使用されている可能性があり、評価精度は高くない可能性がある。
これらの判断結果が統合され、要素recA.ElemFooと、要素recB.ElemBarとの類似性が評価される。
<変形例1>
実施の形態1では、各機能構成要素がソフトウェアで実現された。しかし、変形例1として、各機能構成要素はハードウェアで実現されてもよい。この変形例1について、実施の形態1と異なる点を説明する。
各機能構成要素がハードウェアで実現される場合には、要素類似判定装置10は、プロセッサ11とメモリ12とストレージ13とに代えて、電子回路15を備える。電子回路15は、各機能構成要素と、メモリ12と、ストレージ13との機能とを実現する専用の回路である。
各機能構成要素を1つの電子回路15で実現してもよいし、各機能構成要素を複数の電子回路15に分散させて実現してもよい。
変形例2として、一部の各機能構成要素がハードウェアで実現され、他の各機能構成要素がソフトウェアで実現されてもよい。
Claims (8)
- ソースコードに含まれる各関数で、対象とする複数の要素それぞれが使用されるか否かに応じて、前記各関数について要素毎の要素評価値を計算する要素評価値計算部と、
前記各関数で、対象とする複数の要素それぞれの名称の一部を含む名称の要素が使用されるか否かに応じて、前記各関数について要素毎の名称評価値を計算する名称評価値計算部と、
前記要素評価値計算部によって計算された前記要素評価値と、前記名称評価値計算部によって計算された前記名称評価値とに基づき、前記複数の要素間の類似度を計算する結果統合部と
を備える要素類似判定装置。 - 前記要素評価値計算部は、各要素を対象の要素として、前記各関数で前記対象の要素が使用される要素使用回数に応じて、前記各関数についての前記対象の要素の前記要素評価値を計算する
請求項1に記載の要素類似判定装置。 - 前記要素評価値計算部は、前記各関数を対象の関数とし、前記各要素を対象の要素として、前記対象の関数で前記対象の要素が使用される直接使用回数と、前記対象の関数から呼び出された関数で前記対象の要素が使用される間接使用回数とを統合して前記要素評価値を計算する
請求項2に記載の要素類似判定装置。 - 前記名称評価値計算部は、各要素を対象として、前記各関数で前記対象の要素の名称の一部を含む名称の要素が使用される名称使用回数に応じて、前記各関数についての前記対象の要素の前記名称評価値を計算する
請求項1から3までのいずれか1項に記載の要素類似判定装置。 - 前記名称評価値計算部は、前記各関数を対象の関数とし、前記各要素を対象の要素として、前記対象の関数に含まれる名称の数で、前記名称使用回数を除して得られる重みによって、前記名称使用回数を重み付けして前記名称評価値を計算する
請求項4に記載の要素類似判定装置。 - 前記結果統合部は、前記複数の要素の間の前記各関数についての前記要素評価値の類似度合い及び前記名称評価値の類似度合いに応じて、前記複数の要素間の類似度を計算する請求項1から5までのいずれか1項に記載の要素類似判定装置。
- コンピュータによって実現される要素評価値計算部が、ソースコードに含まれる各関数で、対象とする複数の要素それぞれが使用されるか否かに応じて、前記各関数について要素毎の要素評価値を計算し、
コンピュータによって実現される名称評価値計算部が、前記各関数で、対象とする複数の要素それぞれの名称の一部を含む名称の要素が使用されるか否かに応じて、前記各関数について要素毎の名称評価値を計算し、
コンピュータによって実現される結果統合部が、前記要素評価値と前記名称評価値とに基づき、前記複数の要素間の類似度を計算する要素類似判定方法。 - ソースコードに含まれる各関数で、対象とする複数の要素それぞれが使用されるか否かに応じて、前記各関数について要素毎の要素評価値を計算する要素評価値計算処理と、
前記各関数で、対象とする複数の要素それぞれの名称の一部を含む名称の要素が使用されるか否かに応じて、前記各関数について要素毎の名称評価値を計算する名称評価値計算処理と、
前記要素評価値計算処理によって計算された前記要素評価値と、前記名称評価値計算処理によって計算された前記名称評価値とに基づき、前記複数の要素間の類似度を計算する結果統合処理と
をコンピュータに実行させる要素類似判定プログラム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017248674A JP6971835B2 (ja) | 2017-12-26 | 2017-12-26 | 要素類似判定装置、要素類似判定方法及び要素類似判定プログラム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2017248674A JP6971835B2 (ja) | 2017-12-26 | 2017-12-26 | 要素類似判定装置、要素類似判定方法及び要素類似判定プログラム |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2019114154A JP2019114154A (ja) | 2019-07-11 |
JP6971835B2 true JP6971835B2 (ja) | 2021-11-24 |
Family
ID=67223262
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2017248674A Active JP6971835B2 (ja) | 2017-12-26 | 2017-12-26 | 要素類似判定装置、要素類似判定方法及び要素類似判定プログラム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP6971835B2 (ja) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5826099B2 (ja) * | 2012-04-04 | 2015-12-02 | 三菱電機株式会社 | ソフトウェア評価支援装置及びプログラム |
JP2016040707A (ja) * | 2014-08-13 | 2016-03-24 | 富士通株式会社 | ソフトウェア検証プログラム、ソフトウェア検証方法及びソフトウェア検証装置 |
JP6369269B2 (ja) * | 2014-10-01 | 2018-08-08 | 日本電気株式会社 | 検証支援装置、検証支援方法およびコンピュータプログラム |
JP2018124901A (ja) * | 2017-02-03 | 2018-08-09 | 富士通株式会社 | プログラム分析装置、プログラム分析方法及びプログラム分析プログラム |
-
2017
- 2017-12-26 JP JP2017248674A patent/JP6971835B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
JP2019114154A (ja) | 2019-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109063055B (zh) | 同源二进制文件检索方法和装置 | |
KR102376117B1 (ko) | 병렬 결정 트리 프로세서 아키텍처 | |
KR101840905B1 (ko) | 상태 기계 격자에서의 카운터 동작 | |
TW201737115A (zh) | 一種機器學習系統的訓練方法和訓練系統 | |
US9176732B2 (en) | Method and apparatus for minimum cost cycle removal from a directed graph | |
WO2020063524A1 (zh) | 一种法律文书的确定方法及系统 | |
CN111045670B (zh) | 一种二进制代码与源代码间复用关系的识别方法与装置 | |
CN111062034A (zh) | 一种Webshell文件检测方法、装置、电子设备及存储介质 | |
WO2019102786A1 (ja) | ソースコード分割装置、ソースコード解析装置、ソースコード分割方法及びソースコード分割プログラム | |
US20200012250A1 (en) | Program editing device, program editing method, and computer readable medium | |
CN113886237A (zh) | 分析报告的生成方法、装置、电子设备及存储介质 | |
CN107832271B (zh) | 函数图像绘制方法、装置、设备及计算机存储介质 | |
JP6971835B2 (ja) | 要素類似判定装置、要素類似判定方法及び要素類似判定プログラム | |
CN115862653A (zh) | 音频去噪方法、装置、计算机设备和存储介质 | |
US8626688B2 (en) | Pattern matching device and method using non-deterministic finite automaton | |
CN114462381A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN106971117B (zh) | 调查设备和调查方法 | |
CN114792007A (zh) | 代码检测方法、装置、设备、存储介质和计算机程序产品 | |
CN115293076A (zh) | 生成电路的方法、电子设备及存储介质 | |
US20170132278A1 (en) | Systems and Methods for Inferring Landmark Delimiters for Log Analysis | |
US11790984B1 (en) | Clustering for read thresholds history table compression in NAND storage systems | |
JP2018181196A (ja) | 情報処理装置、プログラム、情報処理方法及びデータ構造 | |
KR102382017B1 (ko) | 악성코드 진화관계를 분석하는 장치 및 방법 | |
US8176407B2 (en) | Comparing values of a bounded domain | |
US20150371033A1 (en) | String and Password Generation from Regular Expressions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20200914 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20210831 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20210907 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20210927 |
|
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: 20211005 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20211102 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 6971835 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |