(57)【要約】  アプリケーションのソースコードを解析してアプリケーションの改善を支援する情報を提供するアプリケーション改善支援装置で、制御フロー解析部（１１０）がアプリケーションの制御構造を解析し、データ依存解析部（１２０）がアプリケーションのデータ依存構造を解析し、アプリケーションモデル生成部（１４０）が制御フロー解析部（１１０）およびデータ依存解析部（１２０）による解析結果およびソースコード（１０）からアプリケーションモデルを生成し、改善ポイント検索部（１７０）がアーキテクチャ複雑度が改善する改善ポイントをリファクタリング手順情報を用いてアプリケーションモデルから検索して改善ポイント情報を改善ポイント情報記憶部（１８０）に格納し、改善ポイントリスト出力部（１９０）が改善ポイントリスト（２０）を出力する。
2009011056.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションのソースコードを解析してアプリケーションの改善を支援する情報を提供するアプリケーション改善支援プログラムであって、
アプリケーションを構成するモジュールおよびデータ間の制御関係およびデータ依存関係に基づく接続関係を表すアプリケーションモデルをソースコードを解析して生成するアプリケーションモデル生成手順と、
前記アプリケーションモデル生成手順により生成されたアプリケーションモデルが表す接続関係の複雑度を評価する複雑度評価手順と、
前記複雑度評価手順により評価された複雑度を改善する改善ポイントを出力する改善ポイント出力手順と
をコンピュータに実行させることを特徴とするアプリケーション改善支援プログラム。
【請求項２】
前記複雑度評価手順は、インパクトスケールを用いて前記接続関係の複雑度を評価し、
前記改善ポイント出力手順は、インパクトスケールを改善する改善ポイントを出力することを特徴とする請求項１に記載のアプリケーション改善支援プログラム。
【請求項３】
前記改善ポイント出力手順は、モジュールおよびデータをノードとして前記接続関係を辺としてアプリケーションモデルを表すグラフを操作するグラフ操作手順と、
前記グラフ操作手順により操作されたグラフの複雑度を評価して複雑度が改善される場合に、前記グラフ操作手順による操作を改善ポイントとして出力するグラフ操作評価手順と
をコンピュータに実行させることを特徴とする請求項１または２に記載のアプリケーション改善支援プログラム。
【請求項４】
前記グラフ操作手順は、グラフの操作として、辺の削除、辺の追加、ノードの併合、ノードの分割を含む操作を行うことを特徴とする請求項３に記載のアプリケーション改善支援プログラム。
【請求項５】
前記改善ポイント出力手順により出力された複数の改善ポイントの中からユーザによって選択された改善ポイントを受け付ける改善ポイント受付手順をさらにコンピュータに実行させ、
前記改善ポイント出力手順は、複雑度の改善度合が大きい順を優先順として改善ポイントを出力するとともに、前記改善ポイント受付手順により受け付けられなかった改善ポイントがある場合には、該受け付けられなかった改善ポイントの優先順位を下げて出力することを特徴とする請求項１または２に記載のアプリケーション改善支援プログラム。
【請求項６】
ソースコードの変更履歴情報を取得する変更履歴情報取得手順をさらにコンピュータに実行させ、
前記改善ポイント出力手順は、前記改善ポイント受付手順により受け付けられなかった改善ポイントに関係する変更が前記改善ポイント受付手順がユーザから改善ポイントを受け付けた時点より後に行われたか否かを前記変更履歴情報に基づいて判定し、後に行われた場合には、該受け付けられなかった改善ポイントの優先順位を下げることなく出力することを特徴とする請求項５に記載のアプリケーション改善支援プログラム。
【請求項７】
アプリケーションのソースコードを解析してアプリケーションの改善を支援する情報を提供するアプリケーション改善支援方法であって、
アプリケーションを構成するモジュールおよびデータ間の制御関係およびデータ依存関係に基づく接続関係を表すアプリケーションモデルをソースコードを解析して生成するアプリケーションモデル生成ステップと、
前記アプリケーションモデル生成ステップにより生成されたアプリケーションモデルが表す接続関係の複雑度を評価する複雑度評価ステップと、
前記複雑度評価ステップにより評価された複雑度を改善する改善ポイントを出力する改善ポイント出力ステップと
を含んだことを特徴とするアプリケーション改善支援方法。
【請求項８】
アプリケーションのソースコードを解析してアプリケーションの改善を支援する情報を提供するアプリケーション改善支援装置であって、
アプリケーションを構成するモジュールおよびデータ間の制御関係およびデータ依存関係に基づく接続関係を表すアプリケーションモデルをソースコードを解析して生成するアプリケーションモデル生成手段と、
前記アプリケーションモデル生成手段により生成されたアプリケーションモデルが表す接続関係の複雑度を評価する複雑度評価手段と、
前記複雑度評価手段により評価された複雑度を改善する改善ポイントを出力する改善ポイント出力手段と
を備えたことを特徴とするアプリケーション改善支援装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションのソースコードを解析してアプリケーションの改善を支援する情報を提供するアプリケーション改善支援プログラム、アプリケーション改善支援方法およびアプリケーション改善支援装置に関し、特に、アプリケーション全体のアーキテクチャレベルでの改善を支援することができるアプリケーション改善支援プログラム、アプリケーション改善支援方法およびアプリケーション改善支援装置に関するものである。
【背景技術】
【０００２】
大規模アプリケーションを長期間運用する業務では、仕様変更や障害対応などによって常にアプリケーションは変更を受ける。したがって、年とともにアプリケーションは複雑化し、見通しが悪くなって保守性は低下していく。このため、リファクタリングと呼ばれるアプリケーションの補修作業を行う必要がある。例えば、銀行などの基幹系業務アプリケーションは、その規模の大きさと、保守の期間の長さから、リファクタリングの必要性が非常に高い。【０００３】
このようなリファクタリングは、アプリケーションの規模が大きいこともあり、作業者にとって大きな負荷となる。そこで、リファクタリングを支援する技術の開発が進められている。例えば、特許文献１には、アプリケーションの個々のモジュールについてメトリクスを採取し、性質の悪いモジュールを特定してリファクタリングの候補とする技術が記載されている。また、特許文献２および３には、個々のプログラムで使用される変数に基づいて個々のプログラムの複雑性を評価する技術が記載されている。【０００４】
【特許文献１】特開２００４−２９５４２５号公報
【特許文献２】特開平６−２６６５５０号公報
【特許文献３】特開２００１−３２５１００号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、かかる従来技術では、個々のモジュールの複雑性を評価してリファクタリング対象とすることはできるが、アプリケーション全体のアーキテクチャレベルでのリファクタリングを支援することができないという問題がある。リファクタリングでは、アプリケーション全体のアーキテクチャレベルでのリファクタリングが効果が高いが、全体の複雑性を改善するための改善箇所を見つけることは非常に困難である。また、改善箇所を見つけた場合には、改善した際の効果を事前に定量的に評価できることが重要となるが、改善効果を事前に評価することも非常に困難である。【０００６】
本発明は、上記に鑑みてなされたものであって、アプリケーション全体のアーキテクチャレベルでの改善を支援することができるアプリケーション改善支援プログラム、アプリケーション改善支援方法およびアプリケーション改善支援装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、請求項１に係る発明は、アプリケーションのソースコードを解析してアプリケーションの改善を支援する情報を提供するアプリケーション改善支援プログラムであって、アプリケーションを構成するモジュールおよびデータ間の制御関係およびデータ依存関係に基づく接続関係を表すアプリケーションモデルをソースコードを解析して生成するアプリケーションモデル生成手順と、前記アプリケーションモデル生成手順により生成されたアプリケーションモデルが表す接続関係の複雑度を評価する複雑度評価手順と、前記複雑度評価手順により評価された複雑度を改善する改善ポイントを出力する改善ポイント出力手順とをコンピュータに実行させることを特徴とする。【０００８】
この請求項１の発明によれば、アプリケーションを構成するモジュールおよびデータ間の制御関係およびデータ依存関係に基づく接続関係を表すアプリケーションモデルをソースコードを解析して生成し、生成したアプリケーションモデルが表す接続関係の複雑度を評価し、評価した複雑度を改善する改善ポイントを出力するよう構成したので、モジュールおよびデータ間の接続関係の複雑度を改善するような情報を提供することができる。【０００９】
また、請求項２に係る発明は、上記発明において、前記複雑度評価手順は、インパクトスケールを用いて前記接続関係の複雑度を評価し、前記改善ポイント出力手順は、インパクトスケールを改善する改善ポイントを出力することを特徴とする。【００１０】
この請求項２の発明によれば、インパクトスケールを用いて接続関係の複雑度を評価し、インパクトスケールを改善する改善ポイントを出力するよう構成したので、適切に複雑度を評価して改善する情報を提供することができる。【００１１】
また、請求項３に係る発明は、上記発明において、前記改善ポイント出力手順は、モジュールおよびデータをノードとして前記接続関係を辺としてアプリケーションモデルを表すグラフを操作するグラフ操作手順と、前記グラフ操作手順により操作されたグラフの複雑度を評価して複雑度が改善される場合に、前記グラフ操作手順による操作を改善ポイントとして出力するグラフ操作評価手順とをコンピュータに実行させることを特徴とする。【００１２】
この請求項３の発明によれば、モジュールおよびデータをノードとして接続関係を辺としてアプリケーションモデルを表すグラフを操作し、操作したグラフの複雑度を評価して複雑度が改善される場合に、その操作を改善ポイントとして出力するよう構成したので、グラフ操作で改善ポイントを探すことができる。【００１３】
また、請求項４に係る発明は、上記発明において、前記グラフ操作手順は、グラフの操作として、辺の削除、辺の追加、ノードの併合、ノードの分割を含む操作を行うことを特徴とする。【００１４】
この請求項４の発明によれば、グラフの操作として、辺の削除、辺の追加、ノードの併合、ノードの分割を含む操作を行うよう構成したので、簡単なグラフ操作で改善ポイントを探すことができる。【００１５】
また、請求項５に係る発明は、上記発明において、前記改善ポイント出力手順により出力された複数の改善ポイントの中からユーザによって選択された改善ポイントを受け付ける改善ポイント受付手順をさらにコンピュータに実行させ、前記改善ポイント出力手順は、複雑度の改善度合が大きい順を優先順として改善ポイントを出力するとともに、前記改善ポイント受付手順により受け付けられなかった改善ポイントがある場合には、該受け付けられなかった改善ポイントの優先順位を下げて出力することを特徴とする。【００１６】
この請求項５の発明によれば、出力した複数の改善ポイントの中からユーザによって選択された改善ポイントを受け付け、複雑度の改善度合が大きい順を優先順として改善ポイントを出力するとともに、受け付けなかった改善ポイントがある場合には、受け付けなかった改善ポイントの優先順位を下げて出力するよう構成したので、ユーザの判断を出力に反映することができる。【００１７】
また、請求項６に係る発明は、上記発明において、ソースコードの変更履歴情報を取得する変更履歴情報取得手順をさらにコンピュータに実行させ、前記改善ポイント出力手順は、前記改善ポイント受付手順により受け付けられなかった改善ポイントに関係する変更が前記改善ポイント受付手順がユーザから改善ポイントを受け付けた時点より後に行われたか否かを前記変更履歴情報に基づいて判定し、後に行われた場合には、該受け付けられなかった改善ポイントの優先順位を下げることなく出力することを特徴とする。【００１８】
この請求項６の発明によれば、ソースコードの変更履歴情報を取得し、ユーザから受け付けなかった改善ポイントに関係する変更がユーザから改善ポイントを受け付けた時点より後に行われたか否かを変更履歴情報に基づいて判定し、後に行われた場合には、受け付けなかった改善ポイントの優先順位を下げることなく出力するよう構成したので、ユーザに選択されなかった改善ポイントに関係する箇所のソースコードが変更された場合にその改善ポイントに関する判断を再度ユーザに求めることができる。【００１９】
また、請求項７に係る発明は、アプリケーションのソースコードを解析してアプリケーションの改善を支援する情報を提供するアプリケーション改善支援方法であって、アプリケーションを構成するモジュールおよびデータ間の制御関係およびデータ依存関係に基づく接続関係を表すアプリケーションモデルをソースコードを解析して生成するアプリケーションモデル生成ステップと、前記アプリケーションモデル生成ステップにより生成されたアプリケーションモデルが表す接続関係の複雑度を評価する複雑度評価ステップと、前記複雑度評価ステップにより評価された複雑度を改善する改善ポイントを出力する改善ポイント出力ステップとを含んだことを特徴とする。【００２０】
この請求項７の発明によれば、アプリケーションを構成するモジュールおよびデータ間の制御関係およびデータ依存関係に基づく接続関係を表すアプリケーションモデルをソースコードを解析して生成し、生成したアプリケーションモデルが表す接続関係の複雑度を評価し、評価した複雑度を改善する改善ポイントを出力するよう構成したので、モジュールおよびデータ間の接続関係の複雑度を改善するような情報を提供することができる。【００２１】
また、請求項８に係る発明は、アプリケーションのソースコードを解析してアプリケーションの改善を支援する情報を提供するアプリケーション改善支援装置であって、アプリケーションを構成するモジュールおよびデータ間の制御関係およびデータ依存関係に基づく接続関係を表すアプリケーションモデルをソースコードを解析して生成するアプリケーションモデル生成手段と、前記アプリケーションモデル生成手段により生成されたアプリケーションモデルが表す接続関係の複雑度を評価する複雑度評価手段と、前記複雑度評価手段により評価された複雑度を改善する改善ポイントを出力する改善ポイント出力手段とを備えたことを特徴とする。【００２２】
この請求項８の発明によれば、アプリケーションを構成するモジュールおよびデータ間の制御関係およびデータ依存関係に基づく接続関係を表すアプリケーションモデルをソースコードを解析して生成し、生成したアプリケーションモデルが表す接続関係の複雑度を評価し、評価した複雑度を改善する改善ポイントを出力するよう構成したので、モジュールおよびデータ間の接続関係の複雑度を改善するような情報を提供することができる。
【発明の効果】
【００２３】
本発明によれば、モジュールおよびデータ間の接続関係の複雑度を改善するような情報を提供するので、アプリケーション全体のアーキテクチャレベルでの改善を支援することができるという効果を奏する。【００２４】
また、本発明によれば、適切に複雑度を評価して改善する情報を提供するので、アプリケーションの複雑度を確実に改善することができるという効果を奏する。【００２５】
また、本発明によれば、グラフ操作で改善ポイントを探すので、グラフでの特徴に基づいて改善ポイントを抽出することができるという効果を奏する。【００２６】
また、本発明によれば、簡単なグラフ操作で改善ポイントを探すので、簡単に改善ポイントを抽出することができるという効果を奏する。【００２７】
また、本発明によれば、ユーザの判断を出力に反映するので、ユーザの負担を軽減することができるという効果を奏する。【００２８】
また、本発明によれば、ユーザに選択されなかった改善ポイントに関係する箇所のソースコードが変更された場合にその改善ポイントに関する判断を再度ユーザに求めるので、ソースコードが変更された場合に適切に改善ポイントを出力することができるという効果を奏する。
【図面の簡単な説明】
【００２９】
【図１】図１は、本実施例に係るアプリケーション改善の概念を説明するための説明図である。
【図２】図２は、本実施例に係るアプリケーション改善支援装置の構成を示す機能ブロック図である。
【図３】図３は、解析情報記憶部が記憶するモジュール解析情報、データ解析情報および関係解析情報を示す図である。
【図４】図４は、制御フロー解析およびデータ依存解析によってソースコードから取り出されるモジュール解析情報、データ解析情報および関係解析情報の一例を示す図である。
【図５】図５は、アプリケーションモデル記憶部が記憶するアプリケーションモデルを示す図である。
【図６】図６は、アプリケーションモデルのデータ構造を示す図である。
【図７】図７は、ノード情報のデータ構造を示す図である。
【図８】図８は、関係解析情報からアプリケーションモデル生成部によって生成されるグラフデータ構造情報の一例を示す図である。
【図９】図９は、図８に示したグラフデータ構造情報に対応するアプリケーションモデルのグラフ表現を示す図である。
【図１０】図１０は、インパクトスケールを説明するための説明図である。
【図１１】図１１は、インパクトスケールの特徴を説明するための説明図である。
【図１２】図１２は、インパクトスケールの計算例を示す図である。
【図１３】図１３は、改善ポイント検索部の構成を示す図である。
【図１４】図１４は、リファクタリングカタログのデータ構造を示す図である。
【図１５】図１５は、リファクタリング手順情報の例を示す図である。
【図１６】図１６は、グラフ操作の例を示す図である。
【図１７】図１７は、改善ポイント情報を示す図である。
【図１８】図１８は、改善ポイント情報の具体例を示す図である。
【図１９】図１９は、本実施例に係るアプリケーション改善支援装置の処理手順を示すフローチャートである。
【図２０】図２０は、制御フロー解析部の処理手順を示すフローチャートである。
【図２１】図２１は、データ依存解析部の処理手順を示すフローチャートである。
【図２２】図２２は、アプリケーションモデル生成部の処理手順を示すフローチャートである。
【図２３】図２３は、アーキテクチャ複雑度評価部の処理手順を示すフローチャートである。
【図２４】図２４は、改善ポイント検索部の処理手順を示すフローチャートである。
【図２５】図２５は、改善ポイントリスト出力部の処理手順を示すフローチャートである。
【図２６】図２６は、リファクタリング作業者の評価結果を次の改善ポイントの検索に活かすことができるアプリケーション改善支援装置の構成を示す機能ブロック図である。
【図２７】図２７は、ソースコードに変更があった場合に、改善ポイントの非選択情報をキャンセルするアプリケーション改善支援装置の構成を示す機能ブロック図である。
【図２８】図２８は、本実施例に係るアプリケーション改善支援プログラムを実行するコンピュータの構成を示す機能ブロック図である。
【符号の説明】
【００３０】
１０    ソースコード
２０    改善ポイントリスト
３０    変更履歴情報
１００，２００，３００    アプリケーション改善支援装置
１１０    制御フロー解析部
１２０    データ依存解析部
１３０    解析情報記憶部
１４０，３４０    アプリケーションモデル生成部
１５０，３５０    アプリケーションモデル記憶部
１６０    アーキテクチャ複雑度評価部
１７０    改善ポイント検索部
１７１    リファクタリングカタログ
１８０    改善ポイント情報記憶部
１９０，２９０，３９０    改善ポイントリスト出力部
２９１，３９１    改善ポイント選択部
２９２    非選択改善ポイント記憶部
３９３    変更履歴情報取得部
４００    コンピュータ
４１０    ＲＡＭ
４１１    アプリケーション改善支援プログラム
４２０    ＣＰＵ
４３０    ＨＤＤ
４４０    ＬＡＮインタフェース
４５０    入出力インタフェース
４６０    ＤＶＤドライブ
【発明を実施するための最良の形態】
【００３１】
以下に、本発明に係るアプリケーション改善支援プログラム、アプリケーション改善支援方法およびアプリケーション改善支援装置の実施例を図面に基づいて詳細に説明する。なお、この実施例により本発明が限定されるものではない。
【実施例】
【００３２】
まず、本実施例に係るアプリケーション改善の概念について説明する。図１は、本実施例に係るアプリケーション改善の概念を説明するための説明図である。同図は、アプリケーションの変更前後でのアプリケーションモデルおよびアーキテクチャ複雑度を示している。【００３３】
アプリケーションモデルは、アプリケーションを抽象化してグラフ状のデータ構造で表現したものである。アプリケーションは、より細かい処理単位の「モジュール」と、アプリケーションが扱う永続性のある「データ」からなる。「モジュール」はアプリケーションの規模や記述言語に合わせて、適切な粒度に設定される。典型的には、ＣＯＢＯＬ言語では、１本のプログラムがモジュールとなり、Ｊａｖａ（登録商標）言語では１個のクラスがモジュールとなる。ただし、パッケージなどこれらより大きい単位をモジュールとすることもできる。【００３４】
「データ」は、そのアプリケーションにとって、一時的よりも長い寿命を持つ情報の集合である。ファイル、データベース、永続化されたオブジェクト、または入出力機器などが該当する。これら「モジュール」と「データ」はアプリケーションモデルのグラフ構造のノードに相当する。図１では、ａ〜ｌがモジュールを示し、ｘ〜ｚがデータを示す。【００３５】
アプリケーションモデルは、アプリケーションを構成するモジュール間の制御関係、モジュールとデータとの間の依存関係およびデータ間の依存関係に基づいて、モジュール間、モジュールとデータ間およびデータ間の接続関係を表す。モジュールまたはデータを示すノード間を接続する辺がモジュール間の制御関係、モジュールとデータとの間の依存関係またはデータ間の依存関係を表している。これらの辺は多くの場合は有向辺であるが無向辺の場合もある。【００３６】
図１に示すように、このアプリケーション改善では、モジュールｄとデータｚとの間の依存関係を削除することによって、アプリケーションのアーキテクチャ複雑度が５４．０から５３．０に改善している。【００３７】
ここで、アーキテクチャ複雑度は、制御フローやデータ依存関係に基づいて、アプリケーションの広範囲に渡るモジュールやデータ間の結びつきの強さを表したもの、または、あるモジュールやデータを変更した際に影響を受ける広さを表したものである。アーキテクチャ複雑度が高いほど、そのアプリケーションは機能追加や変更の際に必要となる作業量が増え、難易度が上昇する。いわば、アーキテクチャ複雑度は、アプリケーションの保守のしにくさの一因である。アプリケーション複雑度はアプリケーションの任意の部分（全体も含む）に対し定義されうる。【００３８】
このように、本実施例では、アプリケーションモデルの接続関係を操作してアーキテクチャ複雑度を改善することによって、アプリケーションを改善する。アーキテクチャ複雑度の改善度合が大きいほど改善効果が高いといえる。なお、本実施例では、アーキテクチャ複雑度としてインパクトスケールを用いるが、インパクトスケールの詳細については後述する。【００３９】
次に、本実施例に係るアプリケーション改善支援装置の構成について説明する。図２は、本実施例に係るアプリケーション改善支援装置の構成を示す機能ブロック図である。同図に示すように、このアプリケーション改善支援装置１００は、制御フロー解析部１１０と、データ依存解析部１２０と、解析情報記憶部１３０と、アプリケーションモデル生成部１４０と、アプリケーションモデル記憶部１５０と、アーキテクチャ複雑度評価部１６０と、改善ポイント検索部１７０と、改善ポイント情報記憶部１８０と、改善ポイントリスト出力部１９０とを有する。【００４０】
制御フロー解析部１１０は、複数のモジュールから構成されるアプリケーションのソースコード１０の制御フロー解析を行う処理部であり、解析結果を解析情報記憶部１３０に格納する。データ依存解析部１２０は、ソースコード１０のデータ依存解析を行う処理部であり、解析結果を解析情報記憶部１３０に格納する。なお、制御フロー解析およびデータ依存解析については、Alfred  V.  Aho,  Ravi  Sethi,  Jeffrey  D.  Ullman,  "Compilers:  Principles,  Techniques,  and  Tools,"  Addison-Wesley,1986.に記載されている。【００４１】
解析情報記憶部１３０は、制御フロー解析部１１０およびデータ依存解析部１２０によるソースコード１０の解析結果を記憶する記憶部であり、具体的には、モジュールの解析結果を表すモジュール解析情報、データの解析結果を表すデータ解析情報ならびにモジュール間、モジュール−データ間およびデータ間の関係の解析結果を表す関係解析情報を記憶する。【００４２】
モジュール間の関係としては、例えば、モジュールＡがモジュールＢのメソッドを呼び出す場合には、モジュールＡからモジュールＢに対し、モジュール呼出関係が存在することになる。他の例としては、クラスの継承関係などがある。また、モジュール−データ間の関係としては、例えば、モジュールＡがデータＦを作成する場合には、モジュールＡからデータＦに対し、データアクセス(作成)関係が存在することになる。【００４３】
図３は、解析情報記憶部１３０が記憶するモジュール解析情報、データ解析情報および関係解析情報を示す図である。同図に示すように、モジュール解析情報は、モジュールを特定するモジュールＩＤと複数のモジュール情報から構成される。モジュール情報としては、モジュール名、作成日時、サイズなどがある。データ解析情報は、データを特定するデータＩＤと複数のデータ情報から構成される。データ情報としては、データ名、作成日時、サイズなどがある。関係解析情報は、関係を特定する関係ＩＤと複数の関係情報から構成される。関係情報としては、関係元を示す関係元ＩＤ、関係先を示す関係先ＩＤ、関係の種別を示す関係種別などがある。【００４４】
図４は、制御フロー解析およびデータ依存解析によってソースコード１０から取り出されるモジュール解析情報、データ解析情報および関係解析情報の一例を示す図である。この例では、モジュール情報として、モジュール名が取り出され、データ情報としてデータ名が取り出され、関係情報として、関係元ＩＤ、関係種別、関係先ＩＤが取り出されている。【００４５】
アプリケーションモデル生成部１４０は、解析情報記憶部１３０が記憶する情報およびソースコード１０を参照してアプリケーションモデルを生成し、アプリケーションモデル記憶部１５０に格納する処理部である。【００４６】
アプリケーションモデル記憶部１５０は、アプリケーションモデルを記憶する記憶部である。図５は、アプリケーションモデル記憶部１５０が記憶するアプリケーションモデルを示す図である。同図に示すように、このアプリケーションモデルは、モジュール呼出、モジュール被呼出、データアクセスの３種の関係に基づいて生成されている。このアプリケーションモデルは、１２個のモジュールと、３つのデータから構成され、実線矢印がモジュール呼出の関係を示し(この矢印はモジュール被呼出の関係も示す)、破線矢印がモジュールからデータをアクセスする関係を示す。【００４７】
なお、アプリケーションモデルは、アプリケーション複雑度の定義と密接に結びついている。アプリケーション複雑度の計測は、アプリケーションモデルを対象として行われる。そのため、アプリケーションモデルは、アプリケーション複雑度の計測に必要な情報をすべて提供する必要がある。どのような情報が必要であるかは、使用するアプリケーション複雑度の定義に依存し、本実施例では、アプリケーション複雑度に後述するインパクトスケールを使用し、インパクトスケールでは、モジュール呼出、モジュール被呼出、データアクセスの３種の関係が必要となる。このため、本実施例では、モジュール呼出、モジュール被呼出、データアクセスの３種の関係に基づくアプリケーションモデルが用いられる。【００４８】
図６は、アプリケーションモデルのデータ構造を示す図である。同図に示すように、アプリケーションモデルは、モジュール解析情報、データ解析情報、関係解析情報およびグラフデータ構造情報から構成され、グラフデータ構造情報は、複数のノード情報から構成される。【００４９】
図７は、ノード情報のデータ構造を示す図である。同図に示すように、ノード情報は、ノードを特定するノードＩＤおよびノードが表すモジュールまたはデータのＩＤから構成されるヘッダと、接続ノード情報から構成される。接続ノード情報は、接続先ノードＩＤ、関係種別および関係ＩＤから構成される。なお、接続ノード情報は、接続するノードの数すなわち関係の数だけリンクトリストで接続される。【００５０】
図８は、関係解析情報からアプリケーションモデル生成部１４０によって生成されるグラフデータ構造情報の一例を示す図である。同図において、例えば、モジュール「Ｍ１」については、モジュール「Ｍ２」を呼び出す関係「Ｒ１」がリンクトリストで接続され、モジュール「Ｍ２」については、モジュール「Ｍ１」に呼び出される関係「Ｒ２」、モジュール「Ｍ３」に呼び出される関係「Ｒ４」およびデータ「Ｄ１」を読み出す関係「Ｒ５」がリンクトリストで接続される。【００５１】
図９は、図８に示したグラフデータ構造情報に対応するアプリケーションモデルのグラフ表現を示す図である。同図では、例えば、モジュール名が「ＪＵＣＨＵ１」であるモジュール「Ｍ１」がモジュール名が「ＪＵＣＨＵ−ＳＵＢ」であるモジュール「Ｍ２」を呼び出す関係「Ｒ１」、および、モジュール名が「ＪＵＣＨＵ１」であるモジュール「Ｍ１」によってモジュール名が「ＪＵＣＨＵ−ＳＵＢ」であるモジュール「Ｍ２」が呼び出される関係「Ｒ２」が、「ＪＵＣＨＵ１」から「ＪＵＣＨＵ−ＳＵＢ」への矢印で表されている。【００５２】
アーキテクチャ複雑度評価部１６０は、アプリケーションモデルを参照してアプリケーションのアーキテクチャ複雑度を算出する処理部である。このアーキテクチャ複雑度評価部１６０は、アーキテクチャ複雑度としてインパクトスケールを用いる。ここで、インパクトスケールは、アプリケーションをアーキテクチャの視点から評価するメトリクスであり、図１０に示すように定義される。【００５３】
すなわち、アプリケーションを構成する各モジュールに対してインパクトスケールＩＳは
ＩＳ＝Ｓ（１）＋αＳ（２）＋α2Ｓ（３）＋・・・
と定義される。ここで、Ｓ（ｄ）は、アプリケーションをモジュール間の呼出関係およびモジュール−データ間のアクセス関係に基づいてグラフで表現した場合の最短距離ｄのモジュールとデータの個数であり、αは減衰係数（０＜α＜１）である。そして、アプリケーションのインパクトスケールはモジュールのインパクトスケールの合計である。【００５４】
インパクトスケールには、図１１に示すように、モジュールやデータ間の結合が複雑である場合に大きくなるという特徴と、アプリケーションのモジュラリティが損なわれると増加するという特徴がある。【００５５】
図１２は、インパクトスケールの計算例を示す図である。同図は、最短距離ｄ＝２までのモジュールおよびデータを数える場合を示している。また、α＝０．５である。同図に示すように、例えば、モジュールｈに対するインパクトスケールは、最短距離ｄ＝１のモジュールおよびデータの数は４であり、最短距離ｄ＝２のモジュールおよびデータの数は６であるため、１．０×４＋０．５×６＝７．０となる。他のモジュールに対しても同様にインパクトスケールを計算し、合計すると、このアプリケーションモデルのインパクトスケールは５３．０となる。この値が図１で示した変更後のアーキテクチャ複雑度の値である。【００５６】
このように、アーキテクチャ複雑度評価部１６０がインパクトスケールをアーキテクチャ複雑度として用いることによって、アプリケーションの複雑度をアーキテクチャの視点で評価することができる。【００５７】
改善ポイント検索部１７０は、アーキテクチャ複雑度およびアプリケーションモデルを用いて、アプリケーションを改善する上で有望なポイントをアプリケーションモデルから検索し、検索した改善ポイントを改善度合とともに改善ポイント情報記憶部１８０に格納する処理部である。すなわち、この改善ポイント検索部１７０は、アーキテクチャレベルでリファクタリングの効果がある部分をアプリケーションモデルから検索する。【００５８】
図１３は、改善ポイント検索部１７０の構成を示す図である。同図に示すように、改善ポイント検索部１７０は、リファクタリングカタログ１７１を備える。ここで、リファクタリングカタログ１７１は、図１４に示すように、リファクタリング手順情報の集合であり、各リファクタリング手順情報は、リファクタリング手順を特定するリファクタリングＩＤ、操作対象グラフ条件、グラフ操作手続きから構成される。【００５９】
操作対象グラフ条件は、あるノードまたは辺に注目して、そこにグラフ操作手続きが実行可能であるかどうかを判定するための条件である。グラフ操作手続きは、実際にグラフ操作を行う関数へのエントリである。【００６０】
図１５は、リファクタリング手順情報の例を示す図である。同図に示すように、例えば、辺を対象として、対象辺の両端のノードの間に、対象辺を通らない別の経路があることを条件として、対象辺を切断するというグラフ操作を行うことにより、リファクタリングを行うことができる。図１に示したアプリケーションモデルの変更例は、このグラフ操作に基づくものである。【００６１】
図１６は、グラフ操作の例を示す図である。同図（ａ）は、辺を削除するグラフ操作を示し、同図（ｂ）は、二つのノード間を新たな辺で接続するグラフ操作を示し、同図（ｃ）は、複数のノードをひとつのノードにまとめるグラフ操作を示し、同図（ｄ）は、二つのノード間の辺を、新たなノードへの辺に置き換えるグラフ操作を示す。また、グラフ操作としては、図１６に示したような操作をプリミティブ操作として、例えば、「類似トポロジを持つサブグラフを共通化する」というプリミティブ操作の組み合わせによる複雑な操作を行うこともできる。【００６２】
このように、改善ポイント検索部１７０がリファクタリングカタログ１７１を用いてアプリケーションモデルから改善ポイントを検索することによって、アーキテクチャレベルでのリファクタリングを支援することができる。【００６３】
改善ポイント情報記憶部１８０は、改善ポイントごとに改善ポイント情報を記憶する記憶部である。図１７は、改善ポイント情報を示す図である。同図に示すように、改善ポイント情報は、リファクタリングＩＤ、アプリケーションモデルでのリファクタリング箇所およびリファクタリングの改善度合を示す効果値から構成される。図１８は、改善ポイント情報の具体例を示す図であり、この例は、図１に示したアプリケーション改善に対応する改善ポイント情報、すなわち、図１でノードｄとノードｚとの間の辺を削除する改善ポイント情報を示している。【００６４】
改善ポイントリスト出力部１９０は、改善ポイントリスト２０を出力する処理部であり、改善ポイントリスト２０を出力する際に、変更箇所のリファクタリング効果の高いものが作業優先順位が高いとみなして、リファクタリング効果が高い順に改善ポイントを出力する。この改善ポイントリスト出力部１９０が、リファクタリング効果が高い順に改善ポイントを出力することによって、限られた作業時間をより効果の高いリファクタリング作業に当てることが可能になる。【００６５】
次に、本実施例に係るアプリケーション改善支援装置１００の処理手順について説明する。図１９は、本実施例に係るアプリケーション改善支援装置１００の処理手順を示すフローチャートである。同図に示すように、このアプリケーション改善支援装置１００は、アプリケーションのソースコード１０を制御フロー解析部１１０およびデータ依存解析部１２０が解析する（ステップＳ１０〜ステップＳ２０）。【００６６】
そして、アプリケーションモデル生成部１４０が、制御フロー解析部１１０により解析された情報、データ依存解析部１２０により解析された情報およびソースコード１０から、アプリケーションモデルを作成し（ステップＳ３０）、アーキテクチャ複雑度評価部１６０がアプリケーションモデルのアーキテクチャ複雑度を計算する（ステップＳ４０）。【００６７】
そして、改善ポイント検索部１７０が、リファクタリング手順情報を使用してアーキテクチャ複雑度を改善する改善ポイントをアプリケーションモデルから検索し、改善ポイント情報を改善ポイント情報記憶部１８０に格納する（ステップＳ５０）。そして、改善ポイントリスト出力部１９０が、改善ポイント情報を改善ポイント記憶部１８０から読み出して改善ポイントリスト２０を出力する（ステップＳ６０）。【００６８】
このように、アーキテクチャ複雑度を改善する改善ポイントをアプリケーションモデルから検索して出力することによって、アプリケーションのリファクタリングを支援することができる。【００６９】
次に、制御フロー解析部１１０の処理手順について説明する。図２０は、制御フロー解析部１１０の処理手順を示すフローチャートである。同図に示すように、制御フロー解析部１１０は、未解析のソースコード１０があるか否かを判定し（ステップＳ１１）、未解析のソースコード１０がない場合には、解析が終了した場合であるので、処理を終了する。【００７０】
これに対して、未解析のソースコード１０がある場合には、未解析のソースコード１０を構文解析し（ステップＳ１２）、モジュールの情報をモジュール解析情報に追加する（ステップＳ１３）。そして、未登録の呼出文があるか否かを判定し（ステップＳ１４）、未登録の呼出文がある間は、呼出文の情報を関係解析情報に追加する（ステップＳ１５）。そして、未登録の呼出文がなくなると、ステップＳ１１に戻り、別のソースコード１０の解析を行う。【００７１】
このように、制御フロー解析部１１０が呼出文の情報を関係解析情報に追加することによって、モジュール間の呼出関係をアプリケーションモデルに含めることができる。【００７２】
次に、データ依存解析部１２０の処理手順について説明する。図２１は、データ依存解析部１２０の処理手順を示すフローチャートである。同図に示すように、データ依存解析部１２０は、未解析のソースコード１０があるか否かを判定し（ステップＳ２１）、未解析のソースコード１０がない場合には、解析が終了した場合であるので、処理を終了する。【００７３】
これに対して、未解析のソースコード１０がある場合には、未解析のソースコード１０を構文解析し（ステップＳ２２）、未登録のデータアクセス文があるか否かを判定する（ステップＳ２３）。その結果、未登録のデータアクセス文がある間は、データの情報をデータ解析情報に追加し（ステップＳ２４）、データアクセス文の情報を関係解析情報に追加する（ステップＳ２５）。そして、未登録のデータアクセス文がなくなると、ステップＳ２１に戻り、別のソースコード１０の解析を行う。【００７４】
このように、データ依存解析部１２０がデータアクセス文の情報を関係解析情報に追加することによって、モジュール−データ間のアクセス関係をアプリケーションモデルに含めることができる。【００７５】
次に、アプリケーションモデル生成部１４０の処理手順について説明する。図２２は、アプリケーションモデル生成部１４０の処理手順を示すフローチャートである。同図に示すように、アプリケーションモデル生成部１４０は、関係解析情報に未登録の「関係」があるか否かを判定する（ステップＳ３１）。【００７６】
その結果、関係解析情報に未登録の「関係」がある場合には、その「関係」の関係元がグラフデータ構造情報のノード情報に登録されているか否かを判定し（ステップＳ３２）、ノード情報に登録されていない場合には、新たなノード情報を作成し、そのヘッダに関係元を登録して、そのノード情報をグラフデータ構造情報に登録する（ステップＳ３３）。そして、その「関係」をヘッダの関係元が一致するノード情報に追加し（ステップＳ３４）、ステップＳ３１に戻る。【００７７】
これに対して、関係解析情報に未登録の「関係」がない場合には、モジュール解析情報、データ解析情報、関係解析情報、グラフデータ構造情報をまとめてアプリケーションモデルとしてアプリケーションモデル記憶部１５０に格納する（ステップＳ３５）。【００７８】
このように、アプリケーションモデル生成部１４０が関係解析情報に基づいてグラフデータ構造情報を作成することによって、アプリケーションをグラフ形態で表すことができる。【００７９】
次に、アーキテクチャ複雑度評価部１６０の処理手順について説明する。図２３は、アーキテクチャ複雑度評価部１６０の処理手順を示すフローチャートである。同図に示すように、アーキテクチャ複雑度評価部１６０は、アプリケーションモデルに未調査のノード情報があるか否かを判定する（ステップＳ４１）。ただし、ここでは、モジュールのノードだけを対象とする。【００８０】
その結果、未調査のノード情報がある場合には、未調査のノードを一つ選び（ステップＳ４２）、そのノードのアーキテクチャ複雑度すなわちインパクトスケールを計算する（ステップＳ４３）。そして、ステップＳ４１に戻り、次のノードを処理する。これに対して、未調査のノード情報がない場合には、各ノードのアーキテクチャ複雑度を合計してアプリケーションのアーキテクチャ複雑度を計算する（ステップＳ４４）。【００８１】
このように、アーキテクチャ複雑度評価部１６０がアプリケーションモデルのアーキテクチャ複雑度を計算することによって、アプリケーションの複雑さをアーキテクチャレベルで評価することができる。【００８２】
次に、改善ポイント検索部１７０の処理手順について説明する。図２４は、改善ポイント検索部１７０の処理手順を示すフローチャートである。同図に示すように、改善ポイント検索部１７０は、リファクタリングカタログ１７１から、リファクタリング手順情報を一つ選ぶ（ステップＳ５１）。そして、リファクタリング手順情報を選ぶことができたか否かを判定し（ステップＳ５２）、選ぶことができない場合には、全てのリファクタリング手順情報について処理を完了した場合であるので、処理終了する。【００８３】
これに対して、リファクタリング手順情報を選ぶことができた場合には、  アプリケーションモデルのグラフを探索し、選んだリファクタリング手順情報の操作対象グラフ条件を満たす箇所を一つ選ぶ（ステップＳ５３）。そして、操作対象グラフ条件を満たす箇所を選ぶことができたか否かを判定し（ステップＳ５４）、選ぶことができない場合には、選択したリファクタリング手順情報について処理を完了した場合であるので、ステップＳ５１に戻り、次のリファクタリング手順情報を選択する。【００８４】
一方、操作対象グラフ条件を満たす箇所を選ぶことができた場合には、選んだ箇所について、リファクタリング効果を評価する（ステップＳ５５）。リファクタリングの効果は、リファクタリング手順情報のグラフ操作手続きを施す前と後のアーキテクチャ複雑度すなわちインパクトスケールの変化で測る。アーキテクチャ複雑度の減少が大きい場合は効果が大きく、アーキテクチャ複雑度の減少が小さい場合は効果が小さい。アーキテクチャ複雑度が増加した場合はまったく効果がない。【００８５】
そして、リファクタリングの効果があるか否かを判定し（ステップＳ５６）、効果がないと判定した場合には、ステップＳ５３に戻り、効果があると判定した場合には、リファクタリング手順情報のＩＤとその箇所とその効果値（アーキテクチャ複雑度の減少値）を改善ポイント情報として改善ポイント情報記憶部１８０に格納し（ステップＳ５７）、ステップＳ５３に戻る。【００８６】
このように、改善ポイント検索部１７０が、リファクタリング手順情報を用いて改善箇所をアプリケーションモデルから探し、リファクタリング効果がある場合に改善ポイントとすることによって、改善ポイントを自動抽出することができる。【００８７】
また、図２５は、改善ポイントリスト出力部１９０の処理手順を示すフローチャートである。同図に示すように、改善ポイントリスト出力部１９０は、改善ポイント情報記憶部１８０から改善ポイント情報を読み出して改善ポイントリスト２０を出力装置に出力する（ステップＳ６１）。【００８８】
上述してきたように、本実施例では、制御フロー解析部１１０がアプリケーションの制御構造を解析し、データ依存解析部１２０がアプリケーションのデータ依存構造を解析し、アプリケーションモデル生成部１４０が制御フロー解析部１１０およびデータ依存解析部１２０による解析結果およびソースコード１０からアプリケーションモデルを生成し、改善ポイント検索部１７０がアーキテクチャ複雑度が改善する改善ポイントをリファクタリング手順情報を用いてアプリケーションモデルから検索して改善ポイント情報を改善ポイント情報記憶部１８０に格納し、改善ポイントリスト出力部１９０が改善ポイントリスト２０を出力することとしたので、アーキテクチャレベルでのアプリケーションの改善を支援することができる。【００８９】
なお、本実施例では、改善ポイントリスト２０を出力するアプリケーション改善支援装置について説明したが、出力した改善ポイントリスト２０に対するリファクタリング作業者の評価結果をアプリケーション改善支援装置が次の改善ポイントの検索に活かすようにすることもできる。図２６は、リファクタリング作業者の評価結果を次の改善ポイントの検索に活かすことができるアプリケーション改善支援装置の構成を示す機能ブロック図である。【００９０】
同図に示すように、このアプリケーション改善支援装置２００は、図２に示したアプリケーション改善支援装置１００と比較すると、改善ポイントリスト出力部１９０の代わりに改善ポイントリスト出力部２９０を有し、新たに、改善ポイント選択部２９１と、非選択改善ポイント記憶部２９２とを有する。【００９１】
改善ポイント選択部２９１は、改善ポイントリスト出力部２９０から出力された改善ポイントに対するリファクタリング作業者の選択／非選択の入力を受け付け、改善ポイントのうち、実際にリファクタリング作業者によって選択されなかった改善ポイントを非選択改善ポイント記憶部２９２に格納する処理部である。【００９２】
改善ポイントリスト出力部２９０は、次に改善ポイントリスト２０を出力する際に、非選択改善ポイント記憶部２９２に記憶された改善ポイントについては「前回非選択」の情報を付加するとともに優先順位を下げて出力する。過去にリストアップされ、作業対象とされなかった改善ポイントは、本来その変更は改善として相応しくないか、その変更に改善の効果が見込めないかのいずれかである。これらの判断作業はリファクタリング作業者に一定の負荷を課すため、次の改善ポイントリスト２０の出力では、その判断情報を改善ポイントリスト２０に付加することで、リファクタリング作業者の作業負荷を軽減することができる。【００９３】
ただし、ソースコード１０に変更があった場合には、リファクタリング作業者に選択されなかった改善ポイントでも新たに改善ポイントとなる可能性がある。したがって、ソースコード１０に変更があった場合には、非選択改善ポイント記憶部２９２が記憶する非選択改善ポイントのうち変更箇所に関係する非選択改善ポイントを削除する必要がある。図２７は、ソースコード１０に変更があった場合に、非選択改善ポイントを非選択改善ポイント記憶部２９２から削除するアプリケーション改善支援装置の構成を示す機能ブロック図である。【００９４】
同図に示すように、このアプリケーション改善支援装置３００は、図２６に示したアプリケーション改善支援装置２００と比較すると、アプリケーションモデル生成部２４０、アプリケーションモデル記憶部２５０、改善ポイントリスト出力部２９０、改善ポイント選択部２９１の代わりに、それぞれアプリケーションモデル生成部３４０、アプリケーションモデル記憶部３５０、改善ポイントリスト出力部３９０、改善ポイント選択部３９１を有し、新たに、変更履歴情報取得部３９３を有する。【００９５】
変更履歴情報取得部３９３は、ソースコード１０の変更履歴情報３０を取得し、アプリケーションモデル生成部３４０に渡す。アプリケーションモデル生成部３４０は、アプリケーションモデルを生成する際に、変更履歴情報３０に基づいて各ノードに更新日時を付加してアプリケーションモデル記憶部３５０に格納する。改善ポイントリスト出力部３９０は、改善ポイントリスト２０を出力する際に、改善ポイント選択部３９１に対して各ノードの更新日時を通知し、リファクタリング作業者によって改善ポイントの選択が行われた後に更新されたノードに関係する非選択改善ポイントを非選択改善ポイント記憶部２９２から削除するように指示する。【００９６】
このように、ソースコード１０に変更が行われた場合に、リファクタリング作業者によって以前に選択されなかった改善ポイントのうち、変更箇所に関係する改善ポイントを非選択改善ポイント記憶部２９２から削除することによって、以前に選択されなかった改善ポイントを再度リファクタリング候補とすることができる。【００９７】
また、変更履歴情報３０を用いてアプリケーションモデルの各ノードおよび各辺に更新日時を付加することによって、改善ポイントリスト出力部が、更新が長い間行われていないノードや辺に関係する改善ポイントの優先順位を下げて改善ポイントリスト２０を出力するようにすることもできる。更新が長い間行われていないノードや辺は、安定していると考えることができ、関係する改善ポイントの優先順位を下げて改善ポイントリスト２０を出力することによって、リファクタリング作業者は改善ポイントの検討を効率良く行うことができる。【００９８】
また、更新日時が近いノードや辺の集合は、論理的にまとまっている可能性が高いため、改善ポイントリスト出力部が、更新日時が近いノードや辺がまとまった改善ポイントがある場合には、その優先順位を上げて改善ポイントリスト２０を出力するようにすることもできる。論理的にまとまっている可能性の高い改善ポイントの優先順位を上げて改善ポイントリスト２０を出力することによって、リファクタリング作業者は改善ポイントの検討を効率良く行うことができる。【００９９】
なお、本実施例では、アプリケーション改善支援装置について説明したが、アプリケーション改善支援装置が有する構成をソフトウェアによって実現することで、同様の機能を有するアプリケーション改善支援プログラムを得ることができる。そこで、このアプリケーション改善支援プログラムを実行するコンピュータについて説明する。【０１００】
図２８は、本実施例に係るアプリケーション改善支援プログラムを実行するコンピュータの構成を示す機能ブロック図である。同図に示すように、このコンピュータ４００は、ＲＡＭ４１０と、ＣＰＵ４２０と、ＨＤＤ４３０と、ＬＡＮインタフェース４４０と、入出力インタフェース４５０と、ＤＶＤドライブ４６０とを有する。【０１０１】
ＲＡＭ４１０は、プログラムやプログラムの実行途中結果などを記憶するメモリであり、ＣＰＵ４２０は、ＲＡＭ４１０からプログラムを読み出して実行する中央処理装置である。ＨＤＤ４３０は、プログラムやデータを格納するディスク装置であり、ＬＡＮインタフェース４４０は、コンピュータ４００をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。入出力インタフェース４５０は、マウスやキーボードなどの入力装置および表示装置を接続するためのインタフェースであり、ＤＶＤドライブ４６０は、ＤＶＤの読み書きを行う装置である。【０１０２】
そして、このコンピュータ４００において実行されるアプリケーション改善支援プログラム４１１は、ＤＶＤに記憶され、ＤＶＤドライブ４６０によってＤＶＤから読み出されてコンピュータ４００にインストールされる。あるいは、このアプリケーション改善支援プログラム４１１は、ＬＡＮインタフェース４４０を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてコンピュータ４００にインストールされる。そして、インストールされたアプリケーション改善支援プログラム４１１は、ＨＤＤ４３０に記憶され、ＲＡＭ４１０に読み出されてＣＰＵ４２０によって実行される。
【産業上の利用可能性】
【０１０３】
以上のように、本発明に係るアプリケーション改善支援プログラム、アプリケーション改善支援方法およびアプリケーション改善支援装置は、長期間使用されるアプリケーションの保守に有用であり、特に、運用中に変更が多く行われるアプリケーションの保守に適している。
【図１】
2009011056.tif 000003
【図２】
2009011056.tif 000004
【図３】
2009011056.tif 000005
【図４】
2009011056.tif 000006
【図５】
2009011056.tif 000007
【図６】
2009011056.tif 000008
【図７】
2009011056.tif 000009
【図８】
2009011056.tif 000010
【図９】
2009011056.tif 000011
【図１０】
2009011056.tif 000012
【図１１】
2009011056.tif 000013
【図１２】
2009011056.tif 000014
【図１３】
2009011056.tif 000015
【図１４】
2009011056.tif 000016
【図１５】
2009011056.tif 000017
【図１６】
2009011056.tif 000018
【図１７】
2009011056.tif 000019
【図１８】
2009011056.tif 000020
【図１９】
2009011056.tif 000021
【図２０】
2009011056.tif 000022
【図２１】
2009011056.tif 000023
【図２２】
2009011056.tif 000024
【図２３】
2009011056.tif 000025
【図２４】
2009011056.tif 000026
【図２５】
2009011056.tif 000027
【図２６】
2009011056.tif 000028
【図２７】
2009011056.tif 000029
【図２８】
2009011056.tif 000030
【手続補正書】
【提出日】平成21年10月5日(2009.10.5)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
アプリケーションのソースコードを解析してアプリケーションの改善を支援する情報を提供するアプリケーション改善支援プログラムであって、
アプリケーションを構成するモジュールおよびデータ間の制御関係およびデータ依存関係に基づく接続関係を表すアプリケーションモデルをソースコードを解析して生成するアプリケーションモデル生成手順と、
前記アプリケーションモデル生成手順により生成されたアプリケーションモデルが表す接続関係の複雑度を評価する複雑度評価手順と、
前記複雑度評価手順により評価された複雑度を改善する改善ポイントを出力する改善ポイント出力手順と
をコンピュータに実行させることを特徴とするアプリケーション改善支援プログラム。
【請求項２】
前記複雑度評価手順は、インパクトスケールを用いて前記接続関係の複雑度を評価し、  前記改善ポイント出力手順は、インパクトスケールを改善する改善ポイントを出力することを特徴とする請求項１に記載のアプリケーション改善支援プログラム。
【請求項３】
前記改善ポイント出力手順は、モジュールおよびデータをノードとして前記接続関係を辺としてアプリケーションモデルを表すグラフを操作するグラフ操作手順と、
前記グラフ操作手順により操作されたグラフの複雑度を評価して複雑度が改善される場合に、前記グラフ操作手順による操作を改善ポイントとして出力するグラフ操作評価手順と
をコンピュータに実行させることを特徴とする請求項１または２に記載のアプリケーション改善支援プログラム。
【請求項４】
前記グラフ操作手順は、グラフの操作として、辺の削除、辺の追加、ノードの併合、ノードの分割を含む操作を行うことを特徴とする請求項３に記載のアプリケーション改善支援プログラム。
【請求項５】
前記改善ポイント出力手順により出力された複数の改善ポイントの中からユーザによって選択された改善ポイントを受け付ける改善ポイント受付手順をさらにコンピュータに実行させ、
前記改善ポイント出力手順は、複雑度の改善度合が大きい順を優先順として改善ポイントを出力するとともに、前記改善ポイント受付手順により受け付けられなかった改善ポイントがある場合には、該受け付けられなかった改善ポイントの優先順位を下げて出力することを特徴とする請求項１または２に記載のアプリケーション改善支援プログラム。
【請求項６】
アプリケーションのソースコードを解析してアプリケーションの改善を支援する情報を提供するアプリケーション改善支援方法であって、
アプリケーションを構成するモジュールおよびデータ間の制御関係およびデータ依存関係に基づく接続関係を表すアプリケーションモデルをソースコードを解析して生成するアプリケーションモデル生成ステップと、
前記アプリケーションモデル生成ステップにより生成されたアプリケーションモデルが表す接続関係の複雑度を評価する複雑度評価ステップと、
前記複雑度評価ステップにより評価された複雑度を改善する改善ポイントを出力する改善ポイント出力ステップと
を含んだことを特徴とするアプリケーション改善支援方法。
【請求項７】
アプリケーションのソースコードを解析してアプリケーションの改善を支援する情報を提供するアプリケーション改善支援装置であって、
アプリケーションを構成するモジュールおよびデータ間の制御関係およびデータ依存関係に基づく接続関係を表すアプリケーションモデルをソースコードを解析して生成するアプリケーションモデル生成手段と、
前記アプリケーションモデル生成手段により生成されたアプリケーションモデルが表す接続関係の複雑度を評価する複雑度評価手段と、
前記複雑度評価手段により評価された複雑度を改善する改善ポイントを出力する改善ポイント出力手段と
を備えたことを特徴とするアプリケーション改善支援装置。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションのソースコードを解析してアプリケーションの改善を支援する情報を提供するアプリケーション改善支援プログラム、アプリケーション改善支援方法およびアプリケーション改善支援装置に関し、特に、アプリケーション全体のアーキテクチャレベルでの改善を支援することができるアプリケーション改善支援プログラム、アプリケーション改善支援方法およびアプリケーション改善支援装置に関するものである。
【背景技術】
【０００２】
大規模アプリケーションを長期間運用する業務では、仕様変更や障害対応などによって常にアプリケーションは変更を受ける。したがって、年とともにアプリケーションは複雑化し、見通しが悪くなって保守性は低下していく。このため、リファクタリングと呼ばれるアプリケーションの補修作業を行う必要がある。例えば、銀行などの基幹系業務アプリケーションは、その規模の大きさと、保守の期間の長さから、リファクタリングの必要性が非常に高い。
【０００３】
このようなリファクタリングは、アプリケーションの規模が大きいこともあり、作業者にとって大きな負荷となる。そこで、リファクタリングを支援する技術の開発が進められている。例えば、特許文献１には、アプリケーションの個々のモジュールについてメトリクスを採取し、性質の悪いモジュールを特定してリファクタリングの候補とする技術が記載されている。また、特許文献２および３には、個々のプログラムで使用される変数に基づいて個々のプログラムの複雑性を評価する技術が記載されている。
【０００４】
【特許文献１】特開２００４−２９５４２５号公報
【特許文献２】特開平６−２６６５５０号公報
【特許文献３】特開２００１−３２５１００号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、かかる従来技術では、個々のモジュールの複雑性を評価してリファクタリング対象とすることはできるが、アプリケーション全体のアーキテクチャレベルでのリファクタリングを支援することができないという問題がある。リファクタリングでは、アプリケーション全体のアーキテクチャレベルでのリファクタリングが効果が高いが、全体の複雑性を改善するための改善箇所を見つけることは非常に困難である。また、改善箇所を見つけた場合には、改善した際の効果を事前に定量的に評価できることが重要となるが、改善効果を事前に評価することも非常に困難である。
【０００６】
本発明は、上記に鑑みてなされたものであって、アプリケーション全体のアーキテクチャレベルでの改善を支援することができるアプリケーション改善支援プログラム、アプリケーション改善支援方法およびアプリケーション改善支援装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、請求項１に係る発明は、アプリケーションのソースコードを解析してアプリケーションの改善を支援する情報を提供するアプリケーション改善支援プログラムであって、アプリケーションを構成するモジュールおよびデータ間の制御関係およびデータ依存関係に基づく接続関係を表すアプリケーションモデルをソースコードを解析して生成するアプリケーションモデル生成手順と、前記アプリケーションモデル生成手順により生成されたアプリケーションモデルが表す接続関係の複雑度を評価する複雑度評価手順と、前記複雑度評価手順により評価された複雑度を改善する改善ポイントを出力する改善ポイント出力手順とをコンピュータに実行させることを特徴とする。
【０００８】
この請求項１の発明によれば、アプリケーションを構成するモジュールおよびデータ間の制御関係およびデータ依存関係に基づく接続関係を表すアプリケーションモデルをソースコードを解析して生成し、生成したアプリケーションモデルが表す接続関係の複雑度を評価し、評価した複雑度を改善する改善ポイントを出力するよう構成したので、モジュールおよびデータ間の接続関係の複雑度を改善するような情報を提供することができる。
【０００９】
また、請求項２に係る発明は、上記発明において、前記複雑度評価手順は、インパクトスケールを用いて前記接続関係の複雑度を評価し、前記改善ポイント出力手順は、インパクトスケールを改善する改善ポイントを出力することを特徴とする。
【００１０】
この請求項２の発明によれば、インパクトスケールを用いて接続関係の複雑度を評価し、インパクトスケールを改善する改善ポイントを出力するよう構成したので、適切に複雑度を評価して改善する情報を提供することができる。
【００１１】
また、請求項３に係る発明は、上記発明において、前記改善ポイント出力手順は、モジュールおよびデータをノードとして前記接続関係を辺としてアプリケーションモデルを表すグラフを操作するグラフ操作手順と、前記グラフ操作手順により操作されたグラフの複雑度を評価して複雑度が改善される場合に、前記グラフ操作手順による操作を改善ポイントとして出力するグラフ操作評価手順とをコンピュータに実行させることを特徴とする。
【００１２】
この請求項３の発明によれば、モジュールおよびデータをノードとして接続関係を辺としてアプリケーションモデルを表すグラフを操作し、操作したグラフの複雑度を評価して複雑度が改善される場合に、その操作を改善ポイントとして出力するよう構成したので、グラフ操作で改善ポイントを探すことができる。
【００１３】
また、請求項４に係る発明は、上記発明において、前記グラフ操作手順は、グラフの操作として、辺の削除、辺の追加、ノードの併合、ノードの分割を含む操作を行うことを特徴とする。
【００１４】
この請求項４の発明によれば、グラフの操作として、辺の削除、辺の追加、ノードの併合、ノードの分割を含む操作を行うよう構成したので、簡単なグラフ操作で改善ポイントを探すことができる。
【００１５】
また、請求項５に係る発明は、上記発明において、前記改善ポイント出力手順により出力された複数の改善ポイントの中からユーザによって選択された改善ポイントを受け付ける改善ポイント受付手順をさらにコンピュータに実行させ、前記改善ポイント出力手順は、複雑度の改善度合が大きい順を優先順として改善ポイントを出力するとともに、前記改善ポイント受付手順により受け付けられなかった改善ポイントがある場合には、該受け付けられなかった改善ポイントの優先順位を下げて出力することを特徴とする。
【００１６】
この請求項５の発明によれば、出力した複数の改善ポイントの中からユーザによって選択された改善ポイントを受け付け、複雑度の改善度合が大きい順を優先順として改善ポイントを出力するとともに、受け付けなかった改善ポイントがある場合には、受け付けなかった改善ポイントの優先順位を下げて出力するよう構成したので、ユーザの判断を出力に反映することができる。
【００１７】
また、請求項６に係る発明は、アプリケーションのソースコードを解析してアプリケーションの改善を支援する情報を提供するアプリケーション改善支援方法であって、アプリケーションを構成するモジュールおよびデータ間の制御関係およびデータ依存関係に基づく接続関係を表すアプリケーションモデルをソースコードを解析して生成するアプリケーションモデル生成ステップと、前記アプリケーションモデル生成ステップにより生成されたアプリケーションモデルが表す接続関係の複雑度を評価する複雑度評価ステップと、前記複雑度評価ステップにより評価された複雑度を改善する改善ポイントを出力する改善ポイント出力ステップとを含んだことを特徴とする。
【００１８】
この請求項６の発明によれば、アプリケーションを構成するモジュールおよびデータ間の制御関係およびデータ依存関係に基づく接続関係を表すアプリケーションモデルをソースコードを解析して生成し、生成したアプリケーションモデルが表す接続関係の複雑度を評価し、評価した複雑度を改善する改善ポイントを出力するよう構成したので、モジュールおよびデータ間の接続関係の複雑度を改善するような情報を提供することができる。
【００１９】
また、請求項７に係る発明は、アプリケーションのソースコードを解析してアプリケーションの改善を支援する情報を提供するアプリケーション改善支援装置であって、アプリケーションを構成するモジュールおよびデータ間の制御関係およびデータ依存関係に基づく接続関係を表すアプリケーションモデルをソースコードを解析して生成するアプリケーションモデル生成手段と、前記アプリケーションモデル生成手段により生成されたアプリケーションモデルが表す接続関係の複雑度を評価する複雑度評価手段と、前記複雑度評価手段により評価された複雑度を改善する改善ポイントを出力する改善ポイント出力手段とを備えたことを特徴とする。
【００２０】
この請求項７の発明によれば、アプリケーションを構成するモジュールおよびデータ間の制御関係およびデータ依存関係に基づく接続関係を表すアプリケーションモデルをソースコードを解析して生成し、生成したアプリケーションモデルが表す接続関係の複雑度を評価し、評価した複雑度を改善する改善ポイントを出力するよう構成したので、モジュールおよびデータ間の接続関係の複雑度を改善するような情報を提供することができる。
【発明の効果】
【００２１】
本発明によれば、モジュールおよびデータ間の接続関係の複雑度を改善するような情報を提供するので、アプリケーション全体のアーキテクチャレベルでの改善を支援することができるという効果を奏する。
【００２２】
また、本発明によれば、適切に複雑度を評価して改善する情報を提供するので、アプリケーションの複雑度を確実に改善することができるという効果を奏する。
【００２３】
また、本発明によれば、グラフ操作で改善ポイントを探すので、グラフでの特徴に基づいて改善ポイントを抽出することができるという効果を奏する。
【００２４】
また、本発明によれば、簡単なグラフ操作で改善ポイントを探すので、簡単に改善ポイントを抽出することができるという効果を奏する。
【００２５】
また、本発明によれば、ユーザの判断を出力に反映するので、ユーザの負担を軽減することができるという効果を奏する。
【発明を実施するための最良の形態】
【００２６】
以下に、本発明に係るアプリケーション改善支援プログラム、アプリケーション改善支援方法およびアプリケーション改善支援装置の実施例を図面に基づいて詳細に説明する。なお、この実施例により本発明が限定されるものではない。
【実施例】
【００２７】
まず、本実施例に係るアプリケーション改善の概念について説明する。図１は、本実施例に係るアプリケーション改善の概念を説明するための説明図である。同図は、アプリケーションの変更前後でのアプリケーションモデルおよびアーキテクチャ複雑度を示している。
【００２８】
アプリケーションモデルは、アプリケーションを抽象化してグラフ状のデータ構造で表現したものである。アプリケーションは、より細かい処理単位の「モジュール」と、アプリケーションが扱う永続性のある「データ」からなる。「モジュール」はアプリケーションの規模や記述言語に合わせて、適切な粒度に設定される。典型的には、ＣＯＢＯＬ言語では、１本のプログラムがモジュールとなり、Ｊａｖａ（登録商標）言語では１個のクラスがモジュールとなる。ただし、パッケージなどこれらより大きい単位をモジュールとすることもできる。
【００２９】
「データ」は、そのアプリケーションにとって、一時的よりも長い寿命を持つ情報の集合である。ファイル、データベース、永続化されたオブジェクト、または入出力機器などが該当する。これら「モジュール」と「データ」はアプリケーションモデルのグラフ構造のノードに相当する。図１では、ａ〜ｌがモジュールを示し、ｘ〜ｚがデータを示す。
【００３０】
アプリケーションモデルは、アプリケーションを構成するモジュール間の制御関係、モジュールとデータとの間の依存関係およびデータ間の依存関係に基づいて、モジュール間、モジュールとデータ間およびデータ間の接続関係を表す。モジュールまたはデータを示すノード間を接続する辺がモジュール間の制御関係、モジュールとデータとの間の依存関係またはデータ間の依存関係を表している。これらの辺は多くの場合は有向辺であるが無向辺の場合もある。
【００３１】
図１に示すように、このアプリケーション改善では、モジュールｄとデータｚとの間の依存関係を削除することによって、アプリケーションのアーキテクチャ複雑度が５４．０から５３．０に改善している。
【００３２】
ここで、アーキテクチャ複雑度は、制御フローやデータ依存関係に基づいて、アプリケーションの広範囲に渡るモジュールやデータ間の結びつきの強さを表したもの、または、あるモジュールやデータを変更した際に影響を受ける広さを表したものである。アーキテクチャ複雑度が高いほど、そのアプリケーションは機能追加や変更の際に必要となる作業量が増え、難易度が上昇する。いわば、アーキテクチャ複雑度は、アプリケーションの保守のしにくさの一因である。アプリケーション複雑度はアプリケーションの任意の部分（全体も含む）に対し定義されうる。
【００３３】
このように、本実施例では、アプリケーションモデルの接続関係を操作してアーキテクチャ複雑度を改善することによって、アプリケーションを改善する。アーキテクチャ複雑度の改善度合が大きいほど改善効果が高いといえる。なお、本実施例では、アーキテクチャ複雑度としてインパクトスケールを用いるが、インパクトスケールの詳細については後述する。
【００３４】
次に、本実施例に係るアプリケーション改善支援装置の構成について説明する。図２は、本実施例に係るアプリケーション改善支援装置の構成を示す機能ブロック図である。同図に示すように、このアプリケーション改善支援装置１００は、制御フロー解析部１１０と、データ依存解析部１２０と、解析情報記憶部１３０と、アプリケーションモデル生成部１４０と、アプリケーションモデル記憶部１５０と、アーキテクチャ複雑度評価部１６０と、改善ポイント検索部１７０と、改善ポイント情報記憶部１８０と、改善ポイントリスト出力部１９０とを有する。
【００３５】
制御フロー解析部１１０は、複数のモジュールから構成されるアプリケーションのソースコード１０の制御フロー解析を行う処理部であり、解析結果を解析情報記憶部１３０に格納する。データ依存解析部１２０は、ソースコード１０のデータ依存解析を行う処理部であり、解析結果を解析情報記憶部１３０に格納する。なお、制御フロー解析およびデータ依存解析については、Alfred  V.  Aho,  Ravi  Sethi,  Jeffrey  D.  Ullman,  "Compilers:  Principles,  Techniques,  and  Tools,"  Addison-Wesley,1986.に記載されている。
【００３６】
解析情報記憶部１３０は、制御フロー解析部１１０およびデータ依存解析部１２０によるソースコード１０の解析結果を記憶する記憶部であり、具体的には、モジュールの解析結果を表すモジュール解析情報、データの解析結果を表すデータ解析情報ならびにモジュール間、モジュール−データ間およびデータ間の関係の解析結果を表す関係解析情報を記憶する。
【００３７】
モジュール間の関係としては、例えば、モジュールＡがモジュールＢのメソッドを呼び出す場合には、モジュールＡからモジュールＢに対し、モジュール呼出関係が存在することになる。他の例としては、クラスの継承関係などがある。また、モジュール−データ間の関係としては、例えば、モジュールＡがデータＦを作成する場合には、モジュールＡからデータＦに対し、データアクセス(作成)関係が存在することになる。
【００３８】
図３は、解析情報記憶部１３０が記憶するモジュール解析情報、データ解析情報および関係解析情報を示す図である。同図に示すように、モジュール解析情報は、モジュールを特定するモジュールＩＤと複数のモジュール情報から構成される。モジュール情報としては、モジュール名、作成日時、サイズなどがある。データ解析情報は、データを特定するデータＩＤと複数のデータ情報から構成される。データ情報としては、データ名、作成日時、サイズなどがある。関係解析情報は、関係を特定する関係ＩＤと複数の関係情報から構成される。関係情報としては、関係元を示す関係元ＩＤ、関係先を示す関係先ＩＤ、関係の種別を示す関係種別などがある。
【００３９】
図４は、制御フロー解析およびデータ依存解析によってソースコード１０から取り出されるモジュール解析情報、データ解析情報および関係解析情報の一例を示す図である。この例では、モジュール情報として、モジュール名が取り出され、データ情報としてデータ名が取り出され、関係情報として、関係元ＩＤ、関係種別、関係先ＩＤが取り出されている。
【００４０】
アプリケーションモデル生成部１４０は、解析情報記憶部１３０が記憶する情報およびソースコード１０を参照してアプリケーションモデルを生成し、アプリケーションモデル記憶部１５０に格納する処理部である。
【００４１】
アプリケーションモデル記憶部１５０は、アプリケーションモデルを記憶する記憶部である。図５は、アプリケーションモデル記憶部１５０が記憶するアプリケーションモデルを示す図である。同図に示すように、このアプリケーションモデルは、モジュール呼出、モジュール被呼出、データアクセスの３種の関係に基づいて生成されている。このアプリケーションモデルは、１２個のモジュールと、３つのデータから構成され、実線矢印がモジュール呼出の関係を示し(この矢印はモジュール被呼出の関係も示す)、破線矢印がモジュールからデータをアクセスする関係を示す。
【００４２】
なお、アプリケーションモデルは、アプリケーション複雑度の定義と密接に結びついている。アプリケーション複雑度の計測は、アプリケーションモデルを対象として行われる。そのため、アプリケーションモデルは、アプリケーション複雑度の計測に必要な情報をすべて提供する必要がある。どのような情報が必要であるかは、使用するアプリケーション複雑度の定義に依存し、本実施例では、アプリケーション複雑度に後述するインパクトスケールを使用し、インパクトスケールでは、モジュール呼出、モジュール被呼出、データアクセスの３種の関係が必要となる。このため、本実施例では、モジュール呼出、モジュール被呼出、データアクセスの３種の関係に基づくアプリケーションモデルが用いられる。
【００４３】
図６は、アプリケーションモデルのデータ構造を示す図である。同図に示すように、アプリケーションモデルは、モジュール解析情報、データ解析情報、関係解析情報およびグラフデータ構造情報から構成され、グラフデータ構造情報は、複数のノード情報から構成される。
【００４４】
図７は、ノード情報のデータ構造を示す図である。同図に示すように、ノード情報は、ノードを特定するノードＩＤおよびノードが表すモジュールまたはデータのＩＤから構成されるヘッダと、接続ノード情報から構成される。接続ノード情報は、接続先ノードＩＤ、関係種別および関係ＩＤから構成される。なお、接続ノード情報は、接続するノードの数すなわち関係の数だけリンクトリストで接続される。
【００４５】
図８は、関係解析情報からアプリケーションモデル生成部１４０によって生成されるグラフデータ構造情報の一例を示す図である。同図において、例えば、モジュール「Ｍ１」については、モジュール「Ｍ２」を呼び出す関係「Ｒ１」がリンクトリストで接続され、モジュール「Ｍ２」については、モジュール「Ｍ１」に呼び出される関係「Ｒ２」、モジュール「Ｍ３」に呼び出される関係「Ｒ４」およびデータ「Ｄ１」を読み出す関係「Ｒ５」がリンクトリストで接続される。
【００４６】
図９は、図８に示したグラフデータ構造情報に対応するアプリケーションモデルのグラフ表現を示す図である。同図では、例えば、モジュール名が「ＪＵＣＨＵ１」であるモジュール「Ｍ１」がモジュール名が「ＪＵＣＨＵ−ＳＵＢ」であるモジュール「Ｍ２」を呼び出す関係「Ｒ１」、および、モジュール名が「ＪＵＣＨＵ１」であるモジュール「Ｍ１」によってモジュール名が「ＪＵＣＨＵ−ＳＵＢ」であるモジュール「Ｍ２」が呼び出される関係「Ｒ２」が、「ＪＵＣＨＵ１」から「ＪＵＣＨＵ−ＳＵＢ」への矢印で表されている。
【００４７】
アーキテクチャ複雑度評価部１６０は、アプリケーションモデルを参照してアプリケーションのアーキテクチャ複雑度を算出する処理部である。このアーキテクチャ複雑度評価部１６０は、アーキテクチャ複雑度としてインパクトスケールを用いる。ここで、インパクトスケールは、アプリケーションをアーキテクチャの視点から評価するメトリクスであり、図１０に示すように定義される。
【００４８】
すなわち、アプリケーションを構成する各モジュールに対してインパクトスケールＩＳは
ＩＳ＝Ｓ（１）＋αＳ（２）＋α2Ｓ（３）＋・・・
と定義される。ここで、Ｓ（ｄ）は、アプリケーションをモジュール間の呼出関係およびモジュール−データ間のアクセス関係に基づいてグラフで表現した場合の最短距離ｄのモジュールとデータの個数であり、αは減衰係数（０＜α＜１）である。そして、アプリケーションのインパクトスケールはモジュールのインパクトスケールの合計である。
【００４９】
インパクトスケールには、図１１に示すように、モジュールやデータ間の結合が複雑である場合に大きくなるという特徴と、アプリケーションのモジュラリティが損なわれると増加するという特徴がある。
【００５０】
図１２は、インパクトスケールの計算例を示す図である。同図は、最短距離ｄ＝２までのモジュールおよびデータを数える場合を示している。また、α＝０．５である。同図に示すように、例えば、モジュールｈに対するインパクトスケールは、最短距離ｄ＝１のモジュールおよびデータの数は４であり、最短距離ｄ＝２のモジュールおよびデータの数は６であるため、１．０×４＋０．５×６＝７．０となる。他のモジュールに対しても同様にインパクトスケールを計算し、合計すると、このアプリケーションモデルのインパクトスケールは５３．０となる。この値が図１で示した変更後のアーキテクチャ複雑度の値である。
【００５１】
このように、アーキテクチャ複雑度評価部１６０がインパクトスケールをアーキテクチャ複雑度として用いることによって、アプリケーションの複雑度をアーキテクチャの視点で評価することができる。
【００５２】
改善ポイント検索部１７０は、アーキテクチャ複雑度およびアプリケーションモデルを用いて、アプリケーションを改善する上で有望なポイントをアプリケーションモデルから検索し、検索した改善ポイントを改善度合とともに改善ポイント情報記憶部１８０に格納する処理部である。すなわち、この改善ポイント検索部１７０は、アーキテクチャレベルでリファクタリングの効果がある部分をアプリケーションモデルから検索する。
【００５３】
図１３は、改善ポイント検索部１７０の構成を示す図である。同図に示すように、改善ポイント検索部１７０は、リファクタリングカタログ１７１を備える。ここで、リファクタリングカタログ１７１は、図１４に示すように、リファクタリング手順情報の集合であり、各リファクタリング手順情報は、リファクタリング手順を特定するリファクタリングＩＤ、操作対象グラフ条件、グラフ操作手続きから構成される。
【００５４】
操作対象グラフ条件は、あるノードまたは辺に注目して、そこにグラフ操作手続きが実行可能であるかどうかを判定するための条件である。グラフ操作手続きは、実際にグラフ操作を行う関数へのエントリである。
【００５５】
図１５は、リファクタリング手順情報の例を示す図である。同図に示すように、例えば、辺を対象として、対象辺の両端のノードの間に、対象辺を通らない別の経路があることを条件として、対象辺を切断するというグラフ操作を行うことにより、リファクタリングを行うことができる。図１に示したアプリケーションモデルの変更例は、このグラフ操作に基づくものである。
【００５６】
図１６は、グラフ操作の例を示す図である。同図（ａ）は、辺を削除するグラフ操作を示し、同図（ｂ）は、二つのノード間を新たな辺で接続するグラフ操作を示し、同図（ｃ）は、複数のノードをひとつのノードにまとめるグラフ操作を示し、同図（ｄ）は、二つのノード間の辺を、新たなノードへの辺に置き換えるグラフ操作を示す。また、グラフ操作としては、図１６に示したような操作をプリミティブ操作として、例えば、「類似トポロジを持つサブグラフを共通化する」というプリミティブ操作の組み合わせによる複雑な操作を行うこともできる。
【００５７】
このように、改善ポイント検索部１７０がリファクタリングカタログ１７１を用いてアプリケーションモデルから改善ポイントを検索することによって、アーキテクチャレベルでのリファクタリングを支援することができる。
【００５８】
改善ポイント情報記憶部１８０は、改善ポイントごとに改善ポイント情報を記憶する記憶部である。図１７は、改善ポイント情報を示す図である。同図に示すように、改善ポイント情報は、リファクタリングＩＤ、アプリケーションモデルでのリファクタリング箇所およびリファクタリングの改善度合を示す効果値から構成される。図１８は、改善ポイント情報の具体例を示す図であり、この例は、図１に示したアプリケーション改善に対応する改善ポイント情報、すなわち、図１でノードｄとノードｚとの間の辺を削除する改善ポイント情報を示している。
【００５９】
改善ポイントリスト出力部１９０は、改善ポイントリスト２０を出力する処理部であり、改善ポイントリスト２０を出力する際に、変更箇所のリファクタリング効果の高いものが作業優先順位が高いとみなして、リファクタリング効果が高い順に改善ポイントを出力する。この改善ポイントリスト出力部１９０が、リファクタリング効果が高い順に改善ポイントを出力することによって、限られた作業時間をより効果の高いリファクタリング作業に当てることが可能になる。
【００６０】
次に、本実施例に係るアプリケーション改善支援装置１００の処理手順について説明する。図１９は、本実施例に係るアプリケーション改善支援装置１００の処理手順を示すフローチャートである。同図に示すように、このアプリケーション改善支援装置１００は、アプリケーションのソースコード１０を制御フロー解析部１１０およびデータ依存解析部１２０が解析する（ステップＳ１０〜ステップＳ２０）。
【００６１】
そして、アプリケーションモデル生成部１４０が、制御フロー解析部１１０により解析された情報、データ依存解析部１２０により解析された情報およびソースコード１０から、アプリケーションモデルを作成し（ステップＳ３０）、アーキテクチャ複雑度評価部１６０がアプリケーションモデルのアーキテクチャ複雑度を計算する（ステップＳ４０）。
【００６２】
そして、改善ポイント検索部１７０が、リファクタリング手順情報を使用してアーキテクチャ複雑度を改善する改善ポイントをアプリケーションモデルから検索し、改善ポイント情報を改善ポイント情報記憶部１８０に格納する（ステップＳ５０）。そして、改善ポイントリスト出力部１９０が、改善ポイント情報を改善ポイント記憶部１８０から読み出して改善ポイントリスト２０を出力する（ステップＳ６０）。
【００６３】
このように、アーキテクチャ複雑度を改善する改善ポイントをアプリケーションモデルから検索して出力することによって、アプリケーションのリファクタリングを支援することができる。
【００６４】
次に、制御フロー解析部１１０の処理手順について説明する。図２０は、制御フロー解析部１１０の処理手順を示すフローチャートである。同図に示すように、制御フロー解析部１１０は、未解析のソースコード１０があるか否かを判定し（ステップＳ１１）、未解析のソースコード１０がない場合には、解析が終了した場合であるので、処理を終了する。
【００６５】
これに対して、未解析のソースコード１０がある場合には、未解析のソースコード１０を構文解析し（ステップＳ１２）、モジュールの情報をモジュール解析情報に追加する（ステップＳ１３）。そして、未登録の呼出文があるか否かを判定し（ステップＳ１４）、未登録の呼出文がある間は、呼出文の情報を関係解析情報に追加する（ステップＳ１５）。そして、未登録の呼出文がなくなると、ステップＳ１１に戻り、別のソースコード１０の解析を行う。
【００６６】
このように、制御フロー解析部１１０が呼出文の情報を関係解析情報に追加することによって、モジュール間の呼出関係をアプリケーションモデルに含めることができる。
【００６７】
次に、データ依存解析部１２０の処理手順について説明する。図２１は、データ依存解析部１２０の処理手順を示すフローチャートである。同図に示すように、データ依存解析部１２０は、未解析のソースコード１０があるか否かを判定し（ステップＳ２１）、未解析のソースコード１０がない場合には、解析が終了した場合であるので、処理を終了する。
【００６８】
これに対して、未解析のソースコード１０がある場合には、未解析のソースコード１０を構文解析し（ステップＳ２２）、未登録のデータアクセス文があるか否かを判定する（ステップＳ２３）。その結果、未登録のデータアクセス文がある間は、データの情報をデータ解析情報に追加し（ステップＳ２４）、データアクセス文の情報を関係解析情報に追加する（ステップＳ２５）。そして、未登録のデータアクセス文がなくなると、ステップＳ２１に戻り、別のソースコード１０の解析を行う。
【００６９】
このように、データ依存解析部１２０がデータアクセス文の情報を関係解析情報に追加することによって、モジュール−データ間のアクセス関係をアプリケーションモデルに含めることができる。
【００７０】
次に、アプリケーションモデル生成部１４０の処理手順について説明する。図２２は、アプリケーションモデル生成部１４０の処理手順を示すフローチャートである。同図に示すように、アプリケーションモデル生成部１４０は、関係解析情報に未登録の「関係」があるか否かを判定する（ステップＳ３１）。
【００７１】
その結果、関係解析情報に未登録の「関係」がある場合には、その「関係」の関係元がグラフデータ構造情報のノード情報に登録されているか否かを判定し（ステップＳ３２）、ノード情報に登録されていない場合には、新たなノード情報を作成し、そのヘッダに関係元を登録して、そのノード情報をグラフデータ構造情報に登録する（ステップＳ３３）。そして、その「関係」をヘッダの関係元が一致するノード情報に追加し（ステップＳ３４）、ステップＳ３１に戻る。
【００７２】
これに対して、関係解析情報に未登録の「関係」がない場合には、モジュール解析情報、データ解析情報、関係解析情報、グラフデータ構造情報をまとめてアプリケーションモデルとしてアプリケーションモデル記憶部１５０に格納する（ステップＳ３５）。
【００７３】
このように、アプリケーションモデル生成部１４０が関係解析情報に基づいてグラフデータ構造情報を作成することによって、アプリケーションをグラフ形態で表すことができる。
【００７４】
次に、アーキテクチャ複雑度評価部１６０の処理手順について説明する。図２３は、アーキテクチャ複雑度評価部１６０の処理手順を示すフローチャートである。同図に示すように、アーキテクチャ複雑度評価部１６０は、アプリケーションモデルに未調査のノード情報があるか否かを判定する（ステップＳ４１）。ただし、ここでは、モジュールのノードだけを対象とする。
【００７５】
その結果、未調査のノード情報がある場合には、未調査のノードを一つ選び（ステップＳ４２）、そのノードのアーキテクチャ複雑度すなわちインパクトスケールを計算する（ステップＳ４３）。そして、ステップＳ４１に戻り、次のノードを処理する。これに対して、未調査のノード情報がない場合には、各ノードのアーキテクチャ複雑度を合計してアプリケーションのアーキテクチャ複雑度を計算する（ステップＳ４４）。
【００７６】
このように、アーキテクチャ複雑度評価部１６０がアプリケーションモデルのアーキテクチャ複雑度を計算することによって、アプリケーションの複雑さをアーキテクチャレベルで評価することができる。
【００７７】
次に、改善ポイント検索部１７０の処理手順について説明する。図２４は、改善ポイント検索部１７０の処理手順を示すフローチャートである。同図に示すように、改善ポイント検索部１７０は、リファクタリングカタログ１７１から、リファクタリング手順情報を一つ選ぶ（ステップＳ５１）。そして、リファクタリング手順情報を選ぶことができたか否かを判定し（ステップＳ５２）、選ぶことができない場合には、全てのリファクタリング手順情報について処理を完了した場合であるので、処理終了する。
【００７８】
これに対して、リファクタリング手順情報を選ぶことができた場合には、  アプリケーションモデルのグラフを探索し、選んだリファクタリング手順情報の操作対象グラフ条件を満たす箇所を一つ選ぶ（ステップＳ５３）。そして、操作対象グラフ条件を満たす箇所を選ぶことができたか否かを判定し（ステップＳ５４）、選ぶことができない場合には、選択したリファクタリング手順情報について処理を完了した場合であるので、ステップＳ５１に戻り、次のリファクタリング手順情報を選択する。
【００７９】
一方、操作対象グラフ条件を満たす箇所を選ぶことができた場合には、選んだ箇所について、リファクタリング効果を評価する（ステップＳ５５）。リファクタリングの効果は、リファクタリング手順情報のグラフ操作手続きを施す前と後のアーキテクチャ複雑度すなわちインパクトスケールの変化で測る。アーキテクチャ複雑度の減少が大きい場合は効果が大きく、アーキテクチャ複雑度の減少が小さい場合は効果が小さい。アーキテクチャ複雑度が増加した場合はまったく効果がない。
【００８０】
そして、リファクタリングの効果があるか否かを判定し（ステップＳ５６）、効果がないと判定した場合には、ステップＳ５３に戻り、効果があると判定した場合には、リファクタリング手順情報のＩＤとその箇所とその効果値（アーキテクチャ複雑度の減少値）を改善ポイント情報として改善ポイント情報記憶部１８０に格納し（ステップＳ５７）、ステップＳ５３に戻る。
【００８１】
このように、改善ポイント検索部１７０が、リファクタリング手順情報を用いて改善箇所をアプリケーションモデルから探し、リファクタリング効果がある場合に改善ポイントとすることによって、改善ポイントを自動抽出することができる。
【００８２】
また、図２５は、改善ポイントリスト出力部１９０の処理手順を示すフローチャートである。同図に示すように、改善ポイントリスト出力部１９０は、改善ポイント情報記憶部１８０から改善ポイント情報を読み出して改善ポイントリスト２０を出力装置に出力する（ステップＳ６１）。
【００８３】
上述してきたように、本実施例では、制御フロー解析部１１０がアプリケーションの制御構造を解析し、データ依存解析部１２０がアプリケーションのデータ依存構造を解析し、アプリケーションモデル生成部１４０が制御フロー解析部１１０およびデータ依存解析部１２０による解析結果およびソースコード１０からアプリケーションモデルを生成し、改善ポイント検索部１７０がアーキテクチャ複雑度が改善する改善ポイントをリファクタリング手順情報を用いてアプリケーションモデルから検索して改善ポイント情報を改善ポイント情報記憶部１８０に格納し、改善ポイントリスト出力部１９０が改善ポイントリスト２０を出力することとしたので、アーキテクチャレベルでのアプリケーションの改善を支援することができる。
【００８４】
なお、本実施例では、改善ポイントリスト２０を出力するアプリケーション改善支援装置について説明したが、出力した改善ポイントリスト２０に対するリファクタリング作業者の評価結果をアプリケーション改善支援装置が次の改善ポイントの検索に活かすようにすることもできる。図２６は、リファクタリング作業者の評価結果を次の改善ポイントの検索に活かすことができるアプリケーション改善支援装置の構成を示す機能ブロック図である。
【００８５】
同図に示すように、このアプリケーション改善支援装置２００は、図２に示したアプリケーション改善支援装置１００と比較すると、改善ポイントリスト出力部１９０の代わりに改善ポイントリスト出力部２９０を有し、新たに、改善ポイント選択部２９１と、非選択改善ポイント記憶部２９２とを有する。
【００８６】
改善ポイント選択部２９１は、改善ポイントリスト出力部２９０から出力された改善ポイントに対するリファクタリング作業者の選択／非選択の入力を受け付け、改善ポイントのうち、実際にリファクタリング作業者によって選択されなかった改善ポイントを非選択改善ポイント記憶部２９２に格納する処理部である。
【００８７】
改善ポイントリスト出力部２９０は、次に改善ポイントリスト２０を出力する際に、非選択改善ポイント記憶部２９２に記憶された改善ポイントについては「前回非選択」の情報を付加するとともに優先順位を下げて出力する。過去にリストアップされ、作業対象とされなかった改善ポイントは、本来その変更は改善として相応しくないか、その変更に改善の効果が見込めないかのいずれかである。これらの判断作業はリファクタリング作業者に一定の負荷を課すため、次の改善ポイントリスト２０の出力では、その判断情報を改善ポイントリスト２０に付加することで、リファクタリング作業者の作業負荷を軽減することができる。
【００８８】
ただし、ソースコード１０に変更があった場合には、リファクタリング作業者に選択されなかった改善ポイントでも新たに改善ポイントとなる可能性がある。したがって、ソースコード１０に変更があった場合には、非選択改善ポイント記憶部２９２が記憶する非選択改善ポイントのうち変更箇所に関係する非選択改善ポイントを削除する必要がある。図２７は、ソースコード１０に変更があった場合に、非選択改善ポイントを非選択改善ポイント記憶部２９２から削除するアプリケーション改善支援装置の構成を示す機能ブロック図である。
【００８９】
同図に示すように、このアプリケーション改善支援装置３００は、図２６に示したアプリケーション改善支援装置２００と比較すると、アプリケーションモデル生成部２４０、アプリケーションモデル記憶部２５０、改善ポイントリスト出力部２９０、改善ポイント選択部２９１の代わりに、それぞれアプリケーションモデル生成部３４０、アプリケーションモデル記憶部３５０、改善ポイントリスト出力部３９０、改善ポイント選択部３９１を有し、新たに、変更履歴情報取得部３９３を有する。
【００９０】
変更履歴情報取得部３９３は、ソースコード１０の変更履歴情報３０を取得し、アプリケーションモデル生成部３４０に渡す。アプリケーションモデル生成部３４０は、アプリケーションモデルを生成する際に、変更履歴情報３０に基づいて各ノードに更新日時を付加してアプリケーションモデル記憶部３５０に格納する。改善ポイントリスト出力部３９０は、改善ポイントリスト２０を出力する際に、改善ポイント選択部３９１に対して各ノードの更新日時を通知し、リファクタリング作業者によって改善ポイントの選択が行われた後に更新されたノードに関係する非選択改善ポイントを非選択改善ポイント記憶部２９２から削除するように指示する。
【００９１】
このように、ソースコード１０に変更が行われた場合に、リファクタリング作業者によって以前に選択されなかった改善ポイントのうち、変更箇所に関係する改善ポイントを非選択改善ポイント記憶部２９２から削除することによって、以前に選択されなかった改善ポイントを再度リファクタリング候補とすることができる。
【００９２】
また、変更履歴情報３０を用いてアプリケーションモデルの各ノードおよび各辺に更新日時を付加することによって、改善ポイントリスト出力部が、更新が長い間行われていないノードや辺に関係する改善ポイントの優先順位を下げて改善ポイントリスト２０を出力するようにすることもできる。更新が長い間行われていないノードや辺は、安定していると考えることができ、関係する改善ポイントの優先順位を下げて改善ポイントリスト２０を出力することによって、リファクタリング作業者は改善ポイントの検討を効率良く行うことができる。
【００９３】
また、更新日時が近いノードや辺の集合は、論理的にまとまっている可能性が高いため、改善ポイントリスト出力部が、更新日時が近いノードや辺がまとまった改善ポイントがある場合には、その優先順位を上げて改善ポイントリスト２０を出力するようにすることもできる。論理的にまとまっている可能性の高い改善ポイントの優先順位を上げて改善ポイントリスト２０を出力することによって、リファクタリング作業者は改善ポイントの検討を効率良く行うことができる。
【００９４】
なお、本実施例では、アプリケーション改善支援装置について説明したが、アプリケーション改善支援装置が有する構成をソフトウェアによって実現することで、同様の機能を有するアプリケーション改善支援プログラムを得ることができる。そこで、このアプリケーション改善支援プログラムを実行するコンピュータについて説明する。
【００９５】
図２８は、本実施例に係るアプリケーション改善支援プログラムを実行するコンピュータの構成を示す機能ブロック図である。同図に示すように、このコンピュータ４００は、ＲＡＭ４１０と、ＣＰＵ４２０と、ＨＤＤ４３０と、ＬＡＮインタフェース４４０と、入出力インタフェース４５０と、ＤＶＤドライブ４６０とを有する。
【００９６】
ＲＡＭ４１０は、プログラムやプログラムの実行途中結果などを記憶するメモリであり、ＣＰＵ４２０は、ＲＡＭ４１０からプログラムを読み出して実行する中央処理装置である。ＨＤＤ４３０は、プログラムやデータを格納するディスク装置であり、ＬＡＮインタフェース４４０は、コンピュータ４００をＬＡＮ経由で他のコンピュータに接続するためのインタフェースである。入出力インタフェース４５０は、マウスやキーボードなどの入力装置および表示装置を接続するためのインタフェースであり、ＤＶＤドライブ４６０は、ＤＶＤの読み書きを行う装置である。
【００９７】
そして、このコンピュータ４００において実行されるアプリケーション改善支援プログラム４１１は、ＤＶＤに記憶され、ＤＶＤドライブ４６０によってＤＶＤから読み出されてコンピュータ４００にインストールされる。あるいは、このアプリケーション改善支援プログラム４１１は、ＬＡＮインタフェース４４０を介して接続された他のコンピュータシステムのデータベースなどに記憶され、これらのデータベースから読み出されてコンピュータ４００にインストールされる。そして、インストールされたアプリケーション改善支援プログラム４１１は、ＨＤＤ４３０に記憶され、ＲＡＭ４１０に読み出されてＣＰＵ４２０によって実行される。
【産業上の利用可能性】
【００９８】
以上のように、本発明に係るアプリケーション改善支援プログラム、アプリケーション改善支援方法およびアプリケーション改善支援装置は、長期間使用されるアプリケーションの保守に有用であり、特に、運用中に変更が多く行われるアプリケーションの保守に適している。
【図面の簡単な説明】
【００９９】
【図１】図１は、本実施例に係るアプリケーション改善の概念を説明するための説明図である。
【図２】図２は、本実施例に係るアプリケーション改善支援装置の構成を示す機能ブロック図である。
【図３】図３は、解析情報記憶部が記憶するモジュール解析情報、データ解析情報および関係解析情報を示す図である。
【図４】図４は、制御フロー解析およびデータ依存解析によってソースコードから取り出されるモジュール解析情報、データ解析情報および関係解析情報の一例を示す図である。
【図５】図５は、アプリケーションモデル記憶部が記憶するアプリケーションモデルを示す図である。
【図６】図６は、アプリケーションモデルのデータ構造を示す図である。
【図７】図７は、ノード情報のデータ構造を示す図である。
【図８】図８は、関係解析情報からアプリケーションモデル生成部によって生成されるグラフデータ構造情報の一例を示す図である。
【図９】図９は、図８に示したグラフデータ構造情報に対応するアプリケーションモデルのグラフ表現を示す図である。
【図１０】図１０は、インパクトスケールを説明するための説明図である。
【図１１】図１１は、インパクトスケールの特徴を説明するための説明図である。
【図１２】図１２は、インパクトスケールの計算例を示す図である。
【図１３】図１３は、改善ポイント検索部の構成を示す図である。
【図１４】図１４は、リファクタリングカタログのデータ構造を示す図である。
【図１５】図１５は、リファクタリング手順情報の例を示す図である。
【図１６】図１６は、グラフ操作の例を示す図である。
【図１７】図１７は、改善ポイント情報を示す図である。
【図１８】図１８は、改善ポイント情報の具体例を示す図である。
【図１９】図１９は、本実施例に係るアプリケーション改善支援装置の処理手順を示すフローチャートである。
【図２０】図２０は、制御フロー解析部の処理手順を示すフローチャートである。
【図２１】図２１は、データ依存解析部の処理手順を示すフローチャートである。
【図２２】図２２は、アプリケーションモデル生成部の処理手順を示すフローチャートである。
【図２３】図２３は、アーキテクチャ複雑度評価部の処理手順を示すフローチャートである。
【図２４】図２４は、改善ポイント検索部の処理手順を示すフローチャートである。
【図２５】図２５は、改善ポイントリスト出力部の処理手順を示すフローチャートである。
【図２６】図２６は、リファクタリング作業者の評価結果を次の改善ポイントの検索に活かすことができるアプリケーション改善支援装置の構成を示す機能ブロック図である。
【図２７】図２７は、ソースコードに変更があった場合に、改善ポイントの非選択情報をキャンセルするアプリケーション改善支援装置の構成を示す機能ブロック図である。
【図２８】図２８は、本実施例に係るアプリケーション改善支援プログラムを実行するコンピュータの構成を示す機能ブロック図である。
【符号の説明】
【０１００】
１０    ソースコード
２０    改善ポイントリスト
３０    変更履歴情報
１００，２００，３００    アプリケーション改善支援装置
１１０    制御フロー解析部
１２０    データ依存解析部
１３０    解析情報記憶部
１４０，３４０    アプリケーションモデル生成部
１５０，３５０    アプリケーションモデル記憶部
１６０    アーキテクチャ複雑度評価部
１７０    改善ポイント検索部
１７１    リファクタリングカタログ
１８０    改善ポイント情報記憶部
１９０，２９０，３９０    改善ポイントリスト出力部
２９１，３９１    改善ポイント選択部
２９２    非選択改善ポイント記憶部
３９３    変更履歴情報取得部
４００    コンピュータ
４１０    ＲＡＭ
４１１    アプリケーション改善支援プログラム
４２０    ＣＰＵ
４３０    ＨＤＤ
４４０    ＬＡＮインタフェース
４５０    入出力インタフェース
４６０    ＤＶＤドライブ
【国際調査報告】
2009011056.tif 000031
2009011056.tif 000032
2009011056.tif 000033
2009011056.tif 000034