(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-24
(45)【発行日】2024-10-02
(54)【発明の名称】情報処理装置、情報処理方法及びプログラム
(51)【国際特許分類】
G06F 8/75 20180101AFI20240925BHJP
G06F 8/34 20180101ALI20240925BHJP
【FI】
G06F8/75
G06F8/34
(21)【出願番号】P 2020131812
(22)【出願日】2020-08-03
【審査請求日】2023-07-07
(73)【特許権者】
【識別番号】000004237
【氏名又は名称】日本電気株式会社
(74)【代理人】
【識別番号】100149548
【氏名又は名称】松沼 泰史
(74)【代理人】
【識別番号】100181135
【氏名又は名称】橋本 隆史
(72)【発明者】
【氏名】菅 卓哉
【審査官】久々宇 篤志
(56)【参考文献】
【文献】特開2004-326312(JP,A)
【文献】特開2005-346578(JP,A)
【文献】高見 愛,ソフトウェア部品検索のためのAPIを利用した類似部品検出方法の提案,情報処理学会研究報告 2012(平成24)年度▲1▼ [CD-ROM] ,日本,一般社団法人情報処理学会,2012年06月15日
(58)【調査した分野】(Int.Cl.,DB名)
G06F 8/75
G06F 8/34
(57)【特許請求の範囲】
【請求項1】
プログラミング言語で記述された複数の比較対象を取得する取得部と、
前記取得部で取得した前記複数の
比較対象の構成要素のデータ型が一致しているか否かを前記比較対象の間で比較する比較処理を前記構成要素の全ての組み合わせごとに実行し、全ての組み合わせの数に対するデータ型の一致数の割合に基づいて前記比較対象の間の類似度を算出する類似度算出部と、
を備え、
前記類似度算出部は、前記比較対象の間
でデータ型が一致していない前記構成要素であっても継承関係を有していれば前記データ型が一致していると判定する、
情報処理装置。
【請求項2】
前記比較対象である第1の比較対象と第2の比較対象とのそれぞれに含まれている複数の前記構成要素のデータ型を示すデータ型情報と、前記複数の構成要素のうち、前記継承関係を有する構成要素の情報を示す継承関係情報と、を格納するデータ格納部を備え、
前記類似度算出部は、前記データ型情報に基づいて前記第1の比較対象の構成要素のデータ型と前記第2の比較対象の構成要素のデータ型とが一致しているか否かを比較し、前記データ型が一致していれば一致数としてカウントし、前記データ型が一致していなければ前記継承関係情報に基づいて前記第1の比較対象の構成要素と前記第2の比較対象の構成要素とが継承関係にあるか否かを判定し、前記継承関係があると判定した場合には前記一致数としてカウントする、
請求項
1に記載の情報処理装置。
【請求項3】
前記データ格納部には、前記継承関係を考慮することを示す第1情報と、前記継承関係を考慮しないことを示す第2情報とのいずれかの情報が格納され、
前記類似度算出部は、前記データ格納部に前記第1情報が格納されていれば前記継承関係があると判定した場合には前記一致数としてカウントし、前記データ格納部に前記第2情報が格納されていれば前記継承関係がある場合であっても前記一致数としてはカウントしない
請求項
2に記載の情報処理装置。
【請求項4】
継承関係情報には、継承した構成要素の情報とその継承元の情報とが関連付けられており、
前記類似度算出部は、前記継承元の情報が一致していれば前記継承関係があると判定する、
請求項
2又は
3に記載の情報処理装置。
【請求項5】
コンピュータが、プログラミング言語で記述された複数の比較対象を取得し、取得した前記複数の
比較対象の構成要素のデータ型が一致しているか否かを前記比較対象の間で比較する比較処理を前記構成要素の全ての組み合わせごとに実行し、前記比較対象の間でデータ型が一致していない前記構成要素であっても継承関係を有していれば前記データ型が一致していると判定し、全ての組み合わせの数に対するデータ型の一致数の割合に基づいて前記比較対象の間の類似度
を算出する、
情報処理方法。
【請求項6】
プログラミング言語で記述された複数の比較対象の類似度を算出するコンピュータに、
前記複数の比較対象の構成要素のデータ型が一致しているか否かを前記比較対象の間で比較する比較処理を前記構成要素の全ての組み合わせごとに実行させ、前記比較対象の間でデータ型が一致していない前記構成要素であっても継承関係を有していれば前記データ型が一致していると判定させ、全ての組み合わせの数に対するデータ型の一致数の割合に基づいて前記比較対象の間の継承関係
を算出させる処理、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理装置、情報処理方法及びプログラムに関する。
【背景技術】
【0002】
ITシステムは、ハードウェアの老朽化、IT技術/ITインフラの進化、利用しているソフトウェアライセンスに対するベンダサポートの終了などにより、導入から一定の期間を経て、改修や再構築(以下、「システムリニューアル」という。)が必要となるケースが増えている。
【0003】
システムリニューアルにあたって、既存システムを廃止して新規に構築し直すケースもあるが、新規構築は期間も費用もかかるという問題があり、新規構築によりビジネス的な新たな付加価値や効果が高くない場合には、既存システムをできるだけ流用・再利用することにより、期間やコストを圧縮して企業経営へのインパクトを最小化する必要がある。つまり、既存システムに対して最新のハードウェア、最新のプログラミング言語、最新IT技術/ITインフラなどに対応するために、プログラムの業務処理ロジックやアルゴリズムを維持したまま、新技術に移行したり、改造したりすることが行われている。
【0004】
このようなケースでは、既存システムのソフトウェア資産を正確に把握し、移行対象のソフトウェア資産を決定する必要があるが、長年に渡り保守されてきたシステムには、必要なソフトウェア資産と既に不要となっているソフトウェア資産が混在している場合が多い。これは、実際の開発現場でよくみられる、改修時に元となるプログラムをコピーして改造するような運用が行われていることが一因である。そのため、資産棚卸しの観点から、機能的に類似するソフトウェア資産を効率的に検出する仕組みが求められている。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
特許文献1には、比較対象である2つのソースプログラム間の類似度を算出することで類似なソースプログラムを検出可能な手法が開示されている。ただし、この手法では、文字列レベルでの厳密な比較によって類似度が計算されるため、汎化に適したソフトウェア資産を検出することができない場合があり、リファクタリングの機会が失われる場合がある。
【0007】
そこでこの発明は、上述の課題を解決する情報処理装置、情報処理方法及びプログラムを提供することを目的としている。
【課題を解決するための手段】
【0008】
本実施形態の第一の態様によれば、情報処理装置は、プログラミング言語で記述された複数の比較対象を取得する取得部と、前記取得部で取得した前記複数の比較対象の構成要素のデータ型が一致しているか否かを前記比較対象の間で比較する比較処理を前記構成要素の全ての組み合わせごとに実行し、全ての組み合わせの数に対するデータ型の一致数の割合に基づいて前記比較対象の間の類似度を算出する類似度算出部と、を備え、前記類似度算出部は、前記比較対象の間でデータ型が一致していない前記構成要素であっても継承関係を有していれば前記データ型が一致していると判定する。
【0009】
本実施形態の第二の態様によれば、情報処理方法は、コンピュータが、プログラミング言語で記述された複数の比較対象を取得し、取得した前記複数の比較対象の構成要素のデータ型が一致しているか否かを前記比較対象の間で比較する比較処理を前記構成要素の全ての組み合わせごとに実行し、前記比較対象の間でデータ型が一致していない前記構成要素であっても継承関係を有していれば前記データ型が一致していると判定し、全ての組み合わせの数に対するデータ型の一致数の割合に基づいて前記比較対象の間の類似度を前記比較対象の間の継承関係を算出する。
【0010】
本実施形態の第三の態様によれば、プログラムは、プログラミング言語で記述された複数の比較対象の類似度を算出するコンピュータに、前記複数の比較対象の構成要素のデータ型が一致しているか否かを前記比較対象の間で比較する比較処理を前記構成要素の全ての組み合わせごとに実行させ、前記比較対象の間でデータ型が一致していない前記構成要素であっても継承関係を有していれば前記データ型が一致していると判定させ、全ての組み合わせの数に対するデータ型の一致数の割合に基づいて前記比較対象の間の継承関係を算出させる処理、を実行させる。
【発明の効果】
【0011】
本発明によれば、汎化に適した類似のソフトウェア資産を検出可能である。
【図面の簡単な説明】
【0012】
【
図1】実施形態の情報処理装置の構成の一例を示す図である。
【
図2】比較対象である2つのソースコードの一例である。
【
図3】実施形態の関係情報の一例をテーブル形式で示す図である。
【
図4】実施形態のデータ型情報の一例をテーブル形式で示す図である。
【
図5】実施形態の算出パラメータの一例をテーブル形式で示す図である。
【
図6】実施形態の算出パラメータの一例をテーブル形式で示す図である。
【
図7】本実施形態の類似度算出処理の全体的なフローチャートである。
【
図8】実施形態の型比較処理のフローチャートである。
【
図9】本実施形態のメソッド比較処理のフローチャートである。
【
図10】トークンによる比較処理と本実施形態の類似度計算とで得られる各フィールド類似度を示す図である。
【
図11】トークンによる比較処理と本実施形態の類似度計算とで得られる各メソッド類似度を示す図である。
【
図12】トークンによる比較処理と本実施形態の類似度計算とで得られる各クラスの類似度を示す図である。
【
図13】検出した汎化の候補によってリファクタリングされた例を示す図である。
【
図14】本実施形態の情報処理装置の最小構成を示す図である。
【発明を実施するための形態】
【0013】
以下、実施形態の情報処理装置を、図面を参照して説明する。
【0014】
図1は、本実施形態に係る情報処理装置1の構成の一例を示す図である。
図1に示すように、情報処理装置1は、入力装置100、出力装置200、処理装置300、及びデータ格納部400を備える。
【0015】
入力装置100は、ユーザから各種の入力操作を受け、その入力操作に対応する操作信号を処理装置300する。すなわち、入力装置100は、情報の入力を受け付け、受け付けた情報を処理装置300に出力する。入力装置100は、例えば、タッチパネル、キーボード等に代表されるハードウェアキー、マウス等のポインティングデバイスである。
【0016】
出力装置200は、処理装置300が演算した演算結果(類似度)を出力する。出力装置200は、例えば、演算結果をユーザが所有する通信端末に出力して通信端末の画面に演算結果を表示させることでユーザに対して演算結果を提示してもよい。ユーザが所有する通信端末は、パーソナルコンピュータでもよいし、携帯端末であってもよい。携帯端末は、携帯電話、スマートフォン、PDA、タブレット、ノートブック・コンピュータ又はラップトップ・コンピュータ、ウエアラブル・コンピュータなどである。また、出力装置200は、表示装置を有しており、処理装置300から取得した演結果を、その表示装置に表示してもよい。
【0017】
処理装置300は、プログラミング言語で記述された複数の比較対象の間の類似度を算出する。比較対象とは、ソフトウェア資産であって例えば、ソースコードである。なお、ソースコードは、複数の構成要素(例えば、フィールドやメソッドなど)を含んで構成されている。フィールドは、クラスの特性を表す変数である。なお、以下に説明する場合には、プログラムミング言語がJava(登録商標)である場合について説明するが、Java以外のプログラムミング言語であってもよく、プログラミング言語には特に限定されない。
【0018】
図2は、比較対象である2つのソースコードの一例である。このソースコードは、クラス(class)を記述するものであり、比較対象のうち、一方の比較対象(第1の比較対象)は、クラスA(classA)を記述するソースコードであり、他方の比較対象(第2の比較対象)は、クラスB(classB)を記述するソースコードである。なお、
図2に示すソースコードは、説明の便宜上、比較がしやすいように並べて記述しているが、実際にはこのようなことはない。
【0019】
classAは、クラス定義であり、複数のフィールド(1)~フィールド(4)と、複数のメソッド(5)~(7)を含む。
classBは、クラス定義であり、複数のフィールド(8)~フィールド(12)と、複数のメソッド(13)~(15)を含む。
【0020】
フィールド及びメソッドは、それぞれ本発明の「構成要素」の一例である。
【0021】
ここで、classBの下線箇所は、classAと文字列として相違していることを示している。一般的に、classBの下線箇所は、classAと文字列として相違しているため、「異なる」と判定される。ただし、フィールド(1)とフィールド(12)とのペア、メソッド(7)とメソッド(13)のペアは、クラス「clsOYA」を継承するcls01、cls02を含んでおり、汎化に適したソフトウェア資産である。そこで、本実施形態の処理装置300は、フィールド(1)とフィールド(12)とのペア、メソッド(7)とメソッド(13)のペアをそれぞれ「異なる」として判定するのではなく、「同じ(一致)」として判定する。
【0022】
データ格納部400には、比較対象の情報が効率的に利用可能な形式で保持される。データ格納部400は、例えば、情報を格納する格納領域であればよく、例えば、ファイル、データベース、テーブル、リポジトリ等のソフトウェアで実現される情報の格納領域であってもよいし、例えば、HDD、SSD、サーバ装置等のハードウェアであってもよい。
【0023】
データ格納部400には、2つの比較対象に関する関係情報、データ型情報、及び算出パラメータ情報等が格納される。
【0024】
図3は、データ格納部400に格納される関係情報の一例をテーブル形式で示す図である。以下の説明において、関係情報が格納されるテーブルを「関係リンクテーブル410」と称する。
【0025】
関係情報は、比較対象と構成要素との関係を示す情報や複数の構成要素間の関係を示す情報などを有する。例えば、クラスとそのクラスに属するフィールドとメソッドの情報、メソッドとそのメソッドと関係を持つ情報などが関連情報として関係リンクテーブル410に格納されている。メソッドと関係を持つ情報とは、例えば参照しているフィールド、呼び出している他のメソッド、アクセスしているデータベース(DB)のテーブルの情報である。関係リンクテーブル410には、比較対象に含まれる文字や文字列が「名前」、「種別」、「対象」、「関係」の情報で関連付けられている。
【0026】
「種別」は、「名前」に示すものの種別(クラス、メソッド)を示す。「関係」は、「対象」と「名前」との関係を示す。「種別」がクラスの場合は、「関係」は、「フィールド」、「メソッド」、「継承元」のいずれかの情報となる。「種別」がメソッドの場合は「関係」は、「フィールド参照」、「メソッド呼び出し」、「DBアクセス」のいずれかの情報となる。この関連情報には、継承関係を有する構成要素の情報を示す継承関係情報を含む。継承関係情報には、継承した構成要素の情報とその継承元の情報とが関連付けられている。
図3に示す例では、「継承元」の情報が関連付けられている場合には、その名前に記載されているものが、「対象」のクラスから継承が行われたことを示す。すなわち、継承元が「対象」に記載されていることになる。
図3に示す例では、種別がクラスであるcls01とcls02とは、それぞれ継承元が同一である(clsOYA)であるため、cls01を有する構成要素とcls02を有する構成要素とが継承関係にあることを示す。
【0027】
図4は、データ格納部400に格納されるデータ型情報の一例をテーブル形式で示す図である。以下の説明において、データ型情報が格納されるテーブルを「データ型情報テーブル420」と称する。
【0028】
データ型情報テーブル420に格納されているデータ型情報は、「クラス」、「フィールド」、「返却値」、「引数」のデータ型の情報を含む。データ型情報テーブル420の「型」は「変数」のデータ型を示すもので、「順番」は、ソース記述上の順番を意味する。また、「返却値」や「引数」は、クラス、フィールド、メソッドの定義に含まれる返却値や引数である。
【0029】
図5は、算出パラメータが格納されている算出パラメータテーブル430の一例を示す図である。算出パラメータは、類似度算出時の動作を制御するパラメータ情報を有する。算出パラメータには、継承関係を考慮することを示す第1情報(例えば、ON)と、継承関係を考慮しないことを示す第2情報(例えば、OFF)とのいずれかの情報を有する。すなわち、例えば、処理装置300は、「継承関係考慮」がONである場合には継承関係を考慮した類似度算出を行い、「継承関係考慮」がOFFである場合には継承関係を考慮せずに類似度算出を行う。また、算出パラメータには、
図5に示す例では、類似度算出で算出した類似度から「一致」と見なす閾値(例えば、0.95)の情報が含まれている。なお、第1情報と第2情報とは、ユーザによって切り替え可能である。例えば、処理装置300は、入力装置100からの操作信号に基づいて「継承関係考慮」をON又はOFFに切り替える。これにより、ユーザは、継承関係の類似度算出を無効化できる。
【0030】
なお、処理装置300は、
図6に示すように、算出パラメータに対して、クラスではない基本的な型に対しても疑似的な継承関係を追加で定義してもよい。例えば、処理装置300は、「数値型であるint型をlong型の派生」と疑似的に定義することで、類似度算出部340では、intとlongを同じデータ型として扱い、さらに潜在的な汎化の候補を得ることができる。
【0031】
以下において、処理装置300の構成について説明する。処理装置300は、取得部310、情報抽出部320、情報入力部330、及び類似度算出部340を備える。
【0032】
取得部310は、プログラミング言語で記述された複数の比較対象を取得する。例えば、取得部310は、第1の比較対象と第2の比較対象とを取得する。
【0033】
情報抽出部320は、第1の比較対象と第2の比較対象とのそれぞれを解析して、それらに含まれる情報を抽出して関係リンク情報、データ型情報、及び算出パラメータ情報を生成する。第1の比較対象と第2の比較対象の解析には、一般的なプログラム解析技術を用いることができる。
【0034】
情報入力部330は、関係リンク情報、データ型情報、及び算出パラメータ情報をテーブル形式でデータ格納部400に格納する。ただし、これに限定されず、データ格納部400に格納される関係リンク情報、データ型情報、及び算出パラメータ情報は、外部から取得されてもよい。すなわち、関係リンク情報、データ型情報、及び算出パラメータ情報を生成する構成は、情報処理装置1の必須な構成ではない。
【0035】
類似度算出部340は、取得部310で取得した第1の比較対象と第2の比較対象との類似度の算出を行う。一例として、類似度算出部340は、関係リンク情報とデータ型情報とに基づいて、フィールド、メソッドの関係とデータ型の情報を抽出し、継承関係を考慮して第1の比較対象と第2の比較対象の類似度を算出する。
【0036】
類似度算出部340は、比較対象の構成要素のデータ型が一致しているか否かを比較対象の間で比較する比較処理を構成要素の全ての組み合わせごとに実行し、一致した数を一致数としてカウントする。類似度算出部340は、全ての組み合わせの数に対するデータ型の一致数の割合に基づいて類似度を算出する。類似度算出部340は、比較対象の間でデータ型が一致していない構成要素であっても継承関係を有していればデータ型が一致していると判定する。
【0037】
類似度算出部340は、データ型情報に基づいて第1の比較対象の構成要素のデータ型と第2の比較対象の構成要素のデータ型とが一致しているか否かを比較し、データ型が一致していれば一致数としてカウントする。類似度算出部340は、データ型が一致していなければ継承関係情報に基づいて第1の比較対象の構成要素と第2の比較対象の構成要素とが継承関係にあるか否かを判定し、継承関係があると判定した場合には一致しているとみなして一致数としてカウントする。
【0038】
以下において、類似度算出の処理の全体的な流れを、
図7を用いて説明する。
図7は、本実施形態の類似度算出処理の全体的なフローチャートである。
【0039】
処理装置300は、関係リンクテーブル410から「種別」が「クラス」である資産情報を検索し、一組のクラスのペアをその資産情報を第1類似判定対象として選択する(ステップS101)。処理装置300は、第1類似判定対象であるクラス間において継承関係があるか否かを判定する(ステップS102)。処理装置300は、第1類似判定対象であるクラス間において継承関係があると判定した場合には、誤検知を避けるためにステップS101に戻る。
【0040】
処理装置300は、第1類似判定対象であるクラス間において継承関係がないと判定した場合には、その第1類似判定対象がPOJO(Plain Old Java Object)などに代表される単純なクラスであるか否かを判定する(ステップS103)。処理装置300は、第1類似判定対象がPOJOなどに代表される単純なクラスである場合には、無関係なクラス間でも類似性が認められることでの誤検知を避けるため、ステップS101に戻る。
【0041】
処理装置300は、第1類似判定対象がPOJOなどに代表される単純なクラスではない場合には、ステップS104の処理を行う。具体的には、処理装置300は、第1類似判定対象として選択したクラス内のフィールドのペアを関係リンクテーブル410から選び、その一組のフィールドのペア(以下、「フィールドペア」という。)を第2類似判定対象として選択する(ステップS104)。
【0042】
処理装置300は、第2類似判定対象として選択したフィールドペアに対して、型比較処理を実行する(ステップS105)。型比較処理では、フィールドペアのうち、一方のフィールド(以下、「第1フィールド」という。)と他方のフィールド(以下、「第2フィールド」という。)とが同じデータ型であるか否かを判別する処理である。したがって、処理装置300は、型比較処理に基づいて第1フィールドと第2フィールドとが同じデータ型であるか否かを判定し(ステップS106)、同じであると判定した場合には第2類似判定対象であるペアのフィールドに対して印をつけて(ステップS107)、ステップS108の処理に進む。一方、処理装置300は、ステップS106において同じではないと判定した場合には、ステップS107の処理を実行せずに、ステップS108の処理に進む。
【0043】
ステップS108において、処理装置300は、第1類似判定対象において、全部のフィールドのペアを第2類似判定対象として選択済みであるか否かを関係リンクテーブル410に基づいて判定する。処理装置300は、全部のフィールドのペアを第2類似判定対象として選択済みであると判定した場合には、第1類似判定対象として選択されているペアのクラス内におけるステップS107で印をつけたフィールドの数(以下、「フィールド一致数」という。)と、そのクラス内のフィールドの総数(以下、「フィールド総数」という。)とに基づいてフィールドの類似度を算出する(ステップS109)。例えば、処理装置300は、フィールド一致数に対してフィールド総数を除算することで、第1類似判定対象として選択されているペアのクラス内におけるフィールドの類似度(以下、「フィールド類似度」という。)を算出する。例えば、印をつけたフィールド一致数が7個で、フィールド総数が9個である場合には、フィールド類似度は、0.78となる。
【0044】
処理装置300は、フィールド類似度を算出すると、第1類似判定対象として選択したクラス内のメソッドのペアを関係リンクテーブル410から取得し、そのメソッドのペアを第3類似判定対象として選択する(ステップS110)。
【0045】
処理装置300は、第3類似判定対象として選択したメソッドのペアに対して、メソッド比較処理を実行する(ステップS111)。メソッド比較処理では、メソッドのペアが同じメソッドか否かを判別する。したがって、処理装置300は、メソッド比較処理の結果に基づいて、メソッドのペアが同一のメソッドであるか否かを判定し(ステップS112)、同じであると判定した場合には第3類似判定対象であるペアのメソッドに対して印をつけて(ステップS113)、ステップS114の処理に進む。一方、処理装置300は、ステップS112において同じではないと判定した場合には、ステップS113の処理を実行せずに、ステップS114の処理に進む。
【0046】
ステップS114において、処理装置300は、第1類似判定対象において、全部のメソッドのペアを第3類似判定対象として選択済みであるか否かを判定する。処理装置300は、全部のメソッドのペアを第3類似判定対象として選択済みであると判定した場合には、第1類似判定対象として選択されているペアのクラス内におけるステップS113で印をつけたメソッドの数を求め、そのメソッドの数をメソッド一致数とする(ステップS115)。また、処理装置300は、第1類似判定対象として選択されているペアのクラス内にメソッドの総数(以下、「メソッド総数」という。)を求める。このように、処理装置300は、クラス内のメソッドの組み合わせごとにステップS111~ステップS113を実行する。
【0047】
処理装置300は、フィールド類似度の情報、すなわちフィールド一致数、フィールド総数と、メソッドの情報であるメソッド一致数及びメソッド総数と、に基づいて第1類似判定対象として選択されているペアのクラスの類似度(以下、「クラス類似度」という。)を求める(ステップS116)。例えば、処理装置300は、以下に示す式(1)に基づいて、クラス類似度を求める。
【0048】
(フィールド一致数+メソッド一致数)/(フィールド総数+メソッド総数)…(1)
【0049】
処理装置300は、ステップS116の処理後において、全てのクラスのペアを第1類似判定対象として選択済みかであるか否かを判定する(ステップS117)。処理装置300は、全てのクラスのペアを第1類似判定対象として選択済みではないと判定した場合には、ステップS101の処理に戻り、第1類似判定対象として選択されていない一組のクラスのペアを、第1類似判定対象として選択してステップS101からステップS116までの処理を実行する。処理装置300は、全てのクラスのペアを第1類似判定対象として選択済みであると判定した場合には、類似度算出処理を終了する。
【0050】
以下において、型比較処理の流れを、
図8を用いて説明する。
図8は、本実施形態の型比較処理のフローチャートである。
【0051】
処理装置300は、まず、第2類似判定対象として選択したフィールドのペアのデータ型が同じであるか否かを判定する(ステップS201)。例えば、処理装置300は、第1フィールドのデータ型と第2フィールドのデータ型の情報を型情報(例えば、データ型情報テーブル420)から読み取り、第1フィールドのデータ型と第2フィールドのデータ型とが一致するならばペアのデータ型が同じであると判定し、第1フィールドと第2フィールドとは同じであると判定する(ステップS202)。
【0052】
一方、処理装置300は、ステップS201において第1フィールドのデータ型と第2フィールドのデータ型とが一致しないならばペアのデータ型が同じはないと判定して、ステップS203の処理を行う。処理装置300は、ステップS203において、第1フィールドの種別と第2フィールドの種別が互いに「クラス」であるか否かを判定する。処理装置300は、第1フィールドの種別と第2フィールドの種別が互いに「クラス」である場合には、継承関係を考慮するか否かを判定する(ステップS205)。一方、処理装置300は、第1フィールドの種別と第2フィールドの種別が互いに「クラス」ではない場合には、第1フィールドと第2フィールドとは互いに異なると判定する(ステップS204)。
【0053】
ステップS205において、処理装置300は、算出パラメータを参照し、継承関係を考慮する旨の情報が設定されているならば、継承関係を考慮すると判定して、ステップS206の処理を行う。一方、処理装置300は、算出パラメータを参照し、継承関係を考慮しない旨の情報が設定されているならば、継承関係を考慮しないと判定して、ステップS204の処理(判定)を行う。
【0054】
処理装置300は、継承関係を考慮すると判定した場合には、継承関係情報に基づいて共通の基本クラスを有するか否かを判定する(ステップS206)。例えば、処理装置300は、継承関係を考慮すると判定した場合には、第1フィールドの「名称」と第2フィールドの「名称」のそれぞれに、同一の共通の基本クラスを有しているか否かを判定し、有していれば第1フィールドと第2フィールドとは同一であるとする(ステップS202)。一方、処理装置300は、第1フィールドの「名称」と第2フィールドの「名称」のそれぞれに、同一の共通の基本クラスを有していなければ、ステップS204の処理(判定)を行う。すなわち、継承関係を考慮しない場合には、共通の基本クラスを持つ場合であっても第1フィールドと第2フィールドとは異なるということになる。
【0055】
以下において、メソッド比較処理の流れを、
図9を用いて説明する。
図9は、本実施形態のメソッド比較処理のフローチャートである。
【0056】
処理装置300は、総数を示す第1変数X1と一致数を示す第2変数X2とをそれぞれ「0」に設定する(ステップS301)。処理装置300は、第3類似判定対象として選択したメソッドのペアの一方のメソッド(以下、「第1メソッド」という。)の返却値数と他方のメソッド(以下、「第2メソッド」という。)の返却値数との和(例えば、「2」)を、第1変数X1に加算する(ステップS302)。
【0057】
処理装置300は、データ型情報テーブル420に基づいて、返却値に対して型比較処理を行い、型比較処理の結果、第1メソッドの返却値のデータ型と第2メソッドの返却値のデータ型が同一であれば第2変数X2に「2」を加算する(ステップS303)。処理装置300は、第1変数X1に対して、2つのメソッドの引数、すなわち第1メソッドの引数と第2メソッドの引数との和を加算する(ステップS304)。処理装置300は、順次、引数に対して型比較処理を行い、第1メソッドの引数のデータ型と第2メソッドの引数のデータ型とが一致するものがあれば、第2変数X2に「2」を加算する(ステップS305)。
【0058】
次に、処理装置300は、第1変数X1に対して、第1メソッドのフィールド参照数と第2メソッドのフィールド参照数との和を加算する(ステップS306)。処理装置300は、順次、参照先のフィールドのデータ型に対して型比較処理を行い、同じものがあれば、第2変数X2に「2」を加算する(ステップS307)。
【0059】
処理装置300は、第1変数X1に対して、第1メソッドのメソッド呼び出し数と第2メソッドのメソッド呼び出し数との和を加算する(ステップS308)。処理装置300は、順次、メソッド呼び出しに対してメソッド呼び出し比較処理を行い、呼び出しているメソッドに同じものがあれば、第2変数X2に「2」を加算する(ステップS309)。メソッド呼び出し比較処理は、呼び出しているメソッドが同じであるか否かを判定する処理である。
【0060】
次に、処理装置300は、第1変数X1に対して、第1メソッドのDBアクセス数と第2メソッドのDBアクセス数との和を加算する(ステップS310)。処理装置300は、順次、DBアクセスに対してDBアクセス比較処理を行い、アクセスしているDBテーブルに同じものがあれば、第2変数X2に「2」を加算する(ステップS311)。DBアクセス比較処理は、アクセスしているDBテーブルが同じであるか否かを判定する処理である。
【0061】
処理装置300は、以下に示す式(2)を行うことで、メソッドの類似度(以下、「メソッド類似度」という。)を算出する(ステップS312)。
【0062】
メソッド類似度=一致数(第2変数X2)/総数(第1変数X1) …(2)
【0063】
処理装置300は、ステップS312で算出したメソッド類似度が一致とみなす閾値以上であるか否かを判定し(ステップS313)、メソッド類似度が閾値以上である場合には第1メソッドのデータ型と第2メソッドのデータ型とが同じであると判定する(ステップS314)。一方、処理装置300は、ステップS312で算出したメソッド類似度が閾値未満である場合には第1メソッドのデータ型と第2メソッドのデータ型とが異なると判定する(ステップS315)。
【0064】
以下において、本実施形態の効果について説明する。
図10~
図12は、トークンによる比較処理によって得られた類似度の結果と、本実施形態の類似度計算によって得られた類似度の結果とを示す図である。
図10は、フィールド類似度を示す図である。
図11は、メソッド類似度を示す図である。
図12は、クラスの類似度を示す図である。
図10から
図12に示すように、トークンの比較処理では検出できなかった汎化の候補が検出できていることがわかる。また、
図13には、検出した汎化の候補によってリファクタリングされた例を示す図である。
図13に示すように、処理装置300は、汎化に適したソフトウェア資産を検出することができ、リファクタリングが可能となる。
【0065】
企業が長期に渡りITシステムを運用・維持する中で、企業活動の目的に合わせてシステムの拡張や改造を積み重ねて行った結果、新旧さまざまなソフトウェアやハードウェアや開発技術が混在して複雑に絡み合った状態となり、ソフトウェア資産全体の把握が困難で、システムの拡張や改造が非常に難しいことが分かっている。開発現場では、ベースとなるプログラムをコピーし、その一部を書き換えて新たなプログラムを作成することが多くみられる。この新しいプログラムは、ベースとしたプログラムとは別機能の場合もあるが、同一機能の作り直し(リファクタリング)である場合もあり、長年保守を続けているシステムでは作りの似た新旧の資産が混在している状態が多くみられる。
【0066】
その結果、改修や再構築時のテスト対象資産や移行対象資産の棚卸しが効率的に実施できず、見積もり精度の低下、移行・テスト工数の増大といった問題を引き起こしている。近年、このような問題は古くからある構造化言語だけではなく、継承、汎化という仕組みを持つ言語で開発したシステムにも及びつつある。
【0067】
一般的には、コードクローン検出技術によって類似度を算出する場合が考えられが、この検出技術では、文字列レベルでの厳密な比較が行われるので、プログラム内での名前の変更によるわずかな差異や、継承関係にあるクラス同士が区別されることで類似度が下がり、汎化の可能性があるにも関わらず候補から除外されてしまい、リファクタリングの機会が失われる場合がある。
【0068】
そこで、本実施形態の情報処理装置1は、比較対象の間の継承関係を考慮して類似度を算出することで、汎化に適したソフトウェア資産を検出することを可能にする。したがって、リファクタリングの機会を確保することができる。
【0069】
実施形態の情報処理装置1の最小構成の実施形態について、
図14を参照して説明する。本実施形態に係る情報処理装置1は、取得部310及び類似度算出部340を備える。取得部310は、プログラミング言語で記述された複数の比較対象を取得する。類似度算出部340は、取得部310で取得した複数の比較対象の間の類似度を算出する。また、類似度算出部340は、比較対象の間の継承関係を考慮して類似度を算出する。これにより、汎化に適した類似のソフトウェア資産の検出が可能となる。
【0070】
なお、類似度算出部340は、継承関係にあるクラス、POJOに代表される単純なクラスは類似度算出の対象から除外することで、汎化の候補として誤検知されないようにしてもよい。
【0071】
上記実施形態において、処理装置300は、算出パラメータに対して、クラスではない基本的な型に対しても疑似的な継承関係を追加で定義してもよい。例えば、処理装置300は、「数値型であるint型をlong型の派生」と疑似的に定義することで、類似度算出部340では、intとlongを同じデータ型として扱い、さらに潜在的な汎化の候補を得ることができる。
【0072】
なお、上述した情報処理装置1の全部または一部をコンピュータで実現するようにしてもよい。この場合、上記コンピュータは、CPU、GPUなどのプロセッサ及びコンピュータ読み取り可能な記録媒体を備えてもよい。そして、上記情報処理装置1,1Aの全部または一部の機能をコンピュータで実現するためのプログラムを上記コンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムを上記プロセッサに読み込ませ、実行することによって実現してもよい。ここで、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD-ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含んでもよい。また上記プログラムは、前述した機能の一部を実現するためのものであってもよく、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであってもよく、FPGA等のプログラマブルロジックデバイスを用いて実現されるものであってもよい。
【0073】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。
【0074】
明細書の全体において、ある部分がある構成要素を「含む」や「有する」とする時、これは、特に反対の記載がない限り、他の構成要素を除くものではなく、他の構成要素をさらに含むことができるということを意味する。
【0075】
明細書に記載の「…部」の用語は、少なくとも1つの機能や動作を処理する単位を意味し、これは、ハードウェアまたはソフトウェアとして具現されてもよいし、ハードウェアとソフトウェアとの組み合わせで具現されてもよい。
【符号の説明】
【0076】
1 情報処理装置
300 処理装置
310 取得部
320 情報抽出部
330 情報入力部
340 類似度算出部
400 データ格納部