(57)【要約】【課題】  ソフトウェアの振舞いや構造上の特徴・性質と、そのソフトウェアに対する妥当なテスト技術・テスト手段とを対応付けた情報である「テスト観点」に基づき、ソフトウェアテストを評価する。【解決手段】  ソフトウェアの振舞いや構造上の特徴・性質と、そのソフトウェアに対する妥当なテスト技術・テスト手段とを対応付けた情報である「テスト観点」とに基づいて、ソフトウェアテストが当該テスト対象に対して妥当かどうかを判定する際に、予め設定された規則およびテスト対象ソフトウェアの特徴・性質を入力として、前記特徴・性質に対応する欠陥テンプレートを選択するとともに、テスト対象ソフトウェアの特徴情報によって補完することによって、前記ソフトウェアテストがテスト観点に則して設計されているか否かを判定する。【選択図】図１
2013218492.tif 000002
【特許請求の範囲】
【請求項１】
テスト対象のために作成されたソフトウェアテストが前記テスト対象に対して妥当かどうかを判定するソフトウェアテスト自動評価装置であって、
ソフトウェアの振舞いや構造上の特徴・性質と、前記ソフトウェアに対する妥当なテスト技術・テスト手段とを対応付けた情報であるテスト観点を記憶する手段と、
予め設定された規則およびテスト対象ソフトウェアの特徴・性質を含む特徴情報を入力として、前記特徴・性質に対応する欠陥テンプレートを選択するとともに、テスト対象ソフトウェアの前記特徴情報によって補完することによって、前記ソフトウェアテストが前記テスト観点に則して設計されているか否かを判定するためのソフトウェア欠陥を生成する欠陥生成手段を有することを特徴とするソフトウェアテスト自動評価装置。
【請求項２】
前記ソフトウェアテスト自動評価装置であって、
前記ソフトウェア欠陥に基づいて前記テスト対象ソフトウェアを改変することにより、テスト対象ソフトウェアにソフトウェア欠陥を混入する欠陥混入手段と、
前記ソフトウェア欠陥が混入されたテスト対象ソフトウェアと、ソフトウェアテストとを併せて実行し、ソフトウェア欠陥を検出して記録するテスト実行手段とを有することを特徴とする請求項１に記載のソフトウェアテスト自動評価装置。
【請求項３】
前記ソフトウェアテスト自動評価装置であって、
前記ソフトウェア欠陥と、当該ソフトウェア欠陥をテスト対象ソフトウェアに混入した際のソフトウェアテストの実行結果とを照らし合わせることにより、当該ソフトウェアテストが妥当でないと評価できる場合に、当該ソフトウェアテストが本来満足すべきであって、かつ満足していないテスト観点を特定するテスト実行結果評価手段を有することを特徴とする請求項１または２のいずれかに記載のソフトウェアテスト自動評価装置。
【請求項４】
前記ソフトウェア欠陥自動評価装置であって、
テスト対象ソフトウェアをプログラム解析し、さらに、予め設定された規則と前記プログラム解析の結果とを照らし合わせることにより、テスト対象ソフトウェアの特徴・性質を抽出する特徴情報抽出手段を有することを特徴とする請求項１から３のいずれかに記載のソフトウェア欠陥自動評価装置。
【請求項５】
前記ソフトウェア欠陥自動評価装置であって、
前記テスト対象ソフトウェアがプログラム生成装置を用いて作成されている場合に、テスト対象プログラム生成時に前記プログラム生成装置に入力された情報である設計情報を保持する設計情報記憶手段を有し、
前記欠陥生成手段は、前記設計情報記憶手段が保持する設計情報を、テスト対象ソフトウェアの特徴・性質の情報の少なくとも一部として用いることを特徴とする請求項１から４のいずれかに記載のソフトウェアテスト自動評価装置。
【請求項６】
ソフトウェア欠陥自動評価装置であって、
前記テスト対象ソフトウェアに求められる性質・特徴を表した情報である仕様情報を保持する仕様情報記憶手段を有し、
前記欠陥生成手段は、前記仕様情報記憶手段が保持する仕様情報を、テスト対象ソフトウェアの特徴・性質の情報の少なくとも一部として用いることを特徴とする請求項１から５のいずれかに記載のソフトウェアテスト自動評価装置。
【請求項７】
処理装置を用いて、テスト対象のために作成されたソフトウェアテストが前記テスト対象に対して妥当かどうかを判定するソフトウェアテスト自動評価方法であって、
ソフトウェアの振舞いや構造上の特徴・性質を含む特徴情報と、前記ソフトウェアに対する妥当なテスト技術・テスト手段とを対応付けた情報であるテスト観点を記憶装置に記憶し、
予め設定された規則およびテスト対象ソフトウェアの特徴・性質を入力として、前記特徴・性質に対応する欠陥テンプレートを選択し、
前記テスト対象ソフトウェアの前記特徴情報によって補完することによって、前記ソフトウェアテストが前記テスト観点に則して設計されているか否かを判定するためのソフトウェア欠陥を生成することを特徴とするソフトウェアテスト自動評価方法。
【請求項８】
前記ソフトウェアテスト自動評価方法であって、
前記ソフトウェア欠陥に基づいて前記テスト対象ソフトウェアを改変することにより、テスト対象ソフトウェにソフトウェア欠陥を混入し、
前記ソフトウェア欠陥が混入されたテスト対象ソフトウェアと、ソフトウェアテストとを併せて実行し、ソフトウェア欠陥を検出して記録することを特徴とする請求項７に記載のソフトウェアテスト自動評価方法。
【請求項９】
前記ソフトウェアテスト自動評価方法であって、
前記ソフトウェア欠陥と、当該ソフトウェア欠陥をテスト対象ソフトウェアに混入した際のソフトウェアテストの実行結果とを照らし合わせることにより、当該ソフトウェアテストが妥当でないと評価できる場合に、当該ソフトウェアテストが本来満足すべきであって、かつ満足していないテスト観点を特定することを特徴とする請求項７または８のいずれかに記載のソフトウェアテスト自動評価方法。
【請求項１０】
前記ソフトウェア欠陥自動評価方法であって、
テスト対象ソフトウェアをプログラム解析し、さらに、予め設定された規則と前記プログラム解析の結果とを照らし合わせることにより、テスト対象ソフトウェアの特徴・性質を抽出することを特徴とする請求項７から９のいずれかに記載のソフトウェア欠陥自動評価方法。
【請求項１１】
前記ソフトウェア欠陥自動評価方法であって、
前記テスト対象ソフトウェアがプログラム生成装置を用いて作成されている場合に、テスト対象プログラム生成時に前記プログラム生成装置に入力された情報である設計情報を前記記憶装置に保持し、
前記欠陥の生成の際は、予め保持された設計情報を、テスト対象ソフトウェアの特徴・性質の情報の少なくとも一部として用いることを特徴とする請求項７から１０のいずれかに記載のソフトウェアテスト自動評価方法。
【請求項１２】
ソフトウェア欠陥自動評価方法であって、
前記テスト対象ソフトウェアに求められる性質・特徴を表した情報である仕様情報を前記記憶装置に保持し、
前記欠陥生成手段は、前記記憶装置が保持する仕様情報を、テスト対象ソフトウェアの特徴・性質の情報の少なくとも一部として用いることを特徴とする請求項１から５のいずれかに記載のソフトウェアテスト自動評価方法。
【請求項１３】
計算機で読み取り可能な記憶媒体であって、請求項７に記載のソフトウェアテスト自動評価方法を実行するためのプログラムを格納したことを特徴とする記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェアテスト自動評価装置および自動評価方法に関する。
【背景技術】
【０００２】
本技術分野の背景技術として、特開２００６−１４６６６９号公報（特許文献１）がある。この公報には、「コンポーネントのソースコードが公開されていない場合にも、またコンポーネントにおける限定した関数のみを用いる場合にも、高い精度において、利用するコードのカバレッジの測定を行うことが可能なカバレッジ測定システム及びカバレッジ測定方法並びにそのプログラムを提供する。」と記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−１４６６６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１には、ソースコードのカバレッジを測定することによって、ソフトウェアテストが十分になされているかを検証するためのメカニズムについて記載されている。
【０００５】
しかし、ソースコードのカバレッジだけでは、ソフトウェアテストが十分になされていることは保証できない。例えば、ソースコード中に分岐処理があった場合に、分岐の両方のケースをテストしていることはカバレッジによって確かめることはできるが、分岐処理の分岐条件が正しいかを（境界値テストなどにより）テストしていることは、カバレッジによっては確かめることができない。
【０００６】
また、ソフトウェアテストが不十分であると判定された時、ソースコードのカバレッジの数値だけでは、どのようなテストが欠けているかを把握することができない。ソフトウェア開発においては、開発フェーズやテスト対象ソフトウェアの特性、また、欠陥のリスクなどの条件により、一部のテストを省略する可能性がある。ソフトウェアテストを評価するためには、どのようなテストが欠けているかを把握し、意図したテスト内容と比較することができなくてはならない。
【０００７】
さらに、特許文献１では、コンポーネントによるソフトウェアの組合せ開発をする際に、開発対象のコンポーネントだけでなく、開発対象のコンポーネントが利用するコンポーネントについても、ソースコードのカバレッジを計測することにより、テストの信頼性を計測している。しかしながら、コンポーネントによる開発においては、利用先のコンポーネントの詳細まで踏み込んだ分析はするべきでなく、外部仕様との齟齬の確認に留めるべきである。でなければ、コンポーネント単位での開発の分業の境界が崩れてしまい、コンポーネント化の恩恵を享受することができなくなってしまう。
【０００８】
そこで、本発明は、ソフトウェアの振舞いや構造上の特徴・性質と、そのソフトウェアに対する妥当なテスト技術・テスト手段とを対応付けた情報である「テスト観点」に基づき、ソフトウェアテストが不足しているか否かを判定して利用者に通知することに加え、不足している場合には、どのようなテストの追加が必要かの情報を利用者に通知することを目的とする。
【課題を解決するための手段】
【０００９】
上記目的を達成するために、以下の構成を採用する。
【００１０】
ソフトウェアの振舞いや構造上の特徴・性質と、そのソフトウェアに対する妥当なテスト技術・テスト手段とを対応付けた情報である「テスト観点」とに基づいて、あるテスト対象のために作成されたソフトウェアテストが当該テスト対象に対して妥当かどうかを判定するソフトウェアテスト自動評価装置であって、予め設定された規則およびテスト対象ソフトウェアの特徴・性質を入力として、前記特徴・性質に対応する欠陥テンプレートを選択するとともに、テスト対象ソフトウェアの特徴情報用いて補完することによって、前記ソフトウェアテストがあるテスト観点に則して設計されているか否かを判定して「ソフトウェア欠陥」を生成する欠陥生成手段を有することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、あるソフトウェアの品質を検証するためのソフトウェアテストの妥当性を、テスト観点と対応付けて評価することにより、本発明の利用者に対し、どのようなテストが不足しているかの情報を提供することができるため、本発明の利用者がテストを修正する作業を支援することができる。さらに本発明によれば、ソフトウェアテストおよびテスト対象ソフトウェアを直接変更することなく検証できるため、利用者に追加作業の負担をかけない。
【図面の簡単な説明】
【００１２】
【図１】ソフトウェアテスト自動評価装置の構成図の例である。
【図２】ソフトウェアテスト自動評価装置の処理を説明するフローチャートの例である。
【図３】テスト対象コードの例である。
【図４】テストコードの例である。
【図５】テスト対象コード特徴情報の例である。
【図６】処理特性特定規則の例である。
【図７】テスト対象コードから特徴情報を抽出する処理の前半を説明するイメージ図の例である。
【図８】テスト対象コードから特徴情報を抽出する処理の後半を説明するイメージ図の例である。
【図９】ソフトウェア欠陥の例である。
【図１０】欠陥基礎情報の例である。
【図１１】テスト対象コード特徴情報からソフトウェア欠陥を生成する処理の前半を説明するイメージ図の例である。
【図１２】テスト対象コード特徴情報からソフトウェア欠陥を生成する処理の後半を説明するイメージ図の例である。
【図１３】テスト対象コードにソフトウェア欠陥を混入する処理を説明するイメージ図の例である。
【図１４】欠陥を混入したテスト対象コードを利用してテストを実行する処理を説明するイメージ図の例である。
【図１５】テスト実行結果を判定する処理を説明するイメージ図の例である。
【図１６】テスト実行結果を判定する処理を説明するイメージ図の例である。
【図１７】テスト評価結果の例である。
【図１８】ソフトウェア欠陥からテスト評価結果を作成する処理を説明するイメージ図の例である。
【図１９】ソフトウェアテスト自動評価装置の構成図の例である。
【図２０】ソフトウェアテスト自動評価装置の処理を説明するフローチャートの例である。
【図２１】テスト対象設計情報の例である。
【図２２】処理特性特定規則の例である。
【図２３】テスト対象設計情報を保管する処理を説明するイメージ図の例である。
【図２４】ソフトウェアテスト自動評価装置の構成図の例である。
【図２５】ソフトウェアテスト自動評価装置の処理を説明するフローチャートの例である。
【図２６】テスト対象仕様情報の例である。
【図２７】欠陥基礎情報の例である。
【図２８】テスト対象仕様情報からソフトウェア欠陥を生成する処理の前半を説明するイメージ図の例である。
【図２９】テスト対象仕様情報からソフトウェア欠陥を生成する処理の後半を説明するイメージ図の例である。
【発明を実施するための形態】
【００１３】
以下、実施例を図面を用いて説明する。
【実施例１】
【００１４】
本実施例では、ソフトウェアテスト自動評価装置の例を説明する。
【００１５】
図１は、本実施例のソフトウェアテスト自動評価装置の構成図の例である。
【００１６】
ソフトウェアテスト自動評価装置１００は、ＣＰＵ１０１、メモリ１０２、入力装置１０３、出力装置１０４、外部記憶装置１０５を有する処理装置である。外部記憶装置１０５は、テスト対象コード記憶部１０６とテスト対象コード特徴情報記憶部１０７、欠陥情報記憶部１０８、欠陥混入済コード記憶部１０９、テストコード記憶部１１０、テスト評価結果記憶部１１１、欠陥生成規則記憶部１１８を保持しており、さらに処理プログラム１１２を保持する。欠陥規則記憶部１１８は、処理特性特定規則記憶部１１９、欠陥基礎情報記憶部１２０を保持する。処理プログラム１１２は、特徴情報抽出部１１３、欠陥生成部１１４、欠陥混入部１１５、テスト実行部１１６、テスト実行結果評価部１１７を保持する。
【００１７】
処理プログラム１１２は実行時にメモリ１０２に読み込まれ、ＣＰＵ１０１によって実行されるものとする。
【００１８】
処理特性特定規則記憶部１１９、欠陥基礎情報記憶部１２０には、それぞれ予め処理特性特定規則、欠陥基礎情報を入力しておく。処理特性特定規則、欠陥基礎情報の詳細については、後述する。
【００１９】
入力装置１０３を介して外部から入力されたテスト対象コードおよびテストコードは、それぞれテスト対象コード記憶部１０６、テストコード記憶部１１０に書き込む。特徴情報抽出部１１３は、処理特性特定規則記憶部１１９から読み出した処理特性特定規則を参照しながら、テスト対象コード記憶部１０６から読み出したテスト対象コードに対応するテスト対象コード特徴情報を抽出し、テスト対象コード特徴情報記憶部１０７に書き込む。欠陥生成部１１４は、欠陥基礎情報記憶部１２０から読み出した欠陥基礎情報を参照しながら、テスト対象コード特徴情報記憶部からテスト対象コード特徴情報を読み出し、対応する欠陥情報を生成して欠陥情報記憶部１０８に書き込む。欠陥混入部１１５は、テスト対象コード記憶部１０６からテスト対象コードを読み出し、欠陥情報記憶部１０８から読み出した欠陥情報によって変更を加えた後、欠陥混入済コード記憶部１０９に書き込む。テスト実行部１１６は、欠陥混入済コード記憶部１０９から読み込んだ欠陥混入済テスト対象プログラムコードと、テストコード記憶部１１０から読み込んだテストプログラムコードとを合わせて実行し、実行結果にしたがって欠陥情報記憶部１０８が保持する欠陥情報を補完する。テスト実行結果評価部１１７は、欠陥情報記憶部１０８から欠陥情報を読み出し、集計してテスト評価結果記憶部１１１に書き込む。
【００２０】
図２は、本実施例のソフトウェアテスト自動評価装置の処理を説明するフローチャートの例である。以降、図２のフローチャートに基づいて、図１の各部の動作を説明する。なお、テスト対象プログラムおよびテストプログラムの例は、Ｊａｖａ（登録商標）のプログラムとして記述している。
【００２１】
（ステップ２００：テストコード及びテスト対象コードの入力）
ステップ２００は、ソフトウェアテスト自動評価装置に対する入力情報として、テストプログラムおよびテスト対象プログラムを、それぞれ入力するステップである。入力操作は、装置の利用者が実施する。ステップ２００では、入力装置１０３から入力されたテストプログラムを、テストコード記憶部１１０に書き込む。また、入力装置１０３から入力されたテスト対象プログラムを、テスト対象コード記憶部１０６に書き込む。
【００２２】
ここで、テストプログラムおよびテスト対象プログラムは、実行可能なソフトウェアとして記述されているものである。テスト対象プログラムは即ち開発対象のソフトウェアであり、テストプログラムはテスト対象プログラムの品質を検証するためのプログラムである。簡単のため、本発明を利用する前段階において、テスト対象プログラムをテストプログラムによって検証した場合、違反が発見できない状態であるものとする。バグが検出されない、または、違反を発見するようなテストケースを取り除いた上で本発明を利用するものとする。テスト対象プログラムおよびテストプログラムの具体例を、それぞれ図３および図４に示す。
【００２３】
図３は、テスト対象コード記憶部１０６に格納されている、本実施例のテスト対象コードの例である。テスト対象コードは、Ｊａｖａファイル３００やＪＳＰファイル３０２などのようにファイル単位で保持されている。ファイル内にはプログラムコードが記載されており、これにはプログラム片３０１のようなテスト対象メソッドの定義を含む。
【００２４】
図４は、テストコード記憶部１１０に格納されている、本実施例のテストコード４００の例である。テストコードには、テスト対象コード３００と同様、実行可能なプログラムがファイル形式で保持されている。
【００２５】
以下のステップ２０１から２０５までは、入力情報をもとにした機械的な処理であり、人手を介することなくソフトウェアテスト自動評価装置のみで実施できる処理である。
【００２６】
（ステップ２０１：テスト対象の特徴情報の抽出）
ステップ２０１では、特徴情報抽出部１１３が、処理特性特定規則記憶部１１９から読み出した処理特性特定規則を参照しながら、テスト対象コード記憶部１０６から読み出したテスト対象コードに対応するテスト対象コード特徴情報を抽出する。抽出したテスト対象コード特徴情報は、テスト対象コード特徴情報記憶部１０７に書き込む。
【００２７】
ここで、テスト対象コード特徴情報とは、あるテスト対象のモジュールを特定するための情報と、当該モジュールの果たす役割の特徴の情報を含む、テスト対象プログラムの特徴を示す情報である。また、処理特性特定規則とは、プログラム解析の結果と、テスト対象プログラムをテストするときの観点に関連付けられた特徴とを対応付ける情報である。テスト対象コード特徴情報の具体例を図５に、処理特性特定規則の具体例を図６に、それぞれ示す。
【００２８】
図５は、テスト対象コード特徴情報記憶部１０７に格納された、本実施例のテスト対象コード特徴情報の例である。テスト対象コード特徴情報５００は、テスト対象のメソッドを特定するための情報である対象モジュール参照情報５０１と、処理特性情報５０６を保持する。対象モジュール参照情報５０１は、クラス名５０２、メソッド名５０３、入力パラメータ５０４、出力パラメータ５０５から成る。また、ひとつのテスト対象コード特徴情報５００内には、処理特性情報５０６を複数保持することができる。
【００２９】
図６は、処理特性特定規則記憶部１１９に格納された、本実施例の処理特性特定規則の例である。処理特性特定規則は、あるテスト観点に関連付けられた処理特性６００と、プログラム上の特徴を示す情報であるプログラム解析結果６０１の組との対応関係６０２の集合によって構成される。ひとつの対応関係６０２に含まれるプログラム解析結果６０１の組は、ある論理関係を示すものである。ここでは、あるプログラムが処理特性６００を持つことの根拠となる情報を、プログラム解析結果６０１として保持している。プログラム解析結果６０１に入る値は、プログラムの静的解析によって得られる特徴となる。具体的には、データ型やメソッドの呼び出し関係、データ依存関係などが含まれる。
【００３０】
図７は、本実施例のテスト対象コードから特徴情報を抽出する処理２０１の前半の構文解析を説明するイメージ図の例である。まず、テスト対象コード記憶部１０６に含まれるテスト対象プログラム３００をひとつ選択し、構文解析を実施する。構文解析によって得られたメソッド毎にひとつ、テスト対象コード特徴情報５００を作成し、テスト対象コード特徴情報記憶部１０７に追加する。追加する際には、構文解析によって得られたクラス名５０２、メソッド名５０３、入力パラメータ５０４、および出力パラメータ５０５の情報を記述する。テスト対象コード記憶部１０６に含まれるすべてのテスト対象プログラム３００について前述の処理を実施することにより、ステップ２０１の前半を完了する。ステップ２０１の前半が完了した時点では、処理特性情報５０６は空欄のままである。
【００３１】
図８は、本実施例のテスト対象コードから特徴情報を抽出する処理２０１の後半の特徴情報追加を説明するイメージ図の例である。まず、テスト対象コード特徴情報記憶部１０７が保持するテスト対象コード特徴情報８００をひとつ選択する。選択したテスト対象コード特徴情報８００に該当するプログラム片８０１を、対象モジュール参照情報５０１を手がかりに探し出し、メソッドのインタフェースや処理内容、および、他のモジュールとの利用関係を静的解析によって取得する。取得した内容にプログラム解析結果５０１が対応しているテスト対象コード特徴情報８０２を、処理特性特定規則記憶部１１９から探し出し、見つかった情報すべてを、選択中のテスト対象コード特徴情報８００の処理特性情報５０６に書き加える。テスト対象コード特徴情報記憶部１０７が保持するすべてのテスト対象コード特徴情報について前述の処理を実施することにより、ステップ２０１の後半を完了する。
【００３２】
（ステップ２０２：欠陥コードの生成）
ステップ２０２では、欠陥生成部１１４が、欠陥基礎情報記憶部１２０から読み出した欠陥基礎情報を参照しながら、テスト対象コード特徴情報記憶部からテスト対象コード特徴情報を読み出す。さらに、読み出したテスト対象コード特徴情報から対応する欠陥情報を生成して欠陥情報記憶部１０８に書き込む。
【００３３】
ここで欠陥情報とは、あるテスト観点に基づくプログラムの欠陥と、その欠陥を反映すべきテスト対象モジュールの情報を含む情報である。また、欠陥基礎情報は、テスト対象モジュールの処理特性と、当該テスト対象モジュールに反映すべきプログラム欠陥の基礎情報を対応付けたものである。欠陥情報の具体例を図９に、欠陥基礎情報の具体例を図１０に、それぞれ示す。
【００３４】
図９は、欠陥情報記憶部１０８に格納された、本実施例の欠陥情報の例である。欠陥情報９００は、当該欠陥情報が対応するテスト対象モジュールを特定するための情報として、クラス名９０１、メソッド名９０２、入力パラメータの型９０３の情報を持つ。また、当該欠陥情報が対応するテスト観点を示す情報である欠陥種別９０４、および、同じテスト対象モジュールおよび欠陥種別をもつ欠陥情報を区別するための情報である欠陥ナンバー９０５を持つ。さらに、当該欠陥をプログラムコードとして表現したプログラム片９０６と、当該欠陥を適用してテストをした結果を記録するための判定情報９０９を保持する。プログラム片９０６は、欠陥を挿入する先のモジュールを示す情報である欠陥挿入先情報９０７と、実際に挿入する振舞いを示す情報である挿入コード９０８によって構成される。挿入コード９０８は、プログラム実行時に特定の条件が成り立っている場合にエラーを生じるような振舞いとして表現する。
【００３５】
図１０は、本実施例の欠陥基礎情報の例である。欠陥基礎情報１０００は、対応するテスト観点を示す情報である欠陥種別１００１、欠陥種別に対応する条件となる処理特性情報の組１００２、および、欠陥雛形集１００３によって構成される。欠陥雛形集１００３は、欠陥雛形情報１００４の集合によって構成される。欠陥雛形集１００３には欠陥雛形情報１００４のそれぞれのポインタ（格納領域のアドレス）が格納される。欠陥雛形情報１００４は、単一の欠陥雛形集における当該欠陥雛形情報の識別情報である欠陥ナンバー１００５、および、欠陥をプログラム片として表現する場合の雛形となるプログラム片雛形１００６によって構成される。プログラム片雛形１００６のうち一部は、代替文字列１００７が記述されているため、プログラムとしての体裁になっていない。
【００３６】
図１１は、本実施例のテスト対象コード特徴情報からソフトウェア欠陥を生成する処理２０２の前半のソフトウェア欠陥の選択を説明するイメージ図の例である。欠陥生成部１１４は、テスト対象コード特徴情報記憶部１０７からテスト対象コード特徴情報１１００をひとつ選択する。さらに、欠陥基礎情報記憶部１２０が保持する欠陥基礎情報１１０１をひとつ選択する。選択したテスト対象コード特徴情報１１００の処理特性５０６が、選択した欠陥基礎情報１１０１が保持する処理特性１００２の条件を満たしているかを判定する。条件を満たしている場合、選択した欠陥基礎情報１１０１の欠陥雛形集１００３が保持するすべての欠陥雛形情報１００４に対してそれぞれ一つ、欠陥情報９００を作成する。この際、クラス名９０１、メソッド名９０２、引数の型情報９０３はそれぞれ、選択中のテスト対象コード特徴情報が保持するクラス名５０２、メソッド名５０３、入力パラメータ５０４を参照することによって取得する。また、欠陥種別９０４は、選択中の欠陥基礎情報１１０１が保持する欠陥種別１００１を参照することによって取得する。さらに、欠陥ナンバー９０５およびプログラム片９０６を、対応する欠陥基礎情報のそれぞれ欠陥ナンバー１００５およびプログラム片雛形１００６を複製することによって取得する。この段階では、プログラム片９０６は代替文字列を含んでいる。また、判定情報９０９は空欄となっている。
【００３７】
図１２は、本実施例のテスト対象コード特徴情報からソフトウェア欠陥を生成する処理２０２の後半の欠陥情報の置き換えを説明するイメージ図の例である。ここでは、作成した欠陥情報９００の欠陥プログラム片９０６に含まれる代替文字列９０７を置き換えることにより、プログラム片９０６を完成させる。代替文字列の意味にあわせ、該当する情報を、テスト対象コード特徴情報から抽出し、文字列を置き換える。プログラム片９０６の置き換えを完了した欠陥情報９００は、欠陥情報記憶部１０８に書き込む。
選択したテスト対象コード特徴情報１１００に対し、処理特性５０６の条件が満たすすべての欠陥基礎情報１１０１について、図１１および図１２で示した操作をおこなう。テスト対象コード特徴情報記憶部１０７が保持するすべてのテスト対象コード特徴情報１１００に対して前述の操作を完了することにより、ステップ２０２を完了する。
【００３８】
（ステップ２０３：テスト対象への欠陥コードの混入）
ステップ２０３では、欠陥混入部１１５が、テスト対象コード記憶部１０６からテスト対象コードを読み出し、欠陥情報記憶部１０８から読み出した欠陥情報によって変更を加えた後、欠陥混入済コード記憶部１０９に書き込む。
【００３９】
図１３は、本実施例のテスト対象コードにソフトウェア欠陥を混入する処理２０３を説明するイメージ図の例である。欠陥挿入先９０７の情報を利用して欠陥を挿入すべきテスト対象モジュールを特定する。さらに、特定されたテスト対象モジュールに対し、欠陥挿入先９０７の情報を利用して挿入方法を決定し、挿入コード９０８を付け加えることにより、欠陥混入済みコード１３０１を作成し、欠陥混入済みコード記憶部１０９に書き込む。欠陥挿入先９０７が対応づかないテスト対象モジュール１０６については、複製したものをそのまま欠陥混入済みコード記憶部１０９に書き込む。また、利用した欠陥情報１３００の判定情報９０９には、現在利用しているものである旨を表すため、「判定中」と記入しておく。
【００４０】
（ステップ２０４：テスト実行）
ステップ２０４では、テスト実行部１１７が、欠陥混入済みコード記憶部１０９から読み込んだテスト対象プログラムコードと、テストコード記憶部１１０から読み込んだテストプログラムコードとを合わせて実行し、実行結果にしたがって欠陥情報記憶部１０８が保持する欠陥情報を補完する。
【００４１】
図１４は、本実施例の欠陥を混入したテスト対象コードを利用してテストを実行する処理２０４を説明するイメージ図の例である。テストコード記憶部１１０が保持するすべてのテストコード、および、欠陥混入済コード記憶部１０９保持するすべてのテスト対象コードを取得し、プログラムの処理系の上で実行し、そのログを取得する。テストコードはＪＵｎｉｔに従って記述されており、テストプログラムとして記載されている仕様に違反していた件数をログ情報として出力することができる。ＪＶＭ(Java Virtual Machine)はＪａｖａの実行環境である。
【００４２】
図１５および図１６は、本実施例のテスト実行結果を判定する処理を説明するイメージ図の例である。欠陥情報記憶部１０８から、現在処理中の欠陥である欠陥情報９００を、判定情報９０９が「判定中」となっているものを探し出すことによって取得する。さらに、探し出した欠陥情報９００の判定情報９０９を、前述のテスト実行結果を踏まえて書き換える。前述のテスト実行の結果、テストプログラムとして記載されている仕様に対する違反が１件以上検出された場合、生成した欠陥に対するテストがおこなわれていることがわかる。よって、図１５に示すように、このときは、判定情報９０９を「ＯＫ」と書き換え、かつ、検出された違反の件数を、例えば「失敗３件」として内部変数に記憶する。一方、表明に対する違反が検出されなかった場合、生成した欠陥に対するテストが存在しないことになる。よって、このときは、図１６に示すように、判定情報９０９を「ＮＧ」と書き換え、かつ、検出された違反の件数を、例えば「失敗０件」として内部変数に記憶する。
【００４３】
ステップ２０３およびステップ２０４の処理は、欠陥情報記憶部１０８が保持するすべての欠陥情報に対して実行する。欠陥情報記憶部１０８が保持する欠陥情報９００のうち、判定情報９０９が空欄になっているものが残っている場合、これに対してステップ２０３およびステップ２０４の処理を実行する。欠陥情報記憶部１０８が保持するすべての欠陥情報９００の判定情報９０９に「ＯＫ」もしくは「ＮＧ」のいずれかが記載されている場合、すべての欠陥情報に対してステップ２０３およびステップ２０４の処理が完了したことになる。これにより、テスト評価結果記憶部１１２が保持するテスト評価結果を完成させる。
【００４４】
（ステップ２０５：テスト実行結果の分析）
ステップ２０５では、テスト実行結果評価部１１８が、欠陥情報記憶部１０８から欠陥情報を読み出し、集計してテスト評価結果記憶部１１２に書き込む。
【００４５】
図１７は、テスト評価結果記憶部１１１に格納された、本実施例のテスト評価結果の例である。ひとつのモジュールに関するテスト評価結果１７００は、モジュールを特定するための情報である対象モジュール参照情報１７０１と、当該モジュールについてテストが不十分と判定されたテスト観点に紐づく情報である未検出欠陥情報１７０５を保持する。対象モジュール参照情報は、クラス名１７０２、メソッド名１７０３、入力パラメータ１７０４から構成されている。
【００４６】
図１８は、本実施例のソフトウェア欠陥からテスト評価結果を作成する処理を説明するイメージ図の例である。欠陥情報記憶部１０８から欠陥情報９００をひとつ選択し、判定情報９０９を確認する。判定情報９０９が「ＯＫ」であった場合、欠陥情報９００はそのまま廃棄し、欠陥情報記憶部１０８から取り除く。判定情報９０９が「ＮＧ」であった場合、欠陥情報９００をテスト評価結果記憶部１１２に反映した後、廃棄し、欠陥情報記憶部１０８から取り除く。
【００４７】
欠陥情報９００をテスト評価結果記憶部１１１に反映する際には、まず、対応するテスト評価結果１７００をテスト評価結果記憶部１１１から探し出す。具体的には、欠陥情報９００のクラス名９０１、メソッド名９０２、引数の型９０３と、テスト評価結果１７００のクラス名１７０２、メソッド名１７０３、引数の型１７０４とをそれぞれ比較することにより、欠陥情報９００とテスト評価結果１７００を対応づける。対応するテスト評価結果１７００が発見できなかった場合、テスト評価結果１７００を作成し、テスト評価結果記憶部に追加する。追加したテスト評価結果１７００のクラス名１７０２にはクラス名９０１の情報を、メソッド名１７０３にはメソッド名９０２の情報を、引数の型１７０４には引数の型９０３の情報を記入する。
【００４８】
次に、未検出欠陥情報を反映させる。前述のテスト評価結果１７００の未検出欠陥情報１７０５を確認し、欠陥情報９００の欠陥種別９０４に対応するものを探す。もし対応する未検出欠陥情報が見つかった場合は、そのまま終了する。見つからなかった場合は、テスト評価結果１７００の未検出欠陥情報１７０５に欠陥種別９０４を追加し、終了する
欠陥情報記憶部１０８が保持する全ての欠陥情報９００について、テスト評価結果記憶部１１１への反映処理を完了することにより、ステップ２０５を完了する。
【００４９】
（ステップ２０６：テスト評価結果の出力）
ステップ２０６は、開発者が、ソフトウェアテスト自動評価装置１００によるテストの評価結果を、出力装置１０４を通じて取得するステップである。ソフトウェアテスト自動評価装置１００は、開発者の指示に従い、テスト評価結果記憶部１１２からテスト評価結果を読み出し、図１８下のテーブルのように、出力装置１０４に出力する。なお、出力は、計算機で扱えるようテキストデータ又はバイナリデータとして出力しても良いし、開発者が閲覧できるようモニタに文字又はグラフィックを表示してもよい。
【実施例２】
【００５０】
本実施例では、テスト対象ソフトウェアをプログラム生成装置で生成している場合において、テスト対象のプログラムコードから特徴情報を抽出する代わりに、テスト対象プログラムを生成する際に入力した設計情報を用いるソフトウェアテスト自動評価装置の例を説明する。
【００５１】
図１９は、本実施例のソフトウェア自動評価装置の構成図の例である。
【００５２】
図１９に示す構成は、外部記憶装置１０５は、図１のテスト対象コード特徴情報記憶部１０７の代わりに、テスト対象設計情報記憶部１９００を保持し、処理プログラム１１２は、図１の特徴情報抽出部１１３の内容を変更した特徴情報抽出部１９０１を保持し、欠陥生成規則記憶部１１８は、図１の処理特性特定規則記憶部１１９の内容を変更した処理特性特定規則記憶部１９０２を保持していること以外は、図１の構成と同じである。
【００５３】
処理特性特定規則記憶部１９０２、欠陥基礎情報記憶部１２０には、それぞれ予め処理特性特定規則、欠陥基礎情報を入力しておく。処理特性特定規則、欠陥基礎情報の詳細については、後述する。
【００５４】
入力装置１０３を介して外部から入力されたテスト対象プログラム、テスト対象設計情報、およびテストコードは、それぞれテスト対象コード記憶部１０６、テスト対象設計情報記憶部１９００、テストコード記憶部１１０に書き込む。特徴情報抽出部１９０１は、処理特性特定規則記憶部１９０２から読み出した処理特性特定規則を参照しながら、テスト対象設計情報記憶部１９００から読み出したテスト対象設計情報を補完し、テスト対象設計情報記憶部１９００に書き込む。その他の処理部の機能は、図１に関して説明したものと同じである。
【００５５】
図２０は、本実施例のソフトウェアテスト自動評価装置の処理を説明するフローチャートの例である。以降、図２０のフローチャートに基づいて、図１９の各部の動作を説明する。図２のステップ２００、２０１及び２０２の代わりに、図２０では、ステップ２０００、２００１及び２００２を実行する。ステップ２０３〜２０６は図２の処理と同じである。
【００５６】
（ステップ２０００：テストコード及びテスト対象設計情報の入力）
ステップ２０００は、図２のステップ２００と同じ処理を行い、さらに、入力装置１０３から入力されたテスト対象設計情報をテスト対象設計情報記憶部１９００に書き込む。
【００５７】
ここで、テスト対象設計情報とは、テスト対象プログラムをプログラム生成装置で生成している場合において、テスト対象プログラムの動作を定義する情報としてプログラム生成装置に入力した情報である。テスト対象設計情報の例を図２１に示す。
【００５８】
図２１は、テスト対象設計情報記憶部１９００に格納されている、本実施例のテスト対象設計情報の例である。テスト対象設計情報２１００は、対象モジュール参照情報５０１と、処理特性情報５０６、および、振舞い定義情報２１０１を保持する。対象モジュール参照情報５０１は、テスト対象のメソッドを特定するための情報であり、クラス名５０２、メソッド名５０３、入力パラメータ５０４、出力パラメータ５０５から成る。また、ひとつのテスト対象設計情報２１００内には、振舞い定義情報２１０１、処理特性情報５０６をそれぞれ複数保持することができる。振舞い定義情報２１０１は、テスト対象プログラムの動作を定義する情報としてプログラム生成装置に入力した情報であり、利用するモジュールやＡＰＩ、発行する例外など、プログラムの振舞い方法に関する情報を含む。
【００５９】
ステップ２０００が完了した時点では、すべてのテスト対象モジュールの設計情報２１００について、少なくとも対象モジュール参照情報５０１、振舞い定義情報２１０１は入力されているものとする。処理特性５０６については、未入力状態でもよい。
なお、テストプログラムおよびテスト対象プログラムは、実施例１と同様のものを利用してよい。
【００６０】
（ステップ２００１：テスト対象の特徴情報の抽出）
ステップ２００１では、特徴情報抽出部１９０１が、処理特性特定規則記憶部１９０２から読み出した処理特性特定規則を参照しながら、テスト対象設計情報記憶部１９００から読み出したテスト対象設計情報を補完し、テスト対象設計情報記憶部１９００に書き込む。
【００６１】
ここで、処理特性特定規則記憶部１９０２が保持する処理特性特定規則とは、設計情報に記載された振舞い定義情報２１０１と、テスト対象プログラムをテストするときの観点に紐づく特徴とを対応付ける情報である。処理特性特定規則の具体例を図２２に示す。
【００６２】
図２２は、処理特性特定規則記憶部１９０２に格納されている、本実施例の処理特性特定規則の例である。処理特性特定規則は、あるテスト観点に紐づく処理特性６００と、テスト対象プログラムの動作の特徴を示す情報である動作設定情報２２０１の組との対応関係２２００の集合によって構成される。ひとつの対応関係２２００に含まれる動作設定情報２２０１の組は、ある論理関係を構成するものである。ここでは、あるプログラムが処理特性６００を持つことの根拠となる情報を、動作設定情報２２０１として保持している。動作設定情報２２０１に入る値は、テスト対象設計情報として入力され得る値となる。具体的には、データ型やメソッドの呼び出し関係、データ依存関係などが含まれる。
【００６３】
図２３は、本実施例のテスト対象設計情報を補完する処理を説明するイメージ図の例である。まず、テスト対象設計情報記憶部１９００に含まれるテスト対象設計情報２３０１をひとつ選択する。選択したテスト対象設計情報２３００が該当する処理特性特定規則２３００を、処理特性特定規則記憶部１９０２から探し出し、見つかった情報すべてを、選択中のテスト対象設計情報２３０１の処理特性情報５０６に書き加える。テスト対象設計情報記憶部２３０１が保持するすべてのテスト対象設計情報について前述の処理を実施することにより、ステップ２００１の処理を完了する。
【００６４】
（ステップ２００２：欠陥コードの生成）
ステップ２００２は、実施例１のステップ２０１と同様の動作をするが、欠陥生成部１１４は、テスト対象コード特徴情報記憶部１０７が保持するテスト対象コード特徴情報５００の対象モジュール参照情報５０１、処理特性情報５０６の代わりに、それぞれ、テスト対象設計情報記憶部１９００が保持するテスト対象設計情報２１００の対象モジュール参照情報５０１、処理特性５０６を利用する。
【００６５】
ステップ２０３から２０６までについては、実施例１と同様の動作でよい。
【実施例３】
【００６６】
本実施例では、テスト対象ソフトウェアの開発者がテスト対象ソフトウェアに求める性質・特徴を表した情報である仕様情報を用いるプソフトウェアテスト自動評価装置の例を説明する。
【００６７】
図２４は、本実施例のソフトウェア自動評価装置の構成図の例である。
【００６８】
図２４に示す構成では、外部記憶装置１０５は、図１のテスト対象コード特徴情報記憶部１０７の代わりに、テスト対象仕様情報記憶部２４００を保持し、処理プログラム１１２は、図１の特徴情報抽出部１１３を保持せず、欠陥生成規則記憶部１１８は、図１の処理特性特定規則記憶部１１９保持せず、図１の欠陥基礎情報記憶部１２０の内容を変更した欠陥基礎情報記憶部２４０１を保持していること以外は、図１の構成と同じである。
【００６９】
欠陥基礎情報記憶部２４０１には、予め欠陥基礎情報を入力しておく。欠陥基礎情報の詳細については、後述する。
【００７０】
入力装置１０３を介して外部から入力されたテスト対象プログラム、テスト対象仕様情報、およびテストコードは、それぞれテスト対象コード記憶部１０６、テスト対象仕様情報記憶部２４００、テストコード記憶部１１０に書き込む。欠陥生成部１１４は、欠陥基礎情報記憶部２４０１から読み出した欠陥基礎情報を参照しながら、テスト対象コード特徴情報記憶部からテスト対象コード特徴情報を読み出し、対応する欠陥情報を生成して欠陥情報記憶部１０８に書き込む。その他の処理部の機能は、図１に関して説明したものと同じである。
【００７１】
図２５は、本実施例のソフトウェアテスト自動評価装置の処理を説明するフローチャートの例である。以降、図２５のフローチャートに基づいて、図２４の各部の動作を説明する。図２のステップ２００〜２０２の代わりに、図２５では、ステップ２５００及び２５０１を実行する。ステップ２０３〜２０６は図２の処理と同じである。
【００７２】
（ステップ２５００：テストコード及びテスト対象仕様情報の入力）
ステップ２５００は、図２のステップ２００と同じ処理を行い、さらに、入力装置１０３から入力されたテスト対象仕様情報をテスト対象仕様情報記憶部２４００に書き込む。
【００７３】
ここで、テスト対象仕様情報とは、テスト対象ソフトウェアの開発者がテスト対象ソフトウェアに求める性質・特徴を表した情報である。テスト対象設計情報の例を図２６に示す。
【００７４】
図２６は、テスト対象仕様情報記憶部２４００に格納された、本実施例のテスト対象仕様情報の例である。テスト対象仕様情報２６００は、対象モジュール参照情報５０１と、仕様特性情報２６０１を保持する。対象モジュール参照情報５０１は、テスト対象のメソッドを特定するための情報であり、クラス名５０２、メソッド名５０３、入力パラメータ５０４、出力パラメータ５０５から成る。
【００７５】
また、ひとつのテスト対象仕様情報２６００内には、仕様特性情報２６０１を複数保持することができる。仕様特性情報２６０１は、テスト対象ソフトウェアの開発者があるテスト対象モジュールに求める性質・特徴を構成する情報であり、当該モジュールを呼び出せるモジュール・ＡＰＩや当該モジュールから呼び出せるモジュール・ＡＰＩの制約、また、プログラム中の変数を含むリソースへのアクセス権限など、当該モジュールに対する制約や振舞いの情報を含む情報である。
【００７６】
なお、テストプログラムおよびテスト対象プログラムは、実施例１と同様のものを利用してよい。
【００７７】
（ステップ２５０１：欠陥コードの生成）
ステップ２５０１では、欠陥生成部１１４が、欠陥基礎情報記憶部２４０１から読み出した欠陥基礎情報を参照しながら、テスト対象仕様情報記憶部２４００からテスト対象仕様情報を読み出す。さらに、読み出したテスト対象仕様情報から対応する欠陥情報を生成して欠陥情報記憶部１０８に書き込む。
ここで欠陥基礎情報は、テスト対象モジュールの処理特性と、当該テスト対象モジュールに反映すべきプログラム欠陥の基礎情報を対応付けたものである。欠陥基礎情報の具体例を図２７に示す。
【００７８】
図２７は、欠陥基礎情報記憶部２４０１に格納された、本実施例の欠陥基礎情報の例である。図２７に示す情報は、図１０の情報とほとんど同じであるが、図１０の「処理特性」１００２の代わりに、図２７は、「特性」２７０１を保持する。なお、欠陥情報は実施例１と同様のものを利用してよい。
【００７９】
図２８は、本実施例のテスト対象仕様情報からソフトウェア欠陥を生成する処理２５０１の前半のソフトウェアの選択を説明するイメージ図の例である。欠陥生成部１１４は、テスト対象仕様情報記憶部２４００からテスト対象仕様情報２８００をひとつ選択する。さらに、欠陥基礎情報記憶部２４０１が保持する欠陥基礎情報２８０１をひとつ選択する。選択したテスト対象コード特徴情報２８００の仕様特性２６０１が、選択した欠陥基礎情報２８０１が保持する仕様特性２７０１の条件を満たしているかを判定する。条件を満たしている場合、選択した欠陥基礎情報２８０１の欠陥雛形集１００３が保持するすべての欠陥雛形情報１００４に対してそれぞれ一つ、欠陥情報９００を作成する。
【００８０】
この際、クラス名９０１、メソッド名９０２、引数の型情報９０３はそれぞれ、選択中のテスト対象コード特徴情報が保持するクラス名５０２、メソッド名５０３、入力パラメータ５０４を参照することによって取得する。また、欠陥種別９０４は、選択中の欠陥基礎情報２８０１が保持する欠陥種別１００１を参照することによって取得する。さらに、欠陥ナンバー９０５およびプログラム片９０６を、対応する欠陥基礎情報のそれぞれ欠陥ナンバー１００５およびプログラム片雛形１００６を複製することによって取得する。この段階では、プログラム片９０６は代替文字列を含んでいる。また、判定情報９０９は空欄となっている。
【００８１】
図２９は、本実施例のテスト対象仕様情報からソフトウェア欠陥を生成する処理２５０１の後半の欠陥情報の置き換えを説明するイメージ図の例である。ここでは、作成した欠陥情報９００の欠陥プログラム片９０６に含まれる代替文字列９０７を置き換えることにより、プログラム片９０６を完成させる。代替文字列の意味にあわせ、該当する情報を、テスト対象コード特徴情報から抽出し、文字列を置き換える。プログラム片９０６の置き換えを完了した欠陥情報９００は、欠陥情報記憶部１０８に書き込む。
【００８２】
選択したテスト対象仕様情報２８００に対し、仕様特性２６０１の条件が満たすすべての欠陥基礎情報２８０１について、図２７および図２９で示した操作をおこなう。テスト対象コード特徴情報記憶部１０７が保持するすべてのテスト対象コード特徴情報１１００に対して前述の操作を完了することにより、ステップ２５０１を完了する。
【００８３】
ステップ２０３から２０６までについては、実施例１と同様の動作でよい。
【００８４】
なお、本発明は上記実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施礼は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。
【００８５】
また、ある実施例の構成の一部を他の実施例の構成に置き換えることも可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【００８６】
また、上記の各構成、機能、処理部、処理手段等は、それら一部又は全部を、例えば集積回路で設計する等により、ハードウェアで実現してもよい。
【符号の説明】
【００８７】
１００：プログラム自動生成装置、１０１：ＣＰＵ、１０２：メモリ、１０３：入力装置、１０４：出力装置、１０５：外部記憶装置、１０６：テスト対象コード記憶部、１０７：テスト対象コード特徴情報記憶部、１０８：欠陥情報記憶部、１０９：欠陥混入済コード記憶部、１１０：テストコード記憶部、１１１：テスト評価結果記憶部、１１２：処理プログラム、１１３：特徴情報抽出部、１１４：欠陥生成部、１１５：欠陥混入部、１１６：テスト実行部、１１７：テスト実行結果評価部、１１８：欠陥生成規則記憶部、１１９：処理特性特定規則記憶部、１２０：欠陥基礎情報記憶部
【図１】
2013218492.tif 000003
【図２】
2013218492.tif 000004
【図３】
2013218492.tif 000005
【図４】
2013218492.tif 000006
【図５】
2013218492.tif 000007
【図６】
2013218492.tif 000008
【図７】
2013218492.tif 000009
【図８】
2013218492.tif 000010
【図９】
2013218492.tif 000011
【図１０】
2013218492.tif 000012
【図１１】
2013218492.tif 000013
【図１２】
2013218492.tif 000014
【図１３】
2013218492.tif 000015
【図１４】
2013218492.tif 000016
【図１５】
2013218492.tif 000017
【図１６】
2013218492.tif 000018
【図１７】
2013218492.tif 000019
【図１８】
2013218492.tif 000020
【図１９】
2013218492.tif 000021
【図２０】
2013218492.tif 000022
【図２１】
2013218492.tif 000023
【図２２】
2013218492.tif 000024
【図２３】
2013218492.tif 000025
【図２４】
2013218492.tif 000026
【図２５】
2013218492.tif 000027
【図２６】
2013218492.tif 000028
【図２７】
2013218492.tif 000029
【図２８】
2013218492.tif 000030
【図２９】
2013218492.tif 000031