(57)【要約】【課題】現実のシステムを反映する複雑な動作仕様や多様な事象を取り扱いつつ、規模を抑えたシステム状態遷移系ならびにテストケースを生成する。【解決手段】システム動作仕様記述に基づいて遷移事象を順次生起させてシステム状態遷移系を生成する際に、遷移事象の順序制約を表現するシナリオ状態遷移系も同時に遷移させ、順次生起させる遷移事象を、当該シナリオ状態遷移系で遷移可能なものに制限する。【選択図】図１
2010211481.tif 000002
【特許請求の範囲】
【請求項１】
対象システムのテストケースを生成するテストケース生成装置であって、
それぞれの値の組により第１状態を表す複数の第１変数と、複数の遷移事象と、前記複数の遷移事象のそれぞれが発生するために前記複数の第１変数により満たされる必要のある事前条件と、前記複数の遷移事象のそれぞれが発生したときに実行する前記第１変数の更新式とを記述したシステム動作仕様記述を記憶する第１の記憶部と、
前記複数の遷移事象の発生に応じて、第２変数の値により表される複数の第２状態間の遷移を記述したシナリオ状態遷移系を記憶する第２の記憶部と、
前記システム動作仕様記述と前記シナリオ状態遷移系とを元に前記複数の遷移事象の発生に応じた前記第１状態間の遷移を記述したシステム状態遷移系を生成するシステム状態遷移系生成部と、
前記システム状態遷移系の各遷移を順次辿ることにより前記システム状態遷移系のすべての遷移を網羅する遷移事象系列であるテストケースを生成するテストケース生成部と、
前記テストケースを出力するテストケース出力部と、を備え、
前記システム状態遷移系生成部は、
データを一時的に格納するための第１および第２の一時記憶手段を有し、
前記複数の第１変数の初期値を定めた第１初期状態を生成し、
前記シナリオ状態遷移系における初期状態である第２初期状態を特定し、
前記第１初期状態と前記第２初期状態とにおいて発生可能な共通の遷移事象を検出し、
前記第１初期状態および前記第２初期状態をそれぞれ検出遷移事象により遷移させて遷移先の第１状態および遷移先の第２状態を求め、前記第１初期状態、前記検出遷移事象、遷移先の前記第１状態を一組として前記第１の一時記憶手段に格納し、
前記遷移先の第１および第２状態のペアである複合状態を前記第２の一時記憶手段に格納し、
（Ａ）前記第２の一時記憶手段においてまだ選択されていない前記複合状態を選択し、
（Ｂ）選択した複合状態に含まれる第１および第２状態のそれぞれにおいて発生可能な共通の遷移事象を検出し、前記第１および第２状態をそれぞれ検出遷移事象により遷移させて遷移先の第１および第２状態を求め、前記選択した複合状態における遷移元の第１状態、前記検出遷移事象、求めた遷移先の第１の状態を一組として前記第１の一時記憶手段に格納し、
（Ｃ）（Ｂ）で求められた前記遷移先の第１および第２状態のペアである複合状態が前記第２の一時記憶手段に存在ないときは前記複合状態を前記第２の一時記憶手段に格納し、
（Ａ）〜（Ｃ）を前記第２の一時記憶手段に含まれるすべての前記複合状態が選択済みになるまで繰り返し行い、繰り返し処理が終了した後、前記１の一時記憶手段における各前記組の集合である前記システム状態遷移系を取得する
ことを特徴とするテストケース生成装置。
【請求項２】
前記複数の遷移事象が生起する順序のシナリオを記述したシナリオ記述と、
前記遷移事象毎に前記遷移事象が生起可能な遷移元第２状態と、前記第２状態で前記遷移事象が生起したときの遷移先第２状態との対応を記述した対応情報と、を記憶する第３の記憶部と、
前記対応情報に基づき初期状態から前記シナリオ記述に従って遷移事象を発生させることにより前記シナリオ状態遷移系を生成するシナリオ状態遷移系生成部と
をさらに備えた請求項１に記載のテストケース生成装置。
【請求項３】
コンピュータにおいて、対象システムのテストケースを生成するテストケース生成方法であって、
それぞれの値の組により第１状態を表す複数の第１変数と、複数の遷移事象と、前記複数の遷移事象のそれぞれが発生するために前記複数の第１変数により満たされる必要のある事前条件と、前記複数の遷移事象のそれぞれが発生したときに実行する前記第１変数の更新式とを記述したシステム動作仕様記述を記憶する第１の記憶部と、
前記複数の遷移事象の発生に応じて、第２変数の値によって表される複数の第２状態間の遷移を記述したシナリオ状態遷移系を記憶する第２の記憶部と、にアクセスするステップと、
前記システム動作仕様記述と前記シナリオ状態遷移系とを元に前記複数の遷移事象の発生に応じた前記第１状態間の遷移を記述したシステム状態遷移系を生成するシステム状態遷移系生成ステップと、
前記システム状態遷移系の各遷移を順次辿ることにより前記システム状態遷移系のすべての遷移を網羅する遷移事象系列であるテストケースを生成するテストケース生成ステップと、
前記テストケースを出力するテストケース出力ステップと、を備え、
前記システム状態遷移系生成ステップは、
前記複数の第１変数の初期値を定めた第１初期状態を生成し、
前記シナリオ状態遷移系における初期状態である第２初期状態を特定し、
前記第１初期状態と前記第２初期状態とにおいて発生可能な共通の遷移事象を検出し、
前記第１初期状態および前記第２初期状態をそれぞれ検出遷移事象により遷移させて遷移先の第１状態および遷移先の第２状態を求め、前記第１初期状態、前記検出遷移事象、遷移先の前記第１状態を一組として第１の一時記憶手段に格納し、
前記遷移先の第１および第２状態のペアである複合状態を第２の一時記憶手段に格納し、
（Ａ）前記第２の一時記憶手段においてまだ選択されていない前記複合状態を選択し、
（Ｂ）選択した複合状態に含まれる第１および第２状態のそれぞれにおいて発生可能な共通の遷移事象を検出し、前記第１および第２状態をそれぞれ検出遷移事象により遷移させて遷移先の第１および第２状態を求め、前記選択した複合状態における遷移元の第１状態、前記検出遷移事象、求めた遷移先の第１の状態を一組として前記第１の一時記憶手段に格納し、
（Ｃ）（Ｂ）で求められた前記遷移先の第１および第２状態のペアである複合状態が前記第２の一時記憶手段に存在しないときは前記複合状態を前記第２の一時記憶手段に格納し、
（Ａ）〜（Ｃ）を前記第２の一時記憶手段に含まれるすべての前記複合状態が選択済みになるまで繰り返し行い、繰り返し処理が終了した後、前記１の一時記憶手段における各前記組の集合である前記システム状態遷移系を取得する
ことを特徴とするテストケース生成方法。
【請求項４】
請求項３に記載の各ステップをコンピュータに実行させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テストケース生成装置およびその生成方法、ならびにテストケース生成のためのコンピュータプログラムに関する。
【背景技術】
【０００２】
システムの動作仕様を状態探索してシステム状態遷移系を生成し、システム状態遷移系で起き得る遷移を網羅するようにテストケースを作成する方法が知られている。この方法は、システムの状態間で起き得る遷移関係を網羅するテストケースを列挙できる利点がある。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】ISBN-4781910262, J. ホップクロフト他, “オートマトン言語理論 計算論”, サイエンス社(2003).
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記の方法はシステムの動作仕様が複雑になるとシステム状態遷移系の規模とテストケースの規模が指数関数的に増える問題がある。また大規模なシステム状態遷移系の遷移関係を網羅するテストケースは、一定のテスト制約の下で重複したテストケースを多く含む問題もある。
【０００５】
テストケースの生成方法は、一定のテスト制約の下で起こり得るテストケースを網羅的に列挙する方法と見なせる。テスト制約は多様な形が考えられ、たとえば公知の方法として、遷移事象の種類を制限する方法などがある。しかし、この方法の場合、現実のシステムを反映した複雑な動作をシステム状態遷移系で再現できなくなり、テストの実施可能性が損なわれる。
【０００６】
本発明は、現実のシステムを反映する複雑な動作仕様や多様な事象を取り扱いつつ、規模を抑えたシステム状態遷移系ならびにテストケースを生成できるテストケース生成装置、テストケース生成方法、テストケース生成のためのコンピュータプログラムを提供する。
【課題を解決するための手段】
【０００７】
本発明の一態様に係るテストケース生成装置は、
対象システムのテストケースを生成するテストケース生成装置であって、
それぞれの値の組により第１状態を表す複数の第１変数と、複数の遷移事象と、前記複数の遷移事象のそれぞれが発生するために前記複数の第１変数により満たされる必要のある事前条件と、前記複数の遷移事象のそれぞれが発生したときに実行する前記第１変数の更新式とを記述したシステム動作仕様記述を記憶する第１の記憶部と、
前記複数の遷移事象の発生に応じて、第２変数の値により表される複数の第２状態間の遷移を記述したシナリオ状態遷移系を記憶する第２の記憶部と、
前記システム動作仕様記述と前記シナリオ状態遷移系とを元に前記複数の遷移事象の発生に応じた前記第１状態間の遷移を記述したシステム状態遷移系を生成するシステム状態遷移系生成部と、
前記システム状態遷移系の各遷移を順次辿ることにより前記システム状態遷移系のすべての遷移を網羅する遷移事象系列であるテストケースを生成するテストケース生成部と、
前記テストケースを出力するテストケース出力部と、を備え、
前記システム状態遷移系生成部は、
データを一時的に格納するための第１および第２の一時記憶手段を有し、
前記複数の第１変数の初期値を定めた第１初期状態を生成し、
前記シナリオ状態遷移系における初期状態である第２初期状態を特定し、
前記第１初期状態と前記第２初期状態とにおいて発生可能な共通の遷移事象を検出し、
前記第１初期状態および前記第２初期状態をそれぞれ検出遷移事象により遷移させて遷移先の第１状態および遷移先の第２状態を求め、前記第１初期状態、前記検出遷移事象、遷移先の前記第１状態を一組として前記第１の一時記憶手段に格納し、
前記遷移先の第１および第２状態のペアである複合状態を前記第２の一時記憶手段に格納し、
（Ａ）前記第２の一時記憶手段においてまだ選択されていない前記複合状態を選択し、
（Ｂ）選択した複合状態に含まれる第１および第２状態のそれぞれにおいて発生可能な共通の遷移事象を検出し、前記第１および第２状態をそれぞれ検出遷移事象により遷移させて遷移先の第１および第２状態を求め、前記選択した複合状態における遷移元の第１状態、前記検出遷移事象、求めた遷移先の第１の状態を一組として前記第１の一時記憶手段に格納し、
（Ｃ）（Ｂ）で求められた前記遷移先の第１および第２状態のペアである複合状態が前記第２の一時記憶手段に存在ないときは前記複合状態を前記第２の一時記憶手段に格納し、
（Ａ）〜（Ｃ）を前記第２の一時記憶手段に含まれるすべての前記複合状態が選択済みになるまで繰り返し行い、繰り返し処理が終了した後、前記１の一時記憶手段における各前記組の集合である前記システム状態遷移系を取得する
ことを特徴とする。
【０００８】
本発明の一態様によるテストケース生成方法は、
コンピュータにおいて実行する、対象システムのテストケースを生成するテストケース生成方法であって、
それぞれの値の組により第１状態を表す複数の第１変数と、複数の遷移事象と、前記複数の遷移事象のそれぞれが発生するために前記複数の第１変数により満たされる必要のある事前条件と、前記複数の遷移事象のそれぞれが発生したときに実行する前記第１変数の更新式とを記述したシステム動作仕様記述を記憶する第１の記憶部と、
前記複数の遷移事象の発生に応じて、第２変数の値によって表される複数の第２状態間の遷移を記述したシナリオ状態遷移系を記憶する第２の記憶部と、にアクセスするステップと、
前記システム動作仕様記述と前記シナリオ状態遷移系とを元に前記複数の遷移事象の発生に応じた前記第１状態間の遷移を記述したシステム状態遷移系を生成するシステム状態遷移系生成ステップと、
前記システム状態遷移系の各遷移を順次辿ることにより前記システム状態遷移系のすべての遷移を網羅する遷移事象系列であるテストケースを生成するテストケース生成ステップと、
前記テストケースを出力するテストケース出力ステップと、を備え、
前記システム状態遷移系生成ステップは、
前記複数の第１変数の初期値を定めた第１初期状態を生成し、
前記シナリオ状態遷移系における初期状態である第２初期状態を特定し、
前記第１初期状態と前記第２初期状態とにおいて発生可能な共通の遷移事象を検出し、
前記第１初期状態および前記第２初期状態をそれぞれ検出遷移事象により遷移させて遷移先の第１状態および遷移先の第２状態を求め、前記第１初期状態、前記検出遷移事象、遷移先の前記第１状態を一組として第１の一時記憶手段に格納し、
前記遷移先の第１および第２状態のペアである複合状態を第２の一時記憶手段に格納し、
（Ａ）前記第２の一時記憶手段においてまだ選択されていない前記複合状態を選択し、
（Ｂ）選択した複合状態に含まれる第１および第２状態のそれぞれにおいて発生可能な共通の遷移事象を検出し、前記第１および第２状態をそれぞれ検出遷移事象により遷移させて遷移先の第１および第２状態を求め、前記選択した複合状態における遷移元の第１状態、前記検出遷移事象、求めた遷移先の第１の状態を一組として前記第１の一時記憶手段に格納し、
（Ｃ）（Ｂ）で求められた前記遷移先の第１および第２状態のペアである複合状態が前記第２の一時記憶手段に存在しないときは前記複合状態を前記第２の一時記憶手段に格納し、
（Ａ）〜（Ｃ）を前記第２の一時記憶手段に含まれるすべての前記複合状態が選択済みになるまで繰り返し行い、繰り返し処理が終了した後、前記１の一時記憶手段における各前記組の集合である前記システム状態遷移系を取得する
ことを特徴とする。
【０００９】
本発明の一態様によるコンピュータプログラムは、上記方法に記載の各ステップをコンピュータに実行させることを特徴とする。
【発明の効果】
【００１０】
本発明により、現実のシステムを反映する複雑な動作仕様や多様な事象を取り扱いつつ、規模を抑えたシステム状態遷移系ならびにテストケースを生成できる。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施形態としてのテストケース生成装置のブロック図。
【図２】図１のシステム状態遷移系生成部の動作の流れを示すフローチャート。
【図３】自動販売機のシステム動作仕様例を示す図。
【図４】システム状態遷移表（従来）を示す図。
【図５】システム状態遷移系（従来）を示す図。
【図６】シナリオ状態遷移表（例1）を示す図。
【図７】シナリオ状態遷移系（例1）を示す図。
【図８】シナリオ状態遷移表（例2）を示す図。
【図９】シナリオ状態遷移系（例2）を示す図。
【図１０】複合状態の状態遷移系を示す図。
【図１１】図１０の表をシステム系の状態に射影した図。
【図１２】システム状態遷移系（例1）。
【図１３】システム状態遷移系（例2）。
【図１４】テストケース（遷移パス）の例1を示す図。
【図１５】テストケース（遷移パス）の例２を示す図。
【図１６】テストケース（遷移パス）の例（従来）を示す図。
【発明を実施するための形態】
【００１２】
図１は本発明の一実施の形態としてのテストケース生成装置の構成を示すブロック図である。
【００１３】
以下ではまずこの装置の概要について説明し、その後、具体例を用いて本装置の詳細を説明する。
【００１４】
システム動作仕様記述１１（以下では単に動作仕様と称することもある）は、それぞれの値が対象システムの状態（第１状態）を表す複数の第１変数と、複数の遷移事象と、当該複数の遷移事象のそれぞれが発生するために当該複数の第１変数が満たす必要のある事前条件と、当該複数の遷移事象のそれぞれが発生したときに実行する当該第１変数の値の更新式とを記述する。動作仕様１１は本装置に接続された記憶装置から読み出され、本装置の内部バッファに一時的に記憶される。本発明の動作仕様を記憶する第１の記憶部は、この記憶装置であってもよいし、内部バッファであってもよい。
【００１５】
シナリオ情報１２は、複数の遷移事象の発生の順序のシナリオを記述した遷移事象順序記述（シナリオ記述）を含む。またシナリオ情報１２は、第２状態（前状態）と、遷移事象と、当該第２状態において当該遷移事象が発生したときの遷移先の第２状態（次状態）との対応表（対応情報）を含む。第２状態は第２変数の値として表される。たとえば対応表において、状態q0と、ある遷移事象と、状態q1とが対応付けられているとき、これは、状態q0のときに当該ある遷移事象が起こったとき状態q1に遷移することを意味する。q0,q1は第２変数の値の一例である。シナリオ情報１２は、本装置に接続された記憶装置から読み出され、本装置に入力される。
【００１６】
シナリオ状態遷移系生成部１４は、シナリオ情報１２における上記対応表に基づき上記遷移事象順序（シナリオ）の制約に従って遷移事象を発生させることにより、複数の遷移事象の発生による複数の第２状態間の遷移を記述したシナリオ状態遷移系１５を生成する（非特許文献１参照）。シナリオ状態遷移系１５は、事象制限ＤＦＡ（Deterministic Finite Automaton：決定性有限オートマトン）とも称される。本実施形態ではシナリオ情報１２を入力してシナリオ状態遷移系１５を生成しているが、あらかじめシナリオ状態遷移系１５をユーザ等が生成して記憶装置に格納しておき、この記憶装置からシナリオ状態遷移系１５を読み出すようにしてもよい。読み出したシナリオ状態遷移系１５は本装置の内部バッファに格納される。この場合、シナリオ状態遷移系生成部１４は省略可能である。本発明のシナリオ状態遷移系を記憶する第２の記憶部は、この記憶装置であってもよいし、内部バッファであってもよい。
【００１７】
システム状態遷移系生成部１３は、対象システムの初期状態（第１初期状態）から動作仕様１１で発生可能な遷移事象を順次発生させることにより、複数の遷移事象の発生による第１状態間の遷移を記述したシステム状態遷移系１６を生成する。この際、シナリオ状態遷移系１５により発生可能な事象に制限を加える。つまり、システム動作仕様記述に基づいて遷移事象を順次生起させてシステム状態遷移系を生成する際に、シナリオ状態遷移系も同時に遷移させ、順次生起させる遷移事象を、当該シナリオ状態遷移系で遷移可能なものに制限する。システム状態遷移系生成部１３の詳細は図２のフローチャートを用いて後に説明する。
【００１８】
遷移パス生成部（テストケース生成部）１７は、システム状態遷移系１２の各遷移を順次に辿ることによりすべての遷移を網羅する遷移事象系列である遷移パス（テストケース）を生成する。遷移パス生成部１７は、生成した遷移パス（テストケース）を外部に出力する出力部を含む。
【００１９】
システム状態遷移系生成部１３、シナリオ状態遷移系生成部１４および遷移パス生成部１７はハードウェアによって実現してもよいしソフトウェア（プログラム）によって実現してもよいしこれらの組によって実現してもよい。プログラムによって実現する場合、プログラムをハードディスク装置、メモリデバイス、ＣＤ−ＲＯＭ等の記憶媒体に格納し、ＣＰＵ等の演算装置がこの記録媒体からプログラムを読み出して実行することにより各要素１３〜１５の動作が実現されてもよい。
【００２０】
以下、自動販売機の動作仕様を題材に、図１の装置について詳細に説明する。
【００２１】
図３の表は、自動販売機を簡素化したシステムの動作仕様の例を示す。この動作仕様は、自動販売機の操作に応じた自動販売機の内部状態（第１状態）の変化を記述している。この動作仕様は、（１）システムの状態変数（第１変数）、（２）状態変数を変化させる遷移事象、（３）遷移事象の発生可能性を判定する事前条件、（４）遷移事象が発生した際に行う状態更新式を含む。状態変数（第１変数）の値によりシステムの内部状態（第１状態）が表される。
【００２２】
図３の例では、システムの状態変数（第１変数）として、商品の価格を表現する“price”、商品の在庫を表現する“stock”、コインの投入金額を表現する“amount”が存在する。
【００２３】
自動販売機の状態が遷移（変化）する事象（遷移事象）としては、状態を初期化するVendingMachine()、商品gを登録するregisterGoods(g)、商品gの価格pを設定するsetupPrice(g,p)、商品gの在庫nを設定するsetupStock(g,n)、金額cのコインを投入するinsertCoin(c)、商品gを購入するpurchaseGoods(g)、コインを返却するreturnCoin()が存在する。
【００２４】
各々の遷移事象には、事象の発生可能性（事象の発生前に成立しているべき制約）を記述する事前条件と、事象が発生したときの状態変数の変化を記述する状態更新とが対応づけられる。各々の遷移事象は、それぞれ対応する事前条件が満たされている状態で起こることが可能である。各遷移事象が起こったとき、各々対応する状態更新が行われる。
【００２５】
たとえば商品gを購入する事象purchaseGoods(g)の事前条件は、商品gの在庫stock(g)が正（stock(g)>0）、かつ、コインの投入金額amountが商品gの金額price(g)以上であること(amount≧price(g))である。この事前条件が満たされるとき事象purchaseGoods(g)は生起可能である。事象purchaseGoods(g)が起こったとき、商品gの在庫stock(g)を1だけ減らし(stock(g):=stock(g)-1)、コインの投入金額を商品gの金額price(g)だけ減らし（amount:=amount-price(g)）、商品を排出する(return g)という状態更新が行われる。
【００２６】
図３の表と同様の動作仕様は、プログラミング言語Java（登録商標）を用いて表現することも可能であり、これを本明細書の末尾に掲載しておく。図３の表およびJavaプログラム表記のいずれの表現にせよ、動作仕様は、上述の（１）〜（４）の項目の記述を含むものとする。
【００２７】
前述の図３の表のような動作仕様が与えられると、システムの状態と遷移事象とによる遷移関係をあらわすシステム状態遷移系を構成できる。本実施の形態では上述のようにシナリオ状態遷移系（事象制限ＤＦＡ）１５による制限を加味してシステム状態遷移系１６を生成することを大きな特徴とするが、ここでは理解の簡単のため、まずは、動作仕様のみからシステム状態遷移系を生成する様子を示す。
【００２８】
図４の表は、前述の自動販売機の動作仕様を元に生成したシステム状態遷移系の例を示す（ここではシナリオ状態遷移系の制限を考慮していない）。図４の表では、遷移事象の記述のため下記の略称を用いている。たとえば、略称 “rg”は商品“Tea”を登録“registerGoods”する意味である。
【表１】
2010211481.tif 000003
【００２９】
図４の表の生成手順を説明すると以下の通りである。
【００３０】
Step1:まずシステムの初期状態を初期化処理VendingMachine()後の状態（s0とラベリングする）であるとし、図４の表の1行目に状態s0を登録する。状態s0は商品の登録がなく（stock=()）、商品の価格の登録がなく（price=()）、投入金額が０（amount=0）の状態である。
【００３１】
Step2:状態s0で各遷移事象の事前条件を検査して発生可能な遷移事象を調べる。図３の表から、状態s0では、商品を登録する事象rgのみ発生可能であることが分かる。
【００３２】
Step3:状態s0で商品gを登録すると、商品gの価格表と在庫表の値が共に0(stock=((Tea 0)), price=((Tea 0)))で、投入金額が0(amount=0)の新たな状態（s1とラベリングする）が生ずる。ここでは商品gとして紅茶（Tea）を登録している。
【００３３】
Step4:新しい状態s1を図４の表の2行目に登録し、同様に発生可能な事象を調べる。図３の表から、商品の価格を登録する事象spのみ発生可能となることが分かる。
【００３４】
Step5:以降同様にして、現在の状態から発生可能な遷移事象を発生させ、新たな状態が生成された場合は、図４の表に新たな状態を登録し、新たな状態から同様の手順を繰り返し、新たな状態が現れなくなるまで、処理を継続する。こうして、各状態と、状態間の遷移関係とをまとめた図４の表が得られる。
【００３５】
ただし、図４の表の状態遷移系（状態遷移表）の生成にあたっては、コインの投入額や商品の在庫数に制限を加えなければ原理的に無限の状態（自動販売機の状態）がありえるため、コインの投入額が150円以内に、商品の在庫数が1個となるよう制限している。具体的には新たな状態が生じた場合に、この制限を満たす状態のみを、表に追加するようにしている。
【００３６】
上記の手順で生成したシステムの状態と、状態間の遷移関係（すなわち図４の表の状態遷移系）は図５のようなグラフ構造で表すことができる。このグラフ構造は、22個の状態（ノード）と44個の遷移（アーク）を持つ。各状態から出る矢印付きの線（アーク）は、各状態で発生可能な事象（遷移事象）と対応しており、事象が発生した後の状態（ノード）へ入る。
【００３７】
図５のシステム状態遷移系に起き得る遷移の系列は、システムで実行可能な状態変化に対応する。たとえば、初期状態s0で事象がrg,sp,ss,c1の順に発生すると、システムの状態はs1,s2,s3,s5と変化する。現実の自動販売機に対して対応する事象を発生させて、動作仕様と同等の動作を確認することで、自動販売機の実機が動作仕様を満たすことを確認できる。テストケースは、このように動作確認したい遷移を並べた遷移系列（遷移パス）であり、上記例では「rg,sp,ss,c1」がテストケースに相当する。上述の遷移パス生成部１７は、シナリオ状態遷移系１５の制限を加味して生成したシステム状態遷移系１６を元にテストケース（遷移パス）を生成するが、ここでは理解の簡単のため、シナリオ状態遷移系１５を加味せずに生成した図５のシステム状態遷移系に基づいて説明している。なお遷移パス生成部１７の動作は、シナリオ状態遷移系１５を加味して生成したシステム状態遷移系であっても、シナリオ状態遷移系１５を加味せずに生成したシステム状態遷移系であっても変わることはない。
【００３８】
ここで効率の良いテストケースとは、システム状態遷移系の遷移を網羅し、かつなるべく短い遷移系列である。状態遷移系の状態を頂点、遷移を辺とする有向グラフ（directed graph）を考えると、効率の良いテストケースは、遷移を網羅する最小の遷移系列に対応する。このような最小の遷移系列のテストケースは遷移を全て実行するように初期状態から一筆書きの遷移パスを計算することにより得られる。このような最小の遷移系列の生成は、中国人郵便配達夫問題（CPP: Chinese Postman Problem）としてグラフアルゴリズムの分野で公知である。この方法により、たとえば、図５の状態遷移系に対しては、長さ104の遷移系列（104の遷移事象を並べた遷移系列）が求められ、この遷移系列（テストケース）を用いると、幾つかの遷移は重複するものの、すべての遷移を網羅できる。このようにして網羅性の高い系統的なテストケースを生成することができる。
【００３９】
ここまで述べたようなシナリオ状態遷移系１５を加味しないで生成されたテストケース（従来方法のテストケース）は、システムの状態間の遷移を網羅できるものの、動作仕様の複雑化や、事象の種類の増加にともない、テストの実施可能性が損なわれる問題がある。すなわち、事象の種類の増加に伴い状態空間が指数関数的に増加すると、対応するテストケースの規模も指数関数的に増えるため、テストの実施が困難となる問題がある。テストを実施可能な範囲に規模を抑えるため、動作仕様を簡素化したり、事象の種類を制限したりする方法が知られている。
【００４０】
しかし、動作仕様を簡素化したり、事象の種類を制限したりすると所望のテストケースを生成できない場合がある。たとえば、動作仕様を簡素化する例としてコインの種類ごとの残高管理を省略すると、商品が存在するが釣銭切れで販売不能となる動作をモデルで再現できない。また事象の種類を制限する例として商品Teaのみ扱えば、商品Teaは品切れだが商品Coffeeは販売可能な場合の動作をモデルで再現できない。現実のシステムを反映する複雑な動作仕様や多様な事象を取り扱うことができ、かつ状態遷移系の規模の増加を抑えることができる方法が求められる。
【００４１】
そこで、本実施の形態では“シナリオ状態遷移系”を導入し、“シナリオ状態遷移系（事象制限ＤＦＡ）”により動作仕様で発生可能な遷移事象に制限を加えながらシステム状態遷移系を生成することによりこのような方法を実現している。以下これについて詳細に説明する。
【００４２】
システムの状態空間（図３参照）を探索するときの遷移事象の順番を制限すると、システムの状態遷移系の規模を抑えられる。たとえば、図５のシステム状態遷移系は投入したコインの残高amountに応じた多数の状態と状態間の遷移関係を有するが、テストのときに残高の異なる状態に関心がなければ、コインの投入順番を制限するとよい。コインの投入順序の制限する例として、金額の大きなコインから投入する等の制限を設けると状態の数が制限されて、後述する図１２または図１３のようにシステム状態遷移系の規模を抑えられる。
【００４３】
本実施形態では、遷移事象の順序を制限する方法として。有限な内部状態を持ち遷移事象により状態を変える“シナリオ状態遷移系”を用意し、シナリオ状態遷移系の現在の状態により、システムの状態空間において次に発生可能な遷移事象を制限する。
【００４４】
図６の表は、遷移が決定的でかつ有限な内部状態（第２状態）を有する（すなわち有限な内部状態を持ち、かつ記号をひとつ読む度に次の状態が決まる）シナリオ状態遷移系の例（例１）を示す。また図６の表をグラフ構造で示したものを図７に示す。
【００４５】
図８の表は、シナリオ状態遷移系の別の例（例２）を示す。図８の表をグラフ構造で表現したものを図９に示す。
【００４６】
図６の表または図８の表において、各行には内部状態（第２状態）q0,q1,q3…q6が対応づけられ、各列には遷移事象rg,sp.ss.c10,c100,pg,rcが対応づけられている。内部状態（第２状態）は第２変数の値に相当する。行と列との交差部のマスは、対応する内部状態（第２状態）から対応する遷移事象が発生した際の内部状態の遷移先を記述している。空欄のマスは、対応する内部状態から、対応する遷移事象の発生が抑制されることを意味する。
【００４７】
たとえば図６の表において、現在の状態がq0のときは遷移事象rgのみが発生可能であり、状態q0で遷移事象rgが発生すると、状態が状態q1に遷移する。状態q0において他の遷移事象sp,ss,c1,c2,pg,rcの発生は抑制される。また状態がq6のときは遷移事象ss,pg,rcが発生可能であり、状態q6で遷移事象ssが発生すると状態がq3に遷移し、遷移事象pgが発生するとq6に遷移し、遷移事象rcが発生するとq6に遷移する。状態q0のときは遷移事象rgのみが発生可能であるため、これは決定的な遷移である。また図８の表の例では、状態q3では発生可能な遷移事象が存在しないため、これも決定的な遷移であるといえる。すなわち、決定的な遷移は、行に記入される状態の数が0または1個であることに対応する。
【００４８】
このようなシナリオ状態遷移系は、正規言語でシナリオのパターンを記述したシナリオ記述（遷移事象順序記述）と、上述の対応表（対応情報）とを含むシナリオ情報１２に基づき、シナリオ状態遷移系生成部１３により生成される。
【００４９】
ここで、シナリオのパターンはシナリオ状態遷移系が許容する遷移系列のパターンのことである。また、正規言語（Regular Language）は、有限な種類の記号と、三種類の特別な記号（順次"."、選択"|"、繰り返し"*"）とを組み合わせてできるパターンの記述方法である。上記有限な種類の記号を、上記特別な記号（順次"."、選択"|"、繰り返し"*"）で結合した式のことを正規表現（Regular Expression）といい、上記正規言語は、正規表現に合致する記号列全体ということもできる。
【００５０】
正規言語（Regular Language）でシナリオのパターンを表現すると、図６の表（または図７）のシナリオ状態遷移系は、パターン"(rg . sp . (ss . c100 . (c10)* . (pg|rc)*)*)"のシナリオに対応する。図６および図７と、正規言語のシナリオ"(rg . sp . (ss . c100 . (c10)* . (pg|rc)*)*)"との対応は次の通りである。図７の初期状態0から始まる遷移系列を考えると、状態0から状態4までは遷移系列rg,sp,ss,c100に限られるが、状態4から先は遷移ss,c10,rc,pgの何れも可能であり、それぞれの遷移先は状態3,5,6,6となる。たとえば遷移c10により状態4から5へ移ると、状態5では遷移c10が何回発生しても良いが、一度、遷移pgまたはrcが発生して状態5から6へ移ると、遷移c10の発生は禁止される。このように図６および図７の初期状態0から始まる遷移系列が正規言語のシナリオを表現する。
【００５１】
また、図８の表（または図９）のシナリオ状態遷移系は、パターン"(rg . sp . (ss . c100 . c10 . pg . rc)*)"のシナリオに対応する。
【００５２】
図６の表（または図７）の場合、コイン投入順序に関しては1回の100円投入後、任意回数の10円投入が許されるが、図８の表（または図９）の場合は、1回の100円投入後、丁度2回の10円投入しか許されないことが分かる。なお、図４または図５のシステム状態遷移系で許される遷移系列のパターンを正規言語で表現すると(rg.sp.(ss|c100|c10|pg|rc)*))となる。
【００５３】
このような正規言語で記述されたシナリオのパターン記述（遷移事象順序記述）と上述の対応表（遷移前の状態、遷移事象、遷移後の状態を対応付けたもの）とを含むシナリオ情報１２をシナリオ状態遷移系生成部１４に入力し、シナリオ状態遷移系生成部１４ではこのシナリオ情報１２からシナリオ状態遷移系１５を生成する。たとえば初期状態q0から開始して、シナリオのすべての遷移パターンを網羅するように遷移を順次発生させ、遷移の発生に応じて新たな状態を表すノードを生成し、また遷移に対応するアークを追加することでシナリオ状態遷移系１５を生成できる。非特許文献１の方法を用いてシナリオ状態遷移系１５を生成することも可能である。
【００５４】
このようにシナリオ状態遷移系１５が生成されたら、システム状態遷移系生成部１３ではシナリオ状態遷移系１５の制限に基づき、動作仕様１１から、簡素化されたシステム状態遷移系１６を生成する。これにより、正規言語で記述したシナリオのパターンの範囲内に動作を限定して、元の動作仕様から、簡素化されたシステム状態遷移系を生成できる。このようにして、本実施の形態では、動作仕様を簡素化したり事象の種類を制限したりすることなく、テスト目的に応じて状態数を抑えたシステム状態遷移系を生成できる。このように簡素化されたシステム状態遷移系を生成すれば、この後は、上述のテストケース生成方法でテストケースを生成して、実際のテストを実施すればよい。
【００５５】
図１のシステム状態遷移系生成部１３は、シナリオ状態遷移系生成部１４により生成されたシナリオ状態遷移系１５の意味する事象制約を考慮しながら、動作仕様１１に示されるシステムの状態空間を探索して、簡素化されたシステム状態遷移系１６を生成する。以下では、システム状態遷移系生成部１３の動作内容を簡単に理解するため、まず具体例に基づく動作を説明し、その後、本装置の詳細な動作アルゴリズムを、図２を参照して説明する。
【００５６】
図１０は、図６の表のシナリオ状態遷移系の制限を考慮しながら、図３の動作仕様に示される状態空間を探索する様子を示す。この探索は、システム状態遷移系の状態sとシナリオ状態遷移系の状態qの組である複合状態（s,q）をベースに行う。以下探索手順の詳細を示す。
【００５７】
システム状態遷移系およびシナリオ状態遷移系の双方の初期状態の組である複合状態(s0,q0)を、図１０の表のように1行目に登録する。図１０の表の各列にはあらかじめ遷移象rg,sp,ss,c10,c100,pg,rcが登録されている。ここでシステムの初期状態s0は初期化処理VendingMachine()後の状態である。すなわち、状態s0は商品の登録がなく（stock=()）、商品の価格の登録がなく（price=()）、投入金額が０（amount=0）の状態である。
【００５８】
この初期複合状態(s0,q0)で発生可能な遷移事象をすべて列挙する。具体的には、動作仕様に示されるシステムの事前条件が満たされ、かつシナリオ状態遷移系で遷移可能な事象を列挙する。初期状態（s0,q0）で、システム状態遷移系とシナリオ状態遷移系の双方で遷移可能な遷移事象が、当該複合状態（s0,q0）で発生可能な遷移事象である。
【００５９】
当該複合状態（s0,q0）でこの条件を満たす遷移事象を列挙すると、図６の表および図３の表に基づき、rgのみであることが分かる。すなわち図３の表から、状態s0（stock=()、price=()、amount=0）では、商品を登録する事象rgのみ発生可能であり、また図６の表から、状態q0に対応する事象はrgのみしか記載されていないことからrgのみ発生可能であることが分かる。よってrgのみが列挙される。
【００６０】
発生可能な遷移事象を列挙したら、列挙した遷移事象にしたがって、システム状態遷移系の状態（第１状態）とシナリオ状態遷移系の状態（第２状態）をそれぞれ遷移させる。複合状態（s0,q0）を遷移事象rgに従って遷移させると遷移先の複合状態は（s1,q1）となる。すなわち、状態s0で商品gを登録すると、商品gの価格表と在庫表の値が共に0(stock=((Tea 0)), price=((Tea 0)))で、投入金額が0(amount=0)の新たな状態（s1とラベリングする）が生ずる。なおここでは商品gとして紅茶（Tea）を登録している。また図６の表から、状態q0と事象rgの交差部はq1である。よって遷移先の複合状態は(s1,q1)となる。この複合状態を、図１０の表の複合状態（s0,q0）の行と、rgの列との交差部に書き込む。
【００６１】
遷移の結果、新しい複合状態が生じた場合は、前述した通常の状態探索と同様に、新しい複合状態の行を追加する。状態（s1,q1）は新しい複合状態であるため、状態（s1,q1）の行を図１０の表の２行目に追加する。
【００６２】
この新しい複合状態（s1,q1）から遷移可能な遷移事象を列挙して、システム状態遷移系の状態およびシナリオ状態遷移系の状態を遷移させる。状態s1から発生可能な事象を調べると、図３の表から、商品の価格を登録する事象spのみであることが分かり、またq1から発生可能な事象を調べると図６の表から事象spのみであることが分かる。よってこれらのANDを取ると事象spとなり、複合状態（s1,q1）において発生可能な遷移事象は事象spのみとなる。よって、複合状態（s1,q1）を遷移事象spによって遷移させ、遷移先の複合状態は（s2,q2）となる。つまり複合状態遷移（(s1,q1),sp,(s2,q2)）が得られる。なお状態s2は(stock=((Tea 0)), price=((Tea 120))、(amount=0))である。
【００６３】
複合状態（s2,q2）は新しく得られたものであるため、これを図１０の表の３行目に追加する。以降上記と同様の処理を、新しい複合状態が発生しなくなるまで、繰り返し行う。
【００６４】
なお図１０の表では同じシステム状態を含む複合状態については同一の行にまとめて記載している。たとえば複合状態（s2,q2）と（s2,q6）はそれぞれ同一のシステム状態s2を含むため、同一の行に記載している。
【００６５】
また、図１０の表の (ok,ng)は、システム状態遷移系では許可されているがシナリオ状態遷移系では制限されているため遷移ができなかったことを意味する。たとえば4行4列の(ok,ng)は、4行目に対応する状態s3での10円コイン投入c1は可能だが、状態q3またはq6ではこの遷移事象（10円コイン投入c1）の発生が許可されていないため、状態s3で10円コインを投入することが制限されている。
【００６６】
上述のように新たな複合状態が発生しなくなるまで繰り返し処理を行い、探索が終了したら、探索により得られた複合状態遷移系（すなわち図１０の表）を、システム状態遷移系へ射影する。すなわち、複合状態遷移系においてシナリオ状態の違いを無視し、同じシステム状態をもつ複数の複合状態を一つのシステム状態へ纏める。具体的には、図１０の表で、たとえば２行目の（s2,q2）,(s2,q6)を１つに纏めてs2とし、（s3,q3）をs3とするようにして射影を行。図１０の表をシステム系に射影すると、図１１の表が得られる。なお（ok,ng）は射影時に消去している。この図１１の表が、簡素化されたシステム状態遷移系に相当する。
【００６７】
図２は、システム状態遷移系生成部１３の動作アルゴリズムを示すフローチャートである。
【００６８】
まずリストＸ、リストＳ、リストＴを初期化する（Ｓ１１）。初期化によりリストＸおよびリストＳには、初期の複合状態（s0,q0）が格納され、リストＴは空状態とされる。リストＳは、本フローでの状態探索により到達した複合状態を格納するものであり、初期の複合状態（s0,q0）はすでに到達したものとしてリストＳに格納される。リストＸは探索候補となる複合状態を格納するものであり、ここでは初期の複合状態（s0,q0）が探索候補として格納されている。リストＴは状態探索で得られた複合状態遷移（（s,q）,e,(s’,q’)）を格納するものであり、現時点ではまだ複合状態遷移は得られていないためリストＴは空である。なおeは遷移事象を表す。
【００６９】
ここでs0は、システムの複数の状態変数の初期値を定めた第１初期状態に相当する。q0はシナリオ状態遷移系における初期状態である第２初期状態に相当する。リストＴはたとえば本発明の第１の一時記憶手段、リストＸはたとえば本発明の第２の一時記憶手段に相当する。第１および第２の一時記憶手段は演算装置の内部バッファであってもよいし、ＤＲＡＭやＳＲＡＭなどのメモリ装置の記憶領域であってもよい。
【００７０】
ステップＳ１２では、リストＸが空かどうかを確認し、ここでは空でないため、リストＸから１つの要素（複合状態）を“x”として取り出す。ここでは複合状態（s0,q0）がxとして取り出される。
【００７１】
全事象の集合Ｅ（rg,sp,ss,c10,c100,pg,rc）の各事象eについて、ステップＳ１３で選択した複合状態において発生可能か否かの検査を行い検査結果に応じた処理を行う（EXPAND(x,e)）（Ｓ１４）。具体的には、個々の事象e毎に、ステップＳ２１〜Ｓ２５の処理を行う。
【００７２】
まず複合状態xにおいて事象eが発生可能か否かを動作仕様１１およびシナリオ状態遷移系１５に基づき判断する（Ｓ２１）。すなわち事象eが、複合状態xにおける状態s（第１初期状態あるいは第１状態）において発生可能であるか、および複合状態における状態q（第２初期状態あるいは第２状態）において発生可能であるか否かを判断する。事象eが状態sおよび状態qの両方において発生可能であるとき、事象eは状態sおよび状態qにおいて発生可能な共通の遷移事象である。本ステップＳ２１ではこのように両状態において発生可能な共通の遷移事象を検出する。
【００７３】
複合状態xにおいて事象eが発生可能でないときは処理を終了する（Ｓ２１のＮＯ）。発生可能であるときは（Ｓ２１のＹＥＳ）、複合状態xを事象eにより遷移させ、遷移先の複合状態x’を得る（Ｓ２２）。すなわち状態s（第１初期状態あるいは第１状態）およびq（第２初期状態あるいは第２状態）をそれぞれ事象eにより遷移させて、遷移先の状態s’および遷移先の状態q’（すなわち遷移先の第１状態および遷移先の第２状態）を求める。遷移先の状態s’および遷移先の状態q’のペア(s’,q’)が複合状態x’に相当する。
【００７４】
複合状態x’は、初めて到達した複合状態か否かを判断し（Ｓ２３）、初めて到達した複合状態であるときは（ＹＥＳ）、リストＸへ複合状態x’を格納する（Ｓ２４）。
【００７５】
リストＸへ複合状態x’を格納した後、または複合状態x’が初めて到達した複合状態でないと判断された場合（Ｓ２３のＮＯ）、リストＳへ複合状態x’を追加し（リストＳにすでに同じ複合状態が存在するときは追加しなくてよい）、また、リストＴへ、複合状態遷移（x,e,x’）を追加する（Ｓ２５）。
【００７６】
個々の事象eについてステップＳ２１〜Ｓ２５の処理を行ったら、ステップＳ１２に戻り、リストＸが空でないかどうか判断し、空でないときは（ＮＯ）、ステップＳ１３に進み、上述の処理を繰り返し行う。
【００７７】
リストＸが空のときは（ステップＳ１３のＹＥＳ）、ステップＳ１５に進み、リストＳ内の各要素（各複合状態）と、リストＴ内の各要素（各複合状態遷移）に含まれる複合状態を、システム状態に射影する（Ｓ１５）。たとえばリストＳ内の（s0,q0）をs0に射影し、（s2,q2）と（s2,q6）を纏めてs2へ射影し、また、（(s0,q0),rg,(s1,q1)）を（s0,rg,s1）へ射影する等である（図１０および図１１参照）。そして射影後のリストＳおよび射影後のリストＴの少なくとも後者を出力する。射影後のリストＴ内の各要素の集合はたとえばシステム状態遷移系１６に相当する。
【００７８】
上記フローのステップＳ１２ではリストＸから要素（複合状態）を取り出して（抜き出して）いるが、取り出すのではなく、リストＸから未選択の要素を選択するようにしてもよい。この場合、リストＸから要素を選択する際、当該要素には選択済みの印を付与し、リストＸ内のすべての要素が選択済みになるまで繰り返し処理を行い、すべての要素が選択済みになったら、ステップＳ１５に進むようにしてもよい。リストＸから要素を取り出すことは、要素を選択することの一例に過ぎず、要素を選択することは要素を取り出すことを包含する。
【００７９】
また、上記フローでは、ステップＳ２５でリストＴへ複合状態遷移（x,e,x’）を追加し、ステップＳ１５でシステム状態への射影を行ったが、リストＴへの格納時に、射影を行ってもよい。すなわち、リストＴへの格納時に、複合状態遷移（x,e,x’）を（s,e,s’）に射影し、（s,e,s’）を格納するようにしてもよい。すなわち、遷移元状態s、遷移事象e、遷移先状態s’を一組としてリストTにステップＳ２５において格納するようにしてもよい。このことはリストＳについても同様に当てはまる。このように射影を行うタイミングはステップＳ１５の出力時であっても、ステップＳ２５でのリストＴまたはリストＳへの格納時であってもよい。
【００８０】
以下、シナリオ状態遷移系１５の制限を加味して生成したシステム状態遷移系の例を示す。
【００８１】
図１２は、図６のシナリオ状態遷移系の制限を考慮して生成された、簡素化されたシステム状態遷移系（例１）を示す（図１１の表に対応）。状態数は１３、遷移数は２２存在する。
【００８２】
図１３は、図８の表のシナリオ状態遷移系（事象制限ＤＦＡ）の制限を考慮して生成された、簡素化されたシステム状態遷移系（例２）を示す。状態数は７、遷移数も７存在する。
【００８３】
これらに対し、図３の動作仕様からシナリオ状態遷移系を考慮しないで生成したシステム状態遷移系（従来方法によるシステム状態遷移系）を、すでに説明した図５に示す。状態数は２２、遷移数は４６存在する。
【００８４】
このように簡素化されたシステム状態遷移系が得られると、上述したように、遷移パス生成部１７によりこのシステム状態遷移系からテストケースを生成することができる。生成されたテストケースの例を以下に示す。
【００８５】
図１４の表は、図１２のシステム状態遷移系から生成したテストケースの事例を示す。事例の一部のみ表示しているがテスト長（遷移系列の長さ）は３５である。すなわち、３５回の連続的な遷移により、上記２２個の遷移を網羅できる。なおテストケース（遷移パス）は必ず初期状態s0から開始するものとする（以下同様）。
【００８６】
図１５の表は、図１２のシステム状態遷移系から生成したテストケースの事例を示す。テスト長（遷移系列の長さ）は７である。すなわち７回の連続的な遷移で、上記７個の遷移を網羅している。
【００８７】
これらに対し、シナリオ状態遷移系の制限を考慮しないシステム状態遷移系（従来方法によるシステム状態遷移系）から生成したテストケースの事例を図１６に示す。事例の一部のみ表示しているがテスト長（遷移系列の長さ）は１０４である。すなわち１０４回の連続的な遷移で４６個の遷移を網羅している。
【００８８】
以下の比較表は、従来方法と、上記例１および例２間の比較を示す。
【表２】
2010211481.tif 000004
【００８９】
この比較表から理解されるように、シナリオ（事象制限の記述）の選び方によりシステム状態遷移系の規模を制御して、システム状態遷移系から得られるテストケースの規模を制御できることが分かる。
【００９０】
以上のように、本実施形態によれば、遷移事象の順序関係の制約を定めたシナリオ状態遷移系を導入し、このシナリオ状態遷移系に基づき動作仕様からシステム状態遷移系を生成するようにしたため、現実のシステムを反映する複雑な動作仕様や多様な事象を取り扱うことができると同時にシステム状態遷移系の規模およびテストケースの規模を抑えることができる。
【表３】
2010211481.tif 000005
2010211481.tif 000006
2010211481.tif 000007
【符号の説明】
【００９１】
１１：システム動作仕様記述
１２：シナリオ情報（遷移事象順序記述および対応情報）
１３：システム状態遷移系生成部
１４：シナリオ状態遷移系生成部
１５：シナリオ状態遷移系（事象制限ＤＦＡ）
１６：システム状態遷移系
１７：遷移パス生成部
１８：テストケース（遷移パス）
【図１】
2010211481.tif 000008
【図２】
2010211481.tif 000009
【図３】
2010211481.tif 000010
【図４】
2010211481.tif 000011
【図５】
2010211481.tif 000012
【図６】
2010211481.tif 000013
【図７】
2010211481.tif 000014
【図８】
2010211481.tif 000015
【図９】
2010211481.tif 000016
【図１０】
2010211481.tif 000017
【図１１】
2010211481.tif 000018
【図１２】
2010211481.tif 000019
【図１３】
2010211481.tif 000020
【図１４】
2010211481.tif 000021
【図１５】
2010211481.tif 000022
【図１６】
2010211481.tif 000023