(57)【要約】【課題】Ｗｅｂアプリケーションを実際に動作させることなく、Ｗｅｂアプリケーションを構成するモジュールの依存関係を抽出できるモジュール依存関係抽出システムを提供する。【解決手段】モジュールロード情報抽出手段８１は、予め定められたクラスローダの構成を示す情報であるクラスローダ構成情報と、クラスローダがロードするモジュールを定義した情報であるロードモジュール定義情報とをもとに、モジュールとそのモジュールをロードするクラスローダとの関係を示す情報であるモジュールロード情報を抽出する。モジュール依存関係抽出手段８２は、一のモジュールをロードする一のクラスローダが、一のモジュールが依存する他のモジュールをロードする他のクラスローダに依存可能か否かを定めた規則であるクラスローダ依存規則をもとに、モジュールロード情報に含まれるモジュールの依存関係を抽出する。【選択図】図１０
2010250763.tif 000002
【特許請求の範囲】
【請求項１】
予め定められたクラスローダの構成を示す情報であるクラスローダ構成情報と、前記クラスローダがロードするモジュールを定義した情報であるロードモジュール定義情報とをもとに、前記モジュールと当該モジュールをロードするクラスローダとの関係を示す情報であるモジュールロード情報を抽出するモジュールロード情報抽出手段と、
一のモジュールをロードする一のクラスローダが、前記一のモジュールが依存する他のモジュールをロードする他のクラスローダに依存可能か否かを定めた規則であるクラスローダ依存規則をもとに、前記モジュールロード情報に含まれるモジュールの依存関係を抽出するモジュール依存関係抽出手段とを備えた
ことを特徴とするモジュール依存関係抽出システム。
【請求項２】
モジュール依存関係抽出手段は、一のモジュールが依存する他のモジュールを参照できない場合にエラー情報を抽出する
請求項１記載のモジュール依存関係抽出システム。
【請求項３】
アプリケーションを設計するための情報である設計情報から、当該アプリケーションを構成するモジュールの依存関係を抽出する設計情報抽出手段と、
モジュール依存関係抽出手段が抽出したモジュールの依存関係と、前記設計情報抽出手段が抽出したモジュールの依存関係とが一致しているか否か判定するモジュール依存関係判定手段とを備えた
請求項１または請求項２に記載のモジュール依存関係抽出システム。
【請求項４】
モジュール依存関係判定手段は、モジュール依存関係抽出手段が抽出したモジュールの依存関係と、設計情報抽出手段が抽出したモジュールの依存関係とが一致しない場合に、双方の依存関係の差異点を抽出する
請求項３記載のモジュール依存関係抽出システム。
【請求項５】
モジュール依存関係抽出手段が抽出したモジュールの依存関係を出力する出力手段を備えた
請求項１から請求項４のうちのいずれか１項に記載のモジュール依存関係抽出システム。
【請求項６】
予め定められたクラスローダの構成を示す情報であるクラスローダ構成情報と、前記クラスローダがロードするモジュールを定義した情報であるロードモジュール定義情報とをもとに、前記モジュールと当該モジュールをロードするクラスローダとの関係を示す情報であるモジュールロード情報を抽出し、
一のモジュールをロードする一のクラスローダが、前記一のモジュールが依存する他のモジュールをロードする他のクラスローダに依存可能か否かを定めた規則であるクラスローダ依存規則をもとに、前記モジュールロード情報に含まれるモジュールの依存関係を抽出する
ことを特徴とするモジュール依存関係抽出方法。
【請求項７】
一のモジュールが依存する他のモジュールを参照できない場合にエラー情報を抽出する
請求項６記載のモジュール依存関係抽出方法。
【請求項８】
コンピュータに、
予め定められたクラスローダの構成を示す情報であるクラスローダ構成情報と、前記クラスローダがロードするモジュールを定義した情報であるロードモジュール定義情報とをもとに、前記モジュールと当該モジュールをロードするクラスローダとの関係を示す情報であるモジュールロード情報を抽出するモジュールロード情報抽出処理、および、
一のモジュールをロードする一のクラスローダが、前記一のモジュールが依存する他のモジュールをロードする他のクラスローダに依存可能か否かを定めた規則であるクラスローダ依存規則をもとに、前記モジュールロード情報に含まれるモジュールの依存関係を抽出するモジュール依存関係抽出処理
を実行させるためのモジュール依存関係抽出プログラム。
【請求項９】
コンピュータに、
モジュール依存関係抽出処理で、一のモジュールが依存する他のモジュールを参照できない場合にエラー情報を抽出させる
請求項８記載のモジュール依存関係抽出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｗｅｂアプリケーションにおけるモジュール間の依存関係を抽出するモジュール依存関係抽出システム、モジュール依存関係抽出方法及びモジュール依存関係抽出プログラムに関する。
【背景技術】
【０００２】
Ｗｅｂアプリケーションの開発は複数の開発者によってなされることが多く、各開発者が作成するモジュール間の依存関係を確認することは重要である。モジュールの依存関係を確認する方法として、一般的にはモジュールの依存関係を抽出し、可視化することによりアプリケーションが正しく作成されていることを確認する方法などが使用される。ここで、モジュールとは、例えば、Ｗｅｂアプリケーションに格納されている（アプリケーションを構成する）Ｊａｒ（JavaARchive ）形式のファイルなどを指す。
【０００３】
特許文献１には、ＪＳＰ（JavaServer Pages。JavaServerは登録商標。）ページとその関連するコンポーネントとの間の整合・不整合を解析し、自動的に検証するウェブアプリケーション開発支援装置が記載されている。特許文献１に記載された装置では、検証対象とするＪＳＰページをテスト実行させることによって正しく開発されているかどうかを動的に検証する。実行されたＪＳＰページによるコンポーネント（オブジェクト）の呼び出しを監視するモニタが、コンポーネント呼び出し時にコンポーネント呼び出し情報を整合検証部に送り、検証部は呼び出し情報に基づいてコンポーネント呼び出しとコンポーネントとの整合を検証する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４０２３８０３号（段落０００４，００１８，００２４，００５０〜００５３）
【発明の概要】
【発明が解決しようとする課題】
【０００５】
Ｊ２ＥＥ（Java 2 Enterprise Edition 。Javaは登録商標。）Ｗｅｂアプリケーションの開発において、開発環境では問題ないアプリケーションをパッケージングして実際にアプリケーションサーバに配備し実行してみると、必要なクラスが見つからないなどの問題でそのアプリケーションが正しく動作しないことがある。
【０００６】
Ｊａｖａ（登録商標）では、クラスローダごとにクラスがロードされ、クラスローダごとにクラスの参照範囲が定まる。Ｊａｖａ（登録商標）アプリケーションの多くはクラスローダを考慮する必要はないが、Ｗｅｂアプリケーションではクラスローダが複数かつ階層構造をなしている。さらにパッケージングしたアーカイブ内の各モジュールはＤＤ（Deployment Descriptor ）ファイルに記述された設定に従って異なるクラスローダにロードされる。そのため、アプリケーション開発者は、クラスローダ構成を考慮した開発を行う必要がある。すなわち、開発者は、開発したモジュールの論理的な依存関係だけでなく、クラスローダを考慮した物理的なモジュール依存関係を考慮する必要がある。
【０００７】
しかし、Ｗｅｂアプリケーションでは、クラスローダが複数存在し、さらにクラスローダ構成およびアプリケーションの配備情報は、設定ファイルによって隠蔽されている。そのため、開発者は、Ｗｅｂアプリケーションのパッケージングが正しいかどうかを実際に動作させることなく事前に判定することは困難な場合が多い。
【０００８】
特許文献１に記載された開発支援装置では、ＪＳＰに関連するコンポーネントであるＪａｖａビーンやメッセージリソース、ＪＳＰページが依存する他のＪＳＰページやウェブページなどの間の整合性を判断する。しかし、特許文献１に記載された開発支援装置は、物理的なモジュール依存関係を考慮していないため、実際にアプリケーションサーバに配備し実行したときに、正しく動かない可能性がある。また、特許文献１に記載された開発支援装置では、ＪＳＰページをテスト実行させることによって正しく開発されているかどうかを動的に検証している。しかし、開発時にはこのようなテスト実行をさせることなく、モジュールの依存関係が事前に判断できる事が望ましい。
【０００９】
そこで、本発明は、Ｗｅｂアプリケーションを実際に動作させることなく、Ｗｅｂアプリケーションを構成するモジュールの依存関係を抽出できるモジュール依存関係抽出システム、モジュール依存関係抽出方法及びモジュール依存関係抽出プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明によるモジュール依存関係抽出システムは、予め定められたクラスローダの構成を示す情報であるクラスローダ構成情報と、クラスローダがロードするモジュールを定義した情報であるロードモジュール定義情報とをもとに、モジュールとそのモジュールをロードするクラスローダとの関係を示す情報であるモジュールロード情報を抽出するモジュールロード情報抽出手段と、一のモジュールをロードする一のクラスローダが、一のモジュールが依存する他のモジュールをロードする他のクラスローダに依存可能か否かを定めた規則であるクラスローダ依存規則をもとに、モジュールロード情報に含まれるモジュールの依存関係を抽出するモジュール依存関係抽出手段とを備えたことを特徴とする。
【００１１】
本発明によるモジュール依存関係抽出方法は、予め定められたクラスローダの構成を示す情報であるクラスローダ構成情報と、クラスローダがロードするモジュールを定義した情報であるロードモジュール定義情報とをもとに、モジュールとそのモジュールをロードするクラスローダとの関係を示す情報であるモジュールロード情報を抽出し、一のモジュールをロードする一のクラスローダが、一のモジュールが依存する他のモジュールをロードする他のクラスローダに依存可能か否かを定めた規則であるクラスローダ依存規則をもとに、モジュールロード情報に含まれるモジュールの依存関係を抽出することを特徴とする。
【００１２】
本発明によるモジュール依存関係抽出プログラムは、コンピュータに、予め定められたクラスローダの構成を示す情報であるクラスローダ構成情報と、クラスローダがロードするモジュールを定義した情報であるロードモジュール定義情報とをもとに、モジュールとそのモジュールをロードするクラスローダとの関係を示す情報であるモジュールロード情報を抽出するモジュールロード情報抽出処理、および、一のモジュールをロードする一のクラスローダが、一のモジュールが依存する他のモジュールをロードする他のクラスローダに依存可能か否かを定めた規則であるクラスローダ依存規則をもとに、モジュールロード情報に含まれるモジュールの依存関係を抽出するモジュール依存関係抽出処理を実行させることを特徴とする。
【発明の効果】
【００１３】
本発明によれば、Ｗｅｂアプリケーションを実際に動作させることなく、Ｗｅｂアプリケーションを構成するモジュールの依存関係を抽出できる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施形態におけるモジュール依存関係抽出システムの例を示すブロック図である。
【図２】Ｗｅｂアプリケーションと、ＤＤファイルの例を示す説明図である。
【図３】モジュール依存関係をグラフィカルな形式で出力させた場合の例を示す説明図である。
【図４】モジュール依存関係を抽出する処理の例を示すフローチャートである。
【図５】第２の実施形態におけるモジュール依存関係抽出システムの例を示すブロック図である。
【図６】物理的依存関係と論理的依存関係とを比較する処理の例を示すフローチャートである。
【図７】Ｗｅｂアプリケーションの構成例を示す説明図である。
【図８】モジュールロード情報の例を示す説明図である。
【図９】モジュール依存関係の例を示す説明図である。
【図１０】本発明の最小構成を示すブロック図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施形態を図面を参照して説明する。以下の説明では、Ｗｅｂアプリケーションの構成が、Ｊ２ＥＥの仕様によって定められている場合について説明する。
【００１６】
実施形態１．
図１は、本発明の第１の実施形態におけるモジュール依存関係抽出システムの例を示すブロック図である。本実施形態におけるモジュール依存関係抽出システムは、モジュールロード情報抽出手段１０１と、モジュール依存関係抽出手段１０２と、抽出結果出力手段１０３とを備えている。
【００１７】
モジュールロード情報抽出手段１０１は、解析対象のＷｅｂアプリケーション内を解析し、クラスローダの構成および各モジュールがどのクラスローダによってロードされるかを示す情報（以下、モジュールロード情報と記す。）を抽出する。
【００１８】
Ｊ２ＥＥの仕様に基づくアプリケーションサーバでは、クラスローダの構成もＪ２ＥＥの仕様に基づいて定められている。クラスローダは階層構造をなしており、Ｊ２ＥＥの仕様においては、ＪａｖａＶＭ（Java Virtual Machine）内蔵クラスローダ、アプリケーションサーバクラスローダ、Ｅａｒ（Enterprise ARchive）ファイルクラスローダ、Ｗａｒ（Web ARchive ）ファイルクラスローダの順で親子関係を成している。そして、ＪａｖａＶＭ内蔵クラスローダ、アプリケーションサーバクラスローダにはそれぞれが持つライブラリクラスが、Ｅａｒファイルクラスローダ、ＷａｒファイルクラスローダにはそれぞれＥａｒファイル内のクラス、Ｗａｒファイル内のクラスがロードされる。
【００１９】
以下の説明では、モジュールロード情報抽出手段１０１が、Ｊ２ＥＥの仕様で定められたクラスローダ構成をもとにモジュールロード情報を抽出する場合について説明するが、クラスローダ構成は、Ｊ２ＥＥの仕様で定められた構成でなくともよい。例えば、クラスローダ構成を独自に設定できるアプリケーションサーバでは、そのクラスローダ構成を定義する設定ファイルが存在する。この場合、モジュールロード情報抽出手段１０１は、その設定ファイルから読み取ったクラスローダ構成をもとにモジュールロード情報を抽出してもよい。以下の説明では、クラスローダ構成を含むアプリケーションサーバの設定情報を、アプリケーションサーバ設定情報（ＡＰサーバ設定情報）と記す。
【００２０】
また、アプリケーションサーバは、どのクラスローダがモジュールをロードするか定義したファイル（以下、クラスローダ定義ファイルと記す。）の内容をもとにモジュールがロードされるクラスローダを判断する。例えば、Ｊ２ＥＥの仕様に基づくアプリケーションサーバでは、ＤＤ（Deployment Descriptor）ファイルに定義された内容をもとにモジュールをロードするクラスローダを決定する。具体的には、Ｗｅｂアプリケーションを構成するファイル「＊．ｅａｒ」ファイル内に、ＤＤファイルが含まれ、そのＤＤファイルに、＊．Ｅａｒファイルクラスローダにロードするモジュールがｍｏｄｕｌｅタグに記述されている。モジュールロード情報抽出手段１０１は、そのｍｏｄｕｌｅタグに記述されたモジュール名をもとに、そのＥａｒファイルクラスローダにロードされるモジュールを判断できる。
【００２１】
また、「＊．ｅａｒ」ファイル内のＤＤファイルには、Ｅａｒファイルクラスローダと親子関係を形成するＷａｒファイルクラスローダがロードするモジュールも定義されるため、クラスローダ間の親子関係も判断できる。このように、モジュールロード情報抽出手段１０１は、クラスローダ構成とＤＤファイルをもとに、クラスローダとロードされるモジュールの構成を判断し、モジュールロード情報を抽出する。
【００２２】
図２は、「Ａ．ｅａｒ」ファイル名のＷｅｂアプリケーションと、そのアプリケーションに含まれるＤＤファイル（application.xml ）の例を示す説明図である。以下、モジュールロード情報抽出手段１０１が、図２に例示するＤＤファイルとＪ２ＥＥの仕様で定められたクラスローダ構成をもとにモジュールロード情報を抽出する場合について説明する。
【００２３】
モジュールロード情報抽出手段１０１は、ＤＤファイルのｍｏｄｕｌｅタグに記述されたモジュール名を読み取る。図２に示す例では、モジュールロード情報抽出手段１０１は、モジュール名としてｅｊｂ１．ｊａｒ、ｅｊｂ２．ｊａｒ及びＡ．ｗａｒを読み取る。なお、ｅｊｂ３．ｊａｒはＷｅｂアプリケーションには含まれているが、ＤＤファイルに記述されていないため読み取らない。
【００２４】
モジュールロード情報抽出手段１０１は、ｅｊｂ１．ｊａｒ、ｅｊｂ２．ｊａｒ内のクラスがＡ．ｅａｒクラスローダにロードされ、Ａ．ｗａｒ内のクラスがＡ．ｗａｒファイルクラスローダにロードされると判断する。さらに、Ａ．ｗａｒは、Ａ．Ｗａｒファイルクラスローダによってロードされるため、モジュールロード情報抽出手段１０１は、Ａ．ｅａｒクラスローダとＡ．ｗａｒクラスローダが親子関係になると判断する。モジュールロード情報抽出手段１０１は、これらの関係をもとに、図２（ｃ）に例示するモジュールロード情報を抽出する。
【００２５】
以下の説明では、モジュールロード情報抽出手段１０１が、クラスローダ定義ファイルであるＤＤファイルをもとにモジュールをロードするクラスローダを判断する場合について説明するが、モジュールをロードするクラスローダを判断するために使用するファイルはＤＤファイルに限定されない。
【００２６】
このように、モジュールロード情報抽出手段１０１は、ＡＰサーバ設定情報とＤＤファイルをもとにモジュールロード情報を抽出する。
【００２７】
モジュール依存関係抽出手段１０２は、モジュールロード情報抽出手段１０１によって抽出されたモジュールロード情報をもとに、クラスローダの参照解決規則に則りモジュール間の依存関係を抽出し、その抽出結果を後述の抽出結果出力手段１０３に出力させる。例えば、モジュール依存関係抽出手段１０２は、Ｊａｖａの仕様で定められているクラスローダの参照解決規則をもとにモジュール依存関係を抽出する。ここで、モジュール間の依存関係とは、あるモジュール内のクラスファイルから他のモジュール内のクラスを参照する場合、他のモジュール内のクラスを参照するクラスファイルを含むモジュールと、クラスが参照されるモジュールとの間に成り立つ関係を示す。すなわち、他のモジュール内のクラスを参照するクラスファイルを含むモジュールは、参照されるクラスを含むモジュールに依存しているということができる。
【００２８】
クラスローダの参照解決規則とは、あるクラスをロードするクラスローダ（ここでは、クラスローダＡと記す。）が、そのクラスが参照する（依存する）クラスをどのようにロードするかを定めた規則である。Ｊａｖａでは、クラスローダのクラスのロード処理は委譲モデルを採用しており、必要に応じて親のクラスローダにクラスのロード処理を委譲することができる。従って、あるクラスローダ内のクラスが参照できるクラスは、自分自身のクラスローダ内のクラス又は親のクラスローダ内のクラスだけであり、親クラスローダ内のクラスから子クラスローダ内のクラスに対する参照、もしくは兄弟関係となっているクラスローダ間のクラスの参照はできないと規定されている。そこで、モジュール依存関係抽出手段１０２は、このような規定をもとにモジュール依存関係を抽出する。なお、モジュール依存関係抽出手段１０２がモジュール関係を抽出するための参照解決規則は、上記内容に限定されない。
【００２９】
モジュール依存関係抽出手段１０２は、モジュールロード情報に含まれるモジュール内のクラスファイルの解析（例えば、バイナリ解析）を行い、各クラスファイルが参照しているクラスを抽出する。次に、モジュール依存関係抽出手段１０２は、参照解決規則をもとに、そのクラスが含まれるモジュールを探索する。上述の例では、モジュール依存関係抽出手段１０２は、自分自身のクラスローダ内のクラス又は親のクラスローダ内のクラスを探索する。探索したクラスが見つかった場合、そのモジュールとは依存関係があると言えるため、モジュール依存関係抽出手段１０２は、そのクラスとモジュールと依存関係（モジュール依存関係）を抽出する。一方、探索したクラスが見つからなかった場合、モジュール依存関係抽出手段１０２は、クラスが参照できないという情報（以下、エラー情報と記す。）を保持しておく。
【００３０】
なお、モジュール依存関係抽出手段１０２は、各クラスとモジュールとの依存関係を抽出する際、探索するクラスを親のモジュールから子のモジュールの順に抽出してもよく、子のモジュールから親のモジュールの順に抽出してもよい。これらの依存関係を抽出する順番は、アプリケーションサーバの仕様等に応じて定めればよい。
【００３１】
モジュール依存関係抽出手段１０２は、エラー情報を、例えばリスト形式に編集して後述の抽出結果出力手段１０３に出力させてもよい。また、モジュール依存関係抽出手段１０２は、モジュール依存関係をグラフィカルな形式で抽出結果出力手段１０３に出力させてもよい。図３は、モジュール依存関係をグラフィカルな形式で抽出結果出力手段１０３に出力させた場合の例を示す説明図である。図３に示す例では、階層構造を包含関係で表現し、また、各ローダでロードされるモジュールを矢印で結ぶことにより依存関係を表現していることを示す。
【００３２】
例えば、開発者は、抽出結果出力手段１０３に出力されたモジュール依存関係を目視などで確認することにより、ＤＤファイルの設定ミスなどにより、読み込まれるべきモジュールが読み込まれていないことなどを確認できる。また、例えば、開発者は、同じクラスが複数のモジュールに含まれる場合に、依存関係を想定しているモジュールが別のモジュールと関連付けられてしまっていることなども確認できる。
【００３３】
抽出結果出力手段１０３は、抽出したモジュール依存関係やエラー情報を出力する出力手段である。抽出結果出力手段１０３は、例えば、ディスプレイ等の装置により実現されるが、抽出結果出力手段１０３はディスプレイ等に限定されない。
【００３４】
モジュールロード情報抽出手段１０１と、モジュール依存関係抽出手段１０２とは、プログラム（モジュール依存関係抽出プログラム）に従って動作するコンピュータのＣＰＵによって実現される。例えば、プログラムは、モジュールロード情報抽出手段１０１及びモジュール依存関係抽出手段１０２を含む装置が備える記憶部（図示せず）に記憶され、ＣＰＵは、そのプログラムを読み込み、プログラムに従って、モジュールロード情報抽出手段１０１及びモジュール依存関係抽出手段１０２として動作してもよい。また、モジュールロード情報抽出手段１０１と、モジュール依存関係抽出手段１０２とは、それぞれが専用の装置で実現されていてもよい。
【００３５】
次に、動作について説明する。図４は、モジュール依存関係を抽出し、その抽出結果を抽出結果出力手段１０３に出力させる場合の例を示すフローチャートである。モジュールロード情報抽出手段１０１は、アプリケーションサーバの設定情報（すなわち、ＡＰサーバ設定情報）とＷｅｂアプリケーション内に含まれるＤＤファイルを解析し、クラスローダの構成および各モジュールがどのクラスローダによってロードされるかという情報（すなわち、モジュールロード情報）を抽出する（ステップＳ１１）。モジュール依存関係抽出手段１０２は、モジュールロード情報抽出手段１０１によって抽出されたモジュールロード情報をもとに、クラスローダの参照解決規則に則りモジュール依存関係を抽出する（ステップＳ１２）。モジュール依存関係抽出手段１０２は、その抽出結果を抽出結果出力手段１０３に出力させる（ステップＳ１３）。
【００３６】
本発明によれば、モジュールロード情報抽出手段１０１が、クラスローダ構成（ＡＰサーバ設定情報）と、クラスローダ定義ファイルの内容をもとに、モジュールロード情報を抽出し、モジュール依存関係抽出手段１０２が、クラスローダの参照解決規則をもとに、モジュールロード情報に含まれるモジュールの依存関係を抽出する。よって、Ｗｅｂアプリケーションを実際に動作させることなく、Ｗｅｂアプリケーションを構成するモジュールの依存関係を抽出できる。
【００３７】
また、モジュール依存関係抽出手段１０２が、モジュールロード情報に含まれるモジュールが依存するモジュールを参照できない場合にエラー情報を抽出してもよい。こうすることで、開発者は、問題点を早期に把握することができる。
【００３８】
また、モジュール依存関係抽出手段１０２が抽出結果を抽出結果出力手段１０３に出力させてもよい。こうすることで、開発者は、抽出したモジュールの依存関係を確認することができるため、パッケージングが正しいか否か判断できる。
【００３９】
実施形態２．
図５は、本発明の第２の実施形態におけるモジュール依存関係抽出システムの例を示すブロック図である。本実施形態におけるモジュール依存関係抽出システムは、モジュールロード情報抽出手段２０１と、モジュール依存関係抽出手段２０２と、設計情報解析手段２０３と、モジュール依存関係比較手段２０４とを備えている。モジュールロード情報抽出手段２０１及びモジュール依存関係抽出手段２０２の機能は、第１の実施形態におけるモジュールロード情報抽出手段１０１及びモジュール依存関係抽出手段１０２と同様であるため、説明を省略する。
【００４０】
設計情報解析手段２０３は、Ｗｅｂアプリケーションの設計情報からモジュール依存関係を抽出する。ここで、Ｗｅｂアプリケーションの設計情報とは、Ｗｅｂアプリケーションを設計するために作成される設計書などであり、Ｗｅｂアプリケーションを構成する各モジュールの仕様やモジュール間依存関係、モジュールをどのように配備するか等の情報を含む。設計情報に記載されたモジュールの依存関係は、Ｗｅｂアプリケーションの本来あるべき関係を表していると言える。そのため、設計情報解析手段２０３は、本来あるべきモジュール依存関係を抽出するものということができる。
【００４１】
設計情報解析手段２０３は、モジュール間依存関係が記載された設計書（例えば、詳細設計書レベルの設計書）から設計情報を抽出してもよい。例えば、設計書のフォーマットとしてモジュール依存関係の記載方法を予め定めておき、設計情報解析手段２０３は、そのフォーマットに従って記載されたモジュール依存関係を抽出してもよい。
【００４２】
モジュール依存関係比較手段２０４は、モジュール依存関係抽出手段２０２が抽出したモジュール依存関係（以下、物理的依存関係と記すこともある。）と設計情報解析手段２０３が抽出したモジュール依存関係（以下、論理的依存関係と記すこともある。）とを比較し、アプリケーションサーバに配備するパッケージングが正しいか否か判定する。モジュール依存関係比較手段２０４は、例えば、物理的依存関係と論理的依存関係とが一致する場合に正しいと判断する。なお、物理的依存関係と論理的依存関係のフォーマットが異なる場合、モジュール依存関係比較手段２０４は、両者を比較できるようにフォーマットを変換して比較すればよい。
【００４３】
モジュール依存関係比較手段２０４は、比較結果をディスプレイ等の出力手段（図示せず）に出力させてもよい。また、モジュール依存関係比較手段２０４は、物理的依存関係と論理的依存関係とが一致しない場合に、双方の依存関係の差異点を抽出してもよい。こうすることで、開発者は、問題点を早期に把握することができる。
【００４４】
モジュールロード情報抽出手段２０１と、モジュール依存関係抽出手段２０２と、設計情報解析手段２０３と、モジュール依存関係比較手段２０４とは、プログラム（モジュール依存関係抽出プログラム）に従って動作するコンピュータのＣＰＵによって実現される。例えば、プログラムは、モジュールロード情報抽出手段２０１、モジュール依存関係抽出手段２０２、設計情報解析手段２０３及びモジュール依存関係比較手段２０４を含む装置が備える記憶部（図示せず）に記憶され、ＣＰＵは、そのプログラムを読み込み、プログラムに従って、モジュールロード情報抽出手段２０１、モジュール依存関係抽出手段２０２、設計情報解析手段２０３及びモジュール依存関係比較手段２０４として動作してもよい。また、モジュールロード情報抽出手段２０１と、モジュール依存関係抽出手段２０２と、モジュールロード情報抽出手段２０１と、モジュール依存関係抽出手段２０２と、設計情報解析手段２０３と、モジュール依存関係比較手段２０４とは、それぞれが専用の装置で実現されていてもよい。
【００４５】
次に、動作について説明する。図６は、アプリケーションサーバに配備されるモジュールのモジュール依存関係（すなわち、物理的依存関係）と、設計情報をもとに抽出したモジュール依存関係（すなわち、論理的依存関係）とを比較する処理の例を示すフローチャートである。
【００４６】
モジュールロード情報抽出手段２０１が、モジュールロード情報を抽出し、モジュール依存関係抽出手段２０２が、モジュール依存関係（すなわち、物理的依存関係）を抽出するまでの処理であるステップＳ２１〜Ｓ２２の処理は、図４に例示するステップＳ１１〜Ｓ１２の処理と同様であるため、説明を省略する。一方、設計情報解析手段２０３は、Ｗｅｂアプリケーションの設計情報から本来あるべきモジュール依存関係（すなわち、論理的依存関係）を抽出する（ステップＳ２３）。モジュール依存関係比較手段２０４は、物理的依存関係と論理的依存関係とを比較し、パッケージングが正しいか否かを判定する（ステップＳ２４）。
【００４７】
本発明によれば、第１の実施形態に加え、設計情報解析手段２０３が、設計情報からモジュールの依存関係を抽出し、モジュール依存関係比較手段２０４が、モジュール依存関係抽出手段２０２が抽出したモジュールの依存関係と、設計情報解析手段２０３が抽出したモジュールの依存関係とが一致しているか否か判定する。よって、実施形態１の効果に加え、パッケージングが正しいか否かの結果を把握できる。
【００４８】
すなわち、本実施形態では、設計情報解析手段２０３が設計情報から本来あるべきモジュール依存関係を抽出しているため、Ｗｅｂアプリケーションから抽出したモジュール依存関係と比較することでパッケージングが正しいか否かの結果を把握できる。特に、モジュール依存関係が複雑な場合にパッケージングが正しいか否かを判断する場合などに有効である。
【実施例１】
【００４９】
以下、具体的な実施例により本発明を説明するが、本発明の範囲は以下に説明する内容に限定されない。以下の説明では、図７に例示する内容でＷｅｂアプリケーションが構成されている場合について説明する。
【００５０】
第１の実施形態に関する実施例を、図１及び図４を参照して説明する。まず、モジュールロード情報抽出手段１０１はＷｅｂアプリケーション内からＤＤファイル（application.xmlなど）を抽出および解析し、さらにＡＰサーバ設定情報（ＡＰサーバが提供するライブラリなど）をもとに実行環境におけるクラスローダの構成および各モジュールの配備構成（すなわち、モジュールロード情報）を抽出する（ステップＳ１１）。
【００５１】
図８は、モジュールロード情報抽出手段１０１が抽出したモジュールロード情報の例を示す説明図である。図８に示す例では、階層構造を包含関係で表現し、アプリケーションサーバ、Ａ．ｅａｒ、Ａ．ｗａｒはそれぞれ固有のクラスローダを持ち、それらは階層構造になっていることを示す。また、図８に示す例では、アプリケーションサーバのクラスローダにｃｏｍｍｏｎｓ．ｊａｒが、Ａ．ｅａｒのクラスローダにｅｊｂ１．ｊａｒとｅｊｂ２．ｊａｒが、Ａ．ｗａｒのクラスローダにｍａｉｎ．ｊａｒとｕｔｉｌ．ｊａｒがそれぞれロードされていることを示す。また、図８を参照すると、ｅｊｂ３．ｊａｒはＷｅｂアプリケーション内に存在するがクラスローダにはロードされないことがわかる。
【００５２】
次に、モジュール依存関係抽出手段１０２は、モジュールロード情報抽出手段１０１が抽出したモジュールロード情報をもとに、クラスローダの参照解決規則に則りモジュール間の依存関係を抽出する（ステップＳ１２）。
【００５３】
図３は、モジュール依存関係抽出手段１０２が抽出したモジュール間の依存関係の例を示す説明図である。Ｊａｖａの仕様では、あるクラスが参照できるクラスは自分自身のクラスローダ及び親のクラスローダ内のクラスだけである。そのため、例えば、本来ｅｊｂ２．ｊａｒ内のクラスがｕｔｉｌ．ｊａｒ内のクラスを参照する必要があったとしてもｅｊｂ２．ｊａｒ内のクラスからｕｔｉｌ．ｊａｒ内のクラスを参照することができない。
【００５４】
モジュール依存関係抽出手段１０２は、抽出したモジュール間の依存関係や、クラスが参照できないなどのエラー情報の一覧を抽出結果出力手段１０３に出力させる（ステップＳ１３）。開発者は、この結果を確認することにより、例えば、ロードされるべきｅｊｂ３．ｊａｒがロードされていない、ｅｊｂ２．ｊａｒからｕｔｉｌ．ｊａｒへの依存関係が存在しないなどのパッケージングミスを発見することができる。
【実施例２】
【００５５】
次に、第２の実施形態に関する実施例を、図５及び図６を参照して説明する。なお、図６に例示するステップＳ２１〜Ｓ２２の処理は、実施例１で説明した図４に例示するステップＳ１１〜Ｓ１２の処理と同様である。そのため、モジュール依存関係抽出手段２０２が、モジュール間の依存関係を抽出した後の処理である図６に例示するステップＳ２３以降の処理について説明する。
【００５６】
設計情報解析手段２０３は、Ｗｅｂアプリケーションの設計情報から本来あるべきモジュール依存関係を検出する（ステップＳ２３）。例えば、設計情報に、モジュール依存関係抽出手段２０２が抽出した内容と同じフォーマットでモジュール依存関係が定義されている場合、設計情報解析手段２０３は、その定義内容をモジュール依存関係として抽出してもよい。また、設計情報として使用する設計書にモジュール依存関係を示す情報が記載されている場合、設計情報解析手段２０３は、設計書からその情報を読み込み、モジュール依存関係を抽出してもよい。設計情報解析手段２０３は、例えば図９に例示するモジュール依存関係を設計情報から抽出する。
【００５７】
モジュール依存関係比較手段２０４は、Ｗｅｂアプリケーションから抽出したモジュール依存関係（すなわち、モジュール依存関係抽出手段２０２が抽出したモジュール依存関係）と、設計情報から検出したモジュール依存関係（すなわち、設計情報解析手段２０３が抽出したモジュール依存関係）とを比較し、パッケージングが正しいかどうかを判定する（ステップＳ２４）。図３に例示するモジュールの依存関係と、図９に例示するモジュールの依存関係を比較すると、図３に示す例では、「ｅｊｂ３．ｊａｒがロードされていない、ｕｔｉｌ．ｊａｒがＡ．ｗａｒクラスローダによってロードされる」という点で異なる。そのため、モジュール依存関係比較手段２０４は、パッケージングが正しくないと判断する。このとき、モジュール依存関係比較手段２０４は、ディスプレイ等の出力手段（図示せず）に判断結果を出力させてもよい。
【００５８】
このように、モジュール依存関係比較手段２０４が比較結果を判定するため、パッケージングが正しいか否かの結果を把握できる。
【００５９】
次に、本発明の最小構成を説明する。図１０は、本発明の最小構成を示すブロック図である。本発明によるモジュール依存関係抽出システムは、予め定められたクラスローダの構成を示す情報であるクラスローダ構成情報（例えば、ＡＰサーバ設定情報）と、クラスローダがロードするモジュールを定義した情報であるロードモジュール定義情報（例えば、クラスローダ定義ファイル、ＤＤファイル）とをもとに、モジュールとそのモジュールをロードするクラスローダとの関係を示す情報であるモジュールロード情報を抽出するモジュールロード情報抽出手段８１（例えば、モジュールロード情報抽出手段１０１）と、一のモジュールをロードする一のクラスローダが、一のモジュールが依存する他のモジュールをロードする他のクラスローダに依存可能か否かを定めた規則であるクラスローダ依存規則（例えば、クラスローダの参照解決規則）をもとに、モジュールロード情報に含まれるモジュールの依存関係を抽出するモジュール依存関係抽出手段８２（例えば、モジュール依存関係抽出手段１０２）とを備えている。
【００６０】
そのような構成により、Ｗｅｂアプリケーションを実際に動作させることなく、Ｗｅｂアプリケーションを構成するモジュールの依存関係を抽出できる。
【００６１】
また、上記の実施形態には、以下に示す構成のモジュール依存関係抽出システムが開示されている。
【００６２】
（１）予め定められたクラスローダの構成を示す情報であるクラスローダ構成情報（例えば、ＡＰサーバ設定情報）と、クラスローダがロードするモジュールを定義した情報であるロードモジュール定義情報（例えば、クラスローダ定義ファイル、ＤＤファイル）とをもとに、モジュールとそのモジュールをロードするクラスローダとの関係を示す情報であるモジュールロード情報を抽出するモジュールロード情報抽出手段（例えば、モジュールロード情報抽出手段１０１）と、一のモジュールをロードする一のクラスローダが、一のモジュールが依存する他のモジュールをロードする他のクラスローダに依存可能か否かを定めた規則であるクラスローダ依存規則（例えば、クラスローダの参照解決規則）をもとに、モジュールロード情報に含まれるモジュールの依存関係を抽出するモジュール依存関係抽出手段（例えば、モジュール依存関係抽出手段１０２）とを備えたモジュール依存関係抽出システム。
【００６３】
（２）モジュール依存関係抽出手段が、一のモジュールが依存する他のモジュールを参照できない場合にエラー情報を抽出するモジュール依存関係抽出システム。
【００６４】
（３）アプリケーションを設計するための情報である設計情報（例えば、設計書）から、そのアプリケーションを構成するモジュールの依存関係を抽出する設計情報抽出手段（例えば、設計情報解析手段２０３）と、モジュール依存関係抽出手段が抽出したモジュールの依存関係（例えば、物理的依存関係）と、設計情報抽出手段が抽出したモジュールの依存関係（例えば、論理的依存関係）とが一致しているか否か判定するモジュール依存関係判定手段（例えば、モジュール依存関係比較手段２０４）とを備えたモジュール依存関係抽出システム。
【００６５】
（４）モジュール依存関係判定手段が、モジュール依存関係抽出手段が抽出したモジュールの依存関係と、設計情報抽出手段が抽出したモジュールの依存関係とが一致しない場合に、双方の依存関係の差異点を抽出するモジュール依存関係抽出システム。
【００６６】
（５）モジュール依存関係抽出手段が抽出したモジュールの依存関係を出力する出力手段（例えば、抽出結果出力手段１０３）を備えたモジュール依存関係抽出システム。
【産業上の利用可能性】
【００６７】
本発明は、Ｗｅｂアプリケーションにおけるモジュール間の依存関係を抽出するモジュール依存関係抽出システムに好適に適用される。
【符号の説明】
【００６８】
１０１，２０１  モジュールロード情報抽出手段
１０２，２０２  モジュール依存関係抽出手段
１０３  抽出結果出力手段
２０３  設計情報解析手段
２０４  モジュール依存関係比較手段
【図１】
2010250763.tif 000003
【図２】
2010250763.tif 000004
【図３】
2010250763.tif 000005
【図４】
2010250763.tif 000006
【図５】
2010250763.tif 000007
【図６】
2010250763.tif 000008
【図７】
2010250763.tif 000009
【図８】
2010250763.tif 000010
【図９】
2010250763.tif 000011
【図１０】
2010250763.tif 000012