(57)【要約】【課題】プログラム中における共通構造を解析することにより、共通部分を明示したプログラム構造図の生成や、プログラム構造における共通部分の再利用化を容易なものとするプログラム構造管理装置を提供する。【解決手段】プログラム構造管理装置１００は、プログラム構造解析手段１０１，プログラム構造図生成手段１０２，テンプレート化ファイルリスト生成手段１０３，テンプレートプログラム生成手段１０４を備える。プログラム構造解析手段１０１は、プログラムファイルを解析し、処理順序に関する情報を抽出して格納する。プログラム構造図生成手段１０２，テンプレート化ファイルリスト生成手段１０３，テンプレートプログラム生成手段１０４は、プログラム構造情報に基づき、複数のプログラムについて処理順序の共通部分を抽出して、プログラム構造図の生成，テンプレート化ファイルリストの生成及びテンプレートプログラムの生成をそれぞれ行う。【選択図】      図１
2007115155.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウエアを構成する複数のプログラムファイルのプログラム構造を解析して管理するプログラム構造管理装置であって、
前記各プログラムファイルにおけるプログラム構造を解析し、当該プログラムファイルに含まれる各処理の順序に関する情報を抽出して、前記ソフトウエアにおけるプログラム構造情報に含めて格納する手段を備えることを特徴とするプログラム構造管理装置。
【請求項２】
前記プログラム構造情報を取得し、前記ソフトウエアを構成する複数のプログラムファイルについて前記プログラム構造情報に含まれる処理順序の共通部分を抽出し、当該共通部分を共通構造として示したプログラム構造図を生成する手段をさらに備えることを特徴とする請求項１に記載のプログラム構造管理装置。
【請求項３】
前記プログラム構造情報を取得し、前記ソフトウエアを構成する複数のプログラムファイルについて前記プログラム構造情報に含まれる処理順序の共通部分を抽出し、当該共通部分を有する複数のプログラムファイルをテンプレート化対象ファイルとして表示する手段を備えることを特徴とする請求項１又は２のいずれかに記載のプログラム構造管理装置。
【請求項４】
前記ソフトウエアを構成する複数のプログラムファイルの内、前記テンプレート化対象ファイルとして表示したプログラムファイルに対する任意の選択に応じて、選択されたプログラムファイルと当該プログラムファイルに対応するプログラム構造情報とに基づき、前記プログラムファイル中の前記共通部分で構成したテンプレートファイルを生成し、生成したテンプレートファイルの組合せによりテンプレートプログラムを生成する手段をさらに備えることを特徴とする請求項３に記載のプログラム管理装置。
【請求項５】
ソフトウエアを構成する複数のプログラムファイルのプログラム構造を解析して管理する処理をコンピュータに実行させるプログラム構造管理プログラムであって、
前記各プログラムファイルにおけるプログラム構造を解析する処理と、
当該プログラムファイルに含まれる各処理の順序に関する情報を抽出して、前記ソフトウエアにおけるプログラム構造情報に含めて格納する処理と
をコンピュータに実行させることを特徴とするプログラム構造管理プログラム。
【請求項６】
前記プログラム構造情報を取得し、前記ソフトウエアを構成する複数のプログラムファイルについて前記プログラム構造情報に含まれる処理順序の共通部分を抽出し、当該共通部分を共通構造として示したプログラム構造図を生成する処理をさらにコンピュータに実行させることを特徴とする請求項５に記載のプログラム構造管理プログラム。
【請求項７】
前記プログラム構造情報を取得し、前記ソフトウエアを構成する複数のプログラムファイルについて前記プログラム構造情報に含まれる処理順序の共通部分を抽出し、当該共通部分を有する複数のプログラムファイルをテンプレート化対象ファイルとして表示する処理をさらにコンピュータに実行させることを特徴とする請求項５又は６のいずれかに記載のプログラム構造管理プログラム。
【請求項８】
前記ソフトウエアを構成する複数のプログラムファイルの内、前記テンプレート化対象ファイルとして表示したプログラムファイルに対する任意の選択に応じて、選択されたプログラムファイルと当該プログラムファイルに対応するプログラム構造情報とに基づき、前記プログラムファイル中の前記共通部分で構成したテンプレートファイルを生成し、生成したテンプレートファイルの組合せによりテンプレートプログラムを生成する処理をさらにコンピュータに実行させることを特徴とする請求項７に記載のプログラム構造管理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム開発時において、実装済みプログラムの構造を解析し、プログラムの構造を可視化するとともに、再利用可能な共通部分を示すことにより、プログラムの品質保証及びプログラム構造の再利用の支援を行うための構成に関する。
【背景技術】
【０００２】
近年のシステム開発において、開発サイクルはますます短くなっている。特に業務系システムや、業務サービスシステムを公開する場合、その開発サイクルを短縮し、利用できるように開発・整備するまでの時間を短縮することは顧客ニーズとして強い要求事項である。また、一度、開発し、完成した業務系システム、業務サービスシステムに対して、保守・機能変更に必要とする期間の短縮も、流行が急速に変化するＢ２Ｃシステムなどでは必要になってきている。
開発期間、保守・機能変更期間を短縮するためには、プログラムの共通化・再利用化が必要だといわれている。プログラムの共通化・再利用化を可能にするプログラム言語として、近年、「Ｊａｖａ」（「Ｊａｖａ」は米国サンマイクロシステムズ社の登録商標である。）や「Ｖｉｓｕａｌ  Ｃ＃」「．ＮＥＴ  Ｖｉｓｕａｌ  Ｂａｓｉｃ」を始めとする「．ＮＥＴ」などのオブジェクト指向言語が頻繁に開発で利用されるようになってきた。
しかし、現時点においてはこれらオブジェクト指向を理解している開発者が少ないため、今でもオブジェクト指向言語を利用して手続き型の手法で開発するプロジェクト、開発者が多い。つまり、プロジェクトの共通化・再利用化ができず、開発期間、保守・機能変更期間を短縮できてないのが現状である。
また、機能変更期間の短縮を行う中で、プログラム機能変更期間を短縮することは重要である。しかし、プログラム構造を理解し、プログラム機能を十分理解したプログラム開発者でなければ、プログラム機能変更期間の短縮は望めない。
また、現在のソフトウェア開発では、プログラム開発者がプログラムを自らの経験と勘で作成することが多く、複数のプログラム開発者からなるプロジェクトでは、１つのアプリケーションでもソフトウェア構造がバラバラになってしまっていることがよく発生する。このようなアプリケーションの機能変更は初期開発でプログラム開発を行った本人でも容易に行えることではなく、当初の初期開発でプログラム開発に参加しなかった、他のプログラム開発者ではプログラム機能変更を行うことは容易ではなく、ましてや期間の短縮は望めない。
それどころか、プログラム機能変更期間が長期になってしまい、開発納期に間に合わない問題がでてしまう。
ここで起きえる問題として、開発に要求される期間が短期間しか与えられず、結果としてプログラム構造を決める時間がないというのも理由となる。
しかし、このプログラム構造を決定せずにプログラム開発を行うとプログラム不良が増えてしまい、品質悪化の原因になる恐れもある。
【０００３】
これらの問題を解決するためには、１つのプログラムでプログラム構造を共通化する部分をできるだけ多くし、複数の部分で同じ機能のプログラムを作成するようにする必要がある。
そのために最近、アプリケーションフレームワークが注目されているが、アプリケーションフレームワークを理解するためにも時間及び工数がかかる。
開発を行うプログラム開発者が一度経験したプログラム構造を再利用すれば、アプリケーションフレームワークの理解する工数を削減することができる。
また、これらのアプリケーションフレームワークは個々の開発でカスタマイズできなければならない。つまり、100個の開発があれば、100通りのアプリケーションフレームワークがあるはずである。
【０００４】
以上のような問題点に関して、開発されたプログラムの構造の理解を容易なものとするための開発支援装置として、従来、オブジェクト指向言語で開発されたプログラムを解析し、解析結果に基づき、クラス図等の設計ドキュメントを生成する手段を備えた構成が公知となっている（例えば、特許文献１参照。）。
【特許文献１】特開２０００−１１２７４２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、前記特許文献１に記載の構成は、プログラム構造自体の理解を目的とした設計ドキュメントを作成するものであるため、プログラム構造の共通化や、共通部分の再利用化に適したものでは無かった。
【０００６】
本発明は前記課題を解決するためのものであり、プログラム中における共通構造を解析することにより、共通部分を明示したプログラム構造図の生成や、プログラム構造における共通部分の再利用化を容易なものとするプログラム構造管理装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
前記課題を解決するため本発明は、ソフトウエアを構成する複数のプログラムファイルのプログラム構造を解析して管理するプログラム構造管理装置であって、前記各プログラムファイルにおけるプログラム構造を解析し、当該プログラムファイルに含まれる各処理の順序に関する情報を抽出して、前記ソフトウエアにおけるプログラム構造情報に含めて格納する手段を備えることを特徴とする。
また、前記プログラム構造情報を取得し、前記ソフトウエアを構成する複数のプログラムファイルについて前記プログラム構造情報に含まれる処理順序の共通部分を抽出し、当該共通部分を共通構造として示したプログラム構造図を生成する手段をさらに備えることを特徴とする。
また、前記プログラム構造情報を取得し、前記ソフトウエアを構成する複数のプログラムファイルについて前記プログラム構造情報に含まれる処理順序の共通部分を抽出し、当該共通部分を有する複数のプログラムファイルをテンプレート化対象ファイルとして表示する手段を備えることを特徴とする。
また、前記ソフトウエアを構成する複数のプログラムファイルの内、前記テンプレート化対象ファイルとして表示したプログラムファイルに対する任意の選択に応じて、選択されたプログラムファイルと当該プログラムファイルに対応するプログラム構造情報とに基づき、前記プログラムファイル中の前記共通部分で構成したテンプレートファイルを生成し、生成したテンプレートファイルの組合せによりテンプレートプログラムを生成する手段をさらに備えることを特徴とする。
また、本発明のプログラム構造管理プログラムは、ソフトウエアを構成する複数のプログラムファイルのプログラム構造を解析して管理する処理をコンピュータに実行させるプログラム構造管理プログラムであって、前記各プログラムファイルにおけるプログラム構造を解析する処理と、当該プログラムファイルに含まれる各処理の順序に関する情報を抽出して、前記ソフトウエアにおけるプログラム構造情報に含めて格納する処理とをコンピュータに実行させることを特徴とする。
また、前記プログラム構造情報を取得し、前記ソフトウエアを構成する複数のプログラムファイルについて前記プログラム構造情報に含まれる処理順序の共通部分を抽出し、当該共通部分を共通構造として示したプログラム構造図を生成する処理をさらにコンピュータに実行させることを特徴とする。
また、前記プログラム構造情報を取得し、前記ソフトウエアを構成する複数のプログラムファイルについて前記プログラム構造情報に含まれる処理順序の共通部分を抽出し、当該共通部分を有する複数のプログラムファイルをテンプレート化対象ファイルとして表示する処理をさらにコンピュータに実行させることを特徴とする。
また、前記ソフトウエアを構成する複数のプログラムファイルの内、前記テンプレート化対象ファイルとして表示したプログラムファイルに対する任意の選択に応じて、選択されたプログラムファイルと当該プログラムファイルに対応するプログラム構造情報とに基づき、前記プログラムファイル中の前記共通部分で構成したテンプレートファイルを生成し、生成したテンプレートファイルの組合せによりテンプレートプログラムを生成する処理をさらにコンピュータに実行させることを特徴とする。
【発明の効果】
【０００８】
以上の構成により、本発明では、プログラム構造を解析し、各プログラムファイルにおける処理の順序に関する情報をプログラム構造情報に含めて格納することとしたので、プログラム構造情報を参照することにより、複数のプログラムファイルにおける共通部分の確認を容易なものとすることができる。
また、前記プログラム構造情報に基づき、処理順序の共通する部分を示したプログラム構造図を生成して表示することにより、ソフトウエア管理者や開発者等に対し、プログラム構造の共通部分を容易に把握させることが可能となる。従って、ソフトウエアにおける最適なプログラム構造を選択させることが可能となる。
また、前記プログラム構造情報に基づき、処理順序の共通する部分を有するプログラムファイルをテンプレート化対象ファイルとして表示することにより、再利用するプログラムファイルの選択を容易なものとすることができる。
また、選択されたテンプレート化対象ファイルに対応する前記プログラム構造情報に基づき、テンプレートファイルを生成することにより、共通部分を有するプログラムファイルの再利用を容易に行うことが可能となる。
【発明を実施するための最良の形態】
【０００９】
以下、本発明の一実施の形態に係るプログラム構造管理装置について、図面に基づき説明する。
図１は、本発明の一実施の形態に係るプログラム構造管理装置の概略構成を示すブロック図である。
本実施の形態に係るプログラム構造管理装置１００は、プログラム構造解析手段１０１，プログラム構造図生成手段１０２，テンプレート化ファイルリスト生成手段１０３，テンプレートプログラム生成手段１０４の各処理手段と、ファイルリポジトリ１０５及びプログラム構造情報格納部１０６の各情報格納手段とを備える。
各処理手段の構成及び各処理手段の行う処理について、以下に説明する。
【００１０】
まず、プログラム構造の解析及びプログラム構造図の生成，表示処理に関連して、プログラム構造解析手段１０１と、プログラム構造図生成手段１０２の構成及び処理について説明する。
図２は、プログラム構造解析手段１０１の概略構成を示すブロック図である。
プログラム構造解析手段１０１は、ファイル種別判定処理部２０１と、プログラム構造解析部２０２とを備える。ファイル種別判定処理部２０１は、処理対象ファイル２００の判定処理及びファイルリポジトリ１０５への格納処理を行う。プログラム構造解析部２０２は、プログラムファイルについてのプログラム構造解析処理及びプログラム構造情報格納部１０６への格納処理を行う。
【００１１】
図３、はプログラム構造解析手段１０１の行う処理を示すフローチャートである。
プログラム構造解析手段１０１は、プログラム開発者又はプロジェクト管理者により開発完了又は開発途中のプログラムファイルや、設計書等の文書ファイルの入力を受付けると（ステップ３０１）、ファイル種別判定処理部２０１が、入力ファイルについてファイル種別の判定処理を行うとともに（ステップ３０２）、入力ファイルをファイルリポジトリ１０５に格納する（ステップ３０３）。この場合のファイル種別の判定処理では、プログラムファイルの拡張子を判定することにより行う。また、プログラムファイルをコンパイルして、コンパイルが通るか否かにより判定することとしてもよい。ファイルリポジトリ１０５では、全ての入力ファイルに対し、それぞれのプロジェクト毎，アプリケーション毎に領域を割り当てて格納する。
ステップ３０３において、ファイル種別がプログラムファイルの場合、プログラム構造解析部２０２が、プログラム構造を解析し、解析結果をプログラム構造情報格納部１０６に格納する。本実施の形態では、複数のプログラムファイルに含まれる各処理の順序（一つのイベントトランザクションに対するメソッドの呼び出しや、プログラムの一行一行に関する繰り返し）に関する処理を抽出してプログラム構造情報に含めて格納する。
【００１２】
図４は、プログラム構造図生成手段１０２の概略構成を示すブロック図である。
プログラム構造図生成手段１０２は、プログラム詳細表示部４０１と、プログラム構造図生成部４０２と、プログラム構造図表示部４０３とを備える。
プログラム情報表示部４０１は、プログラム構造情報格納部１０６に格納されたプログラム構造情報を取得して一覧表示する。
プログラム構造図生成部４０２は、プログラム構造情報格納部１０６に格納されたプログラム構造情報に基づき、プログラム構造図を生成する。
プログラム構造図表示部４０３は、プログラム構造図生成部４０２が生成してプログラム構造図を表示する。
【００１３】
図５は、プログラム構造図生成手段１０２の行う処理を示すフローチャートである。
プログラム構造図生成手段１０２は、プロジェクト管理者等によるプログラム構造図の表示要求を受付けると（ステップ５０１）、プログラム情報表示部４０１がプログラム構造情報格納部１０６に構造情報が格納されているプロジェクト（ソフトウェア）の識別情報を取得して（ステップ５０２）、取得した識別情報に基づき、プロジェクト管理者等の操作端末にプロジェクトの一覧を表示する（ステップ５０３）。
一覧表示したプロジェクトの中から、任意の選択を受付けると（ステップ５０４）、プログラム構造図生成部４０２は、選択されたプロジェクトに対応するプログラム構造情報をプログラム構造情報格納部１０６から取得して（ステップ５０５）、プログラム構造図を生成して（ステップ５０６）、プログラム構造図表示部４０３に渡す。プログラム構造図の生成では、プログラム構造情報を参照し、複数のプログラムファイルに共通する処理順序の共通部分を抽出し、当該共通部分を共通構造として示したプログラム構造図を生成する。
プログラム構造図表示部４０３は、取得したプログラム構造図をプロジェクト管理者等の操作端末に表示する（ステップ５０７）。
以上の処理により、例えば、プログラム開発中のプロジェクト管理者がプロジェクトに参加している多数のプログラム開発者により実装されたプログラムの構造をプログラム構造図で一度に参照することが可能となる。従って、構造上の相違を検出して修正指示を出すことが容易となり、最終的には工数削減及びプログラムの品質向上に繋がることとなる。また、プログラムの再利用、構造の再利用を行うときに、事前にプログラムの構造を参照して、修正を最小限に抑えることが出来る等、カスタマイズに適したプログラム構造を容易に選び出すことが可能になる。
【００１４】
次に、プログラム構造の再利用に関連して、テンプレート化ファイルリスト生成手段１０３とテンプレートプログラム生成手段１０４との行う処理について説明する。
まず、テンプレートプログラムの生成の前提として、テンプレート化ファイルリスト生成手段１０３が行うテンプレート化ファイルリスト生成処理について説明する。
図６は、テンプレート化ファイルリスト生成手段１０３の概略構成を示すブロック図である。
テンプレート化ファイルリスト生成手段１０３は、テンプレート化ファイル判定部６０１と、テンプレート化ファイルリスト出力部６０２とを備える。
テンプレート化ファイル判定部６０１は、プログラム構造情報格納部１０６に格納されたプログラム構造情報に基づき、テンプレート化対象ファイルか否かを判定する。ここで、テンプレート化対象ファイルとは、プログラム構造情報に基づき、複数のプログラムファイルに共通する処理順序の共通部分を有するプログラムファイルを示す。
テンプレート化ファイルリスト出力部６０２は、テンプレート化ファイル判定部６０１の判定結果に応じて、テンプレート化ファイルリストを生成して一覧表示する。
【００１５】
図７は、テンプレート化ファイルリスト生成手段１０３の行う処理を示すフローチャートである。
プログラム構造図生成手段１０２は、プロジェクト管理者等によるプログラム構造図の表示要求を受付けると（ステップ７０１）、プログラム情報表示部４０１がプログラム構造情報格納部１０６に構造情報が格納されているプロジェクト（ソフトウェア）の識別情報を取得して（ステップ７０２）、取得した識別情報に基づき、プロジェクト管理者等の操作端末にプロジェクトの一覧を表示する（ステップ７０３）。
一覧表示したプロジェクトの中から、任意の選択を受付けるとともに、テンプレート化ファイルリストの出力要求を受付けると（ステップ７０４）、テンプレート化ファイル判定部６０１は、選択されたプロジェクトに対応するプログラム構造情報をプログラム構造情報格納部１０６から取得して（ステップ７０５）、選択されたプロジェクトのプログラム構造情報を参照し、テンプレート化対象ファイルを判定する（ステップ７０６）。ここで、テンプレート化対象ファイルとは、複数のプログラムファイル中に処理順序の共通部分（共通構造）が含まれているファイルを示す。
テンプレート化ファイルリスト出力部６０２は、テンプレート化ファイル判定部６０１の判定結果に基づき、テンプレート化対象ファイルのリストをプロジェクト管理者等の操作端末に一覧表示する（ステップ７０７）。
【００１６】
次に、一覧表示したテンプレート化対象ファイルに対して、テンプレートプログラム生成手段１０４が行う処理について説明する。
図８は、テンプレートプログラム生成手段１０４の概略構成を示すブロック図である。
テンプレートプログラム生成手段１０４は、テンプレートプログラム名入力部８０１と、テンプレートプログラム生成部８０２と、テンプレートプログラム出力部８０３とを備える。
テンプレートプログラム名入力部８０１は、一覧表示したテンプレート化すべきファイルの内、テンプレートプログラムを構成するファイルの指定及びファイル名の入力を受付ける。テンプレートプログラム生成部８０２は、指定されたファイルのファイル構造に関する情報をプログラム構造情報格納部１０６から取得して、テンプレート化ファイルを生成する。
テンプレートプログラム出力部８０３は、生成されたテンプレート化ファイルと、ファイルリポジトリに格納されたファイルのコピーとを出力する。
【００１７】
図９は、テンプレートプログラム生成手段１０４の行う処理を示すフローチャートである。
テンプレートプログラム生成手段１０４のテンプレートプログラム名入力部８０１は、一覧表示したテンプレート化対象ファイルの中の任意のファイルの選択及びファイル名の入力を受付け（ステップ９０１）、テンプレートプログラム生成部８０２に渡す。
テンプレートプログラム生成部８０２は、選択されたプログラムファイルに対応するプログラム構造情報をプログラム構造情報格納部１０６から取得し（ステップ９０２）、当該プログラム構造情報に基づきテンプレートファイルを生成して（ステップ９０３）、テンプレートプログラム出力部８０３に渡す。ここでテンプレートファイルとは、複数のプログラムファイルに含まれる処理順序の共通部分（共通構造）で構成したプログラムファイルを示す。
テンプレートプログラム出力部８０３は、テンプレートファイルに対応する実行形式ファイルについて、ファイルリポジトリ１０５からコピーを取得し（ステップ９０４）、テンプレートファイルとともに、テンプレートプログラムとして、プロジェクト管理者等の操作端末に表示する（ステップ９０５）。テンプレートプログラムは、任意に選択された複数のテンプレート化対象ファイルに基づき生成した複数のテンプレートファイルで構成される。
以上の処理により、既存の完成したプログラム構造を図形式で容易に参照させることができ、開発するプログラムに一番近いプログラム構造、又は過去に経験したプログラム構造を再利用して、テンプレートプログラムを作成させることが可能となる。即ち、既存のプロジェクトを構成するテンプレート化対象ファイルの組合せを利用してテンプレートプログラムを構成することにより、プログラム構造を共通化することができ、プログラムの保守性・拡張性・品質を良くするとともに、工数を削減することが可能になる。
【００１８】
以上の各処理について、具体例を用いて説明する。
図１０は、本実施の形態に係るプログラム構造管理装置の処理対象となるＷｅｂアプリケーションとしての従業員情報検索システムの画面遷移図である。本例では、Ｍｉｃｒｏｓｏｆｔ社のＡＳＰ．ＮＥＴ技術を用いたＷｅｂアプリケーションプログラムを示している。
本例に示すＷｅｂアプリケーションとしての従業員情報検索システムは、検索入力画面１０１０と、検索結果画面１０２０と、詳細表示画面１０３０の全３画面から構成されている。
Ｗｅｂアプリケーションプログラム１０００では、検索入力画面１０１０のテキストボックス１０１１内に検索したい従業員の氏名を入力させて検索ボタン１０１２をクリックに応じて、検索結果画面１０２０に遷移する。なお、テキストボックス１０１１内が空欄の状態で検索ボタン１０１２がクリックされた場合には、エラーメッセージを表示する。
検索結果画面１０２０では、従業員氏名ハイパーリンク１０２１のクリックにより、詳細表示画面１０３０に遷移する。
【００１９】
図１１は図１０に示す従業員情報検索システムのプロジェクト構成及びプロジェクトを構成するファイルの概要を示している。ここでいうプロジェクトというのは、「.NETアプリケーション」を開発するときに頻繁に利用される「Visual Studio .NET」という開発環境の中で、１つのアプリケーションを構成しようとするプログラムを１つに束ねる管理ファイルである。
図１１に示すように、本例では、whoisというプロジェクトファイル１１０１があり、それにDbというフォルダ１１０２があり、それ以下にデータベースアクセスを行う５つのC#ファイル１１０３が含まれている。また、同一階層に、Scenarioというフォルダ１１０４があり、それ以下に各フォーム画面の動作シナリオを実装する３つのC#ファイル１１０５が含まれている。
その他、コンパイル時にアプリケーションに埋め込むメタ情報を含んだAssemblyInfo.csファイル１１０６、アプリケーションの開始・終了時，セッションの開始・終了時に行う処理を実装しておくGlobal.asaxファイル１１０７、アプリケーションの構成情報を含んだWeb.configファイル１１０８、検索入力画面のWebフォームファイルSearch.aspx１１０９、検索結果画面のResult.aspx１１１０、詳細表示画面１１１１、アプリケーションを実行するときに画面遷移やセッション制御をつかさどるアプリケーションフレームワークであるコンパイル済み実行形式ファイル１１１２、アプリケーションフレームワークから利用される画面遷移，セッション制御が定義されている定義ファイル１１１３から成る。
【００２０】
図１２は、検索入力画面１０１０上におけるコントロール配置を示した図である。
本例に示す検索入力画面１０１０上に配置されたコントロールとしては、例えば、検索する従業員氏名又は従業員氏名の仮名を入力する従業員名テキストボックス１２０１と、従業員名テキストボックス１２０１の必須入力チェックを行う従業員テキストボックスチェック１２０２と、検索を行うときにクリックする検索ボタン１２０３と、入力した従業員名をリセットするためのリセットボタン１２０４とがある。
【００２１】
図１３は、図１２に示す検索入力画面１０１０を構成しているASPXファイルの一例を示す図である。
ASPXファイル１３００では、検索入力画面１０１０上のコントロール１２０１〜１２０４に対応して、コントロール１３０１〜１３０４が実装されている。
【００２２】
図１４は、検索結果画面１０２０上におけるコントロール配置を示した図である。
本例に示す検索結果画面１０２０上に配置されたコントロールとしては、例えば、検索結果情報を表示する検索結果データグリッド１４０１と、従業員詳細情報を表示させるための従業員名ハイパーリンク１４０２と、検索を再度行うために検索入力画面に遷移するための入力画面へボタン１４０３とがある。
【００２３】
図１５は、図１４に示す検索結果画面１０２０を構成しているASPXファイルの一例を示す図である。
ASPXファイル１５００では、検索結果画面１０２０上のコントロール１４０１〜１４０３に対応して、コントロール１５０１〜１５０３が実装されている。
【００２４】
図１６は、詳細表示画面１０３０上におけるコントロール配置を示した図である。
本例に示す詳細表示画面１０３０上に配置されたコントロールとしては、例えば、従業員番号ラベル１６０１と、氏名ラベル１６０２と、仮名ラベル１６０３と、所属部署ラベル１６０４と、部ラベル１６０５と、課ラベル１６０６と、係ラベル１６０７と、電話番号ラベル１６０８と、Eメールラベル１６０９と、検索入力画面へ遷移するための検索入力画面へボタン１６１０とがある。
【００２５】
図１７は、図１６に示す詳細表示画面１０３０を構成しているASPXファイルの一例を示す図である。
ASPXファイル１７００では、詳細表示画面１０３０上のコントロール１６０１〜１６１０に対応して、コントロール１７０１〜１７１０が実装されている。なお、図１７に示すASPXファイル１７００では、コントロール１７０１〜１７１０の実装部分のみを示し、他の部分は省略している。
【００２６】
図１８〜図２０は、それぞれ、検索入力画面１０１０１、検索結果画面１０２０、詳細表示画面１０３０のWebフォームに動的に文字列、画像などを表示させるためのコードビハインドクラスの一例を示す図である。コードビハインドクラスとは、業務クラスやデータベースアクセスクラスなどを呼び出し、処理を行うことによって、業務結果を作り出して、Webフォームに動的に文字列、画像などを表示させるためのクラスファイルである。
図１８に示すように、検索入力画面１０１０のコードビハインドクラス１８００は、コンポーネントのインポートを定義するコンポーネント定義部１８０１と、名前空間定義部１８０２と、Searchクラス定義部１８０３と、メンバ変数定義部１８０４と、Page_Loadメソッド定義部１８０５と、OnInitメソッド定義部１８０６と、InitializeComponentメソッド定義部１８０７と、イベントハンド１８０８，１８０９とを有する。
コンポーネント定義部１８０１には、１１ステップの名前空間をインポートし、「.NET Framework」で提供されているコンポーネントや、従業員情報検索システムでコードビハインドとは別の名前空間で定義されているコンポーネントをインポートし利用すると定義されている。本ファイルには、「.NET Framework」が提供する標準のコードビハインドクラス（System.Web.UI.Pageクラス）を継承していろいろな処理を隠蔽したEmployeeInfo.Framework.BasePageクラスを継承した１つのコードビハインドクラスが定義されている。
Searchクラス定義部１８０３のメンバ変数定義部１８０４には、３つのメンバ変数が定義されている。この３つの変数は、コードビハインドクラスであるSearchクラスが、動的な文字列や画像を表示させる担当であるWebフォームに定義されているWebサーバコントロールを示す。具体的には、txtSerchKeyがSearch.aspx上に定義されたテキストボックスWebサーバコントロールに、rdValSearchKeyがバリデータWebサーバコントロールに、btnSearchがボタンWebサーバコントロールに相当する。
Page_Loadメソッド定義部１８０５には、本検索入力画面１０１０に要求があったときに、一番初めに処理されるメソッドが定義される。
OnInitメソッド定義部１８０６には、従業員情報検索システムがWebサーバに配置されてから一番最初に本システムに要求があったときに、１回だけ実行されるメソッドで、WebフォームをコンパイルしWebサーバコントロールを形成する役割があるメソッドが定義される。
InitializeComponentメソッド定義部１８０７には、Webフォームに配置されたWebサーバコントロールでイベントが発生したときに、コードビハインドクラス上のあるメソッドに処理を割り当てるための、イベントハンドラを実行するためのメソッドが定義される。
イベントハンドラ１８０８は、検索ボタンにおいてクリックイベントが発生したときにbtnToSearch_Clickメソッドへの処理の割り当てを示す。
イベントハンドラ１８０９は、検索入力画面に配置されている検索ボタン（コードビハインドクラス内のメンバ変数btnSearchにあたる）がクリックされたときのイベントハンドラを示す。
【００２７】
図１９に示す検索結果画面１０２０のコードビハインドクラス１９００，図２０に示す詳細表示画面１０３０のコードビハインドクラス２０００も同様に、コンポーネントのインポートを定義するコンポーネント定義部１９０１，２００１と、名前空間定義部１９０２，２００２と、Searchクラス定義部１９０３，２００３と、メンバ変数定義部１９０４，２００４と、Page_Loadメソッド定義部１９０５，２００５と、OnInitメソッド定義部１９０６，２００６と、InitializeComponentメソッド定義部１９０７，２００７と、イベントハンド１９０８，１９０９，２００８とを有する。
【００２８】
図２１〜２３は、それぞれ、検索入力画面１０１０，検索結果画面１０２０，詳細表示画面１０３０上で発生したイベントに対応して、業務処理を呼ぶ順序を定義したクラス（以下、「シナリオクラス」とする。）の一例を示す図である。
図２１に示すように、検索入力画面１０１０のシナリオクラス２１００は、コンポーネントのインポートを定義するコンポーネント定義部２１０１と、名前空間定義部２１０２と、シナリオクラス定義部２１０３と、Playメソッド定義部２１０４と、業務処理定義部２１０５とを有する。
コンポーネント定義部２１０１には、６ステップの名前空間をインポートし、「.NET Framework」で提供されているコンポーネントや、従業員情報検索システムで本シナリオクラスとは別の名前空間で定義されているコンポーネントをインポートし、利用すると定義されている。本ファイルには、従業員情報検索システム専用に用意したシナリオ親クラスを用意し、それを継承していろいろな処理を隠蔽したEmployeeInfo.Framework.BaseScenarioクラスを継承した１つのシナリオクラスとしてのResultScenarioクラスが定義されている。
シナリオクラス定義部２１０３は、EventIDという文字列型の引数を１つ持ったPlayメソッドを定義したPlayメソッド定義部２１０４と、業務処理を定義した業務処理定義部２１０５を有する。
【００２９】
図２２に示す検索結果画面１０２０のシナリオクラス２２００，図２３に示す詳細表示画面１０３０のシナリオクラス２３００も同様に、コンポーネントのインポートを定義するコンポーネント定義部２２０１，２３０１と、名前空間定義部２２０２，２３０２と、シナリオクラス定義部２２０３，２３０３と、Playメソッド定義部２２０４，２３０４と業務処理定義部２２０５，２３０５とを有する。また、シナリオクラス２２００，２３００は、業務処理結果を戻す定義部２２０６，２３０６を有する。
【００３０】
本実施の形態に係るプログラム構造管理装置１００は、以上のように構成された従業員情報検索システムのプロジェクト（プログラムファイル等）の入力に応じて、プログラム構造解析処理手段１０１により、ファイルリポジトリ１０５にプログラムファイル及びプログラムファイル以外のファイルを格納するとともに、プログラムファイルのコピーを生成して解析し、解析結果をプログラム構造情報格納部１０６に格納する。ファイルリポジトリ１０５には、それぞれのアプリケーションシステム単位の領域を用意する。
図２４は、プログラム構造情報格納部１０６を構成する各テーブルの関係の一例を示す図である。
本実施の形態では、プログラム構造情報格納部１０６を、ソフトウエアテーブル２４０１，プロジェクトテーブル２４０２，参照コンポーネントテーブル２４０３，ファイルテーブル２４０４，インポートテーブル２４０５，クラステーブル２４０６，クラス内メンバ呼び出し順テーブル２４０７，クラス内メンバテーブル２４０８，メソッド内呼び出し順テーブル２４０９，メンバ引数テーブル２４１０とから構成している。本実施の形態では、クラス内メンバ呼び出し順テーブル２４０７，メソッド内呼び出し順テーブル２４０９，メンバ引数テーブル２４１０のそれぞれにおいて、各プログラムファイルに含まれる処理順序を示す情報を格納している。
ソフトウエアテーブル２４０１は、プロジェクトテーブル２４０２と関連付けられている。
プロジェクトテーブル２４０２は、参照コンポーネントテーブル２４０３及びファイルテーブル２４０４と関連付けられている。
ファイルテーブル２４０４は、インポートテーブル２４０５及びクラステーブル２４０６と関連付けられている。
クラステーブル２４０６は、クラス内メンバ呼び出し順テーブル２４０７及びクラス内メンバテーブル２４０８と関連付けられている。
クラス内メンバテーブル２４０８は、メソッド内呼び出し順テーブル２４０９及びメンバ引数テーブル２４１０と関連付けられている。
【００３１】
図２５は、ソフトウエアテーブル２４０１のデータ構造の一例を示す図である。
ソフトウエアテーブル２４０１は、例えば、ソフトウェアＩＤ，ソフトウェア名の各データ項目を有する。
なお、各図に示すテーブルにおいて、属性中の「ＰＫ」は主キーを示し、「ＦＫ」は外部キーを示す。
【００３２】
図２６は、プロジェクトテーブル２４０２のデータ構造の一例を示す図である。
プロジェクトテーブル２４０２は、例えば、ソフトウェアＩＤ，プロジェクトＩＤ，プロジェクト名，プロジェクト種別の各データ項目を有する。ソフトウエアテーブル２４０１に対しては、ソフトウェアＩＤで関連付けられている。
【００３３】
図２７は、参照コンポーネントテーブル２４０３のデータ構造の一例を示す図である。
参照コンポーネントテーブル２４０３は、例えば、ソフトウェアＩＤ，プロジェクトＩＤ，参照コンポーネントＩＤ，参照コンポーネント名の各データ項目を有する。プロジェクトテーブル２４０２に対しては、ソフトウェアＩＤ及びプロジェクトＩＤで関連付けられている。
【００３４】
図２８は、ファイルテーブル２４０４のデータ構造の一例を示す図である。
ファイルテーブル２４０４は、例えば、ソフトウェアＩＤ，ファイルＩＤ，ファイル名，ライブラリＩＤの各データ項目を有する。プロジェクトテーブル２４０２に対しては、ソフトウェアＩＤで関連付けられている。
【００３５】
図２９は、インポートテーブル２４０５のデータ構造の一例を示す図である。
インポートテーブル２４０５は、例えば、ソフトウェアＩＤ，ファイルＩＤ，インポートＩＤ，インポート名，参照コンポーネントＩＤの各データ項目を有する。ファイルテーブル２４０４に対しては、ソフトウェアＩＤ及びファイルＩＤで関連付けられている。
【００３６】
図３０は、クラステーブル２４０６のデータ構造の一例を示す図である。
クラステーブル２４０６は、例えば、ソフトウェアＩＤ，ファイルＩＤ，クラスＩＤ，クラス名，基底クラスＩＤの各データ項目を有する。基底クラスＩＤは、各クラスに対する基底クラスを識別するためのものである。ファイルテーブル２４０４に対しては、ソフトウェアＩＤ及びファイルトＩＤで関連付けられている。
【００３７】
図３１は、クラス内メンバ呼び出し順テーブル２４０７のデータ構造の一例を示す図である。
クラス内メンバ呼び出し順テーブル２４０７は、例えば、ソフトウェアＩＤ，ファイルＩＤ，クラスＩＤ，メソッドＩＤ，呼び出し順番の各データ項目を有する。呼び出し順番は、クラス内のプログラムの呼び出し順（行番号）を示す。クラステーブル２４０６に対しては、ソフトウェアＩＤ，ファイルＩＤ及びクラスＩＤで関連付けられている。
【００３８】
図３２は、クラス内メンバテーブル２４０８のデータ構造の一例を示す図である。
クラス内メンバテーブル２４０８は、例えば、ソフトウェアＩＤ，ファイルＩＤ，クラスＩＤ，クラスメンバＩＤ，クラスメンバ種別の各データ項目を有する。クラステーブル２４０６に対しては、ソフトウェアＩＤ，ファイルＩＤ及びクラスＩＤで関連付けられている。
【００３９】
図３３は、メソッド内呼び出し順テーブル２４０９のデータ構造の一例を示す図である。
メソッド内呼び出し順テーブル２４０９は、例えば、ソフトウェアＩＤ，ファイルＩＤ，クラスＩＤ，クラスメンバＩＤ，処理詳細，メンバ呼び出し順番の各データ項目を有する。ここで、処理詳細はメソッド内のプログラムを示し、メンバ呼び出し順番はメソッド内のプログラムの呼び出し順（行番号）を示す。メソッド内メンバ呼び出し処理順テーブル２４０９は、クラス内メンバテーブル２４０８に対しては、ソフトウェアＩＤ，ファイルＩＤ，クラスＩＤ及びクラスメンバＩＤで関連付けられている。
【００４０】
図３４は、メンバ引数テーブル２４１０のデータ構造の一例を示す図である。
メンバ引数テーブル２４１０は、例えば、ソフトウェアＩＤ，ファイルＩＤ，クラスＩＤ，クラスメンバＩＤ，引数名，引数型，引数呼び出順番の各データ項目を有する。引数呼び出し順番は、各引数の呼び出し順（行番号）を示す。クラス内メンバテーブル２４０８に対しては、ソフトウェアＩＤ，ファイルＩＤ及びクラスＩＤで関連付けられている。
【００４１】
以上の各テーブル２４０１〜２４１０のデータ構造に応じて、入力されたプログラムファイルを解析してプログラム構造情報格納部１０６に格納するとともに、プロジェクト開発者等により任意に選択されたプログラムについて、各テーブル２４０１〜２４１０に格納されたプログラム構造情報に基づき、プログラム構造図を生成して表示する。プログラム構造図の生成では、それぞれのイベントで発生する処理の処理順序をトレースし、トレースの結果、呼び出されるメソッド名や、メソッド内で行われている処理の共通部分を抽出する。抽出した共通部分に基づき生成したプログラム構造図を表示する。
図３５，３６は、プログラム構造図生成手段の生成したプログラム構造図の一例を示す図である。本例では、プログラム構造図としてＵＭＬのクラス図を生成した例を示している。この場合のプログラム構造図の生成では、クラステーブル２４０６の基底クラスＩＤを参照して、各クラスの親子関係をチェックした後、各クラスについてクラス内メンバテーブル２４０８を参照して、クラス内のメンバ変数，メソッドを抽出することにより、各図に示すクラス図を生成する。また、クラス内メンバテーブル２４０８からイベントハンドラメソッドを抽出し、各イベントハンドラメソッドから処理されるクラスステップを、メソッド内呼び出し順テーブル２４０９から一行ずつ呼び出して、呼び出し順序で共通する行を抽出して共通部分とする。
図３５に示すプログラム構造図３５００は、検索入力画面１０１０，検索結果画面１０２０，詳細表示画面１０３０のそれぞれについて、図１８〜２０に示すコードビハインドクラス１８００，１９００，２０００に対応したクラス図を示す。
また、図３６に示すプログラム構造図３６００は、検索入力画面１０１０，検索結果画面１０２０，詳細表示画面１０３０のそれぞれについて、図２１〜２３に示すシナリオクラス２１００，２２００，２３００に対応したクラス図を示す。
なお、各プログラム構造図では、共通部分を色分け表示等で強調表示する。また、共通部分についてのみ表示するプログラム構造図を生成することとしてもよい。
【００４２】
以上のプログラム構造図を参照したプロジェクト管理者又はプログラム開発者等がプログラム構造の再利用を希望する場合には、プログラム構造管理装置１００に対して、テンプレートプログラム生成要求をさせる。
プログラム構造管理装置１００は、テンプレートプログラム生成要求に対し、プログラム構造情報格納部１０６に格納したプログラム構造情報を取得し、各ファイルについてテンプレート化対象ファイル（共通構造を有するファイル）か否かを判定する。例えば、従業員情報検索システムにおいて、テンプレート化対象ファイルとしては、コードビハインドファイルとシナリオクラスファイルのようなファイルが挙げられる。一方、データベースから従業員情報を取得するDbフォルダ以下のC#ファイルは共通した構造になっていないとするとテンプレート化すべきでないファイルということになる。以上の判定後、テンプレート化対象ファイルとそれ以外のファイルとを明示したテンプレート化ファイルリストを表示する。
プログラム管理装置１００は、プログラム構造の再利用を希望するプロジェクト管理者又はプログラム開発者等に、テンプレート化対象ファイルの内、必要とするファイルを選択させるとともに、各ファイルについてのファイル名を入力させて、テンプレートプログラムを生成する。
【００４３】
以下、従業員情報検索システムのプログラム構造を利用した生成したテンプレートプログラムの一部を構成するテンプレートファイルの例を、図３７〜３９を用いて説明する。
図３７は、従業員情報検索システムのプログラム構造を利用した計算システムについて、テンプレート出力したプロジェクト構成の一例を示す図である。
本例では、計算式入力画面と計算結果出力画面という画面で構成した計算システムを示しており、コードビハインドファイルをCalcInput.aspx，CalcOutput.aspxとし、シナリオクラスファイルをCalcInputScenario.cs，CalcOutputScenario.csとしている。この場合には、テンプレート化ファイルにするべき部分に共通的でないメソッド，変数を指定して、ファイル名を入力したファイルに対して共通に実装するようにする。
図３８は計算式入力画面のコードビハインドのテンプレート化ファイルの一例を示す図であり、図３９は計算式入力画面のシナリオクラスのテンプレート化ファイルの一例を示す図である。
各図に示すテンプレート化ファイルは、従業員情報検索システムの検索入力画面についてのコードビハインド及びシナリオクラスのそれぞれのファイルの共通構造部分を利用したものである。
【００４４】
以上のように、本実施の形態に係るプログラム構造管理装置では、既存の完成したプログラム構造を図形式で容易に参照することにより、開発するプログラムに一番近いプログラム構造、又は過去に経験したプログラム構造を再利用して、テンプレートプログラムを作成することができ、プログラム構造を共通化することにより、プログラムの保守性・拡張性・品質を良くし工数を削減することが可能になる。
【００４５】
なお、本発明は、オブジェクト指向言語のみに対応するものではなく、プログラムファイルの解析により、各プログラムファイルにおける処理順序の共通部分を抽出可能なものであれば、他の言語のプログラムファイルについても適用可能である。
また、プログラム構造図としては、クラス図に限らず、例えば、フローダイアグラムで構成してもよい。この場合にも、クラス図の生成の場合と同様の処理により、フローダイアグラムを生成するとともに、共通する処理を強調表示する。
【図面の簡単な説明】
【００４６】
【図１】本発明の一実施の形態に係るプログラム構造管理装置の概略構成を示すブロック図である。
【図２】本発明の一実施の形態に係るプログラム構造管理装置を構成するプログラム構造解析手段の概略構成を示すブロック図である。
【図３】プログラム構造解析手段の行う処理を示すフローチャートである。
【図４】本発明の一実施の形態に係るプログラム構造管理装置を構成するプログラム構造図生成手段の概略構成を示すブロック図である。
【図５】プログラム構造図生成手段の行う処理を示すフローチャートである。
【図６】本発明の一実施の形態に係るプログラム構造管理装置を構成するテンプレート化ファイルリスト生成手段の概略構成を示すブロック図である。
【図７】テンプレート化ファイルリスト生成手段の行う処理を示すフローチャートである。
【図８】本発明の一実施の形態に係るプログラム構造管理装置を構成するテンプレートプログラム生成手段の概略構成を示すブロック図である。
【図９】テンプレートプログラム生成手段の行う処理を示すフローチャートである。
【図１０】本発明の処理対象となるアプリケーションを構成する画面の一例を示す図である。
【図１１】図１０に示すアプリケーションのプロジェクト構成及びプロジェクトを構成するファイルの概要を示す図である。
【図１２】図１０に示す検索入力画面上のコントロール配置を示す図である。
【図１３】図１２に示す検索入力画面を構成するASPXファイルの一例を示す図である。
【図１４】図１０に示す検索結果画面上のコントロール配置を示す図である。
【図１５】図１４に示す検索結果画面を構成するASPXファイルの一例を示す図である。
【図１６】図１０に示す詳細情報画面上のコントロール配置を示す図である。
【図１７】図１６に示す詳細情報画面を構成するASPXファイルの一例を示す図である。
【図１８】図１０に示す検索入力画面のコードビハインドクラスの一例を示す図である。
【図１９】図１０に示す検索結果画面のコードビハインドクラスの一例を示す図である。
【図２０】図１０に示す詳細情報画面のコードビハインドクラスの一例を示す図である。
【図２１】図１０に示す検索入力画面のシナリオドクラスの一例を示す図である。
【図２２】図１０に示す検索結果画面のシナリオクラスの一例を示す図である。
【図２３】図１０に示す詳細情報画面のシナリオクラスの一例を示す図である。
【図２４】プログラム構造情報格納部のテーブル構成の概要を示す図である。
【図２５】プログラム構造情報格納部を構成するソフトウエアテーブルのデータ構造の一例を示す図である。
【図２６】プログラム構造情報格納部を構成するプロジェクトテーブルのデータ構造の一例を示す図である。
【図２７】プログラム構造情報格納部を構成する参照コンポーネントテーブルのデータ構造の一例を示す図である。
【図２８】プログラム構造情報格納部を構成するファイルテーブルのデータ構造の一例を示す図である。
【図２９】プログラム構造情報格納部を構成するインポートテーブルのデータ構造の一例を示す図である。
【図３０】プログラム構造情報格納部を構成するクラステーブルのデータ構造の一例を示す図である。
【図３１】プログラム構造情報格納部を構成するクラス内メンバ呼び出し順テーブルのデータ構造の一例を示す図である。
【図３２】プログラム構造情報格納部を構成するクラス内メンバテーブルのデータ構造の一例を示す図である。
【図３３】プログラム構造情報格納部を構成するメソッド内メンバ呼び出し順テーブルのデータ構造の一例を示す図である。
【図３４】プログラム構造情報格納部を構成するメンバ引数テーブルのデータ構造の一例を示す図である。
【図３５】図１８〜２０に示すコードビハインドクラスの解析結果に基づき生成したプログラム構造図の一例を示す図である。
【図３６】図２１〜２３に示すシナリオクラスの解析結果に基づき生成したプログラム構造図の一例を示す図である。
【図３７】従業員情報検索システムのプログラム構造を利用した計算システムについて、テンプレート出力したプロジェクト構成の一例を示す図である。
【図３８】計算式入力画面のコードビハインドのテンプレート化ファイルの一例を示す図である。
【図３９】計算式入力画面のシナリオクラスのテンプレート化ファイルの一例を示す図である。
【符号の説明】
【００４７】
１００  プログラム構造管理装置、１０１  プログラム構造解析手段、１０２  プログラム構造図生成手段、１０３  テンプレート化ファイルリスト生成手段、１０４  テンプレートプログラム生成手段、１０５  ファイルリポジトリ、１０６  プログラム構造情報格納部、２０１  ファイル種別判定処理部、２０２  プログラム構造解析部、４０１  プログラム詳細表示部、４０２  プログラム構造図生成部、４０３  プログラム構造図表示部、６０１  テンプレート化ファイル判定部、６０２  テンプレート化ファイルリスト出力部、８０１  テンプレートプログラム名入力部、８０２  テンプレートプログラム生成部、８０３  テンプレートプログラム出力部、
【図１】
2007115155.tif 000003
【図２】
2007115155.tif 000004
【図３】
2007115155.tif 000005
【図４】
2007115155.tif 000006
【図５】
2007115155.tif 000007
【図６】
2007115155.tif 000008
【図７】
2007115155.tif 000009
【図８】
2007115155.tif 000010
【図９】
2007115155.tif 000011
【図１０】
2007115155.tif 000012
【図１１】
2007115155.tif 000013
【図１２】
2007115155.tif 000014
【図１３】
2007115155.tif 000015
【図１４】
2007115155.tif 000016
【図１５】
2007115155.tif 000017
【図１６】
2007115155.tif 000018
【図１７】
2007115155.tif 000019
【図１８】
2007115155.tif 000020
【図１９】
2007115155.tif 000021
【図２０】
2007115155.tif 000022
【図２１】
2007115155.tif 000023
【図２２】
2007115155.tif 000024
【図２３】
2007115155.tif 000025
【図２４】
2007115155.tif 000026
【図２５】
2007115155.tif 000027
【図２６】
2007115155.tif 000028
【図２７】
2007115155.tif 000029
【図２８】
2007115155.tif 000030
【図２９】
2007115155.tif 000031
【図３０】
2007115155.tif 000032
【図３１】
2007115155.tif 000033
【図３２】
2007115155.tif 000034
【図３３】
2007115155.tif 000035
【図３４】
2007115155.tif 000036
【図３５】
2007115155.tif 000037
【図３６】
2007115155.tif 000038
【図３７】
2007115155.tif 000039
【図３８】
2007115155.tif 000040
【図３９】
2007115155.tif 000041