(57)【要約】【課題】オブジェクト指向言語で設計されたシステムの全体のシーケンスを簡易に把握できるように解析する。【解決手段】シーケンス図及びクラス図の情報を記録したデータベースよりシーケンス図情報を取得し（Ｓ１０）、矢印の接続元と接続先のクラスのデータを取得する（Ｓ１１，Ｓ１２）。次に、シーケンス図に含まれる各矢印の接続元のクラス及びインスタンス・接続元のクラスが含まれるシーケンスの識別子・メソッド名と、各矢印の接続先のクラス及びインスタンス・接続先のクラスが含まれるシーケンスの識別子・メソッド名とを取得する（Ｓ１４，Ｓ１５）。そして、クラス名に対応する列と呼び出し関係に対する行とで構成された行列形式のシーケンス一覧表の情報を生成して表示する（Ｓ１６）。【選択図】図８
2008090857.tif 000002
【特許請求の範囲】
【請求項１】
オブジェクト指向で記述されたプログラムに対し、該プログラムの各機能毎にクラスから派生したインスタンスに含まれている呼び出し関係を矢印情報として記憶するシーケンス図、及び、各クラスに対応するメソッドの対応関係を示すクラス図の情報を記憶したデータベースにアクセス可能なコンピュータを、
前記データベースより、シーケンス図情報を取得するシーケンス取得手段、
前記データベースに記憶されたシーケンス図情報を参照し、前記シーケンス取得手段が取得したシーケンス図から矢印の接続元と接続先のクラスのデータを取得するクラス情報取得手段、
前記データベースを参照し、前記シーケンス取得手段が取得したシーケンス図に含まれる各矢印の接続元のクラス及びインスタンス、接続元のクラスが含まれるシーケンスの識別子、及びメソッド名を取得するとともに、該矢印の接続先のクラス及びインスタンス、接続先のクラスが含まれるシーケンスの識別子、及びメソッド名を取得する変換手段、
前記データベースを参照し、前記変換手段が取得した各矢印の接続元のクラスのインスタンスと接続先のクラスのインスタンスとが接続関係であることを示す情報を元にクラス名に対応する列と呼び出し関係に対応する行とで構成された行列形式のシーケンス一覧表の情報を生成するシーケンス一覧表情報生成手段、
前記シーケンス一覧表情報生成手段が生成したシーケンス一覧表情報を表示するシーケンス一覧表情報表示手段、
として機能させることを特徴とするシーケンス解析プログラムを記録した記録媒体。
【請求項２】
オブジェクト指向で記述されたプログラムに対し、該プログラムの各機能毎にクラスから派生したインスタンスに含まれている呼び出し関係を矢印情報として記憶するシーケンス図、及び、各クラスに対応するメソッドの対応関係を示すクラス図の情報を記憶したデータベースと、
前記データベースより、シーケンス図情報を取得するシーケンス取得手段と、
前記データベースに記憶されたシーケンス図情報を参照し、前記シーケンス取得手段が取得したシーケンス図から矢印の接続元と接続先のクラスのデータを取得するクラス情報取得手段と、
前記データベースを参照し、前記シーケンス取得手段が取得したシーケンス図に含まれる各矢印の接続元のクラス及びインスタンス、接続元のクラスが含まれるシーケンスの識別子、及びメソッド名を取得するとともに、該矢印の接続先のクラス及びインスタンス、接続先のクラスが含まれるシーケンスの識別子、及びメソッド名を取得する変換手段と、
前記データベースを参照し、前記変換手段が取得した各矢印の接続元のクラスのインスタンスと接続先のクラスのインスタンスとが接続関係であることを示す情報を元にクラス名に対応する列と呼び出し関係に対応する行とで構成された行列形式のシーケンス一覧表の情報を生成するシーケンス一覧表情報生成手段と、
前記シーケンス一覧表情報生成手段が生成したシーケンス一覧表情報を表示するシーケンス一覧表情報表示手段と、
を有することを特徴とするシーケンス解析装置。
【請求項３】
オブジェクト指向で記述されたプログラムに対し、該プログラムの各機能毎にクラスから派生したインスタンスに含まれている呼び出し関係を矢印情報として記憶するシーケンス図、及び、各クラスに対応するメソッドの対応関係を示すクラス図の情報を記憶したデータベースにアクセス可能なコンピュータが、
前記データベースより、シーケンス図情報を取得するシーケンス取得ステップと、
前記データベースに記憶されたシーケンス図情報を参照し、前記シーケンス取得ステップにて取得したシーケンス図から矢印の接続元と接続先のクラスのデータを取得するクラス情報取得ステップと、
前記データベースを参照し、前記シーケンス取得ステップにて取得したシーケンス図に含まれる各矢印の接続元のクラス及びインスタンス、接続元のクラスが含まれるシーケンスの識別子、及びメソッド名を取得するとともに、該矢印の接続先のクラス及びインスタンス、接続先のクラスが含まれるシーケンスの識別子、及びメソッド名を取得する変換ステップと、
前記データベースを参照し、前記変換ステップにて取得した各矢印の接続元のクラスのインスタンスと接続先のクラスのインスタンスとが接続関係であることを示す情報を元にクラス名に対応する列と呼び出し関係に対応する行とで構成された行列形式のシーケンス一覧表の情報を生成するシーケンス一覧表情報生成ステップと、
前記シーケンス一覧表情報生成ステップにて生成したシーケンス一覧表情報を表示するシーケンス一覧表情報表示ステップと、
を実行することを特徴とするシーケンス解析方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はシーケンス解析プログラムを記録した記録媒体、シーケンス解析装置およびシーケンス解析方法に関し、特に、オブジェクト指向言語で記述されたプログラムのシーケンスを解析するシーケンス解析プログラムを記録した記録媒体、シーケンス解析装置およびシーケンス解析方法に関する。
【背景技術】
【０００２】
オブジェクト指向言語によりシステム開発を行う場合には、ＯＭＧ（Object Management Group）によって標準化されたＵＭＬ（Unified Modeling Language）の中のシーケンス図が実装のためのドキュメントとして重視されている。
【０００３】
このシーケンス図は、所定の機能に関するクラス群のメソッド（手続き型言語の関数に対応するもの）の呼び出し関係を示すものであり、機能単位に作成されることが通例である。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、システム全体に対するシーケンス図は、数百枚または数千枚のオーダーになることが多いため、例えば、メソッドのシーケンス図間での一貫性についてチェックすることが困難であるという問題があった。
【０００５】
そこで、これらのシーケンス図を１枚の図面に集約し、チェックの簡易化を図ることも考えられるが、オブジェクト指向言語ではクラスがアトミック（Atomic）な操作単位であるため、単に集約して１枚の図面にし、クラスのメンバに対する編集を許可すると、クラス単位での編集がかえって困難になるという問題点もあった。
【０００６】
本発明はこのような点に鑑みてなされたものであり、オブジェクト指向言語を用いたシステム全体の一覧性を高めることが可能なシーケンス解析プログラムを記録した記録媒体、シーケンス解析装置およびシーケンス解析方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明では上記課題を解決するために、オブジェクト指向で記述されたプログラムに対し、プログラムの各機能毎にクラスから派生したインスタンスに含まれている呼び出し関係を矢印情報として記憶するシーケンス図、及び、各クラスに対応するメソッドの対応関係を示すクラス図の情報を記憶したデータベースにアクセス可能なコンピュータを、データベースより、シーケンス図情報を取得するシーケンス取得手段、データベースに記憶されたシーケンス図情報を参照し、シーケンス取得手段が取得したシーケンス図から矢印の接続元と接続先のクラスのデータを取得するクラス情報取得手段、データベースを参照し、シーケンス取得手段が取得したシーケンス図に含まれる各矢印の接続元のクラス及びインスタンス、接続元のクラスが含まれるシーケンスの識別子、及びメソッド名を取得するとともに、矢印の接続先のクラス及びインスタンス、接続先のクラスが含まれるシーケンスの識別子、及びメソッド名を取得する変換手段、データベースを参照し、変換手段が取得した各矢印の接続元のクラスのインスタンスと接続先のクラスのインスタンスとが接続関係であることを示す情報を元にクラス名に対応する列と呼び出し関係に対応する行とで構成された行列形式のシーケンス一覧表の情報を生成するシーケンス一覧表情報生成手段、シーケンス一覧表情報生成手段が生成したシーケンス一覧表情報を表示するシーケンス一覧表情報表示手段として機能させることを特徴とするシーケンス解析プログラムを記録した記録媒体が提供される。
【０００８】
ここで、シーケンス取得手段が、シーケンス図及びクラス図の情報を記録したデータベースより、シーケンス図情報を取得する。クラス情報取得手段が、シーケンス取得手段が取得したシーケンス図から矢印の接続元と接続先のクラスのデータを取得する。変換手段が、シーケンス取得手段が取得したシーケンス図に含まれる各矢印の接続元のクラス及びインスタンス、接続元のクラスが含まれるシーケンスの識別子、及びメソッド名を取得するとともに、矢印の接続先のクラス及びインスタンス、接続先のクラスが含まれるシーケンスの識別子、及びメソッド名を取得する。シーケンス一覧表情報生成手段が、変換手段が取得した各矢印の接続元のクラスのインスタンスと接続先のクラスのインスタンスとが接続関係であることを示す情報を元にクラス名に対応する列と呼び出し関係に対応する行とで構成された行列形式のシーケンス一覧表の情報を生成する。シーケンス一覧表情報表示手段が、シーケンス一覧表情報生成手段が生成したシーケンス一覧表情報を表示する。
【発明の効果】
【０００９】
本発明では、オブジェクト指向で記述されたプログラムに対し、プログラムの各機能毎にクラスから派生したインスタンスに含まれている呼び出し関係を矢印情報として記憶するシーケンス図、及び、各クラスに対応するメソッドの対応関係を示すクラス図の情報を記憶したデータベースにアクセス可能なコンピュータを、データベースより、シーケンス図情報を取得するシーケンス取得手段、データベースに記憶されたシーケンス図情報を参照し、シーケンス取得手段が取得したシーケンス図から矢印の接続元と接続先のクラスのデータを取得するクラス情報取得手段、データベースを参照し、シーケンス取得手段が取得したシーケンス図に含まれる各矢印の接続元のクラス及びインスタンス、接続元のクラスが含まれるシーケンスの識別子、及びメソッド名を取得するとともに、矢印の接続先のクラス及びインスタンス、接続先のクラスが含まれるシーケンスの識別子、及びメソッド名を取得する変換手段、データベースを参照し、変換手段が取得した各矢印の接続元のクラスのインスタンスと接続先のクラスのインスタンスとが接続関係であることを示す情報を元にクラス名に対応する列と呼び出し関係に対応する行とで構成された行列形式のシーケンス一覧表の情報を生成するシーケンス一覧表情報生成手段、シーケンス一覧表情報生成手段が生成したシーケンス一覧表情報を表示するシーケンス一覧表情報表示手段として機能させるようにしたので、オブジェクト指向言語で記述されたシステムが有するシーケンスの一覧性を向上させることが可能になる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の実施の形態を図面を参照して説明する。
図１は、本発明の動作原理を説明する原理図である。この図において、本発明に係るシーケンス解析方法を実現するシーケンス解析装置２は、複数のシーケンス図１ａ〜１ｄを読み込んで解析し、シーケンス一覧表３を出力する。
【００１１】
シーケンス解析装置２は、クラス名取得手段２ａ、インスタンス名取得手段２ｂ、メソッド名取得手段２ｃ、呼び出し関係取得手段２ｄ、シーケンス一覧表表示手段２ｅによって構成されている。
【００１２】
ここで、クラス名取得手段２ａは、プログラムを構成するクラスのクラス名を取得する。
インスタンス名取得手段２ｂは、各クラスから派生するインスタンスのインスタンス名を取得する。
【００１３】
メソッド名取得手段２ｃは、各インスタンスに含まれているメソッドのメソッド名を取得する。
呼び出し関係取得手段２ｄは、各メソッドの呼び出し関係を取得する。
【００１４】
シーケンス一覧表表示手段２ｅは、クラス名取得手段２ａ、インスタンス名取得手段２ｂ、メソッド名取得手段２ｃによって取得された情報を表形式で一覧表示し、呼び出し関係取得手段２ｄによって取得した情報に基づいて、各メソッドの呼び出し関係を表示したシーケンス一覧表を表示する。
【００１５】
次に、以上の原理図の動作について説明する。
処理対象のシーケンス図として、クラスＡ、クラスＢ、および、クラスＣから構成され、クラスＡがクラスＢのメソッドＡを呼び出し、クラスＢがクラスＣのメソッドＢおよびメソッドＣを呼び出す構造を有するシーケンス図１ａおよびその他のシーケンス図１ｂ〜１ｄが選択されたとする。
【００１６】
クラス名取得手段２ａは、これらのシーケンス図１ａ〜１ｄに含まれているクラス名（例えば、クラスＡ〜クラスＣ）を取得する。
インスタンス名取得手段２ｂは、シーケンス図１ａ〜１ｄに含まれているインスタンス名（例えば、インスタンスＡ〜インスタンスＢ（図示せず））を取得する。
【００１７】
メソッド名取得手段２ｃは、シーケンス図１ａ〜１ｄに含まれているメソッド名（例えば、メソッドＡ〜メソッドＣ）を取得する。
呼び出し関係取得手段２ｄは、シーケンス図１ａ〜１ｄに含まれているメソッドの呼び出し関係（「クラスＡがクラスＢのメソッドＡを呼び出す」等）を取得する。
【００１８】
シーケンス一覧表表示手段２ｅは、クラス名取得手段２ａ、インスタンス名取得手段２ｂ、および、メソッド名取得手段２ｃによって取得されたクラス名、インスタンス名、および、メソッド名と、呼び出し関係取得手段２ｄによって取得された呼び出し関係に基づいてシーケンス一覧表３を生成し、表示出力する。
【００１９】
ここで、シーケンス一覧表３は、シーケンス図１ａ〜１ｄに含まれている全てのクラスが列挙されており、各クラスのインスタンスとメソッドとが属性として示されている。また、メソッド同士の呼び出し関係は矢線によって示されている。
【００２０】
例えば、クラスＢは、メソッドＡ（ｍＡ）を有しており、このメソッドＡはクラスＡから呼び出されている。また、クラスＣはメソッドＢ（ｍＢ）とメソッドＣ（ｍＣ）とを有しており、これらのメソッドは、クラスＢのインスタンスＡ（ｉＡ）から呼び出されている。なお、この図では、シーケンス図１ａに対応する部分のみを示しているが、実際にはシーケンス図１ｂ〜１ｄに対応するクラスに関する内容も表示されている。
【００２１】
ところで、以上のようにして表示されたシーケンス一覧表３の表示内容は、クラスを単位としての編集（例えば、クラスの移動、複写、削除）のみが許可されるので、例えば、クラスＢを異なる位置に移動させることは可能であるが、クラスＢのメソッドＡのみを移動させることは禁止される。従って、目的に応じて、表示の態様を変化させることが可能になるとともに、クラスを単位とする変更のみを許可することにより、操作の煩雑性（インスタンスとメソッドを個別に移動させる等）を解消することが可能になる。
【００２２】
以上に説明したように、本発明によれば、複数のシーケンス図から１枚のシーケンス一覧表を生成するようにしたので、システム全体の一覧性を向上させることが可能になる。
また、表示内容の変更については、クラス単位での変更のみを許可するようにしたので、既述したように操作の煩雑性を解消させることが可能となる。
【００２３】
次に、本発明の実施の形態の構成例について説明する。
図２は、本発明に係るシーケンス解析方法を実現するシーケンス解析装置の構成例を示すブロック図である。
【００２４】
この図に示すように、シーケンス解析装置１０は、ＣＰＵ（Central Processing Unit）１０ａ、ＲＯＭ（Read Only Memory）１０ｂ、ＲＡＭ（Random Access Memory）１０ｃ、ＨＤＤ（Hard Disk Drive）１０ｄ、ＧＢ（Graphics Board）１０ｅ、Ｉ／Ｆ（Interface）１０ｆ、および、バス１０ｇによって構成されており、その外部には表示装置１１と入力装置１２とが接続されている。
【００２５】
ここで、ＣＰＵ１０ａは、ＨＤＤ１０ｄに格納されているプログラムに従って装置の各部を制御するとともに、種々の演算処理を実行する。
ＲＯＭ１０ｂは、ＣＰＵ１０ａが実行する基本的なプログラムやデータを格納している。
【００２６】
ＲＡＭ１０ｃは、ＣＰＵ１０ａが実行の対象とするプログラムや、演算途中のデータを一時的に格納する。
ＨＤＤ１０ｄは、ＣＰＵ１０ａが実行する各種プログラムや、解析対象となるシーケンス図や、解析結果であるシーケンス一覧表のデータを格納する。
【００２７】
ＧＢ１０ｅは、ＣＰＵ１０ａから供給された描画命令に従って描画された画像データを映像信号に変換して出力する。
Ｉ／Ｆ１０ｆは、入力装置１２から供給されたデータの表現形式を、シーケンス解析装置１０の内部形式に適合するように変換する。
【００２８】
表示装置１１は、例えば、ＣＲＴ（Cathode Ray Tube）モニタによって構成されており、ＧＢ１０ｅから出力された映像信号を表示する。
入力装置１２は、例えば、マウスやキーボード等の入力デバイスによって構成されている。
【００２９】
図３は、図２に示すシーケンス解析装置１０のＨＤＤ１０ｄに格納されているアプリケーションプログラムが起動された場合に、実現される機能ブロックについて説明する図である。
【００３０】
この図において、データベース２０は、ＨＤＤ１０ｄによって構成され、処理の対象となるシーケンス図やクラス図（詳細は後述する）が格納されている。
変換部２１は、ＣＰＵ１０ａその他によって実現され、データベース２０に格納されているシーケンス図から必要な項目を取得し、シーケンス一覧表に変換する処理を実行する。
【００３１】
データベース２２は、ＨＤＤ１０ｄによって構成され、変換部２１によって生成されたシーケンス一覧表を格納する。
表示処理部２３は、ＣＰＵ１０ａその他の機能によって実現され、データベース２２に格納されているシーケンス一覧表に対して所定の処理を施した後、表示部２６に供給する。
【００３２】
逆変換部２４は、データベース２２に格納されているシーケンス一覧表の指定された部分を、シーケンス図に逆変換し、表示処理部２３に供給する。
チェック部２５は、データベース２２に格納されているシーケンス一覧表の内容に瑕疵がないか否かをチェックし、チェック結果を表示処理部２３に供給する。
【００３３】
表示部２６は、ＧＢ１０ｅおよび表示装置１１によって構成されており、表示処理部２３から出力された情報を表示出力する。
入力部２７は、Ｉ／Ｆ１０ｆおよび入力装置１２によって構成されており、ユーザの操作に応じた情報を表示処理部２３に供給する。
【００３４】
次に、以上の実施の形態の動作について説明する。
いま、図４に示すシーケンス図４０〜４３と、図５に示すクラス図５０〜５３がデータベース２０に格納されているとする。ここで、シーケンス図は、クラスから派生したインスタンスに含まれているメソッドの呼び出し関係を示した図であり、機能毎に生成される図である。図４に示すシーケンス図４０の例では、コントローラクラス４０ａ、商品クラスの鉛筆インスタンス４０ｂ、および、在庫クラスのＡ倉庫インスタンス４０ｃが表示されている。矢線によって示すように、コントローラクラス４０ａは、鉛筆インスタンス４０ｂの受注メソッドを呼び出している。また、鉛筆インスタンス４０ｂは、Ａ倉庫インスタンス４０ｃのｇｅｔ数量メソッドと、ｇｅｔ在庫メソッドとを呼び出している。また、鉛筆インスタンス４０ｂは、鉛筆インスタンス４０ｂ自身が有するｃａｌｃ数量メソッドを呼び出している。なお、各メソッドの左側に表示されている数値は、メソッドの呼び出し関係の階層を示すものであるが、その詳細については後述する。
【００３５】
図５は、クラスと、クラスに含まれているメソッドとの関係を示すクラス図である。この例は、クラス図５０〜５３を含んでおり、処理の対象となるクラス図５０の内容が例示されている。この例では、コントローラクラス５０ａ、商品クラス５０ｂ、および、在庫クラス５０ｃが表示されており、商品クラス５０ｂは、受注メソッドとｃａｌｃ数量メソッドとを有している。また、在庫クラス５０ｃは、ｇｅｔ数量メソッドと、ｇｅｔ在庫メソッドとを有している。本例では、クラス図を複数に分けた例を説明しているが、一枚にまとめて表示させてもよい。
【００３６】
このような対象データに対して解析処理を施すために、入力装置１２を操作して解析用のアプリケーションプログラムを起動すると、ＣＰＵ１０ａはＨＤＤ１０ｄから該当するプログラムを読み込んで実行する。その結果、表示装置１１には、図６に示すような解析用プログラムの画面６０が表示される。
【００３７】
この表示例では、タイトル「シーケンス解析」の下に、ボタン６１〜６６が表示され、また、その下には解析対象のデータや解析結果のデータが配置される表示領域６７が表示されている。
【００３８】
図７は、図６に示すボタン６１〜６６が操作された場合に表示されるプルダウンメニューの一例を示す図である。なお、ボタン６６については、プルダウンメニューは表示されずにコマンドが直接実行されるので、図７には表示していない。
【００３９】
図７に示すように、ボタン６１が操作されると、解析対象となるファイルを読み込む際に選択される読み込み６１ａと、表示領域６７に表示されている内容をプリントアウトする際に選択される印刷６１ｂとがメニュー項目として表示される。
【００４０】
ボタン６２が操作されると、表示領域６７に表示されたシーケンス一覧表の所定のクラスを移動する際に選択される移動６２ａ、指定されたクラスを削除する際に選択される削除６２ｂ、指定されたクラスを表示又は非表示とする際に選択される表示／非表示６２ｃとがメニュー項目として表示される。
【００４１】
ボタン６３が操作されると、読み込まれたシーケンス図をシーケンス一覧表に変換する際に選択される変換６３ａおよびシーケンス一覧表の一部をシーケンス図に逆変換する際に選択される逆変換６３ｂがメニュー項目として表示される。
【００４２】
ボタン６４が操作されると、表示領域６７に表示されているシーケンス一覧表にメソッドの呼び出し関係を示す矢線を追加表示する際に選択される矢線６４ａ、類似または同一のメソッドを集約して表示する際に選択されるメソッド集約６４ｂ、および、クラスの表示項目を省略または追加する際に選択される詳細／省略６４ｃがメニュー項目として表示される。
【００４３】
ボタン６５が操作されると、シーケンス一覧表とクラス図の相互の内容のチェックを行う際に選択される相互チェック６５ａ、シーケンス一覧表の各メソッドに付与されたシーケンス番号の適否をチェックする際に選択されるシーケンス番号６５ｂ、入り口のメソッドをチェックする際に選択される入り口６５ｃ、および、メソッドのパラメタをチェックする際に選択されるパラメタ６５ｄがメニュー項目として表示される。
【００４４】
次に、図６に示す画面６０において、ボタン６１が操作され、メニューの項目である読み込み６１ａが選択された後、図４に示すシーケンス図４０〜４３が解析対象として選択されたとすると、変換部２１はデータベース２０からシーケンス図４０〜４３を読み込む。その結果、画面６０の表示領域６７には、図６に示すようにシーケンス図４０〜４３が表示される。
【００４５】
次に、ボタン６３が操作され、変換６３ａが選択されると、変換部２１はシーケンス図をシーケンス一覧表に変換する処理を実行する。なお、この処理の一例を図８を参照して説明する。図８に示すフローチャートが開始されると、以下のステップが実行される。
【００４６】
ステップＳ１０：
変換部２１は、読み込み６１ａが選択されて指定されたシーケンス図をデータベース２０から読み込む。
【００４７】
ステップＳ１１：
変換部２１は、ボタン６３が操作されて変換６３ａが選択された場合にはステップＳ１２に進み、それ以外の場合には同様の処理を繰り返す。
【００４８】
ステップＳ１２：
変換部２１は、シーケンス図から１本の矢線データを取得する。即ち、矢線の接続元と接続先のクラスのデータをデータベース２０から取得する。
【００４９】
ステップＳ１３：
変換部２１は、矢線データの取得に成功した場合、即ち、未処理の矢線データが存在した場合にはステップＳ１４に進み、それ以外の場合には処理対象となる矢線を全て処理し終えたとして処理を終了する。
【００５０】
ステップＳ１４：
変換部２１は、矢線の接続元の情報を解析する。即ち、変換部２１は、矢線の接続元の情報を解析し、接続元クラス、接続元インスタンス、シーケンス図ＩＤ、インスタンス名、生成インスタンス、シーケンスＮｏ．、メソッド名、パラメタ、返り値、接続先クラス、接続先インスタンスを取得する。
【００５１】
ここで、接続元クラスおよび接続元インスタンスは、矢線の接続元のクラスとインスタンスとを示す。シーケンス図ＩＤは、矢線の接続元と接続先のクラスが含まれているシーケンス図のＩＤ（Identification）を示す。インスタンス名は、接続元インスタンスの名前を示し、生成インスタンスは変換部２１が自動的に割り当てた識別コードである。シーケンスＮｏ．は、クラスの階層構造を反映して各メソッドに付与されたシリアル番号である。メソッド名はメソッドの名前を示し、パラメタおよび返り値は、メソッドのパラメタ（引数）と返り値を示す。接続先クラスおよび接続先インスタンスは、接続先のクラスとそのインスタンスとを示す。
【００５２】
ステップＳ１５：
変換部２１は、矢線の接続先の情報を解析する。即ち、変換部２１は、矢線の接続先の情報を解析し、接続元クラス、接続元インスタンス、シーケンス図ＩＤ、インスタンス名、生成インスタンス、シーケンスＮｏ．、メソッド名、パラメタ、返り値、接続先クラス、接続先インスタンスを取得する。なお、各情報は、前述した場合と同様である。
【００５３】
ステップＳ１６：
シーケンス一覧表に対して、取得した矢線の接続元および接続先の情報を書き込む。そして、ステップＳ１２に戻って同様の処理を繰り返す。
【００５４】
以上に示す処理の結果として生成されたシーケンス一覧表は、図９に示すように、画面６０の表示領域６７に表示される。この表示例では、シーケンス一覧表のうち、コントローラクラス５０ａに関する部分のみが表示されている。なお、スライダ７０またはボタン６８，６９を操作すると、商品クラス５０ｂおよび在庫クラス５０ｃを表示領域６７に表示させることができる。
【００５５】
なお、紙面の関係から、全てのクラスに関するシーケンス一覧表を同時に表示することができないので、シーケンス一覧表の各クラスに関する部分の詳細について個別に説明する。
【００５６】
図１０は、コントローラクラス５０ａに関するシーケンス一覧表の一例である。この例では、列の項目として、接続元クラス、接続元インスタンス、シーケンス図ＩＤ、インスタンス名、生成インスタンス、シーケンスＮｏ．、メソッド名、パラメタ、返り値、接続先クラス、および、接続先インスタンスが表示されている。また、各行には、図４に示すシーケンス図の各矢線に該当するデータが１つずつ格納される。例えば、図１０の例では、図４に示すシーケンス図の受注メソッドに該当するデータが格納されている。具体的には、受注メソッドのシーケンス図ＩＤは、「Ｐａｔｔｅｎ」であり、生成インスタンスは「Ｐａｔｔｅｎ０１」であり、シーケンス番号は「１」であり、メソッド名は「受注」であり、接続先クラスは「商品」であることが示されている。
【００５７】
図１１は、商品クラス５０ｂに関するシーケンス一覧表の一例である。この例において、第１行目の項目は、図１０の第１行目に示す受注メソッドに対応する情報であり、接続元クラスとして「コントローラ」が、また、シーケンス図ＩＤ、インスタンス名、生成インスタンス、シーケンスＮｏ．、および、メソッド名として、「Ｐａｔｔｅｎ」、「鉛筆」、「Ｐａｔｔｅｎ０２」、「１」、および、「受注」がそれぞれ格納されている。
【００５８】
従って、図１０および図１１の第１行目の項目を参照することにより、元のシーケンス図の矢線の接続元と接続先に関する情報を取得することができる。
図１２は、在庫クラス５０ｃに関するシーケンス一覧表の一例である。この例では、図１１に示すメソッドｇｅｔ数量とｇｅｔ在庫の接続先に関する情報が格納されている。具体的には、メソッドｇｅｔ在庫に対応する情報として、接続元クラス、接続元インスタンス、シーケンス図ＩＤ、インスタンス名、生成インスタンス、シーケンスＮｏ．、および、メソッド名のそれぞれについて、「商品」、「鉛筆」、「Ｐａｔｔｅｎ」、「Ａ倉庫」、「Ｐａｔｔｅｎ０３」、「１．１」、および、「ｇｅｔ数量」が格納されている。
【００５９】
以上に説明したように、本実施の形態によれば、複数のシーケンス図から１枚のシーケンス一覧表を生成して表示するようにしたので、システム全体の構造を一瞥の下に参照することが可能になる。
【００６０】
また、シーケンス図をシーケンス一覧表に変換することにより、関係データベースへ格納することが可能になるので、以下に説明するように、関係データベースの機能を活用し、項目の検索や編集を簡易に行うことが可能になる。
【００６１】
図１３は、シーケンス一覧表に含まれている所定の文字列を検索する際の手続きについて説明する図である。文字列を検索する場合には、先ず、ボタン６６を操作し、その結果として表示される文字列入力画面（図示せず）から、検索しようとする文字列を入力し、検索を開始する操作を行うと、表示処理部２３は、入力部２７から入力された文字列を取得し、シーケンス一覧表に含まれている該当する文字列を検索する。そして、該当する文字列が検出された場合には、シーケンス一覧表の該当部分を反転表示する。図１３は、検索する文字列として「受注」が入力された場合における検索結果を示している。この例では、メソッド名「受注」が反転表示されており、入力された文字列に該当する項目を即座に見出すことが可能になる。
【００６２】
次に、図１４を参照し、ボタン６４が操作された後、メソッド集約６４ｂが選択された場合に実行される処理について説明する。
メソッド集約６４ｂが選択されると、表示処理部２３は、シーケンス一覧表に表示されているメソッドのうち、同一または類似の名前を有するものが近接するように並べ替えを行った後、表示部２６に供給して表示を更新する。
【００６３】
その結果、商品クラス５０ｂに関するシーケンス一覧表は、図１４に示すようにメソッドｇｅｔ数量およびメソッドｇｅｔ在庫が連続するように並べ替えがなされることになる。このように同一または類似するメソッドを近接して配置することで、従来においては、複数のシーケンス図に散在していた同一メソッドの呼び出し方、および、使い方等の一貫性および整合性を容易にチェックすることが可能となる。また、同一または類似するメソッドを近接して配置する他にも、例えば、アルファベット順やあいうえお順に並べ替えることにより、類似するメソッドが近接して表示されるので、メソッド名の誤記等を簡単に見つけることが可能になる。
【００６４】
次に、図１５を参照し、ボタン６４の詳細／省略６４ｃが選択された場合の処理について説明する。
詳細／省略６４ｃが選択されると、表示処理部２３は、表示項目を選択するための画面（図示せず）を表示部２６に表示させ、表示項目の選択を受ける。具体的には、接続元クラス、接続元インスタンス、シーケンス図ＩＤ、インスタンス名、生成インスタンス、シーケンスＮｏ．、メソッド名、パラメタ、返り値、接続先クラス、および、接続先インスタンスのそれぞれについて表示の有無を入力する画面を表示させて、必要な項目の入力を受ける。
【００６５】
続いて、表示処理部２３は、シーケンス一覧表のうち、先に指定された必要な項目のみを選択して、表示部２６に表示させる。例えば、必要な表示項目として、インスタンス名とメソッド名のみが選択された場合には、図１５の表示領域６７に示す情報が表示される。
【００６６】
この例では、各クラスのインスタンス名とメソッド名のみが表示されている。例えば、鉛筆インスタンスは、在庫クラスのインスタンスＡ倉庫のｇｅｔ数量メソッドを呼び出していることが分かる。又、ｃａｌｃ数量メソッドは、商品クラスの鉛筆インスタンスが有するｃａｌｃ数量自身を呼び出している。
【００６７】
このように、必要項目以外を画面上から排除することにより、シーケンス一覧表の全体の一覧性を高めることが可能になるとともに、検索速度を向上させることが可能になる。
次に、図１５に示す画面６０において、ボタン６４が操作され、矢線６４ａが選択された場合の動作について説明する。
【００６８】
ボタン６４が操作され、矢線６４ａが選択されると、表示処理部２３は、シーケンス一覧表上に現在矢線が表示されていない場合には、各メソッドの呼び出し関係に応じた矢線を表示する。また、矢線が表示状態である場合には、画面上から消去して非表示状態にする。いまの例では、図１５に示すように、矢線は非表示状態であるので、表示処理部２３は、矢線を表示状態にする。その結果、図１６に示すように、矢線が表示されることになる。
【００６９】
このように、矢線を必要に応じて表示または非表示の状態にすることにより、他の情報の視認性を高めたり、あるいは、矢線によるメソッドの呼び出し関係の視認性を高めたりすることを任意に選択することが可能になる。
【００７０】
次に、図１６において、ボタン６２が操作された後、移動６２ａが選択された場合に動作について説明する。
移動６２ａが選択されると、任意のクラスを任意の位置に移動させることが可能になる。なお、移動はクラス単位でのみ許可するものとする。例えば、図１６において、コントローラクラスが移動の対象として選択（例えば、マウスでクリック）された後、このコントローラクラスを在庫クラスの右側に移動させる操作がなされたとすると、表示処理部２３は、シーケンス一覧表上のコントローラクラスが在庫クラスの右側に配置されるように並べ替え処理を行い、並べ替えが終了したデータを表示部２６に供給して表示させる。
【００７１】
その結果、図１７の表示領域６７に示すように、コントローラクラスが在庫クラスの後に表示されるとともに、矢線の方向が適宜修正されて表示されることになる。
このように、クラスの位置を自由に変更することを可能としたので、目的に応じてクラスを再配置することにより、メソッドの参照関係をより簡易に知ることが可能になる。
【００７２】
なお、以上の例では、クラスを移動させる場合について説明したが、クラスを削除したり、表示または非表示の状態にしたり、あるいは複写する処理を行うことも可能である。例えば、クラスを削除する場合には、呼び出し関係を有する他方のクラスとの関係が消滅するので、その点を考慮して削除する。また、非表示の状態にする場合も同様である。このように、表示されている内容に対してクラス単位で編集を許可することにより、目的に応じて表示の態様を変更し、作業性を向上させることが可能になる。
【００７３】
次に、任意のクラスが選択された後、ボタン６３が操作されて逆変換６３ｂが選択された場合に実行される処理について図１８を参照して説明する。このフローチャートが開始されると、以下のステップが実行される。
【００７４】
ステップＳ３０：
逆変換部２４は、表示処理部２３を介して入力部２７から取得した情報に応じて、指定されたクラスを特定する。例えば、入力部２７から、複数のクラスを指定する情報が入力された場合には、逆変換部２４は指定された複数のクラスを特定する。
【００７５】
ステップＳ３１：
逆変換部２４は、指定されたクラスに含まれている、シーケンス図における１本の矢線に対応するデータを取得する。具体的には、矢線の接続元と接続先のクラス、インスタンス、および、メソッド名等を取得する。
【００７６】
ステップＳ３２：
逆変換部２４は、矢線に対応するデータの取得に成功したか否かを判定し、取得に成功した場合にはステップＳ３３に進み、それ以外の場合には処理を終了する。
【００７７】
ステップＳ３３：
逆変換部２４は、ステップＳ３１において取得した矢線１本に対応するデータ（接続元および接続先のデータ）から、シーケンス図の矢線データ（ステップＳ３１において取得したデータをクラス毎に分けて配置したデータ）を生成する。
【００７８】
ステップＳ３４：
逆変換部２４は、シーケンス図の該当する部分に対して、ステップＳ３３で生成した矢線データを書き込み、ステップＳ３１に戻って前述の場合と同様の処理を繰り返す。
【００７９】
以上の処理によれば、シーケンス一覧表上において所望のクラス群を指定し、指定されたクラス群に対応するシーケンス図を作成することが可能になるので、必要なクラスのみに着目したシーケンス図を簡易に作成することが可能になる。
【００８０】
次に、ボタン６５が操作され、相互チェック６５ａが選択された場合に実行される処理について説明する。
ボタン６５が操作され、相互チェック６５ａが選択されると、チェック部２５は、図１９に示すフローチャートを実行する。
【００８１】
ステップＳ５０：
チェック部２５は、データベース２０から図５に示すクラス図を読み込む。
ステップＳ５１：
チェック部２５は、シーケンス一覧表の該当するクラス（ステップＳ５０で読み込んだクラス図に対応するクラス）に含まれているメソッドの一覧表であるメソッド一覧表を作成する。
【００８２】
ステップＳ５２：
チェック部２５は、取得したクラスがシーケンス一覧表の最後の行であるか否かを判定し、最後の行である場合には処理を終了し、それ以外の場合にはステップＳ５３に進む。
【００８３】
ステップＳ５３：
チェック部２５は、クラス図に含まれているメソッドと、メソッド一覧表に含まれているメソッドとを比較する。
【００８４】
ステップＳ５４：
チェック部２５は、ステップＳ５３の比較により、両者が一致するか否かを判定し、両者が一致する場合には正常であるとしてステップＳ５０に戻って同様の処理を繰り返し、それ以外の場合にはステップＳ５５に進む。
【００８５】
ステップＳ５５：
チェック部２５は、シーケンス一覧表上の該当する行全体を反転表示する。
ステップＳ５６：
チェック部２５は、クラス図と不一致のメソッドが存在する旨を示すエラーメッセージを表示する。
【００８６】
ところで、シーケンス図上にあるメソッドはクラス図上のクラスのメソッドとして定義されている必要があるが、以上の処理によれば、シーケンス図上にあるメソッドがクラス図上のメソッドとして定義されているか否かを自動的に判定することが可能となる。
【００８７】
本例では、クラス図に含まれるクラスから呼び出されるメソッドと、シーケンス図上のメソッドが一致しているかをチェックしているが、本発明はクラス図とシーケンス図の不一致をチェックすることを目的とするものであるため、図示しないが、クラス図上のクラスとシーケンス図上のクラスとの不一致をチェックするものも本発明に含まれる。
【００８８】
次に、ボタン６５が操作され、シーケンス番号６５ｂが選択された場合に実行される処理について図２０を参照して説明する。このフローチャートが開始されると、以下のステップが実行される。
【００８９】
ステップＳ７０：
チェック部２５は、シーケンス一覧表の所定の１行を読み込む。
ステップＳ７１：
チェック部２５は、読み込みに成功したか否か、即ち、未処理の行が残っていた場合にはステップＳ７２に進み、それ以外の場合には処理対象が存在しないとして処理を終了する。
【００９０】
ステップＳ７２：
チェック部２５は、読み込んだ行のシーケンス番号が１．であるか否か、即ち、階層が最も上の（入り口の）メソッドであるか否かを判定する。１．である場合にはステップＳ７３に進み、それ以外の場合にはステップＳ７６に進む。
【００９１】
ステップＳ７３：
チェック部２５は、矢線の接続元の「接続元クラス」と、「接続元インスタンス」のカラムに格納されている情報を取得する。
【００９２】
ステップＳ７４：
チェック部２５は、これら双方のカラムが空であるか否かを判定し、空である場合には正常であるとしてステップＳ７０に戻って同様の処理を繰り返し、それ以外の場合にはステップＳ７５に進む。
【００９３】
ステップＳ７５：
チェック部２５は、シーケンス番号が１．であるクラスは、通常は入り口クラスであり、クラスの接続元クラスと接続元インスタンスは空であるのに、何らかの情報が格納されている場合にはエラーであるとして当該行を反転するとともに、エラーが発生した旨を示すメッセージを表示する。
【００９４】
ステップＳ７６：
チェック部２５は、１行上のシーケンス番号との関係を取得する。
ステップＳ７７：
チェック部２５は、１行上のシーケンス番号が１階層上のクラスのものであるか否かを判定し、１階層上のクラスのものである場合にはステップＳ７９に進み、それ以外の場合にはステップＳ７８に進む。ここで、１階層上であるか否かは、シーケンス番号に含まれているドット「．」の数を参照して決定する。即ち、ドットの数が多い程、階層が深いシーケンスだからである。
【００９５】
ステップＳ７８：
チェック部２５は、１行上の接続元クラスおよび接続元インスタンスと、当該行の接続元クラスおよび接続元インスタンスとが一致するか否かを判定し、一致する場合には同一階層のシーケンスとして正常であることから、ステップＳ７０に戻って同様の処理を繰り返し、それ以外の場合にはステップＳ８１に進む。
【００９６】
ステップＳ７９：
チェック部２５は、１行上の接続先クラスおよび接続先インスタンスと、当該行の接続元クラスおよび接続元インスタンスとが一致するか否かを判定する。
【００９７】
ステップＳ８０：
チェック部２５は、ステップＳ７９の双方が一致するか否かを判定し、この双方が一致する場合には、１行上が１階層上のシーケンスであり、また、当該行が１階層下のシーケンスである場合に該当するとともに、正常な状態であるとして、ステップＳ７０に戻って同様の処理を繰り返し、それ以外の場合にはステップＳ８１に進む。
【００９８】
ステップＳ８１：
チェック部２５は、１行上と当該行のシーケンスとが正常でないとして、当該行を反転するとともに、正常でない旨を示すメッセージを表示し、ステップＳ７０に戻って同様の処理を繰り返す。
【００９９】
以上の処理によれば、シーケンス番号の付与のしかたが正常であるか否かを自動的にチェックすることが可能になる。
次に、ボタン６５が操作され、入り口６５ｃが選択された場合に実行される処理について図２１を参照して説明する。このフローチャートが開始されると、以下の処理が実行される。
【０１００】
ステップＳ１００：
チェック部２５は、シーケンス一覧表の所定の１行を読み込む。
ステップＳ１０１：
チェック部２５は、読み込みに成功したか否か、即ち、未処理の行が残っていた場合にはステップＳ１０２に進み、それ以外の場合には処理対象が存在しないとして処理を終了する。
【０１０１】
ステップＳ１０２：
チェック部２５は、読み込んだ行のシーケンス番号が１．であるか否かを判定し、１．である場合にはステップＳ１０３に進み、それ以外の場合にはステップＳ１００に戻って同様の処理を繰り返す。
【０１０２】
ステップＳ１０３：
チェック部２５は、矢線の接続元の「接続元クラス」と、「接続元インスタンス」のカラムに格納されている情報を取得する。
【０１０３】
ステップＳ１０４：
チェック部２５は、これら双方のカラムが空であるか否かを判定し、空である場合にはステップＳ１０５に進み、それ以外の場合には処理を終了する。
【０１０４】
ステップＳ１０５：
チェック部２５は、シーケンス番号が１．であるクラスは、通常は入り口クラスであり、クラスの接続元クラスと接続元インスタンスは空であるのに、何らかの情報が格納されている場合にはエラーであるとして当該行を反転するとともに、エラーが発生した旨を示すメッセージを表示した後、処理を終了する。
【０１０５】
以上の処理によれば、入り口メソッドが正常であるか否かのチェックを行うことが可能になる。
次に、ボタン６５が操作され、パラメタ６５ｄが選択された場合に実行される処理について図２２を参照して説明する。この処理は、シーケンス一覧表に記載されたメソッドのパラメタおよび返り値が正常であるか否かを判定する処理である。このフローチャートが開始されると、以下のステップが実行される。
【０１０６】
ステップＳ１２０：
チェック部２５は、シーケンス一覧表の所定の１行を読み込む。
ステップＳ１２１：
チェック部２５は、読み込みに成功したか否かを判定する。即ち、シーケンス一覧表に未処理の行が存在しない場合には処理を終了し、それ以外の場合にはステップＳ１２２に進む。
【０１０７】
ステップＳ１２２：
チェック部２５は、ステップＳ１２０で読み込んだ所定の行の接続元のパラメタと返り値とを取得する。
【０１０８】
ステップＳ１２３：
チェック部２５は、ステップＳ１２０で読み込んだ所定の行の接続先のパラメタと返り値とを取得する。
【０１０９】
ステップＳ１２４：
チェック部２５は、接続元と接続先のパラメタおよび返り値の型および個数を比較する。
【０１１０】
ステップＳ１２５：
チェック部２５は、ステップＳ１２４の比較の結果、両者が一致したか否かを判定し、一致した場合には正常であるとしてステップＳ１２０に戻って同様の処理を繰り返し、それ以外の場合にはステップＳ１２６に進む。
【０１１１】
ステップＳ１２６：
チェック部２５は、現在の行を反転するとともに、パラメタと返り値が正常でない旨を示すメッセージを表示し、ステップＳ１２０に戻って同様の処理を繰り返す。
【０１１２】
以上の処理によれば、シーケンス一覧表に含まれている接続元と接続先のパラメタが一致しない、エラーを有する行を自動的に検出することが可能になる。
なお、以上の実施の形態においては、シーケンス図からシーケンス一覧表を生成するようにしたが、例えば、ソースファイルからシーケンス一覧表を生成することも可能である。その場合には、ソースファイルを各クラス毎に分解し、各クラスから派生するインスタンスと、各インスタンスに含まれているメソッドを特定し、メソッドの呼び出し関係を、テキスト解析によって解析することにより得ることができる。そして、そのようにして得られた情報に基づいて、上述の場合と同様の処理を施すことにより、メソッド一覧表を生成することができる。
【０１１３】
また、以上に示したシーケンス一覧表の表示は一例であり、このような場合のみに本発明が限定されるものではない。
最後に、上記の処理機能は、コンピュータによって実現することができる。その場合、シーケンス解析装置が有すべき機能の処理内容は、コンピュータで読み取り可能な記録媒体に記録されたプログラムに記述されており、このプログラムをコンピュータで実行することにより、上記処理がコンピュータで実現される。コンピュータで読み取り可能な記録媒体としては、磁気記録装置や半導体メモリ等がある。市場へ流通させる場合には、ＣＤ−ＲＯＭ(Compact Disk Read Only Memory)やフロッピーディスク（登録商標）等の可搬型記録媒体にプログラムを格納して流通させたり、ネットワークを介して接続されたコンピュータの記憶装置に格納しておき、ネットワークを通じて他のコンピュータに転送することもできる。コンピュータで実行する際には、コンピュータ内のハードディスク装置等にプログラムを格納しておき、メインメモリにロードして実行する。
【図面の簡単な説明】
【０１１４】
【図１】本発明の動作原理を説明する原理図である。
【図２】本発明の実施の形態の構成例を示すブロック図である。
【図３】図２に示すシーケンス解析装置のＨＤＤに格納されているアプリケーションプログラムが起動された場合に、実装される機能ブロックについて説明する図である。
【図４】処理対象となるシーケンス図の一例である。
【図５】処理対象となるクラス図の一例である。
【図６】本発明に係る解析用のアプリケーションプログラムが起動された場合に表示される画面の一例である。
【図７】図６に示すボタンを操作した場合に表示されるプルダウンメニューの一例を示す図である。
【図８】ボタン６３が操作され、変換６３ａが選択された場合に実行される、シーケンス図をシーケンス一覧表に変換する処理の一例を説明するフローチャートである。
【図９】変換処理によって生成されたシーケンス一覧表の表示例である。
【図１０】コントローラクラスに関するシーケンス一覧表の一例である。
【図１１】商品クラスに関するシーケンス一覧表の一例である。
【図１２】在庫クラスに関するシーケンス一覧表の一例である。
【図１３】ボタン６６が操作されて文字列が入力され、検索が実行された結果を示す画面である。
【図１４】メソッド集約処理の結果を示す表示例である。
【図１５】メソッド省略処理の結果を示す表示例である。
【図１６】クラス移動処理の結果を示す表示例である。
【図１７】矢線非表示処理の結果を示す表示例である。
【図１８】シーケンス一覧表をシーケンス図に逆変換する処理の一例を説明するフローチャートである。
【図１９】クラス図とシーケンス一覧表との比較処理の一例を説明するフローチャートである。
【図２０】シーケンス番号チェック処理の一例を説明するフローチャートである。
【図２１】入り口メソッドチェック処理の一例を説明するフローチャートである。
【図２２】パラメタチェック処理の一例を説明するフローチャートである。
【符号の説明】
【０１１５】
１ａ〜１ｄ  シーケンス図
２  シーケンス解析装置
２ａ  クラス名取得手段
２ｂ  インスタンス名取得手段
２ｃ  メソッド名取得手段
２ｄ  呼び出し関係取得手段
２ｅ  シーケンス一覧表表示手段
３  シーケンス一覧表
１０  シーケンス解析装置
１０ａ  ＣＰＵ
１０ｂ  ＲＯＭ
１０ｃ  ＲＡＭ
１０ｄ  ＨＤＤ
１０ｅ  ＧＢ
１０ｆ  Ｉ／Ｆ
１０ｇ  バス
１１  表示装置
１２  入力装置
２０  データベース
２１  変換部
２２  データベース
２３  表示処理部
２４  逆変換部
２５  チェック部
２６  表示部
２７  入力部
【図１】
2008090857.tif 000003
【図２】
2008090857.tif 000004
【図３】
2008090857.tif 000005
【図４】
2008090857.tif 000006
【図５】
2008090857.tif 000007
【図６】
2008090857.tif 000008
【図７】
2008090857.tif 000009
【図８】
2008090857.tif 000010
【図９】
2008090857.tif 000011
【図１０】
2008090857.tif 000012
【図１１】
2008090857.tif 000013
【図１２】
2008090857.tif 000014
【図１３】
2008090857.tif 000015
【図１４】
2008090857.tif 000016
【図１５】
2008090857.tif 000017
【図１６】
2008090857.tif 000018
【図１７】
2008090857.tif 000019
【図１８】
2008090857.tif 000020
【図１９】
2008090857.tif 000021
【図２０】
2008090857.tif 000022
【図２１】
2008090857.tif 000023
【図２２】
2008090857.tif 000024