JP2020119216A - 情報処理プログラム、情報処理方法、および情報処理装置 - Google Patents

情報処理プログラム、情報処理方法、および情報処理装置 Download PDF

Info

Publication number
JP2020119216A
JP2020119216A JP2019009410A JP2019009410A JP2020119216A JP 2020119216 A JP2020119216 A JP 2020119216A JP 2019009410 A JP2019009410 A JP 2019009410A JP 2019009410 A JP2019009410 A JP 2019009410A JP 2020119216 A JP2020119216 A JP 2020119216A
Authority
JP
Japan
Prior art keywords
module
pair
similarity
modules
group
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.)
Pending
Application number
JP2019009410A
Other languages
English (en)
Inventor
智臣 秦野
Tomoomi Hatano
智臣 秦野
昭彦 松尾
Akihiko Matsuo
昭彦 松尾
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2019009410A priority Critical patent/JP2020119216A/ja
Publication of JP2020119216A publication Critical patent/JP2020119216A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】類似する処理を行うモジュールの検出漏れを軽減する。【解決手段】情報処理プログラムは、第1モジュール群に含まれる各モジュールと、第2モジュール群に含まれる各モジュールとの類似度を算出し、類似度に基づいて、第1モジュールペアを選択し、第1モジュールペアと関連する第2モジュールペアを選択し、第1モジュールペアの類似度と第1モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第1閾値との比較結果、および第2モジュールペアの類似度と第2モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第2閾値との比較結果に基づいて、第1モジュールペアに含まれるモジュール同士の処理が類似するかを判定する処理をコンピュータに実行させる。【選択図】図15

Description

本発明は、情報処理プログラム、情報処理方法、および情報処理装置に関する。
業務システムを長期間使用する場合、機能を変更するための保守開発が行われる。また、業務システムに複数の機能が実装されている場合、複数の機能の中には、類似した処理を行う機能が含まれる可能性がある。
関連する技術として、ソースコードに含まれる機能の呼出元及び呼出先を対のノードとし、ノード対のそれぞれの類似度を算出する技術が提案されている(例えば、特許文献1を参照)。
また、関連する技術として、入力ソースコードから、類似度を解析し、予め決めた閾値以上の一致が検出されたコードをコードクローンとして抽出する技術が提案されている(例えば、特許文献2を参照)。
また、関連する技術として、当初のソースコードと、リファクタリング実施後のソースコードとの等価性を検証する技術が提案されている(例えば、特許文献3を参照)。
特開2017−45354号公報 特開2015−179369号公報 国際公開第2015/029154号
例えば、業務システムの設計変更が行われた場合、業務システム内に用いられるソフトウェアのモジュール毎に改修が行われる。あるモジュールを改修する場合、そのモジュールと類似する処理を行うモジュールの改修が必要であるかをユーザが検討し、必要であれば改修が行われる。
しかし、類似する処理を行うモジュールの検出をユーザが適切に行うことは困難であり、例えば、類似する処理を行うモジュール同士を類似していないと判断してしまう可能性がある。
1つの側面として、本発明は、類似する処理を行うモジュールの検出漏れを軽減することを目的とする。
1つの態様では、情報処理プログラムは、第1モジュール群に含まれる各モジュールと、第2モジュール群に含まれる各モジュールとの類似度を算出し、前記類似度に基づいて、前記第1モジュール群に含まれるモジュールと前記第2モジュール群に含まれるモジュールとのペアである第1モジュールペアを選択し、前記第1モジュール群に含まれるモジュールと前記第2モジュール群に含まれるモジュールとのペアであって、前記第1モジュールペアと関連する第2モジュールペアを選択し、前記第1モジュールペアの類似度と前記第1モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第1閾値との比較結果、および前記第2モジュールペアの類似度と前記第2モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第2閾値との比較結果に基づいて、前記第1モジュールペアに含まれるモジュール同士の処理が類似するかを判定し、処理が類似すると判定された前記第1モジュールペアを示す情報を出力する処理をコンピュータに実行させる。
1つの側面によれば、類似する処理を行うモジュールの検出漏れを軽減することができる。
モジュールの類似度をコールグラフ上に表した例を示す図である。 情報処理装置の機能構成の一例を示す図である。 従業員検索機能モジュール群内のモジュール間の呼び出し関係を示す情報の一例を示す図である。 商品検索機能モジュール群内のモジュール間の呼び出し関係を示す情報の一例を示す図である。 モジュール間の類似度の算出方法の第1の例を示す図である。 モジュール間の類似度の算出方法の第2の例を示す図である。 モジュール間の類似度の算出方法の第3の例を示す図である。 第1モジュールペアの選択方法の一例を示す図である。 モジュール間類似度情報の一例を示す図である。 モジュール同士の処理が類似するかの判定方法の一例を示す図である。 第1閾値および第2閾値の設定方法の他の例を示す図である。 類似モジュールペアを示す情報の一例を示す図である。 類似モジュールペアを示す最大共通部分グラフを示す図である。 モジュール群間の類似度を示す情報の一例を示す図である。 実施形態の処理の一例を示すフローチャートである。 図15のステップS101の処理の詳細を示すフローチャートである。 図15のステップS102の処理の詳細を示すフローチャートである。 図15のステップS103の処理の詳細を示すフローチャートである。 図15のステップS104の処理の詳細を示すフローチャートである。 情報処理装置のハードウェア構成の一例を示す図である。
以下、図面を参照して、実施形態について説明する。図1は、モジュールの類似度をコールグラフ上に表した例を示す図である。図1は、従業員検索機能を実現する従業員検索機能モジュール群と、商品検索機能を実現する商品検索機能モジュール群とがコールグラフとして表されている。コールグラフ上の各ノードは、モジュールを示す。なお、モジュールは、ソフトウェアの構成要素であり、例えば、ソースコードファイル、またはソースコード内に定義されている関数等である。図1に示すコールグラフでは、呼び出し元のモジュールを示すノードから呼び出し先のモジュールを示すノードに向かう矢印により、ノード間が接続されている。
図1において、類似度を算出する対象のモジュール間が点線で接続されている。また、その点線の近傍には、モジュール間の類似度が表示されている。類似度を算出する際に、例えば、ソースコード内の文字列を行毎に比較し、一致している行数の割合を類似度とすることが考えられる。しかし、各モジュールの開発担当者が異なる場合、同様の処理を行うモジュールであってもソースコードの記述が類似しない場合がある。そのため、類似している処理を行うモジュールを類似していないと判定される可能性がある。また、同様の処理を行うモジュールであっても処理対象のデータが異なることによりソースコードの記述が類似しない可能性がある。従業員検索機能モジュール群の処理対象のデータは、従業員データであり、商品検索機能モジュール群の処理対象のデータは、商品データである。
例えば、モジュール同士が類似しているかの判定に用いる閾値を0.7とした場合、図1に示す類似度のうち、従業員検索_検索と商品検索_検索との類似度(0.8)のみ、閾値を超えている。この場合、従業員検索_検索と商品検索_検索とのペアのみ、類似するモジュールペアであると判定される。しかし、実際に類似している処理を行うモジュールのペアが他に存在する可能性がある。また、単に閾値を下げてしまうと、処理が類似していないモジュールペアが類似していると判定されるおそれがある。
また、類似するモジュールペアの数に基づいて、モジュール群同士の類似度を算出することが考えられる。しかし、上述のように類似している処理を行うモジュールを類似していないと判定されると、モジュール群同士の類似度が低くなる。そのため、同様の機能を実現するモジュール群同士の類似度が低くなってしまう。
図2は、情報処理装置1の機能構成の一例を示す図である。情報処理装置1は、解析部11と第1算出部12と第1選択部13と第2選択部14と設定部15と判定部16と第2算出部17と出力部18と記憶部19とを含む。情報処理装置1は、コンピュータの一例である。
解析部11は、複数のモジュール群に含まれる各モジュールのソースコードを取得し、モジュール間の呼び出し関係を解析し、呼び出し関係を示す情報を生成する。解析部11が解析する複数のモジュール群には、後述する第1モジュール群および第2モジュール群が含まれる。モジュール群は、特定の機能を実現するためのモジュールの集合である。解析部11は、例えば、ソースコードの構文解析を行い、呼び出し文を抽出することにより、モジュール間の呼び出し関係を解析する。
第1算出部12は、第1モジュール群に含まれる各モジュールと、第2モジュール群に含まれる各モジュールとの類似度を算出する。第1モジュール群および第2モジュール群は、例えば、類似度の算出対象としてユーザに指定されたモジュール群であるとする。第1算出部12は、例えば、第1モジュール群に含まれる各モジュールと、第2モジュール群に含まれる各モジュールとの全ての組み合わせについて、類似度を算出する。本実施形態において、類似度は、0から1.0までの数値で表され、類似しているほど高い数値となる。
第1選択部13は、第1算出部12が算出した類似度に基づいて、第1モジュール群に含まれるモジュールと第2モジュール群に含まれるモジュールとのペアである第1モジュールペアを選択する。第1選択部13は、例えば、第1モジュール群内の特定のモジュールと、その特定のモジュールと最も類似度が高い第2モジュール群内のモジュールとを第1モジュールペアとして選択する処理を行う。そして、第1選択部13は、第1モジュール群内の全モジュールに対してその処理を繰り返す。
第2選択部14は、解析部11の解析結果に基づいて、第1モジュール群に含まれるモジュールと第2モジュール群に含まれるモジュールとのペアであって、第1モジュールペアと関連する第2モジュールペアを選択する。第2選択部14は、一つの第1モジュールペアに対して、複数の第2モジュールペアを選択してもよい。
第2選択部14は、例えば、第1モジュールペアのうち第1モジュール群に含まれるモジュールを呼び出すモジュールと第1モジュールペアのうち第2モジュール群に含まれるモジュールを呼び出すモジュールとのペアを第2モジュールペアとして選択する。また、第2選択部14は、例えば、第1モジュールペアのうち第1モジュール群に含まれるモジュールに呼び出されるモジュールと第1モジュールペアのうち第2モジュール群に含まれるモジュールに呼び出されるモジュールとのペアを第2モジュールペアとして選択する。
設定部15は、第1モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第1閾値を設定する。また、設定部15は、第2モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第2閾値を設定する。なお、特定のモジュールに関連するモジュールの数は、例えば、その特定のモジュールを呼び出すモジュールの数と、その特定のモジュールに呼び出されるモジュールの数との合計であるとする。予め、類似度との比較に用いる所定の閾値が定められている場合、設定部15は、第1閾値および第2閾値を、以下の式(1)、式(2)に基づいて設定する。
(第1閾値)=(所定の閾値)/(第1モジュールペアに含まれるモジュールに関連するモジュールの数+1) (1)
(第2閾値)=(所定の閾値)/{(第2モジュールペアに含まれるモジュールに関連するモジュールの数)+1} (2)
式(1)、式(2)の右辺の分母の最小値は1であるため、第1閾値および第2閾値は、所定の閾値以下の値となる。すなわち、所定の閾値は、第1閾値および第2閾値以上の値である。なお、複数の第2モジュールペアが存在する場合、設定部15は、第2モジュールペア毎に第2閾値を設定する。
判定部16は、第1算出部12が算出した第1モジュールペアの類似度が、所定の閾値以上である場合、第1モジュールペアに含まれるモジュール同士の処理が類似すると判定する。以下、判定部16により、処理が類似すると判定された第1モジュールペアを類似モジュールペアと称することがある。
判定部16は、第1モジュールペアの類似度が、所定の閾値未満である場合、第1モジュールペアの類似度と第1閾値とを比較し、第2モジュールペアの類似度と第2閾値とを比較する。そして、判定部16は、第1モジュールペアの類似度と第1閾値との比較結果、および第2モジュールペアの類似度と第2閾値との比較結果に基づいて、第1モジュールペアに含まれるモジュール同士の処理が類似するかを判定する。判定部16は、例えば、第1モジュールペアの類似度が第1閾値以上であり、かつ、全ての第2モジュールペアの類似度が第2閾値以上である場合、第1モジュールペアに含まれるモジュール同士の処理が類似すると判定する。そして、判定部16は、その第1モジュールペアを類似モジュールペアとして記憶する。
第2算出部17は、判定部16により処理が類似すると判定された第1モジュールペアの数に基づいて、第1モジュール群と第2モジュール群との類似度を算出する。第2算出部17は、例えば、以下の式(3)に基づいて、第1モジュール群と第2モジュール群との類似度を算出する。max(第1モジュール群のモジュール数,第2モジュール群のモジュール数)は、第1モジュール群のモジュール数と第2モジュール群のモジュール数とのうち大きい方の数である。
(モジュール群間の類似度)=(類似モジュールペア数)/max{第1モジュール群のモジュール数,第2モジュール群のモジュール数} (3)
出力部18は、判定部16により処理が類似すると判定された第1モジュールペア(類似モジュールペア)を示す情報を出力する。また、出力部18は、第2算出部17が算出した、第1モジュール群と第2モジュール群との類似度を出力する。出力部18は、類似モジュールペアを示す情報と、第1モジュール群と第2モジュール群との類似度とを、表示装置に表示させてもよいし、他の情報処理装置等に送信してもよい。
記憶部19は、実施形態の処理に関連する各種情報を記憶する。記憶部19は、例えば、解析部11が生成した呼び出し関係を示す情報、第1算出部12が算出したモジュール間の類似度、設定部15が設定した第1閾値および第2閾値を記憶する。また、記憶部19は、判定部16により判定された類似モジュールペアを示す情報、第2算出部17が算出したモジュール群間の類似度等を記憶する。
図3は、従業員検索機能モジュール群内のモジュール間の呼び出し関係を示す情報の一例を示す図である。解析部11は、従業員検索機能モジュール群内のモジュール間の呼び出し関係を解析した場合、図3の例に示す、呼び出し関係を示す情報を生成する。呼び出し元モジュールは、他のモジュールを呼び出すモジュールである。呼び出し先モジュールは、呼び出し元モジュールに呼び出されるモジュールである。図3では、従業員検索機能モジュール群内における、呼び出し元モジュールを示す情報と、呼び出し先モジュールを示す情報とが対応づけられている。
図4は、商品検索機能モジュール群内のモジュール間の呼び出し関係を示す情報の一例を示す図である。解析部11は、商品検索機能モジュール群内のモジュール間の呼び出し関係を解析した場合、図4の例に示す、呼び出し関係を示す情報を生成する。図4は、商品検索機能モジュール群内における、呼び出し元モジュールを示す情報と、呼び出し元モジュールに呼び出されるモジュールである、呼び出し先モジュールを示す情報とが対応づけられている。
図5は、モジュール間の類似度の算出方法の第1の例を示す図である。第1算出部12は、モジュール間の類似度を算出する際に、例えば、ソースコードの行毎に一致しているかを判定し、一致している行数の割合を類似度として算出する。図5に示す例では、算出対象のモジュール1とモジュール2は、いずれも10行のソースコードであり、4行のソースコードが一致する。この場合、モジュール1とモジュール2との類似度は0.4となる。
図6は、モジュール間の類似度の算出方法の第2の例を示す図である。第1算出部12は、モジュール間の類似度を算出する際に、ソースコード内の単語毎に一致しているかを判定し、一致している単語の割合を類似度として算出する。図5に示す例では、算出対象のモジュール3とモジュール4は、いずれも"MOVE","END","TO","LAB-STAT","."という5つの単語が同じ順序で記載されている。すなわち、全ての単語と語順が一致しているので、モジュール3とモジュール4との類似度は1.0となる。なお、図6に示す例において、第1算出部12は、ソースコード内の改行やスペースを無視して類似度を算出する。
図7は、モジュール間の類似度の算出方法の第3の例を示す図である。第1算出部12は、モジュール間の類似度を算出する際に、構文毎にソースコードが実質的に一致しているかを所定のルールに従って判定し、一致している構文の割合を類似度として算出する。例えば、if(*)という文の後の"{"とそれに対応する"}"を省略可能であるというルールが存在しているとする。図7に示す例において、そのルールに従い、算出対象のモジュール5内の構文から"{"と"}"を除くと、モジュール6内の構文と一致する。よって、第1算出部12は、モジュール5内の構文とモジュール6内の構文が、一致していると判定する。図7に示す例では、モジュール間の全ての構文が一致しているので、モジュール5とモジュール6との類似度は1.0となる。
図8は、第1モジュールペアの選択方法の一例を示す図である。第1算出部12は、第1モジュール群に含まれる各モジュールと、第2モジュール群に含まれる各モジュールとの全てに組み合わせについて、類似度を算出する。図8に示す例では、従業員検索機能モジュール群内のモジュール「従業員検索_遷移」と、商品検索機能モジュール群内の全モジュールとの類似度が示されている。
図8に示す類似度のうち、モジュール「従業員検索_遷移」とモジュール「商品検索_遷移」との類似度が最も高い。よって、第1選択部13は、「従業員検索_遷移」とモジュール「商品検索_遷移」との組を第1モジュールペアとして選択する。第1選択部13は、同様に、従業員検索機能モジュール群内の他のモジュールと商品検索機能モジュール群内の全モジュールとの類似度を算出し、第1モジュールペアを選択する。出力部18は、図8に示すようなコールグラフを表示装置に表示させてもよい。
図9は、モジュール間類似度情報の一例を示す図である。図9は、第1算出部12が算出した、従業員検索機能モジュール群に含まれる各モジュールと、商品検索機能モジュール群に含まれる各モジュールとの類似度を示す情報である。図9に示すように、第1算出部12は、従業員検索機能モジュール群に含まれる各モジュールと、商品検索機能モジュール群に含まれる各モジュールとの全ての組み合わせについての類似度を算出し、記録する。
図10は、モジュール同士の処理が類似するかの判定方法の一例を示す図である。図10に示す例では、モジュール「従業員検索_初期表示」と「商品検索_初期表示」とを第1モジュールペアとして、第1モジュールペアに含まれるモジュール同士の処理が類似するかを判定する方法について示している。まず、判定処理の前に行われる第2モジュールペアの選択と、閾値の設定について説明する。
第2選択部14は、「従業員検索_初期表示」を呼び出すモジュールである「従業員検索_遷移」と、「商品検索_初期表示」を呼び出すモジュールである「商品検索_遷移」とのペアを第2モジュールペアとして選択する。さらに、第2選択部14は、「従業員検索_初期表示」に呼び出されるモジュールである「従業員検索_画面出力」と、「商品検索_初期表示」に呼び出されるモジュールである「商品検索_画面出力」とのペアを第2モジュールペアとして選択する。
上述のように、特定のモジュールに関連するモジュールの数は、その特定のモジュールを呼び出すモジュールの数と、その特定のモジュールに呼び出されるモジュールの数との合計である。よって、「従業員検索_初期表示」に関連するモジュールと「商品検索_初期表示」に関連するモジュールの数は、どちらも2である。設定部15は、第1モジュールペアに用いる第1閾値を、上記式(1)に基づいて、以下の式(4)のように算出する。なお、所定の閾値は、0.7であるとする。
第1閾値=0.7/(2+1)=0.233 (4)
ただし、第1モジュールペアに含まれる一方のモジュールに関連するモジュールの数と他方のモジュールに関連するモジュールの数がそれぞれ異なっている可能性がある。その場合、設定部15は、例えば、一方のモジュールに関連するモジュールの数と他方のモジュールに関連するモジュールの数の平均値を、式(1)の「第1モジュールペアに含まれるモジュールに関連するモジュールの数」として用いる。
設定部15は、「従業員検索_遷移」と「商品検索_遷移」とのペアである第2モジュールペアに用いる第2閾値(遷移)を、上記式(2)に基づいて、以下の式(5)のように算出する。なお、「従業員検索_遷移」と「商品検索_遷移」は、それぞれ呼び出すモジュールが1つ存在するため、「従業員検索_遷移」に関連するモジュールと「商品検索_遷移」に関連するモジュールの数は、どちらも1である。
第2閾値(遷移)=0.7/(1+1)=0.35 (5)
設定部15は、「従業員検索_画面出力」と「商品検索_画面出力」とのペアである第2モジュールペアに用いる第2閾値(画面出力)を、上記式(2)に基づいて、以下の式(6)のように算出する。なお、「従業員検索_画面出力」と「商品検索_画面出力」を呼び出すモジュールがそれぞれ4つ存在するため、「従業員検索_画面出力」に関連するモジュールと「従業員検索_画面出力」に関連するモジュールの数は、どちらも4である。
第2閾値(画面出力)=0.7/(4+1)=0.14 (6)
なお、第2モジュールペアに含まれる一方のモジュールに関連するモジュールの数と他方のモジュールに関連するモジュールの数がそれぞれ異なっている可能性がある。その場合、設定部15は、例えば、一方のモジュールに関連するモジュールの数と他方のモジュールに関連するモジュールの数の平均値を、式(2)の「第2モジュールペアに含まれるモジュールに関連するモジュールの数」として用いる。
判定部16は、第1モジュールペアの類似度(「従業員検索_初期表示」と「商品検索_初期表示」との類似度)が、所定の閾値(0.7)以上であるか判定する。「従業員検索_初期表示」と「商品検索_初期表示」との類似度は、0.25であるため、所定の閾値(0.7)未満である。
判定部16は、第1モジュールペアの類似度が、所定の閾値未満であるため、第1モジュールペアの類似度と第1閾値とを比較し、第2モジュールペアの類似度と第2閾値とを比較する。第1モジュールペアである「従業員検索_初期表示」と「商品検索_初期表示」とのペアの類似度(0.25)は、第1閾値(0.233)以上である。また、第2モジュールペアである「従業員検索_遷移」と「商品検索_遷移」とのペアの類似度(0.4)は、第2閾値(遷移)(0.35)以上である。また、第2モジュールペアである「従業員検索_画面出力」と「商品検索_画面出力」とのペアの類似度(0.2)は、第2閾値(画面出力)(0.14)以上である。よって、判定部16は、「従業員検索_初期表示」と「商品検索_初期表示」の処理が類似すると判定する。
関連するモジュール(呼び出すモジュールおよび呼び出されるモジュール)の数が多いモジュール間の類似度は、低くなる可能性が高い。よって、式(1)、(2)に示すように、第1閾値および第2閾値は、関連するモジュールの数が多いほど小さくなるように設定される。これにより、情報処理装置1は、類似する処理を行うモジュールの検出漏れを軽減することができる。
また、第1モジュールペアの類似度と第1モジュールペアに関連する第2モジュールペアの類似度が全て高い場合、第1モジュールペアの処理が類似している可能性が高い。ただし、第1閾値と第2閾値を高く設定しすぎると処理が類似しているモジュールペアを類似していないと判定してしまう可能性が高くなる。よって、第1閾値と第2閾値には、第1モジュールペアの単独の判定に用いる所定の閾値以下の値が設定される。これにより、情報処理装置1は、類似するモジュールの検出漏れを軽減することができる。
図11は、第1閾値および第2閾値の設定方法の他の例を示す図である。設定部15は、第1閾値および第2閾値を設定する際、上記式(1)および式(2)を使用せず、図11に示すテーブルに基づいて設定してもよい。例えば、第1モジュールペアに関連するモジュール数が1である場合、設定部15は、図11に示すテーブルを参照し、第1閾値として0.3を設定する。同様に、第2モジュールペアに関連するモジュール数が1である場合、設定部15は、図11に示すテーブルを参照し、第2閾値として0.3を設定する。
図12は、類似モジュールペアを示す情報の一例を示す図である。図12に示す例では、第1モジュール群として従業員検索機能モジュール群が適用され、第2モジュール群として商品検索機能モジュール群が適用されている。図12に示すように、判定部16は、類似モジュールペア(処理が類似すると判定された第1モジュールペア)に含まれるモジュールを示す情報を記録する。
出力部18は、図12の例に示すように、処理が類似すると判定された第1モジュールペアを示す情報を出力する。これにより、ユーザは、処理が類似するモジュールを把握できるので、例えば、あるモジュールを改修する際に、他のモジュールの改修が必要かを適切に判断することができる。
図13は、類似モジュールペアを示す最大共通部分グラフを示す図である。出力部18は、処理が類似するモジュールを示す情報を、コールグラフを用いて表示してもよい。図13に示す最大共通部分グラフは、従業員検索機能モジュール群内のモジュールと商品検索機能モジュール群内のモジュールのうち、処理が類似すると判定されたモジュール同士を一つのノードとして表している。
出力部18は、例えば、従業員検索機能モジュール群内のモジュールと商品検索機能モジュール群内のモジュールのうち、第1モジュールペアとして選択されたモジュール同士を共通の色で表示してもよい。そして、出力部18は、最大共通部分グラフ内のモジュールを、その共通の色で表示してもよい。
図14は、モジュール群間の類似度を示す情報の一例を示す図である。第2算出部17は、第1モジュール群と第2モジュール群との類似度を算出した場合、図14に示すように、第1モジュール群を示す情報と第2モジュール群を示す情報と類似度とを対応づけて記憶する。上記の説明では、第1モジュール群に従業員検索機能モジュール群を適用し、第2モジュール群に商品検索機能モジュール群を適用した例を説明したが、情報処理装置1は、他のモジュール群の組み合わせに対しても同様の処理を行ってもよい。情報処理装置1は、例えば、従業員検索機能モジュール群と拠点検索機能モジュール群との類似度、および商品検索機能モジュール群と拠点検索機能モジュール群との類似度を算出して、算出した類似度を記憶する。
出力部18は、図14の例に示すように、第1モジュール群を示す情報と第2モジュール群との類似度を出力する。これにより、ユーザは、類似するモジュール群を把握することできるので、例えば、複数のモジュール群の機能を再設計する際に、複数のモジュール群を統合して一つのモジュール群にするかを適切に判断することができる。
図15は、実施形態の処理の一例を示すフローチャートである。図15に示す処理は、1組のモジュール群(第1モジュール群と第2モジュール群)に対する処理を示しており、処理対象のモジュール群の組が複数存在する場合、情報処理装置1は、各組に対して図15に示す処理を行う。
解析部11は、第1モジュール群および第2モジュール群に含まれるモジュールのソースコードを取得し、モジュール間の呼び出し関係を解析し、呼び出し関係を示す情報を生成する(ステップS101)。
第1算出部12は、第1モジュール群に含まれる各モジュールと、第2モジュール群に含まれる各モジュールとの類似度を算出する(ステップS102)。
情報処理装置1は、第1モジュールペアと第1モジュールペアに関連する第2モジュールペアを選択し、第1モジュールペアに含まれるモジュール同士の処理が類似するか判定する(ステップS103)。
第2算出部17は、判定部16により処理が類似すると判定された第1モジュールペアの数に基づいて、第1モジュール群と第2モジュール群との類似度を算出する(ステップS104)。
出力部18は、判定部16により処理が類似すると判定された第1モジュールペア(類似モジュールペア)を示す情報と、第2算出部17が算出した、第1モジュール群と第2モジュール群との類似度を出力する(ステップS105)。
なお、ステップS101〜S104の処理について、詳細は後述する。
図16は、図15のステップS101の処理の詳細を示すフローチャートである。解析部11は、第1モジュール群および第2モジュール群に含まれるモジュールのソースコードを取得し、構文解析を行う(ステップS201)。解析部11は、ソースコードから、呼び出し文を抽出する(ステップS202)。解析部11は、呼び出し元モジュールを示す情報と、呼び出し先モジュールを示す情報とを対応づけて、呼び出し関係を示す情報(例えば、図3または図4)として記憶する(ステップS203)。解析部11は、ステップS201〜S203の処理を第1モジュール群内および第2モジュール内のモジュール毎に繰り返す。
図17は、図15のステップS102の処理の詳細を示すフローチャートである。第1算出部12は、第1モジュール群に含まれるモジュールと、第2モジュール群に含まれるモジュールとの類似度を算出する(ステップS301)。第1算出部12は、第1モジュール群に含まれるモジュールを示す情報と、第2モジュール群に含まれるモジュールを示す情報と、算出した類似度とを対応付けて、モジュール間類似度情報(例えば、図9)として記憶する(ステップS302)。第1算出部12は、第1モジュール群に含まれる各モジュールと、第2モジュール群に含まれる各モジュールについて、ステップS301とステップS302の処理を繰り返す。すなわち、第1算出部12は、第1モジュール群に含まれる各モジュールと、第2モジュール群に含まれる各モジュールとの全ての組み合わせについて、類似度を算出し、記憶する。
図18は、図15のステップS103の処理の詳細を示すフローチャートである。第1選択部13は、モジュール間類似度情報から、第1モジュール群内の処理対象モジュールと第2モジュール群内の各モジュールとの類似度を取得する(ステップS401)。第1選択部13は、第1モジュール群内の処理対象モジュールと、その処理対象モジュールと最も類似度が高い第2モジュール群内のモジュールとを第1モジュールペアとして選択する(ステップS402)。
判定部16は、選択された第1モジュールペアの類似度が、所定の閾値(例えば、0.7)以上か判定する(ステップS403)。選択された第1モジュールペアの類似度が、所定の閾値以上である場合(ステップS403でYES)、判定部16は、第1モジュールペアに含まれるモジュール同士の処理が類似すると判定し、第1モジュールペアを類似モジュールペアとして記憶する(ステップS408)。例えば、判定部16は、第1モジュールペア内の各モジュールを示す情報を、類似モジュールペアを示す情報(例えば、図12)として記憶する。
選択された第1モジュールペアの類似度が、所定の閾値未満である場合(ステップS403でNO)、第2選択部14は、第1モジュールペアと関連する第2モジュールペアを選択する(ステップS404)。設定部15は、第1モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第1閾値を設定し、第2モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第2閾値を設定する(ステップS405)。判定部16は、第1モジュールペアの類似度と第1閾値とを比較し、第2モジュールペアの類似度と第2閾値とを比較する(ステップS406)。複数の第2モジュールペアが存在する場合、判定部16は、各第2モジュールペアと、その第2モジュールペアに対応する第2閾値とを比較する。
判定部16は、例えば、第1モジュールペアの類似度が第1閾値以上であり、かつ、全ての第2モジュールペアの類似度が第2閾値以上であるかを判定する(ステップS407)。ステップS407でYESの場合、第1モジュールペアに含まれるモジュール同士の処理が類似すると判定し、第1モジュールペアを類似モジュールペアとして記憶する(ステップS408)。ステップS407でNOの場合、またはステップS408の処理後、情報処理装置1は、処理対象のモジュールについての処理を終了する。
情報処理装置1は、第1モジュール群内のモジュール毎に、ステップS401〜S408の処理を繰り返す。
図19は、図15のステップS104の処理の詳細を示すフローチャートである。第2算出部17は、類似モジュールペアを示す情報を参照する(ステップS501)。第2算出部17は、類似モジュールペアの数に基づいて、第1モジュール群と第2モジュール群との類似度を算出する(ステップS502)。第2算出部17は、例えば、上記の式(3)に基づいて、モジュール群間の類似度を算出する。
第2算出部17は、算出した類似度を、モジュール群間の類似度を示す情報(例えば、図14)として記憶する(ステップS503)。
以上のように、情報処理装置1は、モジュールに関連するモジュールの数が多いほど小さい閾値(第1閾値および第2閾値)を用いて、モジュール同士の処理が類似しているかを判定する。なお、関連するモジュール(呼び出すモジュールおよび呼び出されるモジュール)の数が多いほど、他のモジュールとの類似度が低くなる可能性が高いと考えられる。すなわち、情報処理装置1は、関連するモジュールの数に応じた適切な閾値を用いて、モジュール同士の処理が類似しているか判定するため、類似するモジュールの検出漏れを軽減することができる。そして、ユーザは、処理が類似するモジュールを把握できるので、例えば、あるモジュールを改修する際に、他のモジュールの改修が必要かを適切に判断することができる。
次に、情報処理装置1のハードウェア構成の一例を説明する。図20は、情報処理装置1のハードウェア構成の一例を示す図である。図20の例に示すように、情報処理装置1において、バス100に、プロセッサ111とメモリ112と補助記憶装置113と通信インタフェース114と媒体接続部115と入力装置116と出力装置117とが接続される。
プロセッサ111は、メモリ112に展開されたプログラムを実行する。実行されるプログラムには、実施形態における処理を行う情報処理プログラムが適用されてもよい。
メモリ112は、例えば、Random Access Memory(RAM)である。補助記憶装置113は、種々の情報を記憶する記憶装置であり、例えばハードディスクドライブや半導体メモリ等が適用されてもよい。補助記憶装置113に実施形態の処理を行う情報処理プログラムが記憶されていてもよい。
通信インタフェース114は、Local Area Network(LAN)、Wide Area Network(WAN)等の通信ネットワークに接続され、通信に伴うデータ変換等を行う。
媒体接続部115は、可搬型記録媒体118が接続可能なインタフェースである。可搬型記録媒体118には、光学式ディスク(例えば、Compact Disc(CD)またはDigital Versatile Disc(DVD)等)、半導体メモリ等が適用されてもよい。可搬型記録媒体118に実施形態の処理を行う情報処理プログラムが記録されていてもよい。
入力装置116は、例えば、キーボード、ポインティングデバイス等であり、ユーザからの指示及び情報等の入力を受け付ける。
出力装置117は、例えば、表示装置、プリンタ、スピーカ等であり、ユーザへの問い合わせ又は指示、及び処理結果等を出力する。図2に示す出力部18は、出力装置117を用いて、類似モジュールペアを示す情報やモジュール群間の類似度を出力してもよい。
図2に示す記憶部19は、メモリ112、補助記憶装置113または可搬型記録媒体118等により実現されてもよい。図2に示す解析部11、第1算出部12、第1選択部13、第2選択部14、設定部15、判定部16、第2算出部17、および出力部18は、メモリ112に展開された情報処理プログラムをプロセッサ111が実行することにより実現されてもよい。
メモリ112、補助記憶装置113および可搬型記録媒体118は、コンピュータが読み取り可能であって非一時的な有形の記憶媒体であり、信号搬送波のような一時的な媒体ではない。
なお、情報処理装置1が図20に示す全ての構成要素を含んでいなくてもよく、一部の構成要素が省略されていてもよい。また、一部の構成要素が情報処理装置1の外部装置に存在し、情報処理装置1が外部装置に接続して、外部装置内の構成要素を利用してもよい。
本実施形態は、以上に述べた実施の形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で様々な変更、追加、省略が適用可能である。
1 情報処理装置
11 解析部
12 第1算出部
13 第1選択部
14 第2選択部
15 設定部
16 判定部
17 第2算出部
18 出力部
19 記憶部
100 バス
111 プロセッサ
112 メモリ
113 補助記憶装置
114 通信インタフェース
115 媒体接続部
116 入力装置
117 出力装置
118 可搬型記録媒体

Claims (6)

  1. 第1モジュール群に含まれる各モジュールと、第2モジュール群に含まれる各モジュールとの類似度を算出し、
    前記類似度に基づいて、前記第1モジュール群に含まれるモジュールと前記第2モジュール群に含まれるモジュールとのペアである第1モジュールペアを選択し、
    前記第1モジュール群に含まれるモジュールと前記第2モジュール群に含まれるモジュールとのペアであって、前記第1モジュールペアと関連する第2モジュールペアを選択し、
    前記第1モジュールペアの類似度と前記第1モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第1閾値との比較結果、および前記第2モジュールペアの類似度と前記第2モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第2閾値との比較結果に基づいて、前記第1モジュールペアに含まれるモジュール同士の処理が類似するかを判定し、
    処理が類似すると判定された前記第1モジュールペアを示す情報を出力する
    処理をコンピュータに実行させるための情報処理プログラム。
  2. 処理が類似すると判定された前記第1モジュールペアの数に基づいて、前記第1モジュール群と前記第2モジュール群との類似度を算出し、
    前記第1モジュール群と前記第2モジュール群との類似度を出力する
    処理を前記コンピュータに実行させることを特徴とする請求項1記載の情報処理プログラム。
  3. 前記第1モジュールペアの類似度が、前記第1閾値および前記第2閾値以上の所定の閾値以上である場合、前記第1モジュールペアに含まれるモジュール同士の処理が類似すると判定し、
    前記第1モジュールペアの類似度が、前記所定の閾値未満である場合、前記第1モジュールペアの類似度と前記第1閾値との比較結果、および前記第2モジュールペアの類似度と前記第2閾値との比較結果に基づいて、前記第1モジュールペアに含まれるモジュール同士の処理が類似するかを判定する
    処理を前記コンピュータに実行させることを特徴とする請求項1または2記載の情報処理プログラム。
  4. 前記第1モジュールに含まれる各モジュールおよび前記第2モジュール群に含まれる各モジュールについて、モジュール間の呼び出し関係を解析し、
    前記第1モジュールペアのうち前記第1モジュール群に含まれるモジュールを呼び出すモジュールと前記第1モジュールペアのうち前記第2モジュール群に含まれるモジュールを呼び出すモジュールとのペア、および、前記第1モジュールペアのうち前記第1モジュール群に含まれるモジュールに呼び出されるモジュールと前記第1モジュールペアのうち前記第2モジュール群に含まれるモジュールに呼び出されるモジュールとのペアを、前記第2モジュールペアとして選択する
    処理を前記コンピュータに実行させることを特徴とする請求項1乃至3のうち何れか1項に記載の情報処理プログラム。
  5. コンピュータが、
    第1モジュール群に含まれる各モジュールと、第2モジュール群に含まれる各モジュールとの類似度を算出し、
    前記類似度に基づいて、前記第1モジュール群に含まれるモジュールと前記第2モジュール群に含まれるモジュールとのペアである第1モジュールペアを選択し、
    前記第1モジュール群に含まれるモジュールと前記第2モジュール群に含まれるモジュールとのペアであって、前記第1モジュールペアと関連する第2モジュールペアを選択し、
    前記第1モジュールペアの類似度と前記第1モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第1閾値との比較結果、および前記第2モジュールペアの類似度と前記第2モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第2閾値との比較結果に基づいて、前記第1モジュールペアに含まれるモジュール同士の処理が類似するかを判定し、
    処理が類似すると判定された前記第1モジュールペアを示す情報を出力する
    処理を実行することを特徴とする情報処理方法。
  6. 第1モジュール群に含まれる各モジュールと、第2モジュール群に含まれる各モジュールとの類似度を算出する第1算出部と、
    前記類似度に基づいて、前記第1モジュール群に含まれるモジュールと前記第2モジュール群に含まれるモジュールとのペアである第1モジュールペアを選択する第1選択部と、
    前記第1モジュール群に含まれるモジュールと前記第2モジュール群に含まれるモジュールとのペアであって、前記第1モジュールペアと関連する第2モジュールペアを選択する第2選択部と、
    前記第1モジュールペアの類似度と前記第1モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第1閾値との比較結果、および前記第2モジュールペアの類似度と前記第2モジュールペアに含まれるモジュールに関連するモジュールの数が多いほど小さい第2閾値との比較結果に基づいて、前記第1モジュールペアに含まれるモジュール同士の処理が類似するかを判定する判定部と、
    処理が類似すると判定された前記第1モジュールペアを示す情報を出力する出力部と
    を備えることを特徴とする情報処理装置。
JP2019009410A 2019-01-23 2019-01-23 情報処理プログラム、情報処理方法、および情報処理装置 Pending JP2020119216A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2019009410A JP2020119216A (ja) 2019-01-23 2019-01-23 情報処理プログラム、情報処理方法、および情報処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2019009410A JP2020119216A (ja) 2019-01-23 2019-01-23 情報処理プログラム、情報処理方法、および情報処理装置

Publications (1)

Publication Number Publication Date
JP2020119216A true JP2020119216A (ja) 2020-08-06

Family

ID=71892072

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019009410A Pending JP2020119216A (ja) 2019-01-23 2019-01-23 情報処理プログラム、情報処理方法、および情報処理装置

Country Status (1)

Country Link
JP (1) JP2020119216A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112698861A (zh) * 2021-03-25 2021-04-23 深圳开源互联网安全技术有限公司 源代码克隆识别方法及系统

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112698861A (zh) * 2021-03-25 2021-04-23 深圳开源互联网安全技术有限公司 源代码克隆识别方法及系统

Similar Documents

Publication Publication Date Title
US7793267B2 (en) Computer software test coverage analysis
US9412077B2 (en) Method and apparatus for classification
CN110502227B (zh) 代码补全的方法及装置、存储介质、电子设备
US20090319829A1 (en) Pattern extraction method and apparatus
JP6111543B2 (ja) 類似サブ時系列の抽出方法及び装置
JP6253521B2 (ja) プログラム可視化装置、プログラム可視化方法、及びプログラム可視化プログラム
JP6309795B2 (ja) 情報処理装置、情報処理方法およびプログラム
US9208055B2 (en) Importance-based call graph construction
JP2020119216A (ja) 情報処理プログラム、情報処理方法、および情報処理装置
EP4047498A1 (en) File vulnerability detection system and detection method thereof
CN110175128A (zh) 一种相似代码案例获取方法、装置、设备和存储介质
US11422997B2 (en) Supporting repetitive operations within an operating system
US8856762B2 (en) Loop detection apparatus, loop detection method, and loop detection program
JP2007086951A (ja) ファイル分割処理方法及びファイル分割プログラム
WO2020008632A1 (ja) 仮説推論装置、仮説推論方法、及びコンピュータ読み取り可能な記録媒体
WO2022070422A1 (ja) 計算機システム及び文字認識方法
JP2007026347A (ja) テキストマイニング装置、テキストマイニング方法およびテキストマイニングプログラム
US20240037215A1 (en) Program analysis device, program analysis method, and computer-readable medium
JP6369102B2 (ja) ソフトウェア試験支援システム
US20190384769A1 (en) Analysis device
US20170132278A1 (en) Systems and Methods for Inferring Landmark Delimiters for Log Analysis
JP2019160239A (ja) 解析装置、解析方法及びコンピュータープログラム
WO2023002614A1 (ja) 定常範囲決定システム、定常範囲決定方法、および、定常範囲決定プログラム
US20220405613A1 (en) Feature selection using testing data
JP5437913B2 (ja) コード領域識別装置、コード領域識別方法及びコード領域識別プログラム