(57)【要約】【課題】類似する処理を行うモジュールの検出漏れを軽減する。【解決手段】情報処理プログラムは、第１モジュール群に含まれる各モジュールと、第２モジュール群に含まれる各モジュールとの類似度を算出し、類似度に基づいて、第１モジュールペアを選択し、第１モジュールペアと関連する第２モジュールペアを選択し、第１モジュールペアの類似度と第１モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第１閾値との比較結果、および第２モジュールペアの類似度と第２モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第２閾値との比較結果に基づいて、第１モジュールペアに含まれるモジュール同士の処理が類似するかを判定する処理をコンピュータに実行させる。【選択図】図１５
2020119216.tif 000002
【特許請求の範囲】
【請求項１】
第１モジュール群に含まれる各モジュールと、第２モジュール群に含まれる各モジュールとの類似度を算出し、
前記類似度に基づいて、前記第１モジュール群に含まれるモジュールと前記第２モジュール群に含まれるモジュールとのペアである第１モジュールペアを選択し、
前記第１モジュール群に含まれるモジュールと前記第２モジュール群に含まれるモジュールとのペアであって、前記第１モジュールペアと関連する第２モジュールペアを選択し、
前記第１モジュールペアの類似度と前記第１モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第１閾値との比較結果、および前記第２モジュールペアの類似度と前記第２モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第２閾値との比較結果に基づいて、前記第１モジュールペアに含まれるモジュール同士の処理が類似するかを判定し、
処理が類似すると判定された前記第１モジュールペアを示す情報を出力する
処理をコンピュータに実行させるための情報処理プログラム。
【請求項２】
処理が類似すると判定された前記第１モジュールペアの数に基づいて、前記第１モジュール群と前記第２モジュール群との類似度を算出し、
前記第１モジュール群と前記第２モジュール群との類似度を出力する
処理を前記コンピュータに実行させることを特徴とする請求項１記載の情報処理プログラム。
【請求項３】
前記第１モジュールペアの類似度が、前記第１閾値および前記第２閾値以上の所定の閾値以上である場合、前記第１モジュールペアに含まれるモジュール同士の処理が類似すると判定し、
前記第１モジュールペアの類似度が、前記所定の閾値未満である場合、前記第１モジュールペアの類似度と前記第１閾値との比較結果、および前記第２モジュールペアの類似度と前記第２閾値との比較結果に基づいて、前記第１モジュールペアに含まれるモジュール同士の処理が類似するかを判定する
処理を前記コンピュータに実行させることを特徴とする請求項１または２記載の情報処理プログラム。
【請求項４】
前記第１モジュールに含まれる各モジュールおよび前記第２モジュール群に含まれる各モジュールについて、モジュール間の呼び出し関係を解析し、
前記第１モジュールペアのうち前記第１モジュール群に含まれるモジュールを呼び出すモジュールと前記第１モジュールペアのうち前記第２モジュール群に含まれるモジュールを呼び出すモジュールとのペア、および、前記第１モジュールペアのうち前記第１モジュール群に含まれるモジュールに呼び出されるモジュールと前記第１モジュールペアのうち前記第２モジュール群に含まれるモジュールに呼び出されるモジュールとのペアを、前記第２モジュールペアとして選択する
処理を前記コンピュータに実行させることを特徴とする請求項１乃至３のうち何れか１項に記載の情報処理プログラム。
【請求項５】
コンピュータが、
第１モジュール群に含まれる各モジュールと、第２モジュール群に含まれる各モジュールとの類似度を算出し、
前記類似度に基づいて、前記第１モジュール群に含まれるモジュールと前記第２モジュール群に含まれるモジュールとのペアである第１モジュールペアを選択し、
前記第１モジュール群に含まれるモジュールと前記第２モジュール群に含まれるモジュールとのペアであって、前記第１モジュールペアと関連する第２モジュールペアを選択し、
前記第１モジュールペアの類似度と前記第１モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第１閾値との比較結果、および前記第２モジュールペアの類似度と前記第２モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第２閾値との比較結果に基づいて、前記第１モジュールペアに含まれるモジュール同士の処理が類似するかを判定し、
処理が類似すると判定された前記第１モジュールペアを示す情報を出力する
処理を実行することを特徴とする情報処理方法。
【請求項６】
第１モジュール群に含まれる各モジュールと、第２モジュール群に含まれる各モジュールとの類似度を算出する第１算出部と、
前記類似度に基づいて、前記第１モジュール群に含まれるモジュールと前記第２モジュール群に含まれるモジュールとのペアである第１モジュールペアを選択する第１選択部と、
前記第１モジュール群に含まれるモジュールと前記第２モジュール群に含まれるモジュールとのペアであって、前記第１モジュールペアと関連する第２モジュールペアを選択する第２選択部と、
前記第１モジュールペアの類似度と前記第１モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第１閾値との比較結果、および前記第２モジュールペアの類似度と前記第２モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第２閾値との比較結果に基づいて、前記第１モジュールペアに含まれるモジュール同士の処理が類似するかを判定する判定部と、
処理が類似すると判定された前記第１モジュールペアを示す情報を出力する出力部と
を備えることを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理プログラム、情報処理方法、および情報処理装置に関する。
【背景技術】
【０００２】
業務システムを長期間使用する場合、機能を変更するための保守開発が行われる。また、業務システムに複数の機能が実装されている場合、複数の機能の中には、類似した処理を行う機能が含まれる可能性がある。
【０００３】
関連する技術として、ソースコードに含まれる機能の呼出元及び呼出先を対のノードとし、ノード対のそれぞれの類似度を算出する技術が提案されている（例えば、特許文献１を参照）。
【０００４】
また、関連する技術として、入力ソースコードから、類似度を解析し、予め決めた閾値以上の一致が検出されたコードをコードクローンとして抽出する技術が提案されている（例えば、特許文献２を参照）。
【０００５】
また、関連する技術として、当初のソースコードと、リファクタリング実施後のソースコードとの等価性を検証する技術が提案されている（例えば、特許文献３を参照）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１７−４５３５４号公報
【特許文献２】特開２０１５−１７９３６９号公報
【特許文献３】国際公開第２０１５／０２９１５４号
【発明の概要】
【発明が解決しようとする課題】
【０００７】
例えば、業務システムの設計変更が行われた場合、業務システム内に用いられるソフトウェアのモジュール毎に改修が行われる。あるモジュールを改修する場合、そのモジュールと類似する処理を行うモジュールの改修が必要であるかをユーザが検討し、必要であれば改修が行われる。
【０００８】
しかし、類似する処理を行うモジュールの検出をユーザが適切に行うことは困難であり、例えば、類似する処理を行うモジュール同士を類似していないと判断してしまう可能性がある。
【０００９】
１つの側面として、本発明は、類似する処理を行うモジュールの検出漏れを軽減することを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、情報処理プログラムは、第１モジュール群に含まれる各モジュールと、第２モジュール群に含まれる各モジュールとの類似度を算出し、前記類似度に基づいて、前記第１モジュール群に含まれるモジュールと前記第２モジュール群に含まれるモジュールとのペアである第１モジュールペアを選択し、前記第１モジュール群に含まれるモジュールと前記第２モジュール群に含まれるモジュールとのペアであって、前記第１モジュールペアと関連する第２モジュールペアを選択し、前記第１モジュールペアの類似度と前記第１モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第１閾値との比較結果、および前記第２モジュールペアの類似度と前記第２モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第２閾値との比較結果に基づいて、前記第１モジュールペアに含まれるモジュール同士の処理が類似するかを判定し、処理が類似すると判定された前記第１モジュールペアを示す情報を出力する処理をコンピュータに実行させる。
【発明の効果】
【００１１】
１つの側面によれば、類似する処理を行うモジュールの検出漏れを軽減することができる。
【図面の簡単な説明】
【００１２】
【図１】モジュールの類似度をコールグラフ上に表した例を示す図である。
【図２】情報処理装置の機能構成の一例を示す図である。
【図３】従業員検索機能モジュール群内のモジュール間の呼び出し関係を示す情報の一例を示す図である。
【図４】商品検索機能モジュール群内のモジュール間の呼び出し関係を示す情報の一例を示す図である。
【図５】モジュール間の類似度の算出方法の第１の例を示す図である。
【図６】モジュール間の類似度の算出方法の第２の例を示す図である。
【図７】モジュール間の類似度の算出方法の第３の例を示す図である。
【図８】第１モジュールペアの選択方法の一例を示す図である。
【図９】モジュール間類似度情報の一例を示す図である。
【図１０】モジュール同士の処理が類似するかの判定方法の一例を示す図である。
【図１１】第１閾値および第２閾値の設定方法の他の例を示す図である。
【図１２】類似モジュールペアを示す情報の一例を示す図である。
【図１３】類似モジュールペアを示す最大共通部分グラフを示す図である。
【図１４】モジュール群間の類似度を示す情報の一例を示す図である。
【図１５】実施形態の処理の一例を示すフローチャートである。
【図１６】図１５のステップＳ１０１の処理の詳細を示すフローチャートである。
【図１７】図１５のステップＳ１０２の処理の詳細を示すフローチャートである。
【図１８】図１５のステップＳ１０３の処理の詳細を示すフローチャートである。
【図１９】図１５のステップＳ１０４の処理の詳細を示すフローチャートである。
【図２０】情報処理装置のハードウェア構成の一例を示す図である。
【発明を実施するための形態】
【００１３】
以下、図面を参照して、実施形態について説明する。図１は、モジュールの類似度をコールグラフ上に表した例を示す図である。図１は、従業員検索機能を実現する従業員検索機能モジュール群と、商品検索機能を実現する商品検索機能モジュール群とがコールグラフとして表されている。コールグラフ上の各ノードは、モジュールを示す。なお、モジュールは、ソフトウェアの構成要素であり、例えば、ソースコードファイル、またはソースコード内に定義されている関数等である。図１に示すコールグラフでは、呼び出し元のモジュールを示すノードから呼び出し先のモジュールを示すノードに向かう矢印により、ノード間が接続されている。
【００１４】
図１において、類似度を算出する対象のモジュール間が点線で接続されている。また、その点線の近傍には、モジュール間の類似度が表示されている。類似度を算出する際に、例えば、ソースコード内の文字列を行毎に比較し、一致している行数の割合を類似度とすることが考えられる。しかし、各モジュールの開発担当者が異なる場合、同様の処理を行うモジュールであってもソースコードの記述が類似しない場合がある。そのため、類似している処理を行うモジュールを類似していないと判定される可能性がある。また、同様の処理を行うモジュールであっても処理対象のデータが異なることによりソースコードの記述が類似しない可能性がある。従業員検索機能モジュール群の処理対象のデータは、従業員データであり、商品検索機能モジュール群の処理対象のデータは、商品データである。
【００１５】
例えば、モジュール同士が類似しているかの判定に用いる閾値を０．７とした場合、図１に示す類似度のうち、従業員検索＿検索と商品検索＿検索との類似度（０．８）のみ、閾値を超えている。この場合、従業員検索＿検索と商品検索＿検索とのペアのみ、類似するモジュールペアであると判定される。しかし、実際に類似している処理を行うモジュールのペアが他に存在する可能性がある。また、単に閾値を下げてしまうと、処理が類似していないモジュールペアが類似していると判定されるおそれがある。
【００１６】
また、類似するモジュールペアの数に基づいて、モジュール群同士の類似度を算出することが考えられる。しかし、上述のように類似している処理を行うモジュールを類似していないと判定されると、モジュール群同士の類似度が低くなる。そのため、同様の機能を実現するモジュール群同士の類似度が低くなってしまう。
【００１７】
図２は、情報処理装置１の機能構成の一例を示す図である。情報処理装置１は、解析部１１と第１算出部１２と第１選択部１３と第２選択部１４と設定部１５と判定部１６と第２算出部１７と出力部１８と記憶部１９とを含む。情報処理装置１は、コンピュータの一例である。
【００１８】
解析部１１は、複数のモジュール群に含まれる各モジュールのソースコードを取得し、モジュール間の呼び出し関係を解析し、呼び出し関係を示す情報を生成する。解析部１１が解析する複数のモジュール群には、後述する第１モジュール群および第２モジュール群が含まれる。モジュール群は、特定の機能を実現するためのモジュールの集合である。解析部１１は、例えば、ソースコードの構文解析を行い、呼び出し文を抽出することにより、モジュール間の呼び出し関係を解析する。
【００１９】
第１算出部１２は、第１モジュール群に含まれる各モジュールと、第２モジュール群に含まれる各モジュールとの類似度を算出する。第１モジュール群および第２モジュール群は、例えば、類似度の算出対象としてユーザに指定されたモジュール群であるとする。第１算出部１２は、例えば、第１モジュール群に含まれる各モジュールと、第２モジュール群に含まれる各モジュールとの全ての組み合わせについて、類似度を算出する。本実施形態において、類似度は、０から１．０までの数値で表され、類似しているほど高い数値となる。
【００２０】
第１選択部１３は、第１算出部１２が算出した類似度に基づいて、第１モジュール群に含まれるモジュールと第２モジュール群に含まれるモジュールとのペアである第１モジュールペアを選択する。第１選択部１３は、例えば、第１モジュール群内の特定のモジュールと、その特定のモジュールと最も類似度が高い第２モジュール群内のモジュールとを第１モジュールペアとして選択する処理を行う。そして、第１選択部１３は、第１モジュール群内の全モジュールに対してその処理を繰り返す。
【００２１】
第２選択部１４は、解析部１１の解析結果に基づいて、第１モジュール群に含まれるモジュールと第２モジュール群に含まれるモジュールとのペアであって、第１モジュールペアと関連する第２モジュールペアを選択する。第２選択部１４は、一つの第１モジュールペアに対して、複数の第２モジュールペアを選択してもよい。
【００２２】
第２選択部１４は、例えば、第１モジュールペアのうち第１モジュール群に含まれるモジュールを呼び出すモジュールと第１モジュールペアのうち第２モジュール群に含まれるモジュールを呼び出すモジュールとのペアを第２モジュールペアとして選択する。また、第２選択部１４は、例えば、第１モジュールペアのうち第１モジュール群に含まれるモジュールに呼び出されるモジュールと第１モジュールペアのうち第２モジュール群に含まれるモジュールに呼び出されるモジュールとのペアを第２モジュールペアとして選択する。
【００２３】
設定部１５は、第１モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第１閾値を設定する。また、設定部１５は、第２モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第２閾値を設定する。なお、特定のモジュールに関連するモジュールの数は、例えば、その特定のモジュールを呼び出すモジュールの数と、その特定のモジュールに呼び出されるモジュールの数との合計であるとする。予め、類似度との比較に用いる所定の閾値が定められている場合、設定部１５は、第１閾値および第２閾値を、以下の式（１）、式（２）に基づいて設定する。
【００２４】
（第１閾値）＝（所定の閾値）／（第１モジュールペアに含まれるモジュールに関連するモジュールの数＋１）      （１）
（第２閾値）＝（所定の閾値）／｛（第２モジュールペアに含まれるモジュールに関連するモジュールの数）＋１｝      （２）
【００２５】
式（１）、式（２）の右辺の分母の最小値は１であるため、第１閾値および第２閾値は、所定の閾値以下の値となる。すなわち、所定の閾値は、第１閾値および第２閾値以上の値である。なお、複数の第２モジュールペアが存在する場合、設定部１５は、第２モジュールペア毎に第２閾値を設定する。
【００２６】
判定部１６は、第１算出部１２が算出した第１モジュールペアの類似度が、所定の閾値以上である場合、第１モジュールペアに含まれるモジュール同士の処理が類似すると判定する。以下、判定部１６により、処理が類似すると判定された第１モジュールペアを類似モジュールペアと称することがある。
【００２７】
判定部１６は、第１モジュールペアの類似度が、所定の閾値未満である場合、第１モジュールペアの類似度と第１閾値とを比較し、第２モジュールペアの類似度と第２閾値とを比較する。そして、判定部１６は、第１モジュールペアの類似度と第１閾値との比較結果、および第２モジュールペアの類似度と第２閾値との比較結果に基づいて、第１モジュールペアに含まれるモジュール同士の処理が類似するかを判定する。判定部１６は、例えば、第１モジュールペアの類似度が第１閾値以上であり、かつ、全ての第２モジュールペアの類似度が第２閾値以上である場合、第１モジュールペアに含まれるモジュール同士の処理が類似すると判定する。そして、判定部１６は、その第１モジュールペアを類似モジュールペアとして記憶する。
【００２８】
第２算出部１７は、判定部１６により処理が類似すると判定された第１モジュールペアの数に基づいて、第１モジュール群と第２モジュール群との類似度を算出する。第２算出部１７は、例えば、以下の式（３）に基づいて、第１モジュール群と第２モジュール群との類似度を算出する。ｍａｘ（第１モジュール群のモジュール数，第２モジュール群のモジュール数）は、第１モジュール群のモジュール数と第２モジュール群のモジュール数とのうち大きい方の数である。
【００２９】
（モジュール群間の類似度）＝（類似モジュールペア数）／ｍａｘ｛第１モジュール群のモジュール数，第２モジュール群のモジュール数｝      （３）
【００３０】
出力部１８は、判定部１６により処理が類似すると判定された第１モジュールペア（類似モジュールペア）を示す情報を出力する。また、出力部１８は、第２算出部１７が算出した、第１モジュール群と第２モジュール群との類似度を出力する。出力部１８は、類似モジュールペアを示す情報と、第１モジュール群と第２モジュール群との類似度とを、表示装置に表示させてもよいし、他の情報処理装置等に送信してもよい。
【００３１】
記憶部１９は、実施形態の処理に関連する各種情報を記憶する。記憶部１９は、例えば、解析部１１が生成した呼び出し関係を示す情報、第１算出部１２が算出したモジュール間の類似度、設定部１５が設定した第１閾値および第２閾値を記憶する。また、記憶部１９は、判定部１６により判定された類似モジュールペアを示す情報、第２算出部１７が算出したモジュール群間の類似度等を記憶する。
【００３２】
図３は、従業員検索機能モジュール群内のモジュール間の呼び出し関係を示す情報の一例を示す図である。解析部１１は、従業員検索機能モジュール群内のモジュール間の呼び出し関係を解析した場合、図３の例に示す、呼び出し関係を示す情報を生成する。呼び出し元モジュールは、他のモジュールを呼び出すモジュールである。呼び出し先モジュールは、呼び出し元モジュールに呼び出されるモジュールである。図３では、従業員検索機能モジュール群内における、呼び出し元モジュールを示す情報と、呼び出し先モジュールを示す情報とが対応づけられている。
【００３３】
図４は、商品検索機能モジュール群内のモジュール間の呼び出し関係を示す情報の一例を示す図である。解析部１１は、商品検索機能モジュール群内のモジュール間の呼び出し関係を解析した場合、図４の例に示す、呼び出し関係を示す情報を生成する。図４は、商品検索機能モジュール群内における、呼び出し元モジュールを示す情報と、呼び出し元モジュールに呼び出されるモジュールである、呼び出し先モジュールを示す情報とが対応づけられている。
【００３４】
図５は、モジュール間の類似度の算出方法の第１の例を示す図である。第１算出部１２は、モジュール間の類似度を算出する際に、例えば、ソースコードの行毎に一致しているかを判定し、一致している行数の割合を類似度として算出する。図５に示す例では、算出対象のモジュール１とモジュール２は、いずれも１０行のソースコードであり、４行のソースコードが一致する。この場合、モジュール１とモジュール２との類似度は０．４となる。
【００３５】
図６は、モジュール間の類似度の算出方法の第２の例を示す図である。第１算出部１２は、モジュール間の類似度を算出する際に、ソースコード内の単語毎に一致しているかを判定し、一致している単語の割合を類似度として算出する。図５に示す例では、算出対象のモジュール３とモジュール４は、いずれも"MOVE","END","TO","LAB-STAT","."という５つの単語が同じ順序で記載されている。すなわち、全ての単語と語順が一致しているので、モジュール３とモジュール４との類似度は１．０となる。なお、図６に示す例において、第１算出部１２は、ソースコード内の改行やスペースを無視して類似度を算出する。
【００３６】
図７は、モジュール間の類似度の算出方法の第３の例を示す図である。第１算出部１２は、モジュール間の類似度を算出する際に、構文毎にソースコードが実質的に一致しているかを所定のルールに従って判定し、一致している構文の割合を類似度として算出する。例えば、if(*)という文の後の"{"とそれに対応する"}"を省略可能であるというルールが存在しているとする。図７に示す例において、そのルールに従い、算出対象のモジュール５内の構文から"{"と"}"を除くと、モジュール６内の構文と一致する。よって、第１算出部１２は、モジュール５内の構文とモジュール６内の構文が、一致していると判定する。図７に示す例では、モジュール間の全ての構文が一致しているので、モジュール５とモジュール６との類似度は１．０となる。
【００３７】
図８は、第１モジュールペアの選択方法の一例を示す図である。第１算出部１２は、第１モジュール群に含まれる各モジュールと、第２モジュール群に含まれる各モジュールとの全てに組み合わせについて、類似度を算出する。図８に示す例では、従業員検索機能モジュール群内のモジュール「従業員検索＿遷移」と、商品検索機能モジュール群内の全モジュールとの類似度が示されている。
【００３８】
図８に示す類似度のうち、モジュール「従業員検索＿遷移」とモジュール「商品検索＿遷移」との類似度が最も高い。よって、第１選択部１３は、「従業員検索＿遷移」とモジュール「商品検索＿遷移」との組を第１モジュールペアとして選択する。第１選択部１３は、同様に、従業員検索機能モジュール群内の他のモジュールと商品検索機能モジュール群内の全モジュールとの類似度を算出し、第１モジュールペアを選択する。出力部１８は、図８に示すようなコールグラフを表示装置に表示させてもよい。
【００３９】
図９は、モジュール間類似度情報の一例を示す図である。図９は、第１算出部１２が算出した、従業員検索機能モジュール群に含まれる各モジュールと、商品検索機能モジュール群に含まれる各モジュールとの類似度を示す情報である。図９に示すように、第１算出部１２は、従業員検索機能モジュール群に含まれる各モジュールと、商品検索機能モジュール群に含まれる各モジュールとの全ての組み合わせについての類似度を算出し、記録する。
【００４０】
図１０は、モジュール同士の処理が類似するかの判定方法の一例を示す図である。図１０に示す例では、モジュール「従業員検索＿初期表示」と「商品検索＿初期表示」とを第１モジュールペアとして、第１モジュールペアに含まれるモジュール同士の処理が類似するかを判定する方法について示している。まず、判定処理の前に行われる第２モジュールペアの選択と、閾値の設定について説明する。
【００４１】
第２選択部１４は、「従業員検索＿初期表示」を呼び出すモジュールである「従業員検索＿遷移」と、「商品検索＿初期表示」を呼び出すモジュールである「商品検索＿遷移」とのペアを第２モジュールペアとして選択する。さらに、第２選択部１４は、「従業員検索＿初期表示」に呼び出されるモジュールである「従業員検索＿画面出力」と、「商品検索＿初期表示」に呼び出されるモジュールである「商品検索＿画面出力」とのペアを第２モジュールペアとして選択する。
【００４２】
上述のように、特定のモジュールに関連するモジュールの数は、その特定のモジュールを呼び出すモジュールの数と、その特定のモジュールに呼び出されるモジュールの数との合計である。よって、「従業員検索＿初期表示」に関連するモジュールと「商品検索＿初期表示」に関連するモジュールの数は、どちらも２である。設定部１５は、第１モジュールペアに用いる第１閾値を、上記式（１）に基づいて、以下の式（４）のように算出する。なお、所定の閾値は、０．７であるとする。
【００４３】
第１閾値＝０．７／（２＋１）＝０．２３３      （４）
【００４４】
ただし、第１モジュールペアに含まれる一方のモジュールに関連するモジュールの数と他方のモジュールに関連するモジュールの数がそれぞれ異なっている可能性がある。その場合、設定部１５は、例えば、一方のモジュールに関連するモジュールの数と他方のモジュールに関連するモジュールの数の平均値を、式（１）の「第１モジュールペアに含まれるモジュールに関連するモジュールの数」として用いる。
【００４５】
設定部１５は、「従業員検索＿遷移」と「商品検索＿遷移」とのペアである第２モジュールペアに用いる第２閾値（遷移）を、上記式（２）に基づいて、以下の式（５）のように算出する。なお、「従業員検索＿遷移」と「商品検索＿遷移」は、それぞれ呼び出すモジュールが１つ存在するため、「従業員検索＿遷移」に関連するモジュールと「商品検索＿遷移」に関連するモジュールの数は、どちらも１である。
【００４６】
第２閾値（遷移）＝０．７／（１＋１）＝０．３５      （５）
【００４７】
設定部１５は、「従業員検索＿画面出力」と「商品検索＿画面出力」とのペアである第２モジュールペアに用いる第２閾値（画面出力）を、上記式（２）に基づいて、以下の式（６）のように算出する。なお、「従業員検索＿画面出力」と「商品検索＿画面出力」を呼び出すモジュールがそれぞれ４つ存在するため、「従業員検索＿画面出力」に関連するモジュールと「従業員検索＿画面出力」に関連するモジュールの数は、どちらも４である。
【００４８】
第２閾値（画面出力）＝０．７／（４＋１）＝０．１４      （６）
【００４９】
なお、第２モジュールペアに含まれる一方のモジュールに関連するモジュールの数と他方のモジュールに関連するモジュールの数がそれぞれ異なっている可能性がある。その場合、設定部１５は、例えば、一方のモジュールに関連するモジュールの数と他方のモジュールに関連するモジュールの数の平均値を、式（２）の「第２モジュールペアに含まれるモジュールに関連するモジュールの数」として用いる。
【００５０】
判定部１６は、第１モジュールペアの類似度（「従業員検索＿初期表示」と「商品検索＿初期表示」との類似度）が、所定の閾値（０．７）以上であるか判定する。「従業員検索＿初期表示」と「商品検索＿初期表示」との類似度は、０．２５であるため、所定の閾値（０．７）未満である。
【００５１】
判定部１６は、第１モジュールペアの類似度が、所定の閾値未満であるため、第１モジュールペアの類似度と第１閾値とを比較し、第２モジュールペアの類似度と第２閾値とを比較する。第１モジュールペアである「従業員検索＿初期表示」と「商品検索＿初期表示」とのペアの類似度（０．２５）は、第１閾値（０．２３３）以上である。また、第２モジュールペアである「従業員検索＿遷移」と「商品検索＿遷移」とのペアの類似度（０．４）は、第２閾値（遷移）（０．３５）以上である。また、第２モジュールペアである「従業員検索＿画面出力」と「商品検索＿画面出力」とのペアの類似度（０．２）は、第２閾値（画面出力）（０．１４）以上である。よって、判定部１６は、「従業員検索＿初期表示」と「商品検索＿初期表示」の処理が類似すると判定する。
【００５２】
関連するモジュール（呼び出すモジュールおよび呼び出されるモジュール）の数が多いモジュール間の類似度は、低くなる可能性が高い。よって、式（１）、（２）に示すように、第１閾値および第２閾値は、関連するモジュールの数が多いほど小さくなるように設定される。これにより、情報処理装置１は、類似する処理を行うモジュールの検出漏れを軽減することができる。
【００５３】
また、第１モジュールペアの類似度と第１モジュールペアに関連する第２モジュールペアの類似度が全て高い場合、第１モジュールペアの処理が類似している可能性が高い。ただし、第１閾値と第２閾値を高く設定しすぎると処理が類似しているモジュールペアを類似していないと判定してしまう可能性が高くなる。よって、第１閾値と第２閾値には、第１モジュールペアの単独の判定に用いる所定の閾値以下の値が設定される。これにより、情報処理装置１は、類似するモジュールの検出漏れを軽減することができる。
【００５４】
図１１は、第１閾値および第２閾値の設定方法の他の例を示す図である。設定部１５は、第１閾値および第２閾値を設定する際、上記式（１）および式（２）を使用せず、図１１に示すテーブルに基づいて設定してもよい。例えば、第１モジュールペアに関連するモジュール数が１である場合、設定部１５は、図１１に示すテーブルを参照し、第１閾値として０．３を設定する。同様に、第２モジュールペアに関連するモジュール数が１である場合、設定部１５は、図１１に示すテーブルを参照し、第２閾値として０．３を設定する。
【００５５】
図１２は、類似モジュールペアを示す情報の一例を示す図である。図１２に示す例では、第１モジュール群として従業員検索機能モジュール群が適用され、第２モジュール群として商品検索機能モジュール群が適用されている。図１２に示すように、判定部１６は、類似モジュールペア（処理が類似すると判定された第１モジュールペア）に含まれるモジュールを示す情報を記録する。
【００５６】
出力部１８は、図１２の例に示すように、処理が類似すると判定された第１モジュールペアを示す情報を出力する。これにより、ユーザは、処理が類似するモジュールを把握できるので、例えば、あるモジュールを改修する際に、他のモジュールの改修が必要かを適切に判断することができる。
【００５７】
図１３は、類似モジュールペアを示す最大共通部分グラフを示す図である。出力部１８は、処理が類似するモジュールを示す情報を、コールグラフを用いて表示してもよい。図１３に示す最大共通部分グラフは、従業員検索機能モジュール群内のモジュールと商品検索機能モジュール群内のモジュールのうち、処理が類似すると判定されたモジュール同士を一つのノードとして表している。
【００５８】
出力部１８は、例えば、従業員検索機能モジュール群内のモジュールと商品検索機能モジュール群内のモジュールのうち、第１モジュールペアとして選択されたモジュール同士を共通の色で表示してもよい。そして、出力部１８は、最大共通部分グラフ内のモジュールを、その共通の色で表示してもよい。
【００５９】
図１４は、モジュール群間の類似度を示す情報の一例を示す図である。第２算出部１７は、第１モジュール群と第２モジュール群との類似度を算出した場合、図１４に示すように、第１モジュール群を示す情報と第２モジュール群を示す情報と類似度とを対応づけて記憶する。上記の説明では、第１モジュール群に従業員検索機能モジュール群を適用し、第２モジュール群に商品検索機能モジュール群を適用した例を説明したが、情報処理装置１は、他のモジュール群の組み合わせに対しても同様の処理を行ってもよい。情報処理装置１は、例えば、従業員検索機能モジュール群と拠点検索機能モジュール群との類似度、および商品検索機能モジュール群と拠点検索機能モジュール群との類似度を算出して、算出した類似度を記憶する。
【００６０】
出力部１８は、図１４の例に示すように、第１モジュール群を示す情報と第２モジュール群との類似度を出力する。これにより、ユーザは、類似するモジュール群を把握することできるので、例えば、複数のモジュール群の機能を再設計する際に、複数のモジュール群を統合して一つのモジュール群にするかを適切に判断することができる。
【００６１】
図１５は、実施形態の処理の一例を示すフローチャートである。図１５に示す処理は、１組のモジュール群（第１モジュール群と第２モジュール群）に対する処理を示しており、処理対象のモジュール群の組が複数存在する場合、情報処理装置１は、各組に対して図１５に示す処理を行う。
【００６２】
解析部１１は、第１モジュール群および第２モジュール群に含まれるモジュールのソースコードを取得し、モジュール間の呼び出し関係を解析し、呼び出し関係を示す情報を生成する（ステップＳ１０１）。
【００６３】
第１算出部１２は、第１モジュール群に含まれる各モジュールと、第２モジュール群に含まれる各モジュールとの類似度を算出する（ステップＳ１０２）。
【００６４】
情報処理装置１は、第１モジュールペアと第１モジュールペアに関連する第２モジュールペアを選択し、第１モジュールペアに含まれるモジュール同士の処理が類似するか判定する（ステップＳ１０３）。
【００６５】
第２算出部１７は、判定部１６により処理が類似すると判定された第１モジュールペアの数に基づいて、第１モジュール群と第２モジュール群との類似度を算出する（ステップＳ１０４）。
【００６６】
出力部１８は、判定部１６により処理が類似すると判定された第１モジュールペア（類似モジュールペア）を示す情報と、第２算出部１７が算出した、第１モジュール群と第２モジュール群との類似度を出力する（ステップＳ１０５）。
【００６７】
なお、ステップＳ１０１〜Ｓ１０４の処理について、詳細は後述する。
図１６は、図１５のステップＳ１０１の処理の詳細を示すフローチャートである。解析部１１は、第１モジュール群および第２モジュール群に含まれるモジュールのソースコードを取得し、構文解析を行う（ステップＳ２０１）。解析部１１は、ソースコードから、呼び出し文を抽出する（ステップＳ２０２）。解析部１１は、呼び出し元モジュールを示す情報と、呼び出し先モジュールを示す情報とを対応づけて、呼び出し関係を示す情報（例えば、図３または図４）として記憶する（ステップＳ２０３）。解析部１１は、ステップＳ２０１〜Ｓ２０３の処理を第１モジュール群内および第２モジュール内のモジュール毎に繰り返す。
【００６８】
図１７は、図１５のステップＳ１０２の処理の詳細を示すフローチャートである。第１算出部１２は、第１モジュール群に含まれるモジュールと、第２モジュール群に含まれるモジュールとの類似度を算出する（ステップＳ３０１）。第１算出部１２は、第１モジュール群に含まれるモジュールを示す情報と、第２モジュール群に含まれるモジュールを示す情報と、算出した類似度とを対応付けて、モジュール間類似度情報（例えば、図９）として記憶する（ステップＳ３０２）。第１算出部１２は、第１モジュール群に含まれる各モジュールと、第２モジュール群に含まれる各モジュールについて、ステップＳ３０１とステップＳ３０２の処理を繰り返す。すなわち、第１算出部１２は、第１モジュール群に含まれる各モジュールと、第２モジュール群に含まれる各モジュールとの全ての組み合わせについて、類似度を算出し、記憶する。
【００６９】
図１８は、図１５のステップＳ１０３の処理の詳細を示すフローチャートである。第１選択部１３は、モジュール間類似度情報から、第１モジュール群内の処理対象モジュールと第２モジュール群内の各モジュールとの類似度を取得する（ステップＳ４０１）。第１選択部１３は、第１モジュール群内の処理対象モジュールと、その処理対象モジュールと最も類似度が高い第２モジュール群内のモジュールとを第１モジュールペアとして選択する（ステップＳ４０２）。
【００７０】
判定部１６は、選択された第１モジュールペアの類似度が、所定の閾値（例えば、０．７）以上か判定する（ステップＳ４０３）。選択された第１モジュールペアの類似度が、所定の閾値以上である場合（ステップＳ４０３でＹＥＳ）、判定部１６は、第１モジュールペアに含まれるモジュール同士の処理が類似すると判定し、第１モジュールペアを類似モジュールペアとして記憶する（ステップＳ４０８）。例えば、判定部１６は、第１モジュールペア内の各モジュールを示す情報を、類似モジュールペアを示す情報（例えば、図１２）として記憶する。
【００７１】
選択された第１モジュールペアの類似度が、所定の閾値未満である場合（ステップＳ４０３でＮＯ）、第２選択部１４は、第１モジュールペアと関連する第２モジュールペアを選択する（ステップＳ４０４）。設定部１５は、第１モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第１閾値を設定し、第２モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第２閾値を設定する（ステップＳ４０５）。判定部１６は、第１モジュールペアの類似度と第１閾値とを比較し、第２モジュールペアの類似度と第２閾値とを比較する（ステップＳ４０６）。複数の第２モジュールペアが存在する場合、判定部１６は、各第２モジュールペアと、その第２モジュールペアに対応する第２閾値とを比較する。
【００７２】
判定部１６は、例えば、第１モジュールペアの類似度が第１閾値以上であり、かつ、全ての第２モジュールペアの類似度が第２閾値以上であるかを判定する（ステップＳ４０７）。ステップＳ４０７でＹＥＳの場合、第１モジュールペアに含まれるモジュール同士の処理が類似すると判定し、第１モジュールペアを類似モジュールペアとして記憶する（ステップＳ４０８）。ステップＳ４０７でＮＯの場合、またはステップＳ４０８の処理後、情報処理装置１は、処理対象のモジュールについての処理を終了する。
【００７３】
情報処理装置１は、第１モジュール群内のモジュール毎に、ステップＳ４０１〜Ｓ４０８の処理を繰り返す。
【００７４】
図１９は、図１５のステップＳ１０４の処理の詳細を示すフローチャートである。第２算出部１７は、類似モジュールペアを示す情報を参照する（ステップＳ５０１）。第２算出部１７は、類似モジュールペアの数に基づいて、第１モジュール群と第２モジュール群との類似度を算出する（ステップＳ５０２）。第２算出部１７は、例えば、上記の式（３）に基づいて、モジュール群間の類似度を算出する。
【００７５】
第２算出部１７は、算出した類似度を、モジュール群間の類似度を示す情報（例えば、図１４）として記憶する（ステップＳ５０３）。
【００７６】
以上のように、情報処理装置１は、モジュールに関連するモジュールの数が多いほど小さい閾値（第１閾値および第２閾値）を用いて、モジュール同士の処理が類似しているかを判定する。なお、関連するモジュール（呼び出すモジュールおよび呼び出されるモジュール）の数が多いほど、他のモジュールとの類似度が低くなる可能性が高いと考えられる。すなわち、情報処理装置１は、関連するモジュールの数に応じた適切な閾値を用いて、モジュール同士の処理が類似しているか判定するため、類似するモジュールの検出漏れを軽減することができる。そして、ユーザは、処理が類似するモジュールを把握できるので、例えば、あるモジュールを改修する際に、他のモジュールの改修が必要かを適切に判断することができる。
【００７７】
次に、情報処理装置１のハードウェア構成の一例を説明する。図２０は、情報処理装置１のハードウェア構成の一例を示す図である。図２０の例に示すように、情報処理装置１において、バス１００に、プロセッサ１１１とメモリ１１２と補助記憶装置１１３と通信インタフェース１１４と媒体接続部１１５と入力装置１１６と出力装置１１７とが接続される。
【００７８】
プロセッサ１１１は、メモリ１１２に展開されたプログラムを実行する。実行されるプログラムには、実施形態における処理を行う情報処理プログラムが適用されてもよい。
【００７９】
メモリ１１２は、例えば、Random Access Memory(ＲＡＭ)である。補助記憶装置１１３は、種々の情報を記憶する記憶装置であり、例えばハードディスクドライブや半導体メモリ等が適用されてもよい。補助記憶装置１１３に実施形態の処理を行う情報処理プログラムが記憶されていてもよい。
【００８０】
通信インタフェース１１４は、Local Area Network（ＬＡＮ）、Wide Area Network（ＷＡＮ）等の通信ネットワークに接続され、通信に伴うデータ変換等を行う。
【００８１】
媒体接続部１１５は、可搬型記録媒体１１８が接続可能なインタフェースである。可搬型記録媒体１１８には、光学式ディスク（例えば、Compact Disc(ＣＤ)またはDigital Versatile Disc(ＤＶＤ)等)、半導体メモリ等が適用されてもよい。可搬型記録媒体１１８に実施形態の処理を行う情報処理プログラムが記録されていてもよい。
【００８２】
入力装置１１６は、例えば、キーボード、ポインティングデバイス等であり、ユーザからの指示及び情報等の入力を受け付ける。
【００８３】
出力装置１１７は、例えば、表示装置、プリンタ、スピーカ等であり、ユーザへの問い合わせ又は指示、及び処理結果等を出力する。図２に示す出力部１８は、出力装置１１７を用いて、類似モジュールペアを示す情報やモジュール群間の類似度を出力してもよい。
【００８４】
図２に示す記憶部１９は、メモリ１１２、補助記憶装置１１３または可搬型記録媒体１１８等により実現されてもよい。図２に示す解析部１１、第１算出部１２、第１選択部１３、第２選択部１４、設定部１５、判定部１６、第２算出部１７、および出力部１８は、メモリ１１２に展開された情報処理プログラムをプロセッサ１１１が実行することにより実現されてもよい。
【００８５】
メモリ１１２、補助記憶装置１１３および可搬型記録媒体１１８は、コンピュータが読み取り可能であって非一時的な有形の記憶媒体であり、信号搬送波のような一時的な媒体ではない。
【００８６】
なお、情報処理装置１が図２０に示す全ての構成要素を含んでいなくてもよく、一部の構成要素が省略されていてもよい。また、一部の構成要素が情報処理装置１の外部装置に存在し、情報処理装置１が外部装置に接続して、外部装置内の構成要素を利用してもよい。
【００８７】
本実施形態は、以上に述べた実施の形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で様々な変更、追加、省略が適用可能である。
【符号の説明】
【００８８】
１    情報処理装置
１１    解析部
１２    第１算出部
１３    第１選択部
１４    第２選択部
１５    設定部
１６    判定部
１７    第２算出部
１８    出力部
１９    記憶部
１００    バス
１１１    プロセッサ
１１２    メモリ
１１３    補助記憶装置
１１４    通信インタフェース
１１５    媒体接続部
１１６    入力装置
１１７    出力装置
１１８    可搬型記録媒体
【図１】
2020119216.tif 000003
【図２】
2020119216.tif 000004
【図３】
2020119216.tif 000005
【図４】
2020119216.tif 000006
【図５】
2020119216.tif 000007
【図６】
2020119216.tif 000008
【図７】
2020119216.tif 000009
【図８】
2020119216.tif 000010
【図９】
2020119216.tif 000011
【図１０】
2020119216.tif 000012
【図１１】
2020119216.tif 000013
【図１２】
2020119216.tif 000014
【図１３】
2020119216.tif 000015
【図１４】
2020119216.tif 000016
【図１５】
2020119216.tif 000017
【図１６】
2020119216.tif 000018
【図１７】
2020119216.tif 000019
【図１８】
2020119216.tif 000020
【図１９】
2020119216.tif 000021
【図２０】
2020119216.tif 000022