(57)【要約】【課題】プログラムの実機での動作検証の際に再現性の無い不具合が生じた場合にも、不具合発生時の原因が、検証対象のプログラム自体にあるのか、あるいは、他の外部要因にあるのかの判定を可能とする。【解決手段】  検証対象のソースプログラム１０１の単体テストで用いた入力データおよび当該入力データに対応して出力された出力データをソースプログラム１０１の当該行に対応付けた標準動作ＤＢ１０２を生成して記憶装置に記憶すると共に、ソースプログラム１０１の実機テストで用いた入力データおよび当該入力データに対応して出力された出力データをソースプログラム１０１の行単位で取得し、当該行に対応付けた動作ジャーナルＤＢ１０８を生成して記憶装置に記憶し、標準動作ＤＢ１０２と動作ジャーナルＤＢ１０８の入力・出力データを、ソースプログラム１０１の行単位で比較し、出力データが異なれば、ソースプログラム１０１以外の要因による不具合の発生である判定する。【選択図】図１
2008226060.tif 000002
【特許請求の範囲】
【請求項１】
プログラムされたコンピュータにより、検証対象ソースプログラムの実機での動作検証を行う方法であって、
上記検証対象ソースプログラムの単体テストで用いた入力データおよび当該入力データに対応して出力された出力データを当該検証対象ソースプログラムの当該行に対応付けて記憶装置に記憶する第１のステップと、
上記検証対象ソースプログラムの実機テストで用いた入力データおよび当該入力データに対応して出力された出力データを、当該検証対象ソースプログラムの行単位で取得し、当該行に対応付けて記憶装置に記憶する第２のステップと、
上記第１のステップで記憶した入力データおよび出力データと、上記第２のステップで記憶した入力データおよび出力データとを、当該検証対象ソースプログラムの行単位で比較する第３のステップと、
該第３のステップでの比較で、出力データが異なれば、当該検証対象ソースプログラム以外の要因による不具合の発生であるとの判定結果を出力する第４のステップと
を有することを特徴とするプログラム実機動作検証方法。
【請求項２】
プログラムされたコンピュータにより、検証対象ソースプログラムの実機での動作検証を行う方法であって、
上記検証対象ソースプログラムの単体テストで用いた入力データおよび当該入力データに対応して出力された出力データを当該検証対象ソースプログラムの当該行に対応付けた標準動作情報を生成して記憶装置に記憶する第１のステップと、
上記検証対象ソースプログラムをコンパイルして実行モジュールとｍａｐファイルを生成して記憶装置に記憶する第２のステップと、
上記実行モジュールの実機テストで用いた入力データと当該入力データに対応して出力された出力データを記憶装置のそれぞれの格納先アドレスに記憶する第３のステップと、
上記検証対象ソースプログラムの当該行での動作に応じて入出力されるデータの格納先アドレスを上記ｍａｐファイルを参照して特定し、入力データおよび出力データのそれぞれに当該格納先アドレスを対応付けたクロスリファレンス情報を生成して記憶装置に記憶する第４のステップと、
上記クロスリファレンス情報の格納先アドレスを参照して、上記第３のステップで記憶した実機テストでの入力データと出力データを読み出し、上記検証対象ソースプログラムの当該行での動作に応じて入出力されるデータ値を求め、それぞれ対応付けた動作ジャーナル情報を生成して記憶装置に記憶する第５のステップと、
上記動作ジャーナル情報と上記標準動作情報を読み出し、当該検証対象ソースプログラムの行単位でそれぞれの入出力データ値を比較し、出力データが異なれば、当該検証対象ソースプログラム以外の要因による不具合の発生であるとの判定結果を記憶装置あるいは表示装置や印字装置に出力する第６のステップと
を有することを特徴とするプログラム実機動作検証方法。
【請求項３】
プログラムされたコンピュータにより、検証対象ソースプログラムの実機での動作検証を行うシステムであって、
請求項１もしくは請求項２のいずれかに記載のプログラム実機動作検証方法における各ステップでの処理を実行する手段を具備したことを特徴とするプログラム実機動作検証システム。
【請求項４】
コンピュータに、請求項１もしくは請求項２のいずれかに記載のプログラム実機動作検証方法における各ステップでの処理を実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータによるプログラムの実行動作状態を検証する技術に係り、特に、動作不良の原因を容易に特定するのに好適な技術に関するものである。
【背景技術】
【０００２】
従来、コンピュータが実行するプログラムの動作状態を検証する技術として、プログラムの単体テストを行い、その動作ログを取得し、当該動作ログを検証するものがある。
【０００３】
例えば、特許文献１においては、業務プログラム中から発行される実行命令により受け渡しされるログデータを保存しておき、当該業務プログラムの終了時や表示・出力命令の発行時等に、保存したログデータを編集して表示出力することで、オンライントランザクションシステムにおけるデバッグの工程を短縮させ、各種の業務プログラムの開発効率を高め、煩わしい手間等をかけることなく容易に、必要なデータの採取や表示が行なえるようにする技術が記載されている。
【０００４】
しかし、この特許文献１の技術は、プログラムのデバッグを容易にし、プログラムの開発時における効率を高めためのものであり、実環境での動作時において発生する不具合に対処することはできない。そのため、この技術では、実環境での動作時における不具合発生時の損害の責任が、開発されたプログラム自体にあるのか他の要因にあるのかを判定することはできない。
【０００５】
近年、コンピュータシステムの複雑化が進み、このような動作の不具合発生時の責任の所在が明確にならない場合が多く発生している。プログラム仕様書で定義されたプログラム仕様に基づきプログラムが実装されているか否かの確認・検証は、特許文献１に記載の技術を含め、単体テストや組み合わせテスト行程により行うことができる。
【０００６】
しかし、実機環境での実動作では、要求または規定された仕様とは異なるデータが入力された場合や、仕様と異なるタイミングでデータ入力された場合等の外部要因により、仕様書通りの動作とならない場合があり、その動作不具合の瑕疵がプログラム自体（プログラムの開発上の瑕疵）にあるのか外部要因にあるのかを判定することができない。
【０００７】
一般的に、実環境においてプログラムの動作に不具合が生じた場合、その不具合の再現性があるか否かを判定する。再現性がある場合、原因がプログラムによるものなのか、ハードウェアによるものなのかを切り分ける。その場合、メモリダンプ、プログラムロジックの追跡等により、原因の切り分けは比較的容易である。しかし、再現性の無い場合には、プログラム自体の処理タイミングやロジック等による影響なのか、仕様外のデータの入力や仕様外のタイミングでのデータ入力等の外部要因による影響なのかを切り分けることは非常に困難である。
【０００８】
【特許文献１】特開平０５−１６５７７８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
解決しようとする問題点は、従来の技術では、実機でのプログラムの動作に再現性の無い不具合が生じた場合、その不具合の要因が、プログラム自体の処理タイミングやロジック等によるものなのか、仕様外のデータの入力や仕様外のタイミングでのデータ入力等の外部要因によるものなのかを切り分けることが非常に困難な点である。
【００１０】
本発明の目的は、これら従来技術の課題を解決し、実機でのプログラム実行時に発生した不具合が、プログラム自体（開発）を要因とするものではなく、例えば要求または規定された仕様とは異なるデータが入力されたことを要因とするものであることを明確にし、不具合により発生した損害の補償責任がプログラム開発側に無いことを証明でき、プログラム開発側の信頼性を向上させることである。
【課題を解決するための手段】
【００１１】
上記目的を達成するため、本発明は、プログラムされたコンピュータにより、検証対象ソースプログラムの実機での動作検証を行う際、検証対象ソースプログラムの単体テストで用いた入力データおよび当該入力データに対応して出力された出力データを当該検証対象ソースプログラムの当該行に対応付けた標準動作情報を生成して記憶装置に記憶すると共に、検証対象ソースプログラムの実機テストで用いた入力データおよび当該入力データに対応して出力された出力データを、当該検証対象ソースプログラムの行単位で取得し、当該行に対応付けた動作ジャーナル情報を生成して記憶装置に記憶し、標準動作情報と動作ジャーナル情報とを読み出してそれぞれの入力データおよび出力データを、当該検証対象ソースプログラムの行単位で比較し、出力データが異なれば、当該検証対象ソースプログラム以外の要因による不具合の発生であるとの判定結果を、記憶装置に出力、あるいは表示装置や印字装置で視覚化して出力することを特徴とする。
【発明の効果】
【００１２】
本発明によれば、実機での実行環境において、プログラムロジックの１ステップ毎の入出力ログを記録でき、不具合発生時の原因が自己の作成したアプリケーションプログラムにあるのか、ハードウェアの不具合に起因するものなのか、アプリケーションプログラムが想定していない入力条件が発生したものかの判定が可能となり、不具合によって発生した損害の責任元を明確にすることが可能である。
【発明を実施するための最良の形態】
【００１３】
以下、図を用いて本発明を実施するための最良の形態例を説明する。
【００１４】
図１は、本発明に係るプログラム実機動作検証システムの構成例を示すブロック図であり、図２は、図１におけるクロスリファレンスＤＢ作成処理部の処理動作例を示すフローチャート、図３は、図１における動作ジャーナル取得処理部の処理動作例を示すフローチャート、図４は、図１における動作解析処理部の処理動作例を示すフローチャート、図５は、図１におけるクロスリファレンスＤＢの構成例を示す説明図、図６は、図１における標準動作ＤＢの構成例を示す説明図、図７は、図１における動作ジャーナルＤＢの構成例を示す説明図、図８は、図１におけるソースプログラムの具体例を示す説明図、図９は、図１におけるｍａｐファイルの具体例を示す説明図、図１０は、図１における入出力データの具体例を示す説明図、図１１は、図１における判定結果の具体例を示す説明図である。
【００１５】
図１に示すプログラム実機動作検証システムは、プログラムを用いたコンピュータにより本発明に係る処理を行うものであり、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）や主メモリ、表示装置、入力装置、外部記憶装置等を具備したコンピュータ構成からなり、光ディスク駆動装置等を介してＣＤ−ＲＯＭ等の記憶媒体に記録されたプログラムやデータを外部記憶装置内にインストールした後、この外部記憶装置から主メモリに読み込みＣＰＵで処理することにより、各処理部の機能を実行する。
【００１６】
図１において、１は動作ログ取得システム、１００はコンパイラ、１０１は検証対象のソースプログラム、１０２は標準動作ＤＢ（データベース）、１０３はｍａｐファイル、１０４は入出力データファイル（図中「入出力データ」と記載）である。
【００１７】
検査対象のソースプログラム１０１は、プログラム仕様書に基づいて記述され、テスト仕様書に基づきテストを完了したものであり、本例では、図８に示すようにＣ言語により記述されている。
【００１８】
標準動作ＤＢ１０２は、ソースプログラム１０１の単体テストの副産物であり、テスト仕様書に基づくステップ毎の入力データ毎の出力データが格納されている。本例では、図６に示すように、６０２のＤＢ構成に基づき、６０３のデータ内容例で示されるように、各プログラムＩＤ毎に、ソースプログラム１０１における行番号に対応付けて、当該行で処理された入力データの値と出力データの値および分岐処理の場合のジャンプ先等が登録されている。
【００１９】
ｍａｐファイル１０３は、ソースプログラム１０１を入力としてコンパイラ１００が出力した、変数の格納アドレスが登録されており、本例では、図９に示すように、図８のソースプログラム８０１における各命令（ｍａｉｎ，…）や変数（ｉ，ｊ，ｋ，ｘ，ｙ，ｚ，…）の格納アドレス（Ａｄｄｒｅｓｓ）が登録されている。
【００２０】
入出力データファイル１０４は、実機のメモリ上の入出力データであり、本例では、図１０の入出力データ１００１で示すように、メモリ上のアドレスに各データが登録されている。
【００２１】
実行環境１１１における実行モジュール１１２は、コンパイラ１００によりソースプログラム１０１が変換・生成されたもので、コンピュータが実行可能な機械語からなる。
【００２２】
動作ログ取得システム１は、プログラムを用いたコンピュータにより実現する機能として、クロスリファレンスＤＢ作成処理部１０５、動作ジャーナル取得処理部１０７、動作解析処理部１０９の各処理部の各処理部を有する。
【００２３】
クロスリファレンスＤＢ作成処理部１０５は、ソースプログラム１０１およびｍａｐファイル１０３からクロスリファレンスＤＢ１０６を作成して記憶装置に格納する。
【００２４】
動作ジャーナル取得処理部１０７は、実機において、すなわち実行環境１１１における実行モジュール１１２を用いて、プログラム１ステップ毎の入力データを取得し動作ジャーナルＤＢ１０８を作成して記憶装置に格納する。
【００２５】
動作解析処理部１０９は、標準動作ＤＢ１０２と動作ジャーナルＤＢ１０８のそれぞれのデータ内容を比較し、その比較結果を判定結果ファイル（図中「判定結果」と記載）１１０として、記憶装置に出力、あるいは表示装置やプリンタ（印字装置）等で視覚化して出力する。
【００２６】
以下、図２を用いて、クロスリファレンスＤＢ作成処理部１０５の処理動作の詳細を説明する。まず、ソースプログラム１０１を、ＥＯＦが検出されるまで１行ずつ読み込む（ステップＳ２０１，Ｓ２０２）。
【００２７】
読み込んだ行が処理部（ロジック部分：「ｉｆ」，「ｗｈｉｌｅ」，「ｆｏｒ」，…など、言語仕様書で決められた命令文で始まっている文。または、変数名で始まっている文。）か否かの判定（ステップＳ２０３）を行い、処理部の場合は、行番号、参照/更新している変数名を取得する（ステップＳ２０４）。取得した変数名をキーにｍａｐファイル１０３を検索し、変数の格納されるアドレスを取得する（ステップＳ２０５）。
【００２８】
そして、取得した行番号、変数名、格納アドレスをクロスリファレンスＤＢ１０６に書き込む（ステップＳ２０５）。
【００２９】
このようにしてクロスリファレンスＤＢ作成処理部１０５が生成したクロスリファレンスＤＢ１０６の詳細を図５に示す。図５において、クロスリファレンスＤＢ１０６には、５０２のＤＢ構成に基づき、５０３のデータ内容例で示されるように、各プログラムＩＤ毎に、当該処理部のソースプログラムにおける行番号に対応付けて、当該行における入力データの参照アドレスと出力データの参照アドレスおよび分岐処理の場合のジャンプ先等が登録されている。
【００３０】
次に、図３を用いて、動作ジャーナル取得処理部１０７の処理動作の詳細を説明する。この動作ジャーナル取得処理部１０７の処理は、実行環境１１１（実機）における実行モジュール１１２の実行時に、１ステップ毎の処理前フラグと処理後フラグを引数として呼び出される。
【００３１】
まず、実行モジュール１１２における実行中のプログラム名（ＩＤ）と行番号を取得し、実行年月日と時刻をオペレーティングシステム（ＯＳ）から取得して記憶装置に一時退避する（ステップＳ３０１）。
【００３２】
取得したプログラムＩＤと行番号をキーにクロスリファレンスＤＢ１０６にアクセスし（ステップＳ３０２）、引数が実行前の場合（ステップＳ３０３）は、クロスリファレンスＤＢ１０６に格納されている入力データのアドレスを取得して、当該アドレスを基に、入出力データ１０４から入力データ値を読み込み（ステップＳ３０４）、その後、読み込んだ入力データ値を動作ジャーナルＤＢ１０８に書き込む（ステップＳ３０５）。
【００３３】
ステップＳ３０３において引数が処理後の場合は、クロスリファレンスＤＢ１０６に格納されている出力データのアドレスを取得して、当該アドレスを基に、入出力データ１０４から出力データ値を読み込み（ステップＳ３０６）、その後、読み込んだ出力データ値を動作ジャーナルＤＢ１０８に書き込む（ステップＳ３０７）。
【００３４】
このようにして動作ジャーナル取得処理部１０７が生成した動作ジャーナルＤＢ１０８の詳細を図７に示す。図７において、動作ジャーナルＤＢ１０８には、７０２のＤＢ構成に基づき、７０３のデータ内容例で示されるように、各プログラムＩＤ毎に、実行時間と実行モジュール１１２における行番号に対応付けて、当該行で処理された入力データの値と出力データの値および分岐処理の場合のジャンプ先等が登録されている。
【００３５】
次に、図４を用いて、動作解析処理部１０９の処理動作の詳細を説明する。この動作解析処理部１０９の処理は、プログラムＩＤと実行年月日および時刻を引数として指定されて起動されるので、まず、その引数を取得する（ステップＳ４０１）。
【００３６】
次に、取得した引数をキーにして、動作ジャーナルＤＢ１０８から入力データと出力データを読み込む（ステップＳ４０２）。動作ジャーナルＤＢ１０８から読み込むデータはソースプログラム１０１の行数分あるので、その行数分、以下の処理を繰り返す（ステップＳ４０３）。
【００３７】
まず、取得した動作ジャーナルの入力データをキーにして、標準動作ＤＢ１０２を読み込む（ステップＳ４０４）。標準動作ＤＢ１０２にデータが存在する場合（キーで参照し、ヒットした場合）（ステップＳ４０５）、動作ジャーナルの出力データと標準動作ＤＢ１０２の当該出力データとを比較する（ステップＳ４０６）。
【００３８】
比較結果が同じであれば（ステップＳ４０８）、その判定結果として「正常動作」を判定結果ファイル１１０に出力し（ステップＳ４０９）、比較結果が異なっていれば（ステップＳ４０８）、その判定結果として「外部要因（ハード傷害等）」を判定結果ファイル１１０に出力する（ステップＳ４１０）。
【００３９】
ステップＳ４０５の判定において、標準動作ＤＢ１０２にデータが存在しない場合（キーで参照し、ヒットしなかった場合）は、その判定結果として「仕様外処理」を判定結果ファイル１１０に出力する（ステップＳ４０７）。
【００４０】
また、取得した動作ジャーナルの全データが一致した場合（ステップＳ４１１）、判定結果として「正常動作」を判定結果ファイル１１０に出力する（ステップＳ４１２）。
【００４１】
このようにして動作解析処理部１０９が生成した判定結果ファイル１１０の詳細を図１１に示す。図１１の判定結果テーブル１１０１においては、各プログラムＩＤ毎に、行番号に対応付けて、標準動作ＤＢ１０２に格納されている入力データの値および出力データの値と、動作ジャーナルＤＢ１０８に格納されている入力データの値および出力データの値とが登録され、かつ、その判定結果が登録されている。
【００４２】
以上、図１〜図１１を用いて説明したように、本例では、プログラムされたコンピュータにより、検証対象のソースプログラム１０１の実機での動作検証を行う際、ソースプログラム１０１の単体テストで用いた入力データおよび当該入力データに対応して出力された出力データを当該ソースプログラム１０１の当該行に対応付けた標準動作ＤＢ１０２を生成して記憶装置に記憶すると共に、ソースプログラム１０１の実機テストで用いた入力データおよび当該入力データに対応して出力された出力データを、当該ソースプログラム１０１の行単位で取得し、当該行に対応付けた動作ジャーナルＤＢ１０８を生成して記憶装置に記憶し、標準動作ＤＢ１０２と動作ジャーナルＤＢ１０８とを読み出してそれぞれの入力データおよび出力データを、当該ソースプログラム１０１の行単位で比較し、出力データが異なれば、当該ソースプログラム１０１以外の要因による不具合の発生であるとの判定結果を出力する。
【００４３】
より詳細には、ソースプログラム１０１の単体テストで用いた入力データおよび当該入力データに対応して出力された出力データを当該ソースプログラム１０１の当該行に対応付けた標準動作ＤＢ１０２を生成して記憶装置に記憶する第１の技術と、コンパイラ１００により、ソースプログラム１０１をコンパイルして実行モジュール１１２とｍａｐファイル１０３を生成して記憶装置に記憶する第２の技術と、実行環境１１１において、実行モジュール１１２の実機テストで用いた入力データと当該入力データに対応して出力された出力データを記憶装置のそれぞれの格納先アドレスに記憶する（入出力データ１０４））第３の技術と、クロスリファレンスＤＢ作成処理部１０５により、ソースプログラム１０１の当該行での動作に応じて入出力されるデータの格納先アドレスをｍａｐファイル１０３を参照して特定し、入力データおよび出力データのそれぞれに当該格納先アドレスを対応付けたクロスリファレンスＤＢ１０６を生成して記憶装置に記憶する第４の技術と、動作ジャーナル取得処理部１０７により、クロスリファレンスＤＢ１０６の格納先アドレスを参照して、実行環境１１１において記憶した実機テストでの入力データと出力データを入出力データ１０４から読み出し、ソースプログラム１０１の当該行での動作に応じて入出力されるデータ値を求め、それぞれ対応付けた動作ジャーナルＤＢ１０８を生成して記憶装置に記憶する第５の技術と、動作解析処理部１０９により、動作ジャーナルＤＢ１０８と標準動作ＤＢ１０２の各情報を読み出し、当該ソースプログラム１０１の行単位でそれぞれの入出力データ値を比較し、出力データが異なれば、当該ソースプログラム１０１以外の要因、例えば、ハードウェアの不具合に起因するもの、あるいは、アプリケーションプログラムが想定していない入力条件が発生したこと等による不具合の発生であるとの判定結果１１０を、記憶装置に出力、あるいは表示装置や印字装置で視覚化して出力する第６の技術とを有する。
【００４４】
このことにより、再現性の無い不具合が生じた場合にも、不具合発生時の原因が、検証対象のプログラム自体にあるのか、あるいは、外部要因、例えばハードウェアの不具合に起因するものか、プログラムが想定していない入力条件（要求または規定された仕様とは異なるデータの入力）が発生したものかの判定が可能となり、不具合によって発生した損害の責任元を明確にすることができる。その結果、不具合により発生した損害の補償責任がプログラム開発側に無いことを証明でき、プログラム開発側の信頼性を向上させることができる。
【００４５】
尚、本発明は、図１〜図１１を用いて説明した例に限定されるものではなく、その要旨を逸脱しない範囲において種々変更可能である。例えば、本例では、プログラム実機動作検証システムを１つのコンピュータ装置内に設けた構成としているが、例えば、動作ログ取得システム１の各処理部の機能を１つのコンピュータ装置に設け、コンパイラ１００の機能をネットワークで接続された他のコンピュータ装置で実現する構成としても良い。
【００４６】
また、本例のコンピュータ構成に関しても、キーボードや光ディスクの駆動装置の無いコンピュータ構成としても良い。また、本例では、光ディスクを記録媒体として用いているが、ＦＤ（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ）等を記録媒体として用いることでも良い。また、プログラムのインストールに関しても、通信装置を介してネットワーク経由でプログラムをダウンロードしてインストールすることでも良い。
【図面の簡単な説明】
【００４７】
【図１】本発明に係るプログラム実機動作検証システムの構成例を示すブロック図である。
【図２】図１におけるクロスリファレンスＤＢ作成処理部の処理動作例を示すフローチャートである。
【図３】図１における動作ジャーナル取得処理部の処理動作例を示すフローチャートである。
【図４】図１における動作解析処理部の処理動作例を示すフローチャートである。
【図５】図１におけるクロスリファレンスＤＢの構成例を示す説明図である。
【図６】図１における標準動作ＤＢの構成例を示す説明図である。
【図７】図１における動作ジャーナルＤＢの構成例を示す説明図である。
【図８】図１におけるソースプログラムの具体例を示す説明図である。
【図９】図１におけるｍａｐファイルの具体例を示す説明図である。
【図１０】図１における入出力データの具体例を示す説明図である。
【図１１】図１における判定結果の具体例を示す説明図である。
【符号の説明】
【００４８】
１：動作ログ取得システム、１００：コンパイラ、１０１：ソースプログラム、１０２：標準動作ＤＢ、１０３：ｍａｐファイル、１０４：入出力データ、１０５：クロスリファレンスＤＢ、１０６：クロスリファレンスＤＢ、１０７：動作ジャーナル取得処理部、１０８：動作ジャーナルＤＢ、１０９：動作解析処理部、１１０：判定結果、１１１：実行環境、１１２：実行モジュール、５０２：クロスリファレンスＤＢのＤＢ構成、５０３：クロスリファレンスＤＢのデータ内容、６０２：標準動作ＤＢのＤＢ構成、６０３：標準動作ＤＢのデータ内容、７０２：動作ジャーナルＤＢのＤＢ構成、７０３：動作ジャーナルＤＢのデータ内容、８０１：ソースプログラムの内容、９０１：ｍａｐファイルの内容、１００１：入出力データ内容、１１０１：判定結果。
【図１】
2008226060.tif 000003
【図２】
2008226060.tif 000004
【図３】
2008226060.tif 000005
【図４】
2008226060.tif 000006
【図５】
2008226060.tif 000007
【図６】
2008226060.tif 000008
【図７】
2008226060.tif 000009
【図８】
2008226060.tif 000010
【図９】
2008226060.tif 000011
【図１０】
2008226060.tif 000012
【図１１】
2008226060.tif 000013