(57)【要約】【課題】類似プログラムの特定精度を向上させることができる、類似プログラム特定装置、類似プログラム特定方法、及び制御プログラムを提供する。【解決手段】類似プログラム特定装置１０において、第１算出部１１Ａは、複数のプログラムと各プログラムの各アクセスタイミング種別についてのアクセスパターンとを対応付けたアクセス対応関係を用いて、複数のプログラムのうちの各プログラムペアについて、アクセスタイミング種別毎に、プログラムペアの２つの構成プログラムにそれぞれ対応する２つのアクセスパターン間のタイミング種別単位類似度を算出する。第２算出部１１Ｂは、算出された複数のタイミング種別単位類似度と、各プログラムペアの２つの構成プログラムがそれぞれ属するアクセス先特性別グループの組み合わせに対応する重み係数セットとに基づいて、各プログラムペアについてのプログラム類似度を算出する。【選択図】図１
2019049870.tif 000002
【特許請求の範囲】
【請求項１】
複数のプログラムと、各プログラムの複数のアクセスタイミング種別のそれぞれについてのアクセス先及び該アクセス先へのアクセス目的を含むアクセスパターンとを対応付けたアクセス対応関係を用いて、前記複数のプログラムのうちの各プログラムペアについて、アクセスタイミング種別毎に、プログラムペアの２つの構成プログラムにそれぞれ対応する２つのアクセスパターン間のタイミング種別単位類似度を算出する、第１算出部と、
前記第１算出部によって各プログラムペアについて算出された複数のタイミング種別単位類似度と、各プログラムペアの２つの構成プログラムがそれぞれ属するアクセス先特性別グループのグループ組み合わせに対応する重み係数セットとに基づいて、各プログラムペアについてのプログラム類似度を算出する第２算出部と、
前記第２算出部によって算出されたプログラム類似度に基づいて、２つの構成プログラムが類似するプログラムペアを特定する第１特定部と、
を具備する類似プログラム特定装置。
【請求項２】
前記複数のプログラムと、各プログラムが属する、アクセスタイミング種別毎のアクセス先特性に応じた前記アクセス先特性別グループとを対応付けたグループ対応関係に基づいて、各プログラムペアの２つの構成プログラムのグループ組み合わせを特定する第２特定部と、
複数のグループ組み合わせと、各グループ組み合わせに応じた、アクセスタイミング種別間の重み係数セットとを対応付けた重み対応関係に基づいて、前記第２特定部によって特定された各プログラムペアのグループ組み合わせに対応する重み係数セットを特定する第３特定部と、
をさらに具備し、
前記第２算出部は、前記第１算出部によって各プログラムペアについて算出された複数のタイミング種別単位類似度と、前記第３特定部によって特定された各プログラムペアのグループ組み合わせに対応する重み係数セットとに基づいて、各プログラムペアについてのプログラム類似度を算出する、
請求項１記載の類似プログラム特定装置。
【請求項３】
複数のプログラムと、各プログラムの複数のアクセスタイミング種別のそれぞれについてのアクセス先及び該アクセス先へのアクセス目的を含むアクセスパターンとを対応付けたアクセス対応関係を用いて、前記複数のプログラムのうちの各プログラムペアについて、アクセスタイミング種別毎に、プログラムペアの２つの構成プログラムにそれぞれ対応する２つのアクセスパターン間のタイミング種別単位類似度を算出し、
各プログラムペアについて前記算出された複数のタイミング種別単位類似度と、各プログラムペアの２つの構成プログラムがそれぞれ属するアクセス先特性別グループのグループ組み合わせに対応する重み係数セットとに基づいて、各プログラムペアについてのプログラム類似度を算出し、
前記プログラム類似度に基づいて、２つの構成プログラムが類似するプログラムペアを特定する、
類似プログラム特定方法。
【請求項４】
複数のプログラムと、複数のアクセスタイミング種別のそれぞれについての各プログラムのアクセス先及び該アクセス先へのアクセス目的を含むアクセスパターンとを対応付けたアクセス対応関係を用いて、前記複数のプログラムのうちの各プログラムペアについて、アクセスタイミング種別毎に、プログラムペアの２つの構成プログラムにそれぞれ対応する２つのアクセスパターン間のタイミング種別単位類似度を算出し、
各プログラムペアについて前記算出された複数のタイミング種別単位類似度と、各プログラムペアの２つの構成プログラムがそれぞれ属するアクセス先特性別グループのグループ組み合わせに対応する重み係数セットとに基づいて、各プログラムペアについてのプログラム類似度を算出し、
前記プログラム類似度に基づいて、２つの構成プログラムが類似するプログラムペアを特定する、
処理を、類似プログラム特定装置に実行させる、制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、類似プログラム特定装置、類似プログラム特定方法、及び制御プログラムに関する。
【背景技術】
【０００２】
企業が長期にわたってＩＴシステムを運用及び維持する中で、企業活動の目的に合わせてシステムの拡張や改造を積み重ねることがある。この結果、新旧さまざまなソフトウェア、ハードウェア、及び開発技術が混在して複雑に絡み合った状態となることがある。このような状態では、ソフトウェア資産全体の把握が困難となり、システムの拡張や改造が非常に難しいことがある。
【０００３】
例えば、開発現場では、ベースとなるプログラムをコピーし、その一部を書き換えて新たなプログラムを作成することがよく行われる。このように作成された新しいプログラムは、ベースとしたプログラムの機能とは別機能を有していることもあるし、ベースとしたプログラムと機能を同じにしたまま作り直した（リファクタリングした）ものであることもある。このように、長年保守を続けているシステムでは、作りの似た新旧の資産が混在している状態となっていることがある。その結果、改修時又は再構築時におけるテスト対象資産又は移行対象資産の棚卸しが効率的に実施できず、見積もり精度が低下し、移行工数又はテスト工数が増大してしまう可能性がある。
【０００４】
これに対して、従来、ソフトウェア資産管理装置が提案されている（例えば、特許文献１）。特許文献１のソフトウェア資産管理装置は、抽象度や詳細度によって区分分けされたブロックに対し、ソフトウェア資産を構成する個々の情報単位である情報ノードを配置し、各情報ノード間の関係性を示す有向リンクである関係リンクで設定した資産管理マトリクスを保持している。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１４−１５７５９８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明者は、上記従来技術では、複数のプログラムを含むソフトウェア資産の中から類似するプログラムを精度良く特定できない可能性がある問題を見出した。
【０００７】
すなわち、プログラムは、複数のアクセスタイミング種別のそれぞれにおいて、プログラムのアクセス先及び該アクセス先へのアクセス目的を含むアクセスパターンを有している。そして、本発明者は、プログラムを特徴付けるアクセスパターンのアクセスタイミング種別は、プログラムによって異なることを見出した。このため、アクセスタイミング種別を考慮していない上記従来技術では、複数のプログラムを含むソフトウェア資産の中から類似するプログラムを精度良く特定できない可能性があることを見出した。
【０００８】
本発明の目的は、類似プログラムの特定精度を向上させることができる、類似プログラム特定装置、類似プログラム特定方法、及び制御プログラムを提供することにある。
【課題を解決するための手段】
【０００９】
本発明の第１の態様にかかる類似プログラム特定装置は、複数のプログラムと、複数のアクセスタイミング種別のそれぞれについての各プログラムのアクセス先及び該アクセス先へのアクセス目的を含むアクセスパターンとを対応付けたアクセス対応関係を用いて、前記複数のプログラムのうちの各プログラムペアについて、アクセスタイミング種別毎に、プログラムペアの２つの構成プログラムにそれぞれ対応する２つのアクセスパターン間のタイミング種別単位類似度を算出する、第１算出部と、前記第１算出部によって各プログラムペアについて算出された複数のタイミング種別単位類似度と、各プログラムペアの２つの構成プログラムがそれぞれ属するアクセス先特性別グループのグループ組み合わせに対応する重み係数セットとに基づいて、各プログラムペアについてのプログラム類似度を算出する第２算出部と、前記第２算出部によって算出されたプログラム類似度に基づいて、２つの構成プログラムが類似するプログラムペアを特定する第１特定部と、を具備する。
【００１０】
本発明の第２の態様にかかる類似プログラム特定方法は、複数のプログラムと、各プログラムの複数のアクセスタイミング種別のそれぞれについてのアクセス先及び該アクセス先へのアクセス目的を含むアクセスパターンとを対応付けたアクセス対応関係を用いて、前記複数のプログラムのうちの各プログラムペアについて、アクセスタイミング種別毎に、プログラムペアの２つの構成プログラムにそれぞれ対応する２つのアクセスパターン間のタイミング種別単位類似度を算出し、各プログラムペアについて前記算出された複数のタイミング種別単位類似度と、各プログラムペアの２つの構成プログラムがそれぞれ属するアクセス先特性別グループのグループ組み合わせに対応する重み係数セットとに基づいて、各プログラムペアについてのプログラム類似度を算出し、前記プログラム類似度に基づいて、２つの構成プログラムが類似するプログラムペアを特定する。
【００１１】
本発明の第３の態様にかかる制御プログラムは、複数のプログラムと、各プログラムの複数のアクセスタイミング種別のそれぞれについてのアクセス先及び該アクセス先へのアクセス目的を含むアクセスパターンとを対応付けたアクセス対応関係を用いて、前記複数のプログラムのうちの各プログラムペアについて、アクセスタイミング種別毎に、プログラムペアの２つの構成プログラムにそれぞれ対応する２つのアクセスパターン間のタイミング種別単位類似度を算出し、各プログラムペアについて前記算出された複数のタイミング種別単位類似度と、各プログラムペアの２つの構成プログラムがそれぞれ属するアクセス先特性別グループのグループ組み合わせに対応する重み係数セットとに基づいて、各プログラムペアについてのプログラム類似度を算出し、前記プログラム類似度に基づいて、２つの構成プログラムが類似するプログラムペアを特定する、処理を、類似プログラム特定装置に実行させる。
【発明の効果】
【００１２】
本発明により、類似プログラムの特定精度を向上させることができる、類似プログラム特定装置、類似プログラム特定方法、及び制御プログラムを提供することができる。
【図面の簡単な説明】
【００１３】
【図１】第１実施形態の類似プログラム特定装置の一例を示すブロック図である。
【図２】第２実施形態の類似プログラム特定装置の一例を示すブロック図である。
【図３】第２実施形態のシステム構成情報テーブルの一例を示す図である。
【図４】第２実施形態の関係リンクテーブルの一例を示す図である。
【図５】図３のシステム構成情報テーブル及び図４の関係リンクテーブルによって表されるソフトウェア資産の構成例を示す図である。
【図６】第２実施形態の重み係数テーブルの一例を示す図である。
【図７】第２実施形態の類似プログラム特定装置の処理動作の一例を示すフローチャートである。
【図８】プログラム類似度の算出結果を示す図である。
【図９】プログラムペアの番号に対してプログラム類似度の値をプロットしたグラフである。
【図１０】プログラムペアの番号に対して分類なし類似度の値をプロットしたグラフである。
【図１１】プログラムペアの番号に対してコンパイル時類似度の値をプロットしたグラフである。
【図１２】プログラムペアの番号に対して実行時類似度の値をプロットしたグラフである。
【図１３】類似プログラム特定装置のハードウェア構成例を示す図である。
【発明を実施するための形態】
【００１４】
以下、図面を参照しつつ、実施形態について説明する。なお、実施形態において、同一又は同等の要素には、同一の符号を付し、重複する説明は省略される。
【００１５】
＜第１実施形態＞
＜類似プログラム特定装置の構成例＞
図１は、第１実施形態の類似プログラム特定装置の一例を示すブロック図である。図１において、類似プログラム特定装置１０は、制御部１１と、記憶部１２とを有している。制御部１１は、タイミング種別単位類似度算出部（以下、「第１算出部」と呼ぶことがある）１１Ａと、プログラム類似度算出部（以下、「第２算出部」と呼ぶことがある）１１Ｂと、類似プログラム特定部（以下、「第１特定部」と呼ぶことがある）１１Ｃとを有している。
【００１６】
第１算出部（タイミング種別単位類似度算出部）１１Ａは、「アクセス対応関係」を用いて、「類似プログラム探索範囲」に含まれる複数のプログラムのうちの各プログラムペアについて、「アクセスタイミング種別」毎に、プログラムペアの２つの構成プログラムにそれぞれ対応する２つの「アクセスパターン」間の「タイミング種別単位類似度」を算出する。「アクセス対応関係」は、記憶部１２に記憶（保持）されている。ここで、「アクセス対応関係」は、複数のプログラム（つまり、複数のプログラム識別子）と、各プログラムの複数のアクセスタイミング種別のそれぞれについてのアクセスパターンとを対応付けた対応関係である。また、「複数のアクセスタイミング種別」には、例えば、「コンパイル時」、及び、「プログラム実行時」が含まれる。また、「アクセスパターン」を規定する規定要素には、例えば、プログラムの「アクセス先」、及び、該アクセス先への「アクセス目的」が含まれている。また、「アクセス先」には、例えば、ファイル、テーブル、マクロ等が含まれる。また、「アクセス目的」には、例えば、「引用」、「リード（読み込み）」、「ライト（書き込み）」等が含まれる。
【００１７】
すなわち、第１算出部１１Ａは、例えば、注目するプログラムペアが第１構成プログラム及び第２構成プログラムによって構成されている場合、第１構成プログラムの「コンパイル時」のアクセスパターンと第２構成プログラムの「コンパイル時」のアクセスパターンとの類似度を、「コンパイル時」のタイミング種別単位類似度として算出する。同様に、第１算出部１１Ａは、第１構成プログラムの「プログラム実行時」のアクセスパターンと第２構成プログラムの「プログラム実行時」のアクセスパターンとの類似度を、「プログラム実行時」のタイミング種別単位類似度として算出する。そして、第１算出部１１Ａは、「類似プログラム探索範囲」に含まれる複数のプログラムの中で注目プログラムペアを順次変更して、各注目プログラムペアについてタイミング種別単位類似度を算出する。
【００１８】
第２算出部（プログラム類似度算出部）１１Ｂは、第１算出部１１Ａによって各プログラムペアについて算出された複数のタイミング種別単位類似度と、各プログラムペアの２つの構成プログラムがそれぞれ属する「アクセス先特性別グループ」のグループ組み合わせに対応する「重み係数セット」とに基づいて、各プログラムペアについてのプログラム類似度を算出する。すなわち、例えば、第２算出部１１Ｂは、或るプログラムペアのグループ組み合わせが第１のグループ組み合わせである場合、そのプログラムペアの「コンパイル時」のタイミング種別単位類似度に対して、第１のグループ組み合わせに対応する重み係数セットに含まれる「コンパイル時」の重み係数を掛け合わせる。また、第２算出部１１Ｂは、プログラムペアの「プログラム実行時」のタイミング種別単位類似度に対して、第１のグループ組み合わせに対応する重み係数セットに含まれる「プログラム実行時」の重み係数を掛け合わせる。そして、第２算出部１１Ｂは、それぞれ重み付けされた後の、「コンパイル時」のタイミング種別単位類似度と「プログラム実行時」のタイミング種別単位類似度とを足し合わせることにより、プログラム類似度を算出する。ここで、「アクセス先特性別グループ」は、アクセスタイミング種別毎のアクセス先特性に応じたグループであり、例えば、サブシステム毎のグループ、又は、ソフトウェアパッケージ毎のグループである。
【００１９】
第１特定部（類似プログラム特定部）１１Ｃは、第２算出部１１Ｂによって算出されたプログラム類似度に基づいて、２つの構成プログラムが類似するプログラムペア（以下、「類似プログラムペア」と呼ぶことがある）を特定する。例えば、第１特定部１１Ｃは、プログラム類似度と「類似判定閾値」との大小に基づいて、類似プログラムペアを特定する。具体的には、第１特定部１１Ｃは、「類似判定閾値」以上のプログラム類似度を有するプログラムペアを、類似プログラムペアとして特定する。
【００２０】
以上のように第１実施形態によれば、類似プログラム特定装置１０において、第１算出部１１Ａは、複数のプログラムと、各プログラムの複数のアクセスタイミング種別のそれぞれについてのアクセス先及び該アクセス先へのアクセス目的を含むアクセスパターンとを対応付けたアクセス対応関係を用いて、複数のプログラムのうちの各プログラムペアについて、アクセスタイミング種別毎に、プログラムペアの２つの構成プログラムにそれぞれ対応する２つのアクセスパターン間のタイミング種別単位類似度を算出する。そして、第２算出部１１Ｂは、第１算出部１１Ａによって各プログラムペアについて算出された複数のタイミング種別単位類似度と、各プログラムペアの２つの構成プログラムがそれぞれ属するアクセス先特性別グループのグループ組み合わせに対応する重み係数セットとに基づいて、各プログラムペアについてのプログラム類似度を算出する。
【００２１】
この類似プログラム特定装置１０の構成により、プログラムペアについて算出したタイミング種別単位類似度に対して、プログラムペアの２つの構成プログラムについてのアクセスタイミング種別毎のアクセス先特性を考慮した重み付けを行うことにより、プログラム類似度を算出するので、より精度の高いプログラム類似度を算出することができる。
【００２２】
また、類似プログラム特定装置１０において、第１特定部１１Ｃは、第２算出部１１Ｂによって算出されたプログラム類似度に基づいて、２つの構成プログラムが類似するプログラムペアを特定する。
【００２３】
この類似プログラム特定装置１０により、より精度の高いプログラム類似度に基づいて類似プログラムペアを特定するので、類似プログラムの特定精度を向上させることができる。
【００２４】
＜第２実施形態＞
第２実施形態は、より具体的な実施形態に関する。
【００２５】
＜類似プログラム特定装置の構成例＞
図２は、第２実施形態の類似プログラム特定装置の一例を示すブロック図である。図２において、類似プログラム特定装置２０は、制御部２１と、記憶部１２とを有している。制御部２１は、タイミング種別単位類似度算出部１１Ａ、プログラム類似度算出部１１Ｂ、及び類似プログラム特定部１１Ｃに加えて、情報収集部２１Ａと、テーブル管理部２１Ｂと、グループ組み合わせ特定部２１Ｃと、重み係数特定部２１Ｄとを有している。以下では、グループ組み合わせ特定部２１Ｃを「第２特定部」と呼び、重み係数特定部２１Ｄを「第３特定部」と呼ぶことがある。
【００２６】
情報収集部２１Ａは、ソフトウェア資産を解析し、ソフトウェア資産に含まれる要素に関する情報を収集する。情報収集部２１Ａによるソフトウェア資産の解析は、一般的なプログラム解析技術で行うことができる。
【００２７】
テーブル管理部２１Ｂは、情報収集部２１Ａによって収集された情報を用いて、記憶部１２に記憶されている、「システム構成情報テーブル」及び「関係リンクテーブル」を更新する。図３は、第２実施形態のシステム構成情報テーブルの一例を示す図である。図４は、第２実施形態の関係リンクテーブルの一例を示す図である。図５は、図３のシステム構成情報テーブル及び図４の関係リンクテーブルによって表されるソフトウェア資産の構成例を示す図である。
【００２８】
図３に示すように、システム構成情報テーブルには、項目として、「要素管理番号」、「要素種別」、「要素名称」、「アクセス先特性別グループ」、「出リンク」、及び「入リンク」が含まれている。例えば、要素番号Ｅ１のエントリによって、プログラム１がサブシステムＡに含まれ、プログラム１からリンク管理番号Ｌ１，Ｌ２，Ｌ３，Ｌ４のリンクが出ていることが表されている。
【００２９】
すなわち、「要素管理番号」項目は、エントリの番号を示している。また、「要素種別」は、要素の種類を示しており、例えば、プログラム、マクロ、テーブル、及びファイル等である。また、「要素名称」は、要素の名称であり、要素の識別子として用いられることができる。
【００３０】
また、「アクセス先特性別グループ」は、アクセスタイミング種別毎のアクセス先特性に応じた、プログラムのグループであり、例えば、サブシステム毎又はソフトウェアパッケージ毎のグループである。ここで、プログラムは、例えば、命名規則に基づいて、アクセス先特性別グループにグルーピングされてもよい。また、プログラムとアクセス先特性別グループとの対応関係は、この対応関係を記述した設定ファイルから情報収集部２１Ａによって収集されてもよい。図３に示されるシステム構成情報テーブルでは、一例として、プログラムは、一般的な業務処理プログラムが含まれるサブシステムＡと、各業務処理で共通的に利用される共通部品であるサブシステムＢとに、グルーピングされている。
【００３１】
また、「出リンク」は、そのエントリの要素を始点とするリンクである。また、「入リンク」は、そのエントリの要素を終点とするリンクである。
【００３２】
また、図４に示すように、関係リンクテーブルには、項目として、「リンク管理番号」、「アクセス目的種別」、「アクセスタイミング種別」、「始点情報」、及び「終点情報」が含まれている。例えば、リンク管理番号Ｌ１のエントリによって、コンパイル時に要素管理番号Ｅ１の要素が要素番号Ｅ８の要素を引用するリンクが表されている。
【００３３】
すなわち、「リンク管理番号」項目は、リンクの番号を示している。また、「アクセス目的種別」は、「始点情報」で表される要素が「終点情報」で表される要素にアクセスする目的である。また、「アクセスタイミング種別」は、「始点情報」で表される要素が「終点情報」で表される要素にアクセスするタイミングの種類を表し、例えば、「コンパイル時」及び「プログラム実行時」を含んでいる。また、「始点情報」は、リンクの始点となる要素を示している。また、「終点情報」は、リンクの終点となる要素を示している。
【００３４】
以上で説明した図３のシステム構成情報テーブル及び図４の関係リンクテーブルによって、「アクセス対応関係」、及び、「グループ対応関係」が表されている。
【００３５】
ここで、「アクセス対応関係」は、上記の通り、複数のプログラム（つまり、複数のプログラム識別子）と、各プログラムの複数のアクセスタイミング種別のそれぞれについてのアクセスパターンとを対応付けた対応関係である。図３及び図４を参照すると、例えば、要素管理番号Ｅ１のプログラム１は、コンパイル時に要素管理番号Ｅ８のマクロａに対して引用を目的としてアクセスする、アクセスパターンを有している。また、要素管理番号Ｅ１のプログラム１は、プログラム実行時に要素管理番号Ｅ１２のテーブルＡに対して読み込む目的でアクセスし、要素管理番号Ｅ１４のテーブルＣに対して読み込む目的でアクセスし、要素管理番号Ｅ１５のテーブルＤに対して書き込む目的でアクセスする、アクセスパターンを有している。
【００３６】
また、「グループ対応関係」は、複数のプログラムと、各プログラムが属する、アクセスタイミング種別毎のアクセス先特性に応じたアクセス先特性別グループとを対応付けた、対応関係である。図３及び図４を参照すると、例えば、プログラム１，２，２’，３は、サブシステムＡに対応づけられ、プログラム４，５，５’は、サブシステムＢに対応づけられている。上記の通り、サブシステムＡは、一般的な業務処理プログラムのグループであり、サブシステムＢは、各業務処理で共通的に利用される共通部品のグループである。業務処理の特徴は、アクセスするテーブルやファイルに現れやすいため、プログラム実行時のアクセスパターン（つまり、アクセス先特性）に現れる。また、共通部品の特徴は、業務的なテーブルやファイルへのアクセスが少ないので、コンパイル時のアクセスパターン（つまり、アクセス先特性）に現れる。このようなアクセスタイミング種別毎のアクセス先特性に応じて、プログラム１，２，２’，３，４，５，５’は、サブシステムＡ及びサブシステムＢにグルーピングされている。
【００３７】
図２の説明に戻り、第２特定部（グループ組み合わせ特定部）２１Ｃは、上記「グループ対応関係」を用いて、「類似プログラム探索範囲」に含まれる複数のプログラムのうちの各プログラムペアの２つの構成プログラムのグループ組み合わせを特定する。例えば、プログラム１及びプログラム２のプログラムペアであれば、特定されるグループ組み合わせは、組み合わせＡ−Ａである。また、プログラム４及びプログラム５のプログラムペアであれば、特定されるグループ組み合わせは、組み合わせＢ−Ｂである。また、プログラム３及びプログラム４のプログラムペアであれば、特定されるグループ組み合わせは、組み合わせＡ−Ｂである。
【００３８】
第３特定部（重み係数特定部）２１Ｄは、「重み対応関係」に基づいて、第２特定部によって特定された各プログラムペアのグループ組み合わせに対応する重み係数セットを特定する。「重み対応関係」は、複数のグループ組み合わせと、各グループ組み合わせに応じた、アクセスタイミング種別間の重み係数セットとを対応付けた、対応関係である。「重み対応関係」は、例えば、図６に示す重み係数テーブルとして、記憶部１２に保持される。
【００３９】
例えば、グループ組み合わせＡ−Ａの場合、「コンパイル時」のタイミング種別単位類似度に対して掛け合わされる重み係数が「０．２」であり、「プログラム実行時」のタイミング種別単位類似度に対して掛け合わされる重み係数が「０．８」である、重み係数セットが特定されることになる。ここで、上記の通り、サブシステムＡの特徴は、プログラム実行時のアクセスパターン（つまり、アクセス先特性）に現れる傾向にあるので、グループ組み合わせＡ−Ａに対応する重み係数セットでは、「プログラム実行時」に対応する重み係数に大きな値が設定されている。一方、サブシステムＢの特徴は、コンパイル時のアクセスパターン（つまり、アクセス先特性）に現れる傾向にあるので、グループ組み合わせＢ−Ｂに対応する重み係数セットでは、「コンパイル時」に対応する重み係数に大きな値が設定されている。これに対して、グループ組み合わせＡ−Ｂに対応する重み係数セットでは、「コンパイル時」に対応する重み係数と「プログラム実行時」に対応する重み係数とを等しくしている。すなわち、グループ組み合わせＡ−Ｂに対応する重み係数セットは、グループ組み合わせＡ−Ａに対応する重み係数セット及びグループ組み合わせＢ−Ｂに対応する重み係数セットを平均したものと同等になっている。
【００４０】
そして、第２算出部（プログラム類似度算出部）１１Ｂは、第１算出部１１Ａによって各プログラムペアについて算出された複数のタイミング種別単位類似度と、第３特定部２１Ｄによって特定された「重み係数セット」とに基づいて、第１実施形態で説明したように、各プログラムペアについてのプログラム類似度を算出する。
【００４１】
＜類似プログラム特定装置の動作例＞
以上の構成を有する類似プログラム特定装置の処理動作の一例について説明する。ここでは、特に、プログラム類似度を算出するまでの処理について説明する。図７は、第２実施形態の類似プログラム特定装置の処理動作の一例を示すフローチャートである。
【００４２】
類似プログラム特定装置２０において、第１算出部（タイミング種別単位類似度算出部）１１Ａは、「類似プログラム探索範囲」に含まれる複数のプログラムのうちの１つのプログラムペアを、注目プログラムペアとして選択する（ステップＳ１０１）。ここでは、プログラム１及びプログラム２のプログラムペアが注目プログラムペアとして選択されたものとする。
【００４３】
〈タイミング種別単位類似度の算出処理〉
次いで、第１算出部１１Ａは、注目プログラムペアのタイミング種別単位類似度を算出する（ステップＳ１０２）。
【００４４】
例えば、第１算出部１１Ａは、まず、アクセスタイミング種別毎に、注目プログラムペアに関係するリンクの種類をカウントする。プログラム１及びプログラム２のプログラムペアの場合、アクセスタイミング種別が「コンパイル時」であるリンクの総数は、リンク管理番号Ｌ１の出リンク及びリンク管理番号Ｌ４の出リンクの２つであるが、これらの出リンクは互いに終点の要素及びアクセス目的種別が同じであるため、１つとしてカウントされる。また、アクセスタイミング種別が「プログラム実行時」であるリンクの総数は、リンク管理番号Ｌ２，Ｌ３，Ｌ４，Ｌ６，Ｌ７，Ｌ８の出リンクの６つであるが、リンク管理番号Ｌ３，Ｌ７の出リンクは、互いに終点の要素及びアクセス目的種別が同じであるため、１つとしてカウントされる。従って、プログラム１及びプログラム２のプログラムペアの場合、アクセスタイミング種別が「プログラム実行時」であるリンクの種類は、５つである。なお、複数の入リンクは、互いに始点の要素及びアクセス目的種別が同じ場合に、１つとしてカウントされる。
【００４５】
次に、第１算出部１１Ａは、注目プログラムペアの２つの構成プログラムの間で共通のリンクの種類をカウントする。プログラム１及びプログラム２のプログラムペアの場合、アクセスタイミング種別が「コンパイル時」あり且つ両構成プログラムに共通するリンクは、リンク管理番号Ｌ１の出リンク及びリンク管理番号Ｌ４の出リンクである。この場合も上記と同様に、リンク管理番号Ｌ１の出リンク及びリンク管理番号Ｌ４の出リンクは互いに終点の要素及びアクセス目的種別が同じであるため、１つとしてカウントされる。また、プログラム１及びプログラム２のプログラムペアの場合、アクセスタイミング種別が「プログラム実行時」あり且つ両構成プログラムに共通するリンクは、リンク管理番号Ｌ３の出リンク及びリンク管理番号Ｌ７の出リンクである。この場合も上記と同様に、リンク管理番号Ｌ３の出リンク及びリンク管理番号Ｌ７の出リンクは互いに終点の要素及びアクセス目的種別が同じであるため、１つとしてカウントされる。
【００４６】
そして、第１算出部１１Ａは、以下のような計算を行って、注目プログラムペアについての、「コンパイル時」のタイミング種別単位類似度、及び、「プログラム実行時」のタイミング種別単位類似度をそれぞれ算出する。
「コンパイル時」のタイミング種別単位類似度＝１／１＝１
「プログラム実行時」のタイミング種別単位類似度＝１／５＝０．２
【００４７】
〈グループ組み合わせの特定処理〉
次いで、第２特定部（グループ組み合わせ特定部）２１Ｃは、「グループ対応関係」を用いて、注目プログラムペアの２つの構成プログラムのグループ組み合わせを特定する（ステップＳ１０３）。プログラム１及びプログラム２のプログラムペアの場合、いずれの構成プリグラムもサブシステムＡに属しているので、グループ組み合わせＡ−Ａが特定されることになる。
【００４８】
〈重み係数セットの特定処理〉
次いで、第３特定部（重み係数特定部）２１Ｄは、「重み対応関係」に基づいて、ステップＳ１０３で特定された注目プログラムペアのグループ組み合わせに対応する重み係数セットを特定する（ステップＳ１０４）。プログラム１及びプログラム２のプログラムペアの場合、図６に示す重み係数テーブルにおいてグループ組み合わせＡ−Ａに対応する重み係数セット（０．２，０．８）が特定されることになる。
【００４９】
〈プログラム類似度の算出処理〉
次いで、第２算出部（プログラム類似度算出部）１１Ｂは、ステップＳ１０２で注目プログラムペアについて算出された複数のタイミング種別単位類似度と、ステップＳ１０４で特定された「重み係数セット」とに基づいて、注目プログラムペアについてのプログラム類似度を算出する（ステップＳ１０５）。プログラム１及びプログラム２のプログラムペアの場合、具体的には、次のようにプログラム類似度が算出される。
プログラム類似度＝「コンパイル時」のタイミング種別単位類似度×「コンパイル時」の重み係数＋「プログラム実行時」のタイミング種別単位類似度×「プログラム実行時」の重み係数＝１×０．２＋０．２×０．８＝０．３６
【００５０】
次いで、第１算出部１１Ａは、「類似プログラム探索範囲」のうちのすべてのプログラムペアを注目プログラムペアとして選択済みか否かを判定する（ステップＳ１０６）。すべてのプログラムペアを注目プログラムペアとして選択済みである場合（ステップＳ１０６ＹＥＳ）、図７のフローは終了する。
【００５１】
すべてのプログラムペアを注目プログラムペアとして選択済みでない場合（ステップＳ１０６ＮＯ）、第１算出部１１Ａは、未だ注目プログラムペアとして選択していない他のプログラムペアを注目プログラムペアとして選択する（ステップＳ１０７）。そして、フローは、ステップＳ１０２に戻る。そして、新たに選択された注目プログラムペアについて、上述のステップＳ１０２からステップＳ１０５の処理が行われることになる。
【００５２】
＜プログラム類似度の算出結果＞
以上の処理手順に従って算出された、プログラム類似度の算出結果について説明する。図８は、プログラム類似度の算出結果を示す図である。図８において「組み合わせ」は、上記のプログラムペアに対応し、「重み付き類似度」は、上記のプログラム類似度に対応する。また、図８においては、比較のために、「分類なし類似度」、「コンパイル時類似度」、及び「実行時類似度」を記載している。「コンパイル時類似度」は、上記の「コンパイル時」のタイミング種別単位類似度に対応し、「実行時類似度」は、上記の「プログラム実行時」のタイミング種別単位類似度に対応する。また、「分類なし類似度」は、アクセスタイミング種別を考慮せずに、プログラムペアについて、共通のリンクの種類の数をリンクの種類の総数で除算することにより求められる値である。すなわち、プログラム１及びプログラム２のプログラムペアの場合、「分類なし類似度」は、次の計算式によって算出される。
分類なし類似度＝（１＋１）／（１＋５）＝０．３３
【００５３】
ここで、図５に示したソフトウェア資産の構成は、次の特徴を有している。
（１）サブシステムＡに含まれるプログラムは、一般的な業務処理プログラムであり、それぞれの業務に関連するテーブル又はファイルにアクセスする。
（２）サブシステムＢに含まれるプログラムは、各業務処理で共通的に利用される共通部品であり、業務に関連するテーブルやファイルにアクセスしない。
（３）テーブルＣはメッセージが格納されたテーブルで、システム内の全メッセージが格納されている。そのため、全てのプログラムからアクセスされる。
（４）プログラム２’は、プログラム２をリファクタリングしたもの、つまり、他機能でも利用可能なコードをマクロ（マクロｂ、ｃ）として切り出したものである。業務的には同一処理のため、アクセスするテーブルに変更はない。この２つのプログラムは、類似プログラムとして検出されるべきものである。
（５）プログラム５’も、プログラム５をリファクタリングしたものである。この２つのプログラムも、類似プログラムとして検出されるべきものである。
【００５４】
図９は、プログラムペアの番号に対してプログラム類似度の値をプロットしたグラフである。図９に示すように、類似プログラムとして特定されるべき、組み合わせ番号３のプログラムペア（プログラム２，２’）及び組み合わせ番号８のプログラムペア（プログラム５，５’）のプログラム類似度が、他のプログラムペアのプログラム類似度に比べて、大きな値となっている。このため、上記の「類似判定閾値」の値を例えば０．８に設定することにより、構成プログラムが類似しているプログラムペアを精度良く特定することができる。
【００５５】
これに対して、図１０から図１２に示すように、「分類なし類似度」、「コンパイル時類似度」、及び「実行時類似度」のいずれを用いても、構成プログラムが類似しているプログラムペアを特定することができない。図１０は、プログラムペアの番号に対して分類なし類似度の値をプロットしたグラフである。図１１は、プログラムペアの番号に対してコンパイル時類似度の値をプロットしたグラフである。図１２は、プログラムペアの番号に対して実行時類似度の値をプロットしたグラフである。
【００５６】
以上のように第２実施形態によれば、類似プログラム特定装置２０において、第１算出部１１Ａは、上記の「アクセス対応関係」を用いて、「類似プログラム探索範囲」に含まれる複数のプログラムのうちの各プログラムペアについて、アクセスタイミング種別毎に、プログラムペアの２つの構成プログラムにそれぞれ対応する２つのアクセスパターン間のタイミング種別単位類似度を算出する。そして、第２特定部２１Ｃは、上記「グループ対応関係」を用いて、複数のプログラムのうちの各プログラムペアの２つの構成プログラムのグループ組み合わせを特定する。そして、第３特定部２１Ｄは、上記の「重み対応関係」に基づいて、第２特定部によって特定された各プログラムペアのグループ組み合わせに対応する重み係数セットを特定する。そして、第２算出部１１Ｂは、第１算出部１１Ａによって各プログラムペアについて算出された複数のタイミング種別単位類似度と、第３特定部２１Ｄによって特定された「重み係数セット」とに基づいて、各プログラムペアについてのプログラム類似度を算出する。
【００５７】
この類似プログラム特定装置２０の構成により、プログラムペアについて算出したタイミング種別単位類似度に対して、プログラムペアの２つの構成プログラムについてのアクセスタイミング種別毎のアクセス先特性を考慮した重み付けを行うことにより、プログラム類似度を算出するので、より精度の高いプログラム類似度を算出することができる。
【００５８】
＜変形例＞
以上で説明した類似プログラム特定装置２０に対して、次のような変形を施すこともできる。
【００５９】
＜１＞記憶部１２において、類似判定に用いないリンクに関する情報を定義する除外リンクテーブルを追加的に保持してもよい。そして、上記の〈タイミング種別単位類似度の算出処理〉において、リンクの種類のカウント対象及び共通のリンクの種類カウント対象の両方から、除外リンクテーブルに保持されているリンクを除外してもよい。これにより、メッセージテーブルのようにほとんどのプログラムから関係リンクが張られるために、プログラムの特徴を表すことに寄与しない、リンクを除外することができる。この結果として、プログラム類似度の算出精度をより向上させることができる。
【００６０】
＜２＞以上の説明では、グループ組み合わせＡ−Ｂの重み係数セットを重み係数テーブルに予め設定しておいたが、これに限定されるものではなく、重み係数テーブルにおけるグループ組み合わせＡ−Ａの重み係数セットとグループ組み合わせＢ−Ｂの重み係数セットとから、第３特定部（重み係数特定部）２１Ｄが導き出してもよい。
【００６１】
＜他の実施形態＞
＜１＞第１実施形態及び第２実施形態においては、制御部（１１，２１）と記憶部（１２）とが１つの類似プログラム特定装置（１０，２０）に含まれるものとして説明を行ったが、これに限定されるものではない。例えば、制御部（１１，２１）と記憶部（１２）とは、それぞれ別々の装置に含まれていてもよい。
【００６２】
＜２＞図１３は、類似プログラム特定装置のハードウェア構成例を示す図である。図１３において、類似プログラム特定装置１００は、プロセッサ１０１と、メモリ１０２とを有している。第１実施形態及び第２実施形態で説明した類似プログラム特定装置１０，２０の制御部１１，２１は、プロセッサ１０１がメモリ１０２に記憶されたプログラムを読み込んで実行することにより実現される。また、記憶部１２は、メモリ１０２によって実現されてもよい。
【００６３】
なお、本発明は上記の実施形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【符号の説明】
【００６４】
１０，２０  類似プログラム特定装置
１１，２１  制御部
１１Ａ  タイミング種別単位類似度算出部（第１算出部）
１１Ｂ  プログラム類似度算出部（第２算出部）
１１Ｃ  類似プログラム特定部（第１特定部）
１２  記憶部
２１Ａ  情報収集部
２１Ｂ  テーブル管理部
２１Ｃ  グループ組み合わせ特定部（第２特定部）
２１Ｄ  重み係数特定部（第３特定部）
【図１】
2019049870.tif 000003
【図２】
2019049870.tif 000004
【図３】
2019049870.tif 000005
【図４】
2019049870.tif 000006
【図５】
2019049870.tif 000007
【図６】
2019049870.tif 000008
【図７】
2019049870.tif 000009
【図８】
2019049870.tif 000010
【図９】
2019049870.tif 000011
【図１０】
2019049870.tif 000012
【図１１】
2019049870.tif 000013
【図１２】
2019049870.tif 000014
【図１３】
2019049870.tif 000015