(57)【要約】【課題】ソースコードにおける要素の類似性を適切に評価可能にする。【解決手段】要素評価値計算部２１は、ソースコードに含まれる各関数で、対象とする複数の要素それぞれが使用されるか否かに応じて、各関数について要素毎の要素評価値を計算する。名称評価値計算部２２は、各関数で、対象とする複数の要素それぞれの名称の一部を含む名称の要素が使用されるか否かに応じて、各関数について要素毎の名称評価値を計算する。結果統合部２３は、要素評価値と名称評価値とに基づき、複数の要素間の類似度を計算する。【選択図】図１
2019114154.tif 000002
【特許請求の範囲】
【請求項１】
ソースコードに含まれる各関数で、対象とする複数の要素それぞれが使用されるか否かに応じて、前記各関数について要素毎の要素評価値を計算する要素評価値計算部と、
前記各関数で、対象とする複数の要素それぞれの名称の一部を含む名称の要素が使用されるか否かに応じて、前記各関数について要素毎の名称評価値を計算する名称評価値計算部と、
前記要素評価値計算部によって計算された前記要素評価値と、前記名称評価値計算部によって計算された前記名称評価値とに基づき、前記複数の要素間の類似度を計算する結果統合部と
を備える要素類似判定装置。
【請求項２】
前記要素評価値計算部は、各要素を対象の要素として、前記各関数で前記対象の要素が使用される要素使用回数に応じて、前記各関数についての前記対象の要素の前記要素評価値を計算する
請求項１に記載の要素類似判定装置。
【請求項３】
前記要素評価値計算部は、前記各関数を対象の関数とし、前記各要素を対象の要素として、前記対象の関数で前記対象の要素が使用される直接使用回数と、前記対象の関数から呼び出された関数で前記対象の要素が使用される間接使用回数とを統合して前記要素評価値を計算する
請求項２に記載の要素類似判定装置。
【請求項４】
前記名称評価値計算部は、各要素を対象として、前記各関数で前記対象の要素の名称の一部を含む名称の要素が使用される名称使用回数に応じて、前記各関数についての前記対象の要素の前記名称評価値を計算する
請求項１から３までのいずれか１項に記載の要素類似判定装置。
【請求項５】
前記名称評価値計算部は、前記各関数を対象の関数とし、前記各要素を対象の要素として、前記対象の関数に含まれる名称の数で、前記名称使用回数を除して得られる重みによって、前記名称使用回数を重み付けして前記名称評価値を計算する
請求項４に記載の要素類似判定装置。
【請求項６】
前記結果統合部は、前記複数の要素の間の前記各関数についての前記要素評価値の類似度合い及び前記名称評価値の類似度合いに応じて、前記複数の要素間の類似度を計算する
請求項１から５までのいずれか１項に記載の要素類似判定装置。
【請求項７】
要素評価値計算部が、ソースコードに含まれる各関数で、対象とする複数の要素それぞれが使用されるか否かに応じて、前記各関数について要素毎の要素評価値を計算し、
名称評価値計算部が、前記各関数で、対象とする複数の要素それぞれの名称の一部を含む名称の要素が使用されるか否かに応じて、前記各関数について要素毎の名称評価値を計算し、
結果統合部が、前記要素評価値と前記名称評価値とに基づき、前記複数の要素間の類似度を計算する要素類似判定方法。
【請求項８】
ソースコードに含まれる各関数で、対象とする複数の要素それぞれが使用されるか否かに応じて、前記各関数について要素毎の要素評価値を計算する要素評価値計算処理と、
前記各関数で、対象とする複数の要素それぞれの名称の一部を含む名称の要素が使用されるか否かに応じて、前記各関数について要素毎の名称評価値を計算する名称評価値計算処理と、
前記要素評価値計算処理によって計算された前記要素評価値と、前記名称評価値計算処理によって計算された前記名称評価値とに基づき、前記複数の要素間の類似度を計算する結果統合処理と
をコンピュータに実行させる要素類似判定プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ソースコードに存在する複数の要素間の類似性を評価する技術に関する。
【背景技術】
【０００２】
ソフトウェア開発においてソースコードを作成していく際、ソースコード修正工数及びメモリ使用量を削減するために、ソースコードの分量は可能な限り削減されることが望ましい。そのために、ソースコードの複数箇所における同じような記述、すなわちコードクローンが検出され、冗長性のある複数の処理を共通の処理に置き換えるといった処置が施される。
【０００３】
ソースコードの分量が膨大になると、コードクローンを目視で発見することが困難になる。そのため、コードクローンは自動的に検出されることが望まれる。このとき、複数の比較対象の記述内容が文字列として厳密に一致していない場合であっても、構造的に共通化されるべき類似性がある場合、コードクローンとして検出されることが望ましい。
特許文献１には、関数の記述文字列と、関数内に存在する要素の名称と、関数の構文と、関数メトリクスといった情報を比較して、類似性がある関数をコードクローンとして検出することが記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１７−１０４７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
特許文献１に記載された技術では、類似する関数を特定することはできる。しかし、ソースコードにおいて冗長性につながる類似性を持つものは関数だけではなく、構造体と構造体のメンバといった要素も考えられる。
この発明は、ソースコードにおける要素の類似性を適切に評価可能にすることを目的とする。
【課題を解決するための手段】
【０００６】
この発明に係る要素類似判定装置は、
ソースコードに含まれる各関数で、対象とする複数の要素それぞれが使用されるか否かに応じて、前記各関数について要素毎の要素評価値を計算する要素評価値計算部と、
前記各関数で、対象とする複数の要素それぞれの名称の一部を含む名称の要素が使用されるか否かに応じて、前記各関数について要素毎の名称評価値を計算する名称評価値計算部と、
前記要素評価値計算部によって計算された前記要素評価値と、前記名称評価値計算部によって計算された前記名称評価値とに基づき、前記複数の要素間の類似度を計算する結果統合部と
を備える。
【発明の効果】
【０００７】
この発明では、ソースコードに含まれる各関数における要素の使用と、各関数における要素の名称の使用とに基づき、要素間の類似度を計算する。これにより、ソースコードにおける要素の類似性を適切に評価することが可能である。
【図面の簡単な説明】
【０００８】
【図１】実施の形態１に係る要素類似判定装置１０の構成図。
【図２】実施の形態１に係る要素評価値計算部２１の構成図。
【図３】実施の形態１に係る名称評価値計算部２２の構成図。
【図４】実施の形態１に係る結果統合部２３の構成図。
【図５】実施の形態１に係るソースコード構造分析情報３１の説明図。
【図６】実施の形態１に係る評価対象要素群３２の説明図。
【図７】実施の形態１に係る要素関連度一覧表３３の説明図。
【図８】実施の形態１に係る名称関連度一覧表３４の説明図。
【図９】実施の形態１に係る評価一覧表３５の説明図。
【図１０】実施の形態１に係る要素評価値計算部２１の処理のフローチャート。
【図１１】実施の形態１に係る直接／間接カウント計算部２１１の処理のフローチャート。
【図１２】実施の形態１に係る要素カウント計算部２１２の処理のフローチャート。
【図１３】実施の形態１に係る要素カウント計算部２１２の処理の説明図。
【図１４】実施の形態１に係る要素カウントの説明図。
【図１５】実施の形態１に係る間接使用カウントを特定する処理の説明図。
【図１６】実施の形態１に係る直接使用カウント及び間接使用カウントの説明図。
【図１７】実施の形態１に係る要素評価値の説明図。
【図１８】実施の形態１に係る名称評価値計算部２２の処理のフローチャート。
【図１９】実施の形態１に係るワード群抽出部２２１の処理のフローチャート。
【図２０】実施の形態１に係る単独ワード群抽出部２２２の処理のフローチャート。
【図２１】実施の形態１に係るワード重み群抽出部２２３の処理のフローチャート。
【図２２】実施の形態１に係るワードカウント計算部２２４の処理のフローチャート。
【図２３】実施の形態１に係る関数内ワード群抽出部２２５の処理のフローチャート。
【図２４】実施の形態１に係る単独ワード群の説明図。
【図２５】実施の形態１に係るワード群の説明図。
【図２６】実施の形態１に係る関数内ワード群抽出部２２５の処理の説明図。
【図２７】実施の形態１に係る関数内ワード群の説明図。
【図２８】実施の形態１に係るワードカウント計算部２２４の処理の説明図。
【図２９】実施の形態１に係るワードカウントの説明図。
【図３０】実施の形態１に係るワード使用率の説明図。
【図３１】実施の形態１に係るワード重みの説明図。
【図３２】実施の形態１に係る結果統合部２３の処理のフローチャート。
【図３３】実施の形態１に係る要素関連性評価値群計算部２３１の処理のフローチャート。
【図３４】実施の形態１の評価対象となるソースコードを示す図。
【図３５】実施の形態１に係る要素類似判定装置１０による評価結果を示す図。
【図３６】変形例１に係る要素類似判定装置１０の構成図。
【発明を実施するための形態】
【０００９】
実施の形態１．
＊＊＊構成の説明＊＊＊
図１を参照して、実施の形態１に係る要素類似判定装置１０の構成を説明する。
要素類似判定装置１０は、コンピュータである。
要素類似判定装置１０は、プロセッサ１１と、メモリ１２と、ストレージ１３と、通信インタフェース１４とのハードウェアを備える。プロセッサ１１は、信号線を介して他のハードウェアと接続され、これら他のハードウェアを制御する。
【００１０】
プロセッサ１１は、プロセッシングを行うＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）である。プロセッサ１１は、具体例としては、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
【００１１】
メモリ１２は、データを一時的に記憶する記憶装置である。メモリ１２は、具体例としては、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
【００１２】
ストレージ１３は、データを保管する記憶装置である。ストレージ１３は、具体例としては、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）である。また、ストレージ１３は、ＳＤ（登録商標，Ｓｅｃｕｒｅ  Ｄｉｇｉｔａｌ）メモリカード、ＣＦ（ＣｏｍｐａｃｔＦｌａｓｈ，登録商標）、ＮＡＮＤフラッシュ、フレキシブルディスク、光ディスク、コンパクトディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）といった可搬記録媒体であってもよい。
【００１３】
通信インタフェース１４は、外部の装置と通信するためのインタフェースである。通信インタフェース１４は、具体例としては、Ｅｔｈｅｒｎｅｔ（登録商標）、ＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）、ＨＤＭＩ（登録商標，Ｈｉｇｈ−Ｄｅｆｉｎｉｔｉｏｎ  Ｍｕｌｔｉｍｅｄｉａ  Ｉｎｔｅｒｆａｃｅ）のポートである。
【００１４】
要素類似判定装置１０は、機能構成要素として、要素評価値計算部２１と、名称評価値計算部２２と、結果統合部２３とを備える。要素類似判定装置１０の各機能構成要素の機能はソフトウェアにより実現される。
ストレージ１３には、要素類似判定装置１０の各機能構成要素の機能を実現するプログラムが格納されている。このプログラムは、プロセッサ１１によりメモリ１２に読み込まれ、プロセッサ１１によって実行される。これにより、要素類似判定装置１０の各機能構成要素の機能が実現される。
【００１５】
図１では、プロセッサ１１は、１つだけ示されていた。しかし、プロセッサ１１は、複数であってもよく、複数のプロセッサ１１が、各機能を実現するプログラムを連携して実行してもよい。
【００１６】
図１及び図２を参照して、実施の形態１に係る要素評価値計算部２１の構成を説明する。
要素評価値計算部２１は、ソースコード構造分析情報３１と、評価対象要素群３２とを入力として、要素関連度一覧表３３を生成する。
要素評価値計算部２１は、機能構成要素として、直接／間接カウント計算部２１１と、要素カウント計算部２１２と、要素統合評価計算部２１３とを備える。
【００１７】
図１及び図３を参照して、実施の形態１に係る名称評価値計算部２２の構成を説明する。
名称評価値計算部２２は、ソースコード構造分析情報３１と、評価対象要素群３２とを入力として、名称関連度一覧表３４を生成する。
名称評価値計算部２２は、機能構成要素として、ワード群抽出部２２１と、単独ワード群抽出部２２２と、ワード重み群抽出部２２３と、ワードカウント計算部２２４と、関数内ワード群抽出部２２５と、ワード重み計算部２２６と、名称統合評価値計算部２２７とを備える。
【００１８】
図１及び図４を参照して、実施の形態１に係る結果統合部２３の構成を説明する。
結果統合部２３は、要素関連度一覧表３３と、名称関連度一覧表３４とを入力として、評価一覧表３５を生成する。
結果統合部２３は、要素関連性評価値群計算部２３１と、関連性評価値計算部２３２と、ベクトル類似度計算部２３３とを備える。
【００１９】
図５を参照して、実施の形態１に係るソースコード構造分析情報３１を説明する。
ソースコード構造分析情報３１は、ソースコードの解析ツール等により取得される情報である。ソースコード構造分析情報３１は、ソースコードに含まれる各要素３１１と各関数３１４とについての情報である。
各要素３１１は、構造名称３１２と、名称３１３とを含む。構造名称３１２は、要素３１１を一意に特定する文字列であり、要素３１１を持つオブジェクト等の名称である。名称３１３は、要素３１１そのものを表す文字列であり、異なる要素３１１又は関数３１４が同一の名称を持つことがありえる。
各関数３１４は、構造名称３１５と、名称３１６と、使用要素３１７と、呼出し関数３１８とを含む。構造名称３１５は、関数３１４を一意に特定する文字列であり、関数３１４を持つオブジェクト等の名称である。名称３１６は、関数３１４そのものを表す文字列であり、異なる関数３１４又は要素３１１が同一の名称を持つことがありえる。使用要素３１７は、関数３１４で使用される要素３１１の情報を０個以上並べたものである。使用要素３１７において、同一の要素３１１の重複はありえるものとする。つまり、１つの関数３１４において同一の要素３１１を複数回使用している場合、使用要素３１７においても同一の要素３１１が複数個存在する。呼出し関数３１８は、関数３１４で呼び出される他の関数３１４の情報を０個以上並べたものである。使用要素３１７において、同一の要素３１１の重複がありえることと同様に、呼出し関数３１８において、同一の関数３１４の重複はありえるものとする。
【００２０】
図６を参照して、実施の形態１に係る評価対象要素群３２を説明する。
評価対象要素群３２は、複数の評価対象要素を含む。評価対象要素は、類似性を評価する対象の要素である。評価対象要素群３２は、各評価対象要素について、構造名称３１２を含む。
【００２１】
図７を参照して、実施の形態１に係る要素関連度一覧表３３を説明する。
要素関連度一覧表３３は、評価対象要素群３２が示す各評価対象要素を対象の要素として、対象の要素について関数毎に、直接使用カウントと、間接使用カウントと、要素評価値とを含む。
直接使用カウントは、対象の関数で対象の要素が直接使用される回数である。間接使用カウントは、対象の関数から呼び出された他の関数で対象の要素が間接的に使用される回数である。要素評価値は、直接使用カウントと間接使用カウントとに基づき計算された評価値である。
【００２２】
図８を参照して、実施の形態１に係る名称関連度一覧表３４を説明する。
名称関連度一覧表３４は、評価対象要素群３２が示す各評価対象要素を対象の要素として、対象の要素の名称を分解したワードについて、関数毎に、ワード使用カウントと、名称評価値とを含む。
ワード使用カウントは、対象の関数で対象のワードが使用される回数である。名称評価値は、対象の要素の名称が分解されたワードについてのワード使用カウントに基づき計算された評価値である。
【００２３】
図９を参照して、実施の形態１に係る評価一覧表３５を説明する。
評価対象要素群３２が示す各評価対象要素間の類似度を示す。各評価対象要素間の類似度は、要素関連度一覧表３３が示す要素評価値と、名称関連度一覧表３４が示す名称評価値とから計算される。
【００２４】
＊＊＊動作の説明＊＊＊
図１０から図３３を参照して、実施の形態１に係る要素類似判定装置１０の動作を説明する。
実施の形態１に係る要素類似判定装置１０の動作は、実施の形態１に係る要素類似判定方法に相当する。また、実施の形態１に係る要素類似判定装置１０の動作は、実施の形態１に係る要素類似判定プログラムの処理に相当する。
【００２５】
以下の説明において、変数ｉ，ｊ，ｋは、各機能構成要素の処理の内部変数とする。つまり、ある機能構成要素の処理で他の機能構成要素が呼び出された場合には、呼出し元の機能構成要素の処理で使用された変数ｉ，ｊ，ｋの値は、呼出し先の機能構成要素には引き継がれない。
【００２６】
図１０を参照して、実施の形態１に係る要素評価値計算部２１の処理を説明する。
図１０に示す処理を実行することにより、要素評価値計算部２１は、ソースコードに含まれる各関数で、対象とする複数の要素それぞれが使用されるか否かに応じて、各関数について要素毎の要素評価値を計算する。具体的には、要素評価値計算部２１は、評価対象要素群３２が示す各評価対象要素を対象の要素として、各関数で対象の要素が使用される要素使用回数に応じて、各関数についての対象の要素の要素評価値を計算する。
【００２７】
変数ｉ，ｊには初期値として１が設定される。
【００２８】
（ステップＳ１１：要素使用カウント処理）
要素評価値計算部２１は、ソースコード構造分析情報３１におけるｊ番目の関数を対象の関数とし、評価対象要素群３２におけるｉ番目の要素を対象の要素として、直接／間接カウント計算部２１１を呼び出し、直接使用カウント（ｘｉ，ｊ，０）と、間接使用カウント（ｘｉ，ｊ，１）とを特定する。
【００２９】
（ステップＳ１２：要素統合処理）
要素評価値計算部２１は、要素カウント計算部２１２を呼び出し、ステップＳ１１で特定された直接使用カウント（ｘｉ，ｊ，０）及び間接使用カウント（ｘｉ，ｊ，１）から、要素評価値（ｙｉ，ｊ）を計算する。
ここでは、要素評価値計算部２１は、要素統合評価計算部２１３により、数１１に示すように、要素評価値（ｙｉ，ｊ）を計算する。
【数１１】
2019114154.tif 000003
数１１において、ｙｉ，ｊは、要素評価値である。Ａ０は、直接使用カウント用の定数である。Ａ１は、間接使用カウント用の定数である。ｘｉ，ｊ，０は、直接使用カウントである。ｘｉ，ｊ，１は、間接使用カウントである。
【００３０】
（ステップＳ１３：関数終了判定処理）
要素評価値計算部２１は、全ての関数についてステップＳ１１及びステップＳ１２の処理が実行されたか否かを判定する。関数とは、ソースコード構造分析情報３１が示す関数３１４のことである。
要素評価値計算部２１は、全ての関数について処理が実行された場合には、処理をステップＳ１４に進める。一方、要素評価値計算部２１は、処理が実行されていない関数が残っている場合には、変数ｊに１を加算した上で、処理をステップＳ１１に戻す。
【００３１】
（ステップＳ１４：要素終了判定処理）
要素評価値計算部２１は、全ての対象の要素についてステップＳ１１及びステップＳ１２の処理が実行されたか否かを判定する。対象の要素とは、評価対象要素群３２が示す評価対象要素である。
要素評価値計算部２１は、全ての対象の要素について処理が実行された場合には、処理をステップＳ１５に進める。一方、要素評価値計算部２１は、処理が実行されていない対象の要素が残っている場合には、変数ｉに１を加算し、変数ｊに１を設定した上で、処理をステップＳ１１に戻す。
【００３２】
（ステップＳ１５：結果記憶処理）
要素評価値計算部２１は、各関数及び対象の各要素について、ステップＳ１１で特定された直接使用カウント及び間接使用カウントと、ステップＳ１２で計算された要素評価値とを要素関連度一覧表３３としてメモリ１２又はストレージ１３に書き込む。
【００３３】
図１１を参照して、実施の形態１に係る直接／間接カウント計算部２１１の処理を説明する。
直接／間接カウント計算部２１１は、図１０のステップＳ１１で呼び出される。
【００３４】
（ステップＳ２１：直接使用カウント処理）
直接／間接カウント計算部２１１は、要素カウント計算部２１２を呼び出し、対象の関数及び対象の要素について、要素使用カウントを特定する。直接／間接カウント計算部２１１は、特定された要素使用カウントを、対象の関数及び対象の要素についての直接使用カウントとしてメモリ１２に書き込む。対象の関数及び対象の要素とは、図１０のステップＳ１１で指定されている変数ｊが示す関数及び変数ｉが示す要素である。
【００３５】
変数ｉには初期値として１が設定される。
【００３６】
（ステップＳ２２：間接使用カウント処理）
直接／間接カウント計算部２１１は、要素カウント計算部２１２を呼び出し、対象の関数においてｉ番目に呼び出される関数と、対象の要素とについて、要素使用カウントを特定する。
【００３７】
（ステップＳ２３：カウント加算処理）
直接／間接カウント計算部２１１は、ステップＳ２２で特定された要素使用カウントを、対象の関数及び対象の要素についての間接使用カウントに加算する。なお、図１１に示す処理における間接使用カウントは、初期値として０が設定されメモリ１２に記憶されている。
【００３８】
（ステップＳ２４：呼出し関数終了判定処理）
直接／間接カウント計算部２１１は、対象の関数において呼び出される全ての呼出し関数についてステップＳ２２及びステップＳ２３の処理が実行されたか否かを判定する。
直接／間接カウント計算部２１１は、全ての呼出し関数について処理が実行された場合には、処理を終了する。一方、直接／間接カウント計算部２１１は、処理が実行されていない呼出し関数が残っている場合には、変数ｉに１を加算した上で、処理をステップＳ２２に戻す。
【００３９】
図１２を参照して、実施の形態１に係る要素カウント計算部２１２の処理を説明する。
要素カウント計算部２１２は、図１１のステップＳ２１及びステップＳ２２で呼び出される。
【００４０】
変数ｉには初期値として１が設定される。
【００４１】
（ステップＳ３１：要素一致判定処理）
要素カウント計算部２１２は、対象の関数におけるｉ番目の要素が、対象の要素と一致するか否かを判定する。対象の関数及び対象の要素は、要素カウント計算部２１２の呼出し元である図１１のステップＳ２１で直接使用カウントの特定対象となっている関数及び要素、又は、ステップＳ２２で間接使用カウントの特定対象となっている関数及び要素である。
要素カウント計算部２１２は、一致する場合には、処理をステップＳ３２に進める。一方、要素カウント計算部２１２は、一致しない場合には、処理をステップＳ３３に進める。
【００４２】
（ステップＳ３２：カウント処理）
要素カウント計算部２１２は、要素使用カウントに１を加算する。なお、図１２に示す処理における要素使用カウントは、初期値として０が設定されメモリ１２に記憶されている。
【００４３】
（ステップＳ３３：要素終了判定処理）
要素カウント計算部２１２は、対象の関数で使用される全ての要素について、ステップＳ３１で処理が実行されたか否かを判定する。
要素カウント計算部２１２は、全ての要素について処理が実行された場合には、処理を終了する。一方、要素カウント計算部２１２は、処理が実行されていない要素が残っている場合には、変数ｉに１を加算した上で、処理をステップＳ３１に戻す。
【００４４】
図１１から図１７を参照して、要素評価値計算部２１の処理の具体的な例を説明する。
図１０のステップＳ１１が対象の関数をＲｅｆｒｅｓｈＰｒｏｄｕｃｔとし、対象の要素をｐｔｒＰｒｏｄｕｃｔ−＞ＰｒｏｄｕｃｔＮａｍｅとして処理が実行されたとする。
すると、図１３に示すように、図１１のステップＳ２１で実行される図１２のステップ３１からステップＳ３３で、対象の関数をＲｅｆｒｅｓｈＰｒｏｄｕｃｔにおいて使用される各要素について順に、対象の要素であるｐｔｒＰｒｏｄｕｃｔ−＞ＰｒｏｄｕｃｔＮａｍｅと一致するか否かが判定される。図１３では、対象の関数をＲｅｆｒｅｓｈＰｒｏｄｕｃｔにおいて１箇所でｐｔｒＰｒｏｄｕｃｔ−＞ＰｒｏｄｕｃｔＮａｍｅが使用されている。そのため、図１４に示すように、対象の関数がＲｅｆｒｅｓｈＰｒｏｄｕｃｔであり、対象の要素がｐｔｒＰｒｏｄｕｃｔ−＞ＰｒｏｄｕｃｔＮａｍｅである場合の要素使用カウントは１になる。つまり、直接使用カウントは１になる。
また、図１５に示すように、図１１のステップＳ２２からステップＳ２４で、対象の関数をＲｅｆｒｅｓｈＰｒｏｄｕｃｔで呼び出される呼出し関数について順に要素使用カウントがカウントされる。すると、呼出し関数であるＦｉｎｄＰｒｏｄｕｃｔにおいて、ｐｔｒＰｒｏｄｕｃｔ−＞ＰｒｏｄｕｃｔＮａｍｅが１度使用されており、要素使用カウントは１になる。つまり間接使用カウントは１になる。
つまり、図１６に示すように、対象の関数がＲｅｆｒｅｓｈＰｒｏｄｕｃｔであり、対象の要素がｐｔｒＰｒｏｄｕｃｔ−＞ＰｒｏｄｕｃｔＮａｍｅである場合には、直接使用カウントは１であり、間接使用カウントは１である。そして、図１０のステップＳ１２で直接使用カウント（ｘｉ，ｊ，０）に１、間接使用カウント（ｘｉ，ｊ，１）に１が代入されて、要素評価値が計算される。ここでは、要素評価値は１．１５５と計算されたとする。すると、図１７に示すように、図１０のステップＳ１５で、要素関連度一覧表３３における対象の関数がＲｅｆｒｅｓｈＰｒｏｄｕｃｔであり、対象の要素がｐｔｒＰｒｏｄｕｃｔ−＞ＰｒｏｄｕｃｔＮａｍｅである場合の欄に値が書き込まれる。
【００４５】
図１８を参照して、実施の形態１に係る名称評価値計算部２２の処理を説明する。
名称評価値計算部２２は、ソースコードに含まれる各関数で、対象とする複数の要素それぞれの名称の一部であるワードを含む名称の要素が使用されるか否かに応じて、各関数について要素毎の名称評価値を計算する。具体的には、名称評価値計算部２２は、評価対象要素群３２が示す各評価対象要素を対象として、各関数で前記対象の要素の名称の一部を含む名称の要素が使用される名称使用回数に応じて、各関数についての対象の要素の名称評価値を計算する。
【００４６】
変数ｉには初期値として１が設定される。
【００４７】
（ステップＳ４１：ワード群取得処理）
名称評価値計算部２２は、評価対象要素群３２におけるｉ番目の要素を対象の要素として、ワード群抽出部２２１を呼び出し、対象の要素の名称の一部を含むワード群を取得する。
【００４８】
（ステップＳ４２：ワード重み取得処理）
名称評価値計算部２２は、ステップＳ４１で取得されたワード群を入力として、ワード重み群抽出部２２３を呼び出し、ワード群に含まれる各ワードについての重みを示すワード重み群を取得する。
【００４９】
変数ｊ，ｋには初期値として１が設定される。
【００５０】
（ステップＳ４３：ワード使用カウント処理）
名称評価値計算部２２は、ソースコード構造分析情報３１におけるｊ番目の関数を対象の関数とし、ワード群におけるｋ番目のワードを対象のワードとして、ワードカウント計算部２２４を呼び出し、ワード使用カウント（ｘｉ，ｊ，ｋ）を特定する。
【００５１】
（ステップＳ４４：ワード終了判定処理）
名称評価値計算部２２は、ワード群に含まれる全てのワードについてステップＳ４３の処理が実行されたか否かを判定する。
名称評価値計算部２２は、全てのワードについて処理が実行された場合には、処理をステップＳ４５に進める。一方、名称評価値計算部２２は、処理が実行されていないワードが残っている場合には、変数ｋに１を加算した上で、処理をステップＳ４３に戻す。
【００５２】
（ステップＳ４５：名称統合処理）
名称評価値計算部２２は、ステップＳ４２で取得されたワード重み群と、ステップＳ４３で特定されたワード使用カウント（ｘｉ，ｊ，ｋ）とから、ワード評価値（ｃｉ，ｊ，ｋ）と、名称評価値（ｕｉ，ｊ）とを計算する。
ここでは、名称評価値計算部２２は、名称統合評価値計算部２２７により、数１２に示すように、ワード評価値（ｃｉ，ｊ，ｋ）と、名称評価値（ｕｉ，ｊ）とを計算する。
【数１２】
2019114154.tif 000004
数１２において、ｕｉ，ｊは、名称評価値である。ｃｉ，ｊ，ｋは、ワード評価値である。ｗｉ，ｊ，ｋは、ワード重みである。ｘｉ，ｊ，ｋは、ワード使用カウントである。
【００５３】
（ステップＳ４６：関数終了判定処理）
名称評価値計算部２２は、全ての関数についてステップＳ４３からステップＳ４５の処理が実行されたか否かを判定する。関数とは、ソースコード構造分析情報３１が示す関数３１４のことである。
名称評価値計算部２２は、全ての関数について処理が実行された場合には、処理をステップＳ４７に進める。一方、名称評価値計算部２２は、処理が実行されていない関数が残っている場合には、変数ｊに１を加算し、変数ｋに１を設定した上で、処理をステップＳ４３に戻す。
【００５４】
（ステップＳ４７：要素終了判定処理）
名称評価値計算部２２は、全ての対象の要素についてステップＳ４３からステップＳ４５の処理が実行されたか否かを判定する。対象の要素とは、評価対象要素群３２が示す評価対象要素である。
名称評価値計算部２２は、全ての対象の要素について処理が実行された場合には、処理をステップＳ４８に進める。一方、名称評価値計算部２２は、処理が実行されていない対象の要素が残っている場合には、変数ｉに１を加算した上で、処理をステップＳ４１に戻す。
【００５５】
（ステップＳ４８：結果記憶処理）
名称評価値計算部２２は、各関数及び対象の各要素について、ステップＳ４５で特定されたワード評価値及び名称評価値を要素関連度一覧表３３としてメモリ１２又はストレージ１３に書き込む。
【００５６】
図１９を参照して、実施の形態１に係るワード群抽出部２２１の処理を説明する。
ワード群抽出部２２１は、図１８のステップＳ４１で呼び出される。また、ワード群抽出部２２１は、後述する図２３のステップＳ９１で呼び出される。
【００５７】
（ステップＳ５１：単独ワード群取得処理）
ワード群抽出部２２１は、対象の要素の名称の文字列に対して、単独ワード群抽出部２２２を呼び出し、対象の要素の名称に含まれる文字列である単独ワード群を取得する。対象の要素とは、図１８のステップＳ４１又は図２３のステップＳ９１で指定されている変数ｉが示す要素である。
【００５８】
変数ｉには初期値として１が設定される。
【００５９】
ワード群抽出部２２１は、ステップＳ５１で取得された単独ワード群において、連続するｉ個の単独ワードの全ての組合せに対してステップＳ５２の処理を実行する。
【００６０】
（ステップＳ５２：単独ワード群追加処理）
ワード群抽出部２２１は、選択されたｉ個の単独ワードの組合せを連結してワードを生成する。ワード群抽出部２２１は、生成したワードをメモリ１２に記憶されたワード群に追加する。
【００６１】
（ステップＳ５３：ワード終了判定処理）
ワード群抽出部２２１は、変数ｉがステップＳ５１で取得された単独ワード群に含まれる単独ワードの数未満であるか否かを判定する。
ワード群抽出部２２１は、変数ｉが単独ワードの数未満である場合には、変数ｉに１を加算した上で、処理をステップＳ５２に戻す。一方、ワード群抽出部２２１は、変数ｉが単独ワードの数以上である場合には、処理を終了する。
【００６２】
図２０を参照して、実施の形態１に係る単独ワード群抽出部２２２の処理を説明する。
単独ワード群抽出部２２２は、図１９のステップＳ５１で呼び出される。
【００６３】
変数ｉには初期値として１が設定される。
【００６４】
（ステップＳ６１：第１文字判定処理）
単独ワード群抽出部２２２は、対象の文字列のｉ番目の文字が大文字か否かを判定する。対象の文字列とは、対象の要素の名称の文字列である。
単独ワード群抽出部２２２は、ｉ番目の文字が大文字である場合には、処理をステップＳ６２に進める。一方、単独ワード群抽出部２２２は、ｉ番目の文字が大文字でない場合には、処理をステップＳ６３に進める。
【００６５】
（ステップＳ６２：第２文字判定処理）
単独ワード群抽出部２２２は、対象の文字列のｉ＋１番目の文字が大文字か、又は、存在しない否かを判定する。
単独ワード群抽出部２２２は、ｉ＋１番目の文字が大文字である場合には、処理をステップＳ６４に進める。一方、単独ワード群抽出部２２２は、ｉ＋１番目の文字が大文字でない場合には、処理をステップＳ６６に進める。
【００６６】
（ステップＳ６３：第３文字判定処理）
単独ワード群抽出部２２２は、対象の文字列のｉ＋１番目の文字が大文字か否かを判定する。
単独ワード群抽出部２２２は、ｉ＋１番目の文字が大文字である場合には、処理をステップＳ６５に進める。一方、単独ワード群抽出部２２２は、ｉ＋１番目の文字が大文字でない場合には、処理をステップＳ６６に進める。
【００６７】
（ステップＳ６４：第４文字判定処理）
単独ワード群抽出部２２２は、対象の文字列のｉ＋２番目の文字が大文字又は存在しないか否かを判定する。
単独ワード群抽出部２２２は、ｉ＋２番目の文字が大文字である又は存在しない場合には、処理をステップＳ６６に進める。一方、単独ワード群抽出部２２２は、ｉ＋２番目の文字が大文字でなく、かつ、存在する場合には、処理をステップＳ６５に進める。
【００６８】
（ステップＳ６５：文字列分割処理）
単独ワード群抽出部２２２は、ｉ番目の文字とｉ＋１番目の文字との間で、対象の文字列を分割する。
【００６９】
（ステップＳ６６：文字列終了判定処理）
単独ワード群抽出部２２２は、対象の文字列のｉ＋１番目の文字が対象の文字列の最後の文字であるか否かを判定する。
単独ワード群抽出部２２２は、ｉ＋１番目の文字が最後の文字である場合には、処理をステップＳ６７に進める。一方、単独ワード群抽出部２２２は、ｉ＋１番目の文字が最後の文字でない場合には、変数ｉに１を加算した上で、処理をステップＳ６１に戻す。
【００７０】
（ステップＳ６７：ワード群出力処理）
単独ワード群抽出部２２２は、ステップＳ６５で分割されて生成された文字列の集合を単独ワード群としてメモリ１２に書き込む。
【００７１】
つまり、単独ワード群抽出部２２２は、小文字の次に大文字がある場合には、小文字と大文字との間で文字列を分割する。また、単独ワード群抽出部２２２は、大文字が２つ以上連続した後に小文字がある場合には、大文字と小文字との間で文字列を分割する。なお、ここでは、大文字と小文字との並びによって文字列を分割した。しかし、例えば、“＿”といった記号等によって文字列を分割するといった他の分割方法も考えられる。
【００７２】
図２１を参照して、実施の形態１に係るワード重み群抽出部２２３の処理を説明する。
ワード重み群抽出部２２３は、図１８のステップＳ４２で呼び出される。
【００７３】
変数ｊ，ｋには初期値として１が設定される。
【００７４】
（ステップＳ７１：ワード使用率取得処理）
ワード重み群抽出部２２３は、ソースコード構造分析情報３１におけるｊ番目の関数を対象の関数とし、ステップＳ４１で取得されたワード群のうちｋ番目のワードを対象のワードとして、ワードカウント計算部２２４を呼び出し、ワード使用カウント及びワード使用率（ｒｊ，ｋ）を取得する。
【００７５】
（ステップＳ７２：ワード使用カウント判定処理）
ワード重み群抽出部２２３は、ステップＳ７１で取得されたワード使用カウントが１以上であるか否かを判定する。
ワード重み群抽出部２２３は、ワード使用カウントが１以上である場合には、処理をステップＳ７３に進める。一方、ワード重み群抽出部２２３は、ワード使用カウントが０である場合には、処理をステップＳ７４に進める。
【００７６】
（ステップＳ７３：ワード使用関数追加処理）
ワード重み群抽出部２２３は、ワード使用関数数（ｄｋ）に１を加算する。なお、ワード使用関数数（ｄｋ）は、初期値として０が設定されメモリ１２に記憶されている。
【００７７】
（ステップＳ７４：関数終了判定処理）
ワード重み群抽出部２２３は、全ての関数についてステップＳ７１からステップＳ７３の処理が実行されたか否かを判定する。関数とは、ソースコード構造分析情報３１が示す関数３１４のことである。
ワード重み群抽出部２２３は、全ての関数について処理が実行された場合には、処理をステップＳ７５に進める。一方、ワード重み群抽出部２２３は、処理が実行されていない関数が残っている場合には、変数ｊに１を加算した上で、処理をステップＳ７１に戻す。
【００７８】
（ステップＳ７５：ワード重み計算処理）
ワード重み群抽出部２２３は、ステップＳ７１で取得されたワード使用率（ｒｊ，ｋ）と、ステップＳ７３で特定されたワード使用関数数（ｄｋ）とに基づき、ワード重み（ｗｊ，ｋ）を計算する。
ここでは、ワード重み群抽出部２２３は、ワード重み計算部２２６により、数１３に示すように、ワード重み（ｗｊ，ｋ）を計算する。
【数１３】
2019114154.tif 000005
数１３において、ｗｊ，ｋは、ワード重みである。Ｗ０は、事前に決定された定数である。ｒｊ，ｋは、ワード使用率である。ｄｋは、ワード使用関数数である。Ｄは、全ての関数の数である。
【００７９】
（ステップＳ７６：ワード終了判定処理）
ワード重み群抽出部２２３は、変数ｋがステップＳ４１で取得されたワード群に含まれるワードの数未満であるか否かを判定する。
ワード重み群抽出部２２３は、変数ｋがワードの数未満である場合には、変数ｋに１を加算し、変数ｊに１を設定した上で、処理をステップＳ７１に戻す。一方、ワード重み群抽出部２２３は、変数ｋがワードの数以上である場合には、処理を終了する。
【００８０】
図２２を参照して、実施の形態１に係るワードカウント計算部２２４の処理を説明する。
ワードカウント計算部２２４は、図１８のステップＳ４３及び図２１のステップＳ７１で呼び出される。
【００８１】
（ステップＳ８１：ワード群取得処理）
ワードカウント計算部２２４は、対象の関数について、関数内ワード群抽出部２２５を呼び出し、関数内に存在するワードの集合である関数内ワード群を取得する。対象の関数とは、図１８のステップＳ４３又は図２１のステップＳ７１で指定されている変数ｊが示す関数である。
【００８２】
変数ｉには初期値として１が設定される。
【００８３】
（ステップＳ８２：ワード一致判定処理）
ワードカウント計算部２２４は、ステップＳ８１で取得された関数内ワード群のうちｉ番目のワードが、対象のワードと一致するか否かを判定する。対象のワードとは、図１８のステップＳ４３又は図２１のステップＳ７１で指定されている変数ｋが示すワードである。
ワードカウント計算部２２４は、ｉ番目のワードが対象のワードと一致する場合には、処理をステップＳ８３に進める。一方、ワードカウント計算部２２４は、ｉ番目のワードが対象のワードと一致しない場合には、処理をステップＳ８４に進める。
【００８４】
（ステップＳ８３：ワード使用カウント追加処理）
ワードカウント計算部２２４は、ワード使用カウントに１を加算する。ワード使用カウントは、初期値として０が設定されメモリ１２に記憶されている。
【００８５】
（ステップＳ８４：ワード終了判定処理）
ワードカウント計算部２２４は、ステップＳ８１で取得された関数内ワード群の全てのワードについてステップＳ８２の処理が実行されたか否かを判定する。
ワードカウント計算部２２４は、全てのワードについて処理が実行された場合には、処理をステップＳ８５に進める。一方、ワードカウント計算部２２４は、処理が実行されていないワードが残っている場合には、変数ｉに１を加算した上で、処理をステップＳ８２に戻す。
【００８６】
（ステップＳ８５：ワード使用率計算処理）
ワードカウント計算部２２４は、ステップＳ８３で特定されたワード使用カウントを、ステップＳ８１で取得された関数内ワード群に含まれるワード数で除して、ワード使用率（ｒｊ，ｋ）を計算する。ワードカウント計算部２２４は、計算されたワード使用率（ｒｊ，ｋ）をメモリ１２に書き込む。
【００８７】
図２３を参照して、実施の形態１に係る関数内ワード群抽出部２２５の処理を説明する。
関数内ワード群抽出部２２５は、図２２のステップＳ８１で呼び出される。
【００８８】
変数ｉには初期値として１が設定される。
【００８９】
（ステップＳ９１：ワード群取得処理）
関数内ワード群抽出部２２５は、対象の関数におけるｉ番目の要素を対象の要素として、ワード群抽出部２２１を呼び出し、対象の要素の名称の一部を含むワード群を取得する。対象の関数とは、図２１のステップＳ７１で指定されている変数ｊが示す関数である。
【００９０】
（ステップＳ９２：ワード群追加処理）
関数内ワード群抽出部２２５は、ステップＳ９１で取得されたワード群を、メモリ１２に記憶された関数内ワード群に追加する。
【００９１】
（ステップＳ９３：要素終了判定処理）
関数内ワード群抽出部２２５は、対象の関数における全ての要素についてステップＳ９１及びステップＳ９２の処理が実行されたか否かを判定する。
関数内ワード群抽出部２２５は、全ての要素について処理が実行された場合には、処理を終了する。一方、関数内ワード群抽出部２２５は、処理が実行されていない要素が残っている場合には、変数ｉに１を加算した上で、処理をステップＳ９１に戻す。
【００９２】
図２４から図３１を参照して、名称評価値計算部２２の処理の具体的な例を説明する。
図１８のステップＳ４１が対象の要素をＰｒｏｄｕｃｔＮａｍｅとして実行されたとする。
すると、図１９のステップＳ５１で実行される図２０のステップＳ６１からステップＳ６７で、ＰｒｏｄｕｃｔＮａｍｅが分割され、図２４に示すようにＰｒｏｄｕｃｔとＮａｍｅとを単独ワードとして含む単独ワード群が特定される。そして、図１９のステップＳ５２で単独ワード群の組合せとして、図２５に示すように、ＰｒｏｄｕｃｔとＮａｍｅとＰｒｏｄｕｃｔＮａｍｅとをワードとして含むワード群が特定される。
【００９３】
図２３のステップＳ９１からステップＳ９３で関数内ワード群を特定する場合には、対象の関数における各要素を対象の要素として、ワード群が特定される。図２６に示すように、対象の関数がＲｅｆｒｅｓｈＰｒｏｄｕｃｔである場合には、関数ＲｅｆｒｅｓｈＰｒｏｄｕｃｔに含まれる各要素の名称から、ワード群が特定される。例えば、ｉｎＰｒｏｄｕｃｔＩＤという要素からは、ｉｎと、Ｐｒｏｄｕｃｔと、ＩＤと、ｉｎＰｒｏｄｕｃｔと、ＰｒｏｄｕｃｔＩＤと、ｉｎＰｒｏｄｕｃｔＩＤというワードが特定される。各要素の名称についてワード群が特定された結果、図２７に示すように、関数ＲｅｆｒｅｓｈＰｒｏｄｕｃｔについての関数内ワード群が特定される。
【００９４】
図２１のステップＳ７１が対象のワードがＰｒｏｄｕｃｔであるとして実行されたとする。そして、図２１のステップＳ７１で実行される図２２のステップＳ８１で、図２７に示すように関数内ワード群が特定されたとする。
すると、図２２のステップＳ８２からステップＳ８４で、図２８に示すように関数内ワード群における対象ワードＰｒｏｄｕｃｔが特定され、図２９に示すように対象ワードＰｒｏｄｕｃｔの数がカウントされる。そして、図２２のステップＳ８５で、図３０に示すように関数ＲｅｆｒｅｓｈＰｒｏｄｕｃｔにおける対象ワードＰｒｏｄｕｃｔのワード使用率が特定される。
【００９５】
各関数及び各ワードを対象として、ワード使用率が特定され、合わせてワード使用関数数が特定される。そして、特定されたワード使用率及びワード使用関数数に基づき、図３１に示すように各関数及び各ワードについてのワード重みが特定される。
図１８のステップＳ４５で、ワード重み及びワード使用カウントから、ワード評価値及び名称評価値が計算され、名称関連度一覧表３４が生成される。
【００９６】
図３２を参照して、実施の形態１に係る結果統合部２３の処理を説明する。
結果統合部２３は、要素評価値計算部２１によって計算された要素評価値と、名称評価値計算部２２によって計算された名称評価値とに基づき、複数の要素間の類似度を計算する。具体的には、結果統合部２３は、複数の要素の間の各関数についての要素評価値の類似度合い及び名称評価値の類似度合いに応じて、複数の要素間の類似度を計算する。
【００９７】
（ステップＳ１０１：評価値取得処理）
結果統合部２３は、対象の要素群と、対象の関数群と、対象の要素評価値群と、対象の名称評価値群とについて、要素関連性評価値群計算部２３１を呼び出し、各要素について関数毎の要素関連性評価値を取得する。
対象の要素群とは、評価対象要素群３２が示す全ての評価対象要素である。対象の関数群とは、ソースコード構造分析情報３１が示す全ての関数３１４である。対象の要素評価値群とは、要素関連度一覧表３３が示す全ての要素評価値である。対象の名称評価値群とは、名称関連度一覧表３４が示す全ての名称評価値である。
【００９８】
結果統合部２３は、対象の要素群から選択可能な２つの要素の全ての組合せに対してステップＳ１０２の処理を実行する。ここで、並び順の異なる２つの要素は同じ組合せとする。
【００９９】
（ステップＳ１０２：類似度計算処理）
結果統合部２３は、対象とする２つの要素それぞれについての関数毎の要素関連性評価値に基づき、対象とする２つの要素の類似度を計算する。
ここでは、結果統合部２３は、ベクトル類似度計算部２３３により、数１４に示すように、対象とする２つの要素の類似度を計算する。
【数１４】
2019114154.tif 000006
数１４において、ｒは、類似度である。ａ→＝（ａ１，ａ２，．．．）は、一方の要素についての要素関連性評価値ベクトルである。要素関連性評価値ベクトルの各要素ａ１，ａ２，．．．は、一方の要素の各関数についての要素関連性評価値である。ｂ→＝（ｂ１，ｂ２，．．．）は、他方の要素についての要素関連性評価値ベクトルである。要素関連性評価値ベクトルの各要素ｂ１，ｂ２，．．．は、他方の要素の各関数についての要素関連性評価値である。
【０１００】
（ステップＳ１０３：結果記憶処理）
結果統合部２３は、各組合せについて計算された類似度を、評価一覧表３５としてメモリ１２又はストレージ１３に書き込む。
【０１０１】
図３３を参照して、実施の形態１に係る要素関連性評価値群計算部２３１の処理を説明する。
要素関連性評価値群計算部２３１は、図３２のステップＳ１０１で呼び出される。
【０１０２】
変数ｉ，ｊには初期値として１が設定される。
【０１０３】
（ステップＳ１１１：要素関連性評価値計算処理）
要素関連性評価値群計算部２３１は、評価対象要素群３２におけるｉ番目の要素を対象の要素とし、ソースコード構造分析情報３１におけるｊ番目の関数を対象の関数として、要素評価値と名称評価値とに基づき、要素関連性評価値を計算する。
ここでは、要素関連性評価値群計算部２３１は、関連性評価値計算部２３２により、数１５に示すように、要素関連性評価値を計算する。
【数１５】
2019114154.tif 000007
数１５において、ｔｉ，ｊは、ｉ番目の要素のｊ番目の関数についての要素関連性評価値である。ｙｉ，ｊは、ｉ番目の要素のｊ番目の関数についての要素評価値である。ｕｉ，ｊは、ｉ番目の要素のｊ番目の関数についての名称評価値である。
【０１０４】
（ステップＳ１１２：関数終了判定処理）
要素関連性評価値群計算部２３１は、全ての関数について処理が実行されたか否かを判定する。関数とは、ソースコード構造分析情報３１が示す関数３１４のことである。
要素関連性評価値群計算部２３１は、全ての関数について処理が実行された場合には、処理をステップＳ１１３に進める。一方、要素関連性評価値群計算部２３１は、処理が実行されていない関数が残っている場合には、変数ｊに１を加算した上で、処理をステップＳ１１１に戻す。
【０１０５】
（ステップＳ１１３：要素終了判定処理）
要素関連性評価値群計算部２３１は、全ての対象の要素についてステップＳ１１１の処理が実行されたか否かを判定する。対象の要素とは、評価対象要素群３２が示す評価対象要素である。
要素関連性評価値群計算部２３１は、全ての対象の要素について処理が実行された場合には、処理を終了する。一方、要素関連性評価値群計算部２３１は、処理が実行されていない対象の要素が残っている場合には、変数ｉに１を加算し、変数ｊに１を設定した上で、処理をステップＳ１１１に戻す。
【０１０６】
＊＊＊実施の形態１の効果＊＊＊
以上のように、実施の形態１に係る要素類似判定装置１０は、ソースコードに含まれる各関数における要素の使用と、各関数における要素の名称の使用とに基づき、要素間の類似度を計算する。
これにより、ソースコードにおける要素の類似性を適切に評価することが可能である。その結果、類似する要素を適切に特定することが可能になり、ソースコードの冗長性を減らすことができる。そして、ソースコードの修正工数の削減、及び、メモリ使用量の削減に繋がる。
【０１０７】
図３４に示すソースコードにおいて、要素ｒｅｃＡ．ＥｌｅｍＦｏｏと、要素ｒｅｃＢ．ＥｌｅｍＢａｒとは、同じ関数で使用される傾向があり、類似性がある。そのため、要素ｒｅｃＡ．ＥｌｅｍＦｏｏと、要素ｒｅｃＢ．ＥｌｅｍＢａｒとを１つの要素にまとめることにより、冗長性の削減に繋がる可能性が高い。
しかし、要素ｒｅｃＡ．ＥｌｅｍＦｏｏと、要素ｒｅｃＢ．ＥｌｅｍＢａｒとは、各関数でそのまま使用されず、媒介要素を介して使用される場合がある。例えば、要素ｒｅｃＡ．ＥｌｅｍＦｏｏは、媒介要素ＦｏｏＯｆＥｌｅｍを介して使用される場合がある。そのため、単純に要素ｒｅｃＡ．ＥｌｅｍＦｏｏと、要素ｒｅｃＢ．ＥｌｅｍＢａｒとが各関数で使用される回数に基づき要素の類似性を評価しようとしても、類似性を適切に評価できない可能性がある。
ここで、媒介要素は、元の要素と類似する名称を用いる可能性が高い。そのため、要素ｒｅｃＡ．ＥｌｅｍＦｏｏの名称の一部の文字列を含む名称の要素と、要素ｒｅｃＢ．ＥｌｅｍＢａｒの名称の一部の文字列を含む名称の要素とが各関数で使用される回数に基づき要素の類似性を評価することが考えられる。この方法では、同じような名称を多く使用するソースコードでは適切に要素の類似性を評価できない可能性がある。
【０１０８】
そこで、実施の形態１に係る要素類似判定装置１０は、この２つの評価方法を組み合わせて要素の類似性を評価している。つまり、対象とする要素が各関数で使用される回数に基づく類似性の評価と、対象とする要素の名称の一部の文字列を含む名称の要素が各関数で使用される回数に基づく類似性の評価とを組み合わせて、対象とする要素の類似性を評価している。
これにより、対象とする要素が関数において媒介変数を介して使用される場合にも、一定の類似性を見出すことが可能となる。また、同じような名称を多く使用するソースコードであっても、媒介変数を介して使用されていない限り一定の類似性を見出すことが可能となる。
【０１０９】
図３４に示すソースコードにおいて、要素ｒｅｃＡ．ＥｌｅｍＦｏｏと、要素ｒｅｃＢ．ＥｌｅｍＢａｒとの類似性を評価した場合には、図３５に示すようになる。
対象とする要素が各関数で使用される回数に基づき類似性を評価した場合には、関数ｆ４と関数ｆ５との間では、使用回数が一致しており、類似していると判断できる。しかし、関数ｆ６と関数ｆ７との間では、使用回数が一致せず、類似していると判断できない。
一方、対象とする要素の名称の一部の文字列を含む名称の要素が各関数で使用される回数に基づく類似性を評価した場合には、関数ｆ４と関数ｆ５との間と、関数ｆ６と関数ｆ７との間との両方で回数が概ね一致しており、類似していると判断できる。但し、他の関数でも同様の名称が使用されている可能性があり、評価精度は高くない可能性がある。
これらの判断結果が統合され、要素ｒｅｃＡ．ＥｌｅｍＦｏｏと、要素ｒｅｃＢ．ＥｌｅｍＢａｒとの類似性が評価される。
【０１１０】
＊＊＊他の構成＊＊＊
＜変形例１＞
実施の形態１では、各機能構成要素がソフトウェアで実現された。しかし、変形例１として、各機能構成要素はハードウェアで実現されてもよい。この変形例１について、実施の形態１と異なる点を説明する。
【０１１１】
図３６を参照して、変形例１に係る要素類似判定装置１０の構成を説明する。
各機能構成要素がハードウェアで実現される場合には、要素類似判定装置１０は、プロセッサ１１とメモリ１２とストレージ１３とに代えて、電子回路１５を備える。電子回路１５は、各機能構成要素と、メモリ１２と、ストレージ１３との機能とを実現する専用の回路である。
【０１１２】
電子回路１５としては、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ロジックＩＣ、ＧＡ（Ｇａｔｅ  Ａｒｒａｙ）、ＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）、ＦＰＧＡ（Ｆｉｅｌｄ−Ｐｒｏｇｒａｍｍａｂｌｅ  Ｇａｔｅ  Ａｒｒａｙ）が想定される。
各機能構成要素を１つの電子回路１５で実現してもよいし、各機能構成要素を複数の電子回路１５に分散させて実現してもよい。
【０１１３】
＜変形例２＞
変形例２として、一部の各機能構成要素がハードウェアで実現され、他の各機能構成要素がソフトウェアで実現されてもよい。
【０１１４】
プロセッサ１１とメモリ１２とストレージ１３と電子回路１５とを処理回路という。つまり、各機能構成要素の機能は、処理回路により実現される。
【符号の説明】
【０１１５】
１０  要素類似判定装置、１１  プロセッサ、１２  メモリ、１３  ストレージ、１４  通信インタフェース、１５  電子回路、２１  要素評価値計算部、２１１  直接／間接カウント計算部、２１２  要素カウント計算部、２１３  要素統合評価計算部、２２  名称評価値計算部、２２１  ワード群抽出部、２２２  単独ワード群抽出部、２２３  ワード重み群抽出部、２２４  ワードカウント計算部、２２５  関数内ワード群抽出部、２２６  ワード重み計算部、２２７  名称統合評価値計算部、２３  結果統合部、２３１  要素関連性評価値群計算部、２３２  関連性評価値計算部、２３３  ベクトル類似度計算部、３１  ソースコード構造分析情報、３１１  要素、３１２  構造名称、３１３  名称、３１４  関数、３１５  構造名称、３１６  名称、３１７  使用要素、３１８  呼出し関数、３２  評価対象要素群、３３  要素関連度一覧表、３４  名称関連度一覧表、３５  評価一覧表。
【図１】
2019114154.tif 000008
【図２】
2019114154.tif 000009
【図３】
2019114154.tif 000010
【図４】
2019114154.tif 000011
【図５】
2019114154.tif 000012
【図６】
2019114154.tif 000013
【図７】
2019114154.tif 000014
【図８】
2019114154.tif 000015
【図９】
2019114154.tif 000016
【図１０】
2019114154.tif 000017
【図１１】
2019114154.tif 000018
【図１２】
2019114154.tif 000019
【図１３】
2019114154.tif 000020
【図１４】
2019114154.tif 000021
【図１５】
2019114154.tif 000022
【図１６】
2019114154.tif 000023
【図１７】
2019114154.tif 000024
【図１８】
2019114154.tif 000025
【図１９】
2019114154.tif 000026
【図２０】
2019114154.tif 000027
【図２１】
2019114154.tif 000028
【図２２】
2019114154.tif 000029
【図２３】
2019114154.tif 000030
【図２４】
2019114154.tif 000031
【図２５】
2019114154.tif 000032
【図２６】
2019114154.tif 000033
【図２７】
2019114154.tif 000034
【図２８】
2019114154.tif 000035
【図２９】
2019114154.tif 000036
【図３０】
2019114154.tif 000037
【図３１】
2019114154.tif 000038
【図３２】
2019114154.tif 000039
【図３３】
2019114154.tif 000040
【図３４】
2019114154.tif 000041
【図３５】
2019114154.tif 000042
【図３６】
2019114154.tif 000043