(57)【要約】【課題】テストの検出精度の低下を抑える。【解決手段】データ生成装置は、複数のデータが並び、所定のプログラムを正常に作動可能な正常データ群を取得する正常データ群取得部３０と、正常データ群に含まれる複数のデータのうち、他のデータに置換すれば所定のプログラムを正常に作動させなくなるデータである基点データの情報を取得する基点データ取得部３２と、正常データ群に含まれる複数のデータから、基点データを基準としてテストデータを抽出するテストデータ抽出部３４と、正常データ群のうちのテストデータを他のデータに置き換えたテストデータ群を生成するテストデータ群生成部３６と、を有する。【選択図】図３
2020107284.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータが並び、所定のプログラムを正常に作動可能な正常データ群を取得する正常データ群取得部と、
前記正常データ群に含まれる複数のデータのうち、他のデータに置換すれば前記所定のプログラムを正常に作動させなくなるデータである基点データの情報を取得する基点データ取得部と、
前記正常データ群に含まれる複数の前記データから、前記基点データを基準としてテストデータを抽出するテストデータ抽出部と、
前記正常データ群のうちの前記テストデータを他のデータに置き換えたテストデータ群を生成するテストデータ群生成部と、
を有するデータ生成装置。
【請求項２】
前記テストデータ抽出部は、前記テストデータとして、前記基点データに対して所定関係を有する第１テストデータと、前記第１テストデータに対して前記所定関係を有する第２テストデータとを抽出し、
前記テストデータ群生成部は、前記正常データ群のうちの前記第１テストデータを他のデータに置き換えた第１テストデータ群と、前記正常データ群のうちの前記第２テストデータを他のデータに置き換えた第２テストデータ群と、を生成する、請求項１に記載のデータ生成装置。
【請求項３】
前記基点データ取得部は、前記基点データとして、第１基点データと第２基点データとの情報を取得して、
前記テストデータ抽出部は、前記第１基点データと前記第２基点データとに対して所定関係を有するデータを、前記テストデータとして抽出する、請求項１または請求項２に記載のデータ生成装置。
【請求項４】
前記テストデータ抽出部は、前記正常データ群内において、前記第１基点データと前記第２基点データとの間にあるデータを、前記テストデータとして抽出する、請求項３に記載のデータ生成装置。
【請求項５】
前記テストデータ抽出部は、
前記テストデータ群を用いて前記所定のプログラムを作動させると前記所定のプログラムが正常に作動しない場合に、前記テストデータと前記第２基点データとの間にあるデータを、新たなテストデータとして抽出し、
前記テストデータ群を用いて前記所定のプログラムを作動させると前記所定のプログラムが正常に作動する場合に、前記第１基点データと前記テストデータとの間にあるデータを、新たなテストデータとして抽出する、請求項４に記載のデータ生成装置。
【請求項６】
複数のデータが並び、所定のプログラムを正常に作動可能な正常データ群を取得する正常データ群取得ステップと、
前記正常データ群に含まれる複数のデータのうち、他のデータに置換すれば前記所定のプログラムを正常に作動させなくなるデータである基点データの情報を取得する基点データ取得ステップと、
前記正常データ群に含まれる複数の前記データから、前記基点データを基準としてテストデータを抽出するテストデータ抽出ステップと、
前記正常データ群のうちの前記テストデータを他のデータに置き換えたテストデータ群を生成するテストデータ群生成ステップと、
を有するデータ生成方法。
【請求項７】
複数のデータが並び、所定のプログラムを正常に作動可能な正常データ群を取得する正常データ群取得ステップと、
前記正常データ群に含まれる複数のデータのうち、他のデータに置換すれば前記所定のプログラムを正常に作動させなくなるデータである基点データの情報を取得する基点データ取得ステップと、
前記正常データ群に含まれる複数の前記データから、前記基点データを基準としてテストデータを抽出するテストデータ抽出ステップと、
前記正常データ群のうちの前記テストデータを他のデータに置き換えたテストデータ群を生成するテストデータ群生成ステップと、
をコンピュータに実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ生成装置、データ生成方法、及びプログラムに関する。
【背景技術】
【０００２】
ソフトウェアの脆弱性を検出するためのテストとして、ファジングと呼ばれるテスト方法が用いられる場合がある。ファジングとは、ソフトウェアの検出対象のプログラムに、テストデータ群を入力することで、その入力に対するプログラムの動作を確認するものである。テストデータ群の作成手法の一つとして、プログラムを正常に動作可能な正常データ群に含まれるデータを、別のデータに変換して生成する手法がある。この手法においては、正常データ群のデータのうちから、変換するとエラーが発生すると予測されるデータをユーザが選択することで、テストデータ群を生成して、ファジングを実行していた。また、特許文献１には、追加されたアドレスのバイナリ値を別の値に置き換えることでファジングを行う旨が記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００９−１１６８４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ここで、ソフトウェアの脆弱性を適切に検出するためには、正常データ群のどのアドレス（位置）のデータを置き換えればエラーが発生するかを把握しておくことが好ましい。従来のように変換するデータをユーザが選択した場合、選択の精度は、ユーザの経験に左右される。従って、この場合、どのデータを置き換えればエラーが発生するかの検出精度が低下するおそれがある。また、特許文献１では、追加された新しいアドレスについて検出することは可能であるが、それ以外のアドレスについて検出することはできない。従って、検出精度の低下を抑えることが求められている。
【０００５】
本発明は、上記課題を鑑み、テストの検出精度の低下を抑えることができるデータ生成装置、データ生成方法、及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一態様にかかるデータ生成装置は、複数のデータが並び、所定のプログラムを正常に作動可能な正常データ群を取得する正常データ群取得部と、前記正常データ群に含まれる複数のデータのうち、他のデータに置換すれば前記所定のプログラムを正常に作動させなくなるデータである基点データの情報を取得する基点データ取得部と、前記正常データ群に含まれる複数の前記データから、前記基点データを基準としてテストデータを抽出するテストデータ抽出部と、前記正常データ群のうちの前記テストデータを他のデータに置き換えたテストデータ群を生成するテストデータ群生成部と、を有する。
【０００７】
本発明の一態様にかかるデータ生成方法は、複数のデータが並び、所定のプログラムを正常に作動可能な正常データ群を取得する正常データ群取得ステップと、前記正常データ群に含まれる複数のデータのうち、他のデータに置換すれば前記所定のプログラムを正常に作動させなくなるデータである基点データの情報を取得する基点データ取得ステップと、前記正常データ群に含まれる複数の前記データから、前記基点データを基準としてテストデータを抽出するテストデータ抽出ステップと、前記正常データ群のうちの前記テストデータを他のデータに置き換えたテストデータ群を生成するテストデータ群生成ステップと、を有する。
【０００８】
本発明の一態様にかかるプログラムは、複数のデータが並び、所定のプログラムを正常に作動可能な正常データ群を取得する正常データ群取得ステップと、前記正常データ群に含まれる複数のデータのうち、他のデータに置換すれば前記所定のプログラムを正常に作動させなくなるデータである基点データの情報を取得する基点データ取得ステップと、前記正常データ群に含まれる複数の前記データから、前記基点データを基準としてテストデータを抽出するテストデータ抽出ステップと、前記正常データ群のうちの前記テストデータを他のデータに置き換えたテストデータ群を生成するテストデータ群生成ステップと、をコンピュータに実行させる。
【発明の効果】
【０００９】
本発明によれば、テストの検出精度の低下を抑えることを抑制することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、第１実施形態に係るデータ生成システムの模式図である。
【図２】図２は、ファジングを説明するための模式図である。
【図３】図３は、第１実施形態に係る制御部のブロック図である。
【図４】図４は、第１実施形態に係る正常データ群の例を示す図である。
【図５】図５は、第１実施形態に係るテストデータの例を示す模式図である。
【図６】図６は、第１実施形態に係るテストデータ群の例を説明する図である。
【図７】図７は、第１実施形態の他の例に係るテストデータ群の例を説明する図である。
【図８】図８は、表示部による表示の例を示す図である。
【図９】図９は、第１実施形態に係るファジング実行のフローを説明するフローチャートである。
【図１０】図１０は、第１実施形態の他の例に係るテストデータ群の生成を説明する図である。
【図１１】図１１は、第１実施形態の他の例に係るテストデータ群の生成を説明する図である。
【図１２】図１２は、第２実施形態に係るファジング実行のフローを説明するフローチャートである
【図１３】図１３は、第２実施形態における複数の基点データの例を示す図である。
【図１４】図１４は、第２実施形態におけるテストデータの例を示す図である。
【図１５】図１５は、第２実施形態におけるテストデータ群を説明する図である。
【図１６】図１６は、第２実施形態におけるテストデータ群を説明する図である。
【図１７】図１７は、第３実施形態に係るファジング実行のフローを説明するフローチャートである。
【図１８】図１８は、第３実施形態に係る補助テストデータ群の例を説明する図である。
【図１９】図１９は、表示部による表示の他の例を示す図である。
【図２０】図２０は、表示部による表示の他の例を示す図である。
【図２１】図２１は、表示部による表示の他の例を示す図である。
【図２２】図２２は、表示部による表示の他の例を示す図である。
【００１１】
以下に、本発明の実施形態を図面に基づいて詳細に説明する。なお、以下に説明する実施形態により本発明が限定されるものではない。
【００１２】
（第１実施形態）
図１は、第１実施形態に係るデータ生成システムの模式図である。図２は、ファジングを説明するための模式図である。本実施形態に係るデータ生成システム１は、テストを実施するためのテストデータ群を生成する装置である。本実施形態におけるテストとは、ファジングである。
【００１３】
（ファジングについて）
ファジングとは、テスト対象のソフトウェアの所定のプログラムである対象プログラム１２Ａにテストデータ群を入力することで、その入力に対する対象プログラム１２Ａの動作を確認して、対象プログラム１２Ａの脆弱性を確認するテスト手法である。ファジングの説明のために、最初に正常データ群Ａについて説明する。正常データ群Ａは、ファジング用のテストデータ群ではなく、対象プログラム１２Ａに正常な処理を行わせるための指令内容が含まれているデータ群である。対象プログラム１２Ａは、正常データ群Ａが入力されると、所定の処理を実行する。すなわち、対象プログラム１２Ａは、正常データ群Ａに含まれるデータＤから指令内容を読み出し、その指令内容に従った処理を実行する。
【００１４】
正常データ群Ａは、複数のデータＤが並んで構成されるデータ群（データの塊）である。図２の例では、正常データ群Ａは、バイナリデータであるデータＤが並んで構成されている。バイナリデータとは、０又は１の数値で構成される。ただし、図２の正常データ群Ａｓに示すように、データＤは、０から９のいずれかの数値で構成される数値データであってもよいし、正常データ群Ａｔに示すように、データＤは、例えばａからｚのいずれかの文字で構成される文字データであってもよい。また、正常データ群Ａは、文字データ、数値データ、及びバイナリデータの組み合わせで構成されてもよい。すなわち、正常データ群Ａに含まれるデータＤは、文字データ、数値データ、及びバイナリデータの少なくともいずれか１種であればよい。
【００１５】
ファジングを実行する場合、正常データ群Ａの少なくとも一部のデータＤを、元々のデータＤとは異なるデータ、すなわち他のデータであるファジングデータＦに置き換えて、テストデータ群Ｂを生成する。言い換えれば、テストデータ群Ｂは、正常データ群Ａの少なくとも一部のデータＤをファジングデータＦに置き換えたデータ群である。ファジングを実行する際には、このテストデータ群Ｂを対象プログラム１２Ａに入力する。対象プログラム１２Ａは、このテストデータ群Ｂから指令内容を読み出して、処理を実行する。そして、ファジングでは、このテストデータ群Ｂによる対象プログラム１２Ａの動作を確認する。対象ブログラム１２Ａは、テストデータ群Ｂの入力によって、正常に動作する場合と、正常に動作しない場合とがある。正常に動作する場合とは、例えば、正常データ群Ａが入力された際の挙動と同じ挙動を示す場合を意味する。また、正常に動作しない場合とは、例えば、正常データ群Ａが入力された際の挙動と異なる挙動を示す場合であり、フリーズしたり予期しない不適切な挙動を示したりするなど、動作内容に異常がある場合を意味する。また、動作実行命令を受け付けず動作しない場合は、正常に動作するといえるが、正常に動作しないとしてもよい。
【００１６】
対象プログラム１２Ａが正常に動作するか否かは、テストデータ群Ｂの内容、すなわちどのデータＤをどのようなファジングデータＦに置き換えたかに依存する。本実施形態では、ファジングデータＦに置き換えたデータＤの位置が互いに異なる複数のテストデータ群Ｂを生成し、この複数のテストデータ群Ｂを対象プログラム１２Ａに順次入力して、対象プログラム１２Ａの動作を確認する。これにより、様々なテストデータ群Ｂのインプットに対する対象プログラム１２Ａの脆弱性などを確認することができる。なお、データＤの位置とは、正常データ群Ａ又はテストデータ群Ｂにおいて並んでいる複数のデータＤ内における、そのデータＤの位置を指し、言い換えれば、正常データ群Ａ又はテストデータ群ＢにおけるデータＤのアドレスを指す。
【００１７】
図２の例では、正常データ群Ａの左から２番目のデータＤの値「０」を、ファジングデータＦとして「１」に置き換えることで、テストデータ群Ｂを生成している。また、他の例として、正常データ群Ａｓの左から５番目のデータＤの値「９」を、ファジングデータＦとして「６」に置き換えることで、テストデータ群Ｂｓを生成している。また、他の例として、正常データ群Ａｔの左から１番目のデータＤの文字「ａ」を、ファジングデータＦとして「ｃ」に置き換えることで、テストデータ群Ｂｔを生成している。ただし、これらのファジングデータＦへの置き換えは一例であり、例えば、他の位置のデータＤをファジングデータＦに置き換えてもよいし、同時に複数のデータＤをファジングデータＦに置き換えてもよい。
【００１８】
（データ生成システムの構成）
本実施形態に係るデータ生成システム１は、正常データ群ＡのデータＤをファジングデータＦに置き換えたテストデータ群Ｂを生成し、テストデータ群Ｂを用いて対象プログラム１２Ａのファジングを実行する。図１に示すように、データ生成システム１は、データ生成装置１０と対象機器１２とを有する。対象機器１２は、対象プログラム１２Ａを記憶して、対象ブログラム１２Ａを実行可能な機器である。対象機器１２は、例えばカーナビゲーションシステムなどの車載機器であるが、これに限られず、任意の機器であってよい。同様に、対象プログラム１２Ａも、車載機器用のプログラムに限られず、任意の内容のプログラムであってよい。
【００１９】
データ生成装置１０は、例えばコンピュータであり、図１に示すように、入力部２０と、表示部２２（出力部）と、制御部２４と、記憶部２６とを有する。入力部２０は、ユーザの入力を受け付ける装置であり、例えばマウス、キーボード、又はタッチパネル等である。表示部２２は、制御部２４の制御結果やユーザからの入力内容などを表示する装置であり、本実施形態では、ディスプレイやタッチパネルである。制御部２４は、演算装置、すなわちＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。記憶部２６は、制御部２４の演算内容やプログラムの情報などを記憶するメモリであり、例えば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）と、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）などの外部記憶装置とのうち、少なくとも１つ含む。
【００２０】
以下、制御部２４の機能構成について説明する。図３は、第１実施形態に係る制御部のブロック図である。図３に示すように、制御部２４は、正常データ群取得部３０と、基点データ取得部３２と、テストデータ抽出部３４と、テストデータ群生成部３６と、ファジング実行部３８と、表示制御部４０とを有する。正常データ群取得部３０と、基点データ取得部３２と、テストデータ抽出部３４と、テストデータ群生成部３６と、ファジング実行部３８と、表示制御部４０とは、制御部２４が記憶部２６に記憶されたソフトウェア（プログラム）を読み出すことで実現されて、後述する処理を実行する。
【００２１】
図４は、第１実施形態に係る正常データ群の例を示す図である。正常データ群取得部３０は、対象プログラム１２Ａを正常に作動させる正常データ群Ａを取得する。正常データ群取得部３０は、例えば対象機器１２などの他の装置から正常データ群Ａを取得してもよいし、記憶部２６に予め記憶していた正常データ群Ａを読み出して取得してもよい。以降では、図４に示すように、バイナリデータであるデータＤが並んだ正常データ群Ａを用いることを例として説明する。図４の例における正常データ群Ａは、説明の便宜上、左から１番目のデータＤが１であり、そのデータＤの右側に隣接する左から２番目のデータＤ（ここでは基点データＤｌ）が０であり、そのデータＤの右側に隣接する左から３番目のデータＤが０であり、そのデータＤの右側に隣接する左から４番目のデータＤが１であり、そのデータＤの右側に隣接する左から５番目のデータＤが０であるように記載されている。正常データ群Ａは、左から１番目のデータＤよりもさらに左側にデータＤを有しており、左から５番目のデータＤよりも更に右側にデータＤを有していてもよい。ただし、図４に示す正常データ群Ａは一例であり、正常データ群ＡのデータＤの配列順、個数、及び値は、任意である。
【００２２】
図３に戻り、基点データ取得部３２は、基点データの情報を取得する。基点データとは、正常データ群Ａに含まれるデータＤのうち、ファジングデータＦに置き換えられた場合に、対象プログラム１２Ａが正常に動作しないデータＤを指す。言い換えれば、基点データをファジングデータＦに置き換えて生成されたデータ群Ｂ０を用いて対象プログラム１２Ａを動作させると、対象プログラム１２Ａは、正常に動作しない。図４は、左から２番目のデータＤが基点データＤｌである例を説明している。この場合、値が０の基点データＤｌを、値が１のファジングデータＦｌに置き換えたデータ群Ｂ０は、対象プログラム１２Ａを正常に動作させない。基点データ取得部３２は、正常データ群Ａにおいて並んでいるデータＤのうち、どの位置に基点データＤｌがあるかを、基点データＤｌの情報として取得する。言い換えれば、基点データ取得部３２は、正常データ群ＡにおいてどのデータＤが基点データＤｌであるかの情報を取得する。
【００２３】
本実施形態において、基点データ取得部３２は、正常データ群ＡにおいてどのデータＤが基点データＤｌであるかの情報を、記憶部２６から読み出して取得する。すなわち、本実施形態では、どのデータＤが基点データＤｌであるかが予め検出されており、基点データ取得部３２は、予め検出されていた基点データＤｌの情報を取得する。言い換えれば、基点データＤｌは、ファジングデータＦに置換すれば対象プログラム１２Ａを正常に作動させなくなるデータＤとして予め検出されていた、既知の不具合データである。本実施形態では、例えば、ユーザが、任意のデータＤをファジングデータＦに置き換えて予めファジングを実行しておくことで、基点データＤｌの情報を検出し、ユーザが入力部２０を介してその情報を入力することで、記憶部２６に記憶される。ただし、基点データＤｌの情報の取得方法は任意である。例えば、基点データ取得部３２が、任意のデータＤをファジングデータＦに置き換えて予備的にファジングを実行し、対象プログラム１２Ａが正常に動作しなかった場合に、ファジングデータＦに置き換えたデータＤを、基点データＤｌであると判定してもよい。
【００２４】
なお、図４の例では、基点データＤｌは１つのデータＤであるが、基点データＤｌは、複数のデータＤから構成されるデータ群であってもよい。例えば、図４に示す左から２番目のデータＤと左から３番目のデータＤとを含む「００」のデータ群を、１つの基点データＤｌとしてもよい。また、基点データは、複数設定されていてもよい。この場合、基点データ取得部３２は、互いに異なる位置にあるデータＤを、それぞれ異なる基点データとして取得する。例えば、基点データ取得部３２は、図４に示す左から２番目のデータＤと、そのデータＤから離れた位置にある左から５番目のデータＤとを、それぞれ異なる基点データとして取得してよい。また、基点データ取得部３２は、図４に示す左から２番目のデータＤと左から３番目のデータＤとを、それぞれ異なる基点データとして取得してもよい。
【００２５】
図５は、第１実施形態に係るテストデータの例を示す模式図である。テストデータ抽出部３４は、正常データ群Ａに含まれる複数のデータＤから、基点データＤｌを基準として、テストデータを抽出する。すなわち、テストデータ抽出部３４は、正常データ群Ａに含まれる複数のデータＤから、基点データＤｌに対して所定関係となるデータＤを、テストデータとして抽出する。本実施形態では、テストデータ抽出部３４は、正常データ群Ａ内において、基点データＤｌに隣接するデータＤを、言い換えれば基点データＤｌの隣のビットのデータＤを、テストデータとして抽出する。図５の例では、テストデータ抽出部３４は、基点データＤｌに対して右側に隣接するデータＤｍを、テストデータとして抽出する。ただし、本実施形態におけるテストデータ抽出部３４は、基点データＤｌに対して右側に隣接するデータＤｍを、テストデータとすることに限られず、例えば、基点データＤｌに対して左側に隣接するデータＤｋを、テストデータとしてもよい。また、テストデータ抽出部３４は、基点データＤｌに隣接するデータＤｍ又はデータＤｋを、テストデータとして抽出することに限られず、例えば基点データＤｌに対して所定数のデータＤを隔てた位置にあるデータＤを、テストデータとして抽出してもよい。例えば、所定数が２である場合、テストデータは、データＤｎになる。言い換えれば、本実施形態に係るテストデータ抽出部３４は、正常データ群Ａ内において、基点データＤｌに対して所定の位置にあるデータＤを、すなわち、基点データＤｌに対して所定のビット数分だけ離れたデータＤを、テストデータとして抽出するといえる。
【００２６】
また、テストデータ抽出部３４は、正常データ群Ａ内において互いに異なる位置にある複数のテストデータを抽出する。本実施形態では、テストデータ抽出部３４は、基点データＤｌに隣接するデータＤｍを起点として、基点データＤｌから離れる側に隣接するデータＤを、１つずつ順番にテストデータとして抽出する。すなわち、図５の例では、テストデータ抽出部３４は、基点データＤｌに隣接するデータＤｍを、１つ目のテストデータ（第１テストデータ）として抽出し、データＤｍに対して基点データＤｌと反対側（基点データＤｌと離れる側）に隣接するデータＤｎを、２つ目のテストデータ（第２テストデータ）として抽出する。また、テストデータ抽出部３４は、以降も同様にテストデータの抽出を続け、例えば、データＤｎに対して基点データＤｌと反対側に隣接するデータＤｏを、３つ目のテストデータ（第３テストデータ）として抽出する。
【００２７】
なお、上述のように、テストデータ抽出部３４は、基点データＤｌに対して所定関係となるデータＤ（ここでは基点データＤｌに隣接するデータＤｍ）を、１つ目のテストデータとして抽出しているといえる。従って、複数のテストデータの抽出は、次のように行っているということもできる。すなわち、テストデータ抽出部３４は、１つ目のテストデータに対して所定関係となるデータＤｎを、２つ目のテストデータとして抽出している。従って、テストデータ抽出部３４は、２つ目のテストデータの１つ目のテストデータに対する関係（ここでは左側に隣接する関係）が、１つ目のテストデータの基点データＤｌに対する関係と同じとなるように、２つ目のテストデータを抽出するといえる。テストデータ抽出部３４は、以降も同様にテストデータの抽出を続け、例えば、２つ目のテストデータであるデータＤｎに対して所定関係（ここでは左側に隣接する関係）となるデータＤｏを、３つ目のテストデータとして算出する。すなわち、テストデータ抽出部３４は、１つ目のテストデータとして、基点データＤｌに対して所定関係となるデータＤを抽出し、２つ目以降のテストデータとして、直前のテストデータに対して所定関係となるデータＤを抽出するといえる。
【００２８】
なお、テストデータ抽出部３４が抽出するテストデータの数は、任意に設定可能である。例えば、テストデータ抽出部３４は、予め定めた所定の閾値の数だけ、テストデータを抽出してもよい。また、基点データが複数設定されていた場合、テストデータ抽出部３４は、一方の基点データと他方の基点データとの間にあるデータＤを、テストデータとして抽出してもよい。この場合、閾値は、一方の基点データと他方の基点データとの間にあるデータＤの数となる。
【００２９】
図３に戻り、テストデータ群生成部３６は、正常データ群ＡのうちのテストデータをファジングデータＦに置き換えたテストデータ群Ｂを、生成する。すなわち、テストデータ群生成部３６は、正常データ群ＡのデータＤのうちのテストデータを、ファジングデータＦに置き換えることで、テストデータ群Ｂを生成する。
【００３０】
図６は、第１実施形態に係るテストデータ群の例を説明する図である。図６の例では、テストデータ群生成部３６は、正常データ群Ａに含まれる１つ目のテストデータであるデータＤｍを、ファジングデータＦｍに置き換えることで、１つ目のテストデータ群Ｂ１（第１テストデータ群）を生成する。図６に示すように、テストデータ群生成部３６は、テストデータをファジングデータＦに置き換えることに加え、基点データＤｌをファジングデータＦｌに置き換えて、テストデータ群Ｂ１を生成する。すなわち、図６の例では、テストデータ群Ｂ１は、正常データ群Ａに対し、データＤｍの値「０」を、ファジングデータＦｍの値「１」に置き換えて、かつ、基点データＤｌの値「０」を、ファジングデータＦｌの値「１」に置き換えたものとなる。なお、図６では、説明の便宜上、基点データＤｌのみをファジングデータＦｌに置き換えたデータ群Ｂ０が記載されているが、データ群Ｂ０がテストデータ群生成部３６に生成されるわけではない。
【００３１】
また、テストデータ群生成部３６は、抽出したテストデータ毎に、テストデータをファジングデータＦに置き換えたテストデータ群Ｂを生成する。すなわち、テストデータ群生成部３６に生成された複数のテストデータ群Ｂは、ファジングデータＦに置き換えられたデータの位置（アドレス）が、互いに異なる。図６の例では、テストデータ群生成部３６は、１つ目のテストデータ群Ｂ１に対して、２つ目のテストデータであるデータＤｎをファジングデータＦｎに置き換えて、すなわちデータＤｎの値「１」をファジングデータＦｎの値「０」に置き換えることで、２つ目のテストデータ群Ｂ２（第２テストデータ群）を生成する。また、テストデータ群生成部３６は、２つ目のテストデータ群Ｂ２に対して、３つ目のテストデータであるデータＤｏをファジングデータＦｏに置き換えて、すなわちデータＤｏの値「０」をファジングデータＦｏの値「１」に置き換えることで、３つ目のテストデータ群Ｂ３（第３テストデータ群）を生成する。テストデータ群生成部３６は、以降のテストデータ群Ｂについても、同様に生成する。すなわち、テストデータ群生成部３６は、基点データＤｌと１つ目のテストデータとをファジングデータＦに置き換えて、１つ目のテストデータ群Ｂ１を生成する。そして、テストデータ群生成部３６は、それより前に生成されたテストデータ群Ｂにおいて置換済みのファジングデータＦを保持しつつ、すなわち置換済みのファジングデータＦをテストデータ（データＤ）に戻さずに、まだ置換されていない次のテストデータをファジングデータＦに置換することで、２つ目以降のテストデータ群Ｂを生成する。
【００３２】
テストデータ群生成部３６は、このようにテストデータ群Ｂを生成するため、ファジングデータＦに置き換えられたデータの位置（アドレス）が、１つずつずれるように、複数のテストデータ群Ｂを生成しているといえる。
【００３３】
なお、テストデータ群生成部３６は、基点データＤｌをファジングデータＦｌに置き換えなくてもよいし、置換済みのファジングデータＦをテストデータに戻してもよい。図７は、第１実施形態の他の例に係るテストデータ群の例を説明する図である。図７の例では、テストデータ群生成部３６は、正常データ群Ａに対し、１つ目のテストデータであるデータＤｍをファジングデータＦｍに置き換えつつ、基点データＤｌを保持して、すなわち基点データＤｌをファジングデータＦｌに置き換えないで、１つ目のテストデータ群Ｂ１を生成する。そして、テストデータ群生成部３６は、１つ目のテストデータ群Ｂ１に対し、ファジングデータＦｍをデータＤｍに戻し、かつ、２つ目のテストデータであるデータＤｎをファジングデータＦｎに置き換えて、２つ目のテストデータ群Ｂ２を生成する。そして、テストデータ群生成部３６は、２つ目のテストデータ群Ｂ２に対し、ファジングデータＦｎをデータＤｎに戻し、かつ、３つ目のテストデータであるデータＤｏをファジングデータＦｏに置き換えつて、３つ目のテストデータ群Ｂ３を生成する。言い換えれば、図７の例におけるテストデータ群生成部３６は、正常データ群Ａに対し、１つのテストデータのみをファジングデータＦに置き換えつつ、基点データＤｌをファジングデータＦｌに置き換えないで、テストデータ群Ｂを生成するといえる。また、テストデータ群生成部３６は、図７に示すように１つのテストデータのみをファジングデータＦに置き換えつつ、図６に示すように基点データＤｌをファジングデータＦｌに置き換えて、テストデータ群Ｂを生成してもよい。以上より、テストデータ群生成部３６は、ファジングデータＦに置き換えられたデータの位置（アドレス）が互いに異なるように、複数のテストデータ群Ｂを生成すればよいといえる。
【００３４】
図３に戻り、ファジング実行部３８は、テストデータ群生成部３６が生成したテストデータ群Ｂを用いて対象プログラム１２Ａを作動させることでファジングを実行して、対象プログラム１２Ａが正常に作動するかを確認する。ファジング実行部３８は、テストデータ群Ｂ毎にファジングを実行して、テストデータ群Ｂ毎に、対象プログラム１２Ａが正常に作動したかを確認する。ファジング実行部３８は、テストデータ群Ｂを用いた対象プログラム１２Ａの動作を確認して、対象プログラム１２Ａが正常に作動したか、正常に作動しないか、又は判定が不可能であるか、のいずれかの判定を行う。ファジング実行部３８は、例えば、対象プログラム１２Ａが、正常データ群Ａが入力された際の挙動と同じ挙動を示す場合に、正常に作動すると判定する。ファジング実行部３８は、例えば、対象プログラム１２Ａが、正常データ群Ａが入力された際の挙動と異なる挙動を示す場合であり、予期しない不適切な挙動を示したりするなど、動作内容に異常がある場合に、正常に動作しないと判定する。また、ファジング実行部３８は、対象プログラム１２Ａが、動作実行命令を受け付けず動作しない場合は、正常に動作すると判定するが、正常に動作しない場合としてもよい。また、ファジング実行部３８は、例えば、対象プログラム１２Ａの挙動が予期しないものであるが、正常に作動しないと判定するまでには至らない場合などに、判定が不可能であるとする。ただし、ファジング実行部３８の判定基準は、予め設定可能である。
【００３５】
表示制御部４０は、ファジング実行部３８による判定結果、すなわち、テストデータ群Ｂを用いて対象プログラム１２Ａを作動させた場合に、正常な作動をしたかの確認結果を、表示部２２に表示させる。図８は、表示部による表示の例を示す図である。表示制御部４０は、図８に示すように、テストデータ群情報Ｗ１と、判定結果情報Ｗ２とを、表示部２２に表示させる。テストデータ群情報Ｗ１は、テストデータ群Ｂの情報、ここではテストデータ群ＢのデータＤを、テストデータ群Ｂ毎に示す情報である。判定結果情報Ｗ２は、ファジング実行部３８による判定結果を、テストデータ群Ｂ毎に示す情報である。図８の例では、テストデータ群Ｂ１の判定結果が、ＮＧ、すなわち正常に動作しないもので、テストデータ群Ｂ２の判定結果も、ＮＧ、すなわち正常に動作しないもので、テストデータ群Ｂ３の判定結果が、ＯＫ、すなわち正常に動作したものとなっている。
【００３６】
データ生成装置１０は、以上のような構成となっている。次に、データ生成装置１０によるファジング実行のフローを、フローチャートに基づき説明する。図９は、第１実施形態に係るファジング実行のフローを説明するフローチャートである。図９に示すように、データ生成装置１０は、最初に、正常データ群取得部３０により、正常データ群Ａを取得し（ステップＳ１０）、基点データ取得部３２により、正常データ群ＡのデータＤに含まれる基点データＤｌの情報を取得する（ステップＳ１２）。そして、データ生成装置１０は、テストデータ抽出部３４により、基点データＤｌを基準として、正常データ群ＡのデータＤから、テストデータを抽出し（ステップＳ１４）、テストデータ群生成部３６により、正常データ群ＡのうちのテストデータをファジングデータＦに置換して、テストデータ群Ｂを生成する（ステップＳ１６）。本実施形態では、データ生成装置１０は、基点データＤｌに隣接するデータＤｍをテストデータとして抽出する。そして、データ生成装置１０は、データＤｍをファジングデータＦｍに置き換え、かつ、基点データＤｌをファジングデータＦｌに置き換えて、テストデータ群Ｂ１を生成する。
【００３７】
テストデータ群Ｂ１を生成したら、データ生成装置１０は、ファジング実行部３８により、そのテストデータ群Ｂ１を用いてファジングを実行する(ステップＳ１８)。すなわち、データ生成装置１０は、テストデータ群Ｂ１を用いて対象プログラム１２Ａを作動させて、対象プログラム１２Ａが正常に作動したかを判定する。ファジングを実行したら、データ生成装置１０は、抽出したテストデータの総数、言い換えれば生成したテストデータ群Ｂの総数が、所定の閾値に到達したかを判断する（ステップＳ２０）。閾値に到達した場合(ステップＳ２０；Ｙｅｓ)、データ生成装置１０は、表示制御部４０により、ファジングの結果、すなわち対象プログラム１２Ａが正常に作動したかの判定結果を、表示部２２に出力し、表示させる（ステップＳ２２）。これにより、ファジングは終了する。一方、抽出したテストデータの総数が所定の閾値に到達しない場合（ステップＳ２０；Ｎｏ）、すなわちテストデータの総数が閾値より少ない場合、ステップＳ１４に戻り、次のテストデータを抽出し、以降の処理を続ける。例えば、データ生成装置１０は、データＤｎを、テストデータをデータＤｍとした場合の次のテストデータとして抽出し、その後の処理を続ける。
【００３８】
なお、図９の説明では、１つのテストデータ群Ｂを生成する毎に、ファジングを実行していた。しかし、データ生成装置１０は、ファジング実行前に複数のテストデータ群Ｂを生成し、複数のテストデータ群Ｂが生成された後に、それらのテストデータ群Ｂのそれぞれについてファジングを実行してもよい。
【００３９】
以上説明したように、本実施形態に係るデータ生成装置１０は、正常データ群取得部３０と、基点データ取得部３２と、テストデータ抽出部３４と、テストデータ群生成部３６とを有する。正常データ群取得部３０は、複数のデータＤが並び、対象プログラム１２Ａを正常に作動可能な正常データ群Ａを取得する。基点データ取得部３２は、基点データＤｌの情報を取得する。基点データＤｌは、正常データ群Ａに含まれる複数のデータＤのうち、他のデータに置換すれば対象プログラム１２Ａを正常に作動させなくなるデータＤである。テストデータ抽出部３４は、正常データ群Ａに含まれる複数のデータＤから、基点データＤｌを基準としてテストデータを抽出する。テストデータ群生成部３６は、正常データ群Ａのうちのテストデータを他のデータに置き換えたテストデータ群Ｂを生成する。
【００４０】
ここで、対象プログラム１２Ａの脆弱性を好適に検出するためには、正常データ群Ａのどの位置のデータＤをファジングデータＦに置き換えれば、対象プログラム１２Ａが正常に作動しないかを、すなわちエラーが発生するかを把握しておくことが好ましい。ここで、正常データ群Ａは、エラーが発生するアドレス同士が関連している場合がある。本実施形態に係るデータ生成装置１０は、エラーが発生するデータＤ、すなわち基点データＤｌの情報を、最初に取得する。そして、その基点データＤｌを基準として、ファジングデータＦに置き換えるテストデータを抽出して、ファジング用のテストデータ群Ｂを生成している。このように、データ生成装置１０は、エラーとなることが既知の基点データＤｌを基準として、エラーとなることが未知のテストデータを抽出するため、基点データＤｌに関連するアドレスのエラーを好適に検出することができる。そのため、例えやユーザがアドレスを選択する場合などよりも、エラーが生じるアドレスの見落としが抑制される。従って、このデータ生成装置１０が生成したテストデータ群Ｂを用いると、テストにおける検出精度の低下を抑えることができる。
【００４１】
また、テストデータ抽出部３４は、正常データ群Ａ内において、基点データＤｌに対して所定の位置にあるデータＤを、テストデータとして抽出する。このデータ生成装置１０は、エラーとなることが既知の基点データＤｌに対して所定の位置にあるデータＤを、テストデータとして抽出するため、基点データＤｌに関連するアドレスのエラーを、好適に検出することができる。
【００４２】
また、テストデータ抽出部３４は、テストデータとして、基点データＤｌに対して所定関係を有する第１テストデータであるデータＤｍと、データＤｍに対して所定関係を有する第２テストデータであるデータＤｎとを抽出する。テストデータ群生成部３６は、正常データ群ＡのうちのデータＤｍをファジングデータＦｍに置き換えたテストデータ群Ｂ１（第１テストデータ群）と、正常データ群ＡのうちのデータＤｎをファジングデータＦｍに置き換えたテストデータ群Ｂ２（第２テストデータ群）とを生成する。このテストデータ抽出部３４は、それぞれ所定関係を有するテストデータを複数抽出して、それぞれのテストデータ毎にテストデータ群Ｂを生成する。従って、このデータ生成装置１０は、基点データＤｌに関連するアドレスを置換した複数のテストデータ群Ｂを生成することができるため、基点データＤｌに関連するアドレスのエラーを、より好適に検出することができる。
【００４３】
さらに言えば、このように複数のテストデータ群Ｂを生成することで、どのアドレスのデータＤが、基点データＤｌに関連してエラーが生じるかを、好適に検出することができる。すなわち例えば、テストデータ群Ｂ１、Ｂ２の判定結果がエラーであり、テストデータ群Ｂ３の判定結果がエラーでない場合、テストデータ群Ｂ１、Ｂ２で置換されたデータＤｍ、Ｄｎは、基点データＤｌに依存してエラーが起こるアドレスのデータであると判定可能である。また、テストデータ群Ｂ３で置換されたデータＤｏは、基点データＤｌに依存せず、基点データＤｌとの組み合わせにより作動が変化するアドレスのデータであると判断可能である。
【００４４】
また、テストデータ抽出部３４は、正常データ群Ａ内において、基点データＤｌに隣接するデータＤｍを第１テストデータとし、正常データ群Ａ内において、データＤｍに対して基点データＤｌと反対側に隣接するデータＤｎを、第２テストデータとする。すなわち、データ生成装置１０は、基点データＤｌに近いアドレスのデータＤを置換したテストデータ群Ｂを複数生成することが可能であるため、例えばエラーが発生する位置が集中するクラスタ型の不具合領域を、好適に発見することが可能となる。
【００４５】
また、テストデータ群生成部３６は、基点データＤｌとテストデータとの両方をファジングデータＦに置き換えて、テストデータ群Ｂを生成する。このデータ生成装置１０は、
基点データＤｌとテストデータとの両方をファジングデータＦに置換するため、そのテストデータをファジングデータＦに置換した場合に発生したエラーが、基点データＤｌに関連したエラーであるかを好適に判断することができる。
【００４６】
また、データ生成装置１０は、テストデータ群Ｂを用いて対象プログラム１２Ａを作動させることで、対象プログラム１２Ａが正常に作動するかを確認するファジング実行部３８を更に有する。このデータ生成装置１０は、テストデータ群Ｂを用いてファジングを実行するため、ファジングにおける検出精度の低下を抑えることができる。ただし、データ生成装置１０は、ファジング実行部３８を有さなくてもよい。すなわち、データ生成装置１０は、少なくともテストデータ群Ｂを生成するものであればよく、ファジングは、別の装置によって実行されてもよい。
【００４７】
なお、第１実施形態において、テストデータ抽出部３４は、基点データＤｌから所定のビット数分だけ離れたデータＤを、テストデータとして抽出していた。ただし、テストデータ抽出部３４は、基点データＤｌを基準としてテストデータを抽出するものであればよい。例えば、テストデータ抽出部３４は、基点データＤｌを含む正常データ群Ａに対し、所定のハミング距離に基づき、その距離の値だけ置換するデータＤの数を定め、テストデータとして抽出してよい。ハミング距離とは、データ数が等しい２つのデータ列間で、対応する文字や数値が異なる、置換された個数を意味する。この場合、テストデータ抽出部３４は、正常データ群Ａの基点データＤｌを除いたデータＤのうちから、所定数のデータＤをＦに置換した、すなわち所定のハミング距離を持つテストデータ群Ｂとして抽出する。ハミング距離は、テストデータの置換される個数を指しているため、抽出されるテストデータの位置（アドレス）は、任意である。
【００４８】
図１０は、第１実施形態の他の例に係るテストデータ群の生成を説明する図である。図１０は、ハミング距離が１のデータ群を、テストデータとして抽出した場合のテストデータ群ＢＳの例を示している。図１０の例では、テストデータ群生成部３６は、正常データ群Ａに対して基点データＤｌをファジングデータＦｌに置換し、かつ、ハミング距離が１となるデータ群へ置換する事により、１つ目のテストデータ群ＢＳとして生成する。１つ目のテストデータ群ＢＳは、言い換えれば、基点データＤｌをファジングデータＦｌに置換した場合の正常データ群Ａに対して、ファジングデータＦの数が１となるデータ群である。１つ目のテストデータ群ＢＳとしては、テストデータ群Ｂ１Ｓａ、Ｂ１Ｓｂなどが挙げられる。テストデータ群Ｂ１Ｓａは、基点データＤｌをＦｌとし、隣接するデータＤｍがファジングデータＦｍに置換されたものであり、テストデータ群Ｂ１Ｓｂは、基点データＤｌをＦｌとする２つ隣りのデータＤｎがファジングデータＦｎに置換されたものである。１つ目のテストデータ群ＢＳとしては、テストデータ群Ｂ１Ｓａ、Ｂ１Ｓｂ以外にも、ファジングデータＦのアドレスが異なる複数のものが想定される。この場合、例えば、テストデータ抽出部３４が、基点データＤｌをＦｌとしたビット列に対し、所定のビット数離れた範囲内のデータＤのうちからテストデータを抽出して、テストデータの数を絞ることで、テストデータ群の数を所定数に抑えてもよい。また、ファジング実行部３８は、複数のテストデータ群に対して優先順位を付けてファジングを実行してもよいし、全てのテストデータ群に対して並列でファジングを実行してもよい。
【００４９】
また、図１０の例では、テストデータ群生成部３６は、１つ目のテストデータ群ＢＳに対して、ハミング距離が１だけ異なる２つ目のテストデータ群ＢＳを生成する。２つ目のテストデータ群ＢＳとしては、テストデータ群Ｂ２Ｓａ１、  Ｂ２Ｓａ２、Ｂ２Ｓｂ１、Ｂ２Ｓｂ２などが挙げられる。テストデータ群Ｂ２Ｓａ１は、テストデータ群Ｂ１Ｓａに対し、基点データＤｌの３つ隣りがファジングデータＦｏに置換されたものであり、テストデータ群Ｂ２Ｓａ２は、テストデータ群Ｂ１Ｓａに対し、基点データＤｌの４つ隣りがファジングデータＦｐに置換されたものである。また、テストデータ群Ｂ２Ｓｂ１は、テストデータ群Ｂ１Ｓｂに対し、基点データＤｌの３つ隣りがファジングデータＦｏに置換されたものであり、テストデータ群Ｂ２Ｓｂ２は、テストデータ群Ｂ１Ｓｂに対し、基点データＤｌの４つ隣りがファジングデータＦｐに置換されたものである。
【００５０】
データ生成装置１０は、このように、所定のハミング距離に基づき、その距離の値だけ置換するデータＤの数を定め、テストデータとして抽出してもよい。このような場合でも、基点データＤｌを含む正常データ群Ａに対し、所定のハミング距離に基づき置換するデータＤの数を定めたテストデータ群ＢＳを生成することが可能となるため、基点データＤｌに関連するアドレスのエラーを好適に検出することができる。
【００５１】
また、データ生成装置１０は、基点データＤｌを含む正常データ群Ａに対し、正常データ群Ａを所定の数値分だけ異ならせるデータＤを、テストデータとして抽出してよい。図１１は、第１実施形態の他の例に係るテストデータ群の生成を説明する図である。図１１は、正常データ群Ａを１だけ異ならせるデータＤを、テストデータとして抽出した場合のテストデータ群ＢＴの例を示している。図１１の例では、テストデータ群生成部３６は、正常データ群Ａに対して基点データＤｌをファジングデータＦｌに置換した場合の正常データ群Ａに対して、数値が１だけ大きくなるテストデータ群ＢＴを、１つ目のテストデータ群ＢＴ１として生成する。テストデータ群ＢＴ１は、正常データ群Ａの１桁目のデータＤｏがファジングデータＦｏに置換されることで、１桁目の値が「０」から「１」に置換されている。すなわち、テストデータ群ＢＴ１は、基点データＤｌをファジングデータＦｌに置換した場合の正常データ群Ａに対して、数値が１だけ大きくなっている。また、テストデータ群生成部３６は、テストデータ群ＢＴ１に対して、数値が１だけ大きくなる２つ目のテストデータ群ＢＴ２を生成する。テストデータ群ＢＴ２は、テストデータ群ＢＴ１に対し、１桁目と２桁目の値が「０」となり、３桁目の値が「１」となっている。また、テストデータ群生成部３６は、テストデータ群ＢＴ２に対して、数値が１だけ大きくなる３つ目のテストデータ群ＢＴ３を生成する。テストデータ群ＢＴ３は、テストデータ群ＢＴ２に対し、１桁目値が「１」となっている。なお、図１１の例では２進法であるため、このようにテストデータ群ＢＴが生成されるが、１０進法などの場合は、テストデータ群ＢＴの生成の仕方は異なる。
【００５２】
データ生成装置１０は、このような場合でも、基点データＤｌを含む正常データ群Ａに対し、所定の数値分だけ異ならせたテストデータ群ＢＴを生成することが可能となるため、基点データＤｌに関連するアドレスのエラーを好適に検出することができる。また、データ生成装置１０は、図１０及び図１１に示したハミング距離や数値に限らず、例えば、基点データＤｌを含む正常データ群Ａに対し、マンハッタン距離やレーベンシュタイン距離だけ異ならせたテストデータ群を生成してもよい。
【００５３】
なお、図１０及び図１１のテストデータ群ＢＳ、ＢＴは、基点データＤｌをファジングデータＦｌに置換していたが、置換しなくてもよい。また、図１０及び図１１のテストデータ群ＢＳ、ＢＴは、前に生成したテストデータで置換済みのファジングデータＦを保持していたが、図７で説明したように、置換済みのファジングデータＦを、データＤに戻してもよい。
【００５４】
（第２実施形態）
次に、第２実施形態について説明する。第２実施形態に係るデータ生成装置１０は、テストデータの抽出の方法が、第１実施形態と異なる。第２実施形態において、第１実施形態と構成が共通する箇所は、説明を省略する。
【００５５】
図１２は、第２実施形態に係るファジング実行のフローを説明するフローチャートである。図１２に示すように、第２実施形態に係るデータ生成装置１０は、最初に、正常データ群取得部３０により、正常データ群Ａａを取得する（ステップＳ３０）。そして、データ生成装置１０は、基点データ取得部３２により、正常データ群ＡａのデータＤに含まれる、複数の基点データＤｌの情報を取得する（ステップＳ３２）。以降では、基点データ取得部３２が、複数の基点データＤｌとして、第１基点データＤｌ１と、第２基点データＤｌ２とを取得することを例として説明する。
【００５６】
図１３は、第２実施形態における複数の基点データの例を示す図である。図１３に示すように、第２実施形態においては、第１基点データＤｌ１をファジングデータＦｌ１に置換したデータ群Ｂ０ａ１は、対象プログラム１２Ａにエラーを生じさせることが予め検出されている。同様に、第２基点データＤｌ２をファジングデータＦｌ２に置換したデータ群Ｂ０ａ２は、対象プログラム１２Ａにエラーを生じさせることが予め検出されている。基点データ取得部３２は、このような第１基点データＤｌ１の情報と第２基点データＤｌ２の情報とを、取得する。
【００５７】
図１２に戻り、複数の基点データＤｌの情報を取得した後、データ生成装置１０は、基点データＤｌ同士が隣接しているかを判断し（ステップＳ３４）、隣接している場合（ステップＳ３４；Ｙｅｓ）、本処理を終了する。すなわち、データ生成装置１０は、正常データ群Ａａにおいて、第１基点データＤｌ１と第２基点データＤｌ２とが隣接している場合、言い換えれば第１基点データＤｌ１と第２基点データＤｌ２との間にデータＤが存在しない場合は、第１基点データＤｌ１と第２基点データＤｌ２とに基づくテストデータの抽出を行わず、本処理を終了する。
【００５８】
一方、基点データＤｌ同士が隣接していない場合（ステップＳ３４；Ｎｏ）、すなわち第１基点データＤｌ１と第２基点データＤｌ２との間にデータＤが存在する場合、データ生成装置１０は、テストデータ抽出部３４により、正常データ群ＡａのデータＤから、複数の基点データＤｌを基準として、テストデータを抽出する（ステップＳ３６）。テストデータの抽出方法について、以下説明する。
【００５９】
図１４は、第２実施形態におけるテストデータの例を示す図である。テストデータ抽出部３４は、正常データ群Ａａに含まれる複数のデータＤから、第１基点データＤｌ１と第２基点データＤｌ２とを基準として、テストデータを抽出する。すなわち、テストデータ抽出部３４は、正常データ群Ａａに含まれる複数のデータＤから、第１基点データＤｌ１及び第２基点データＤｌ２に対して所定関係となるデータＤを、テストデータとして抽出する。さらに言えば、テストデータ抽出部３４は、第１基点データＤｌ１及び第２基点データＤｌ２に対して所定位置にあるデータＤを、テストデータとして抽出する。具体的には、図１４の例に示すように、テストデータ抽出部３４は、第１基点データＤｌ１の位置と第２基点データＤｌ２の位置との中央の位置にあるデータＤｍを、テストデータとして抽出する。ただし、テストデータ抽出部３４は、第１基点データＤｌ１と第２基点データＤｌ２との中央位置にあるデータＤｍを、テストデータとすることに限られない。第２実施形態に係るテストデータ抽出部３４は、第１基点データＤｌ１と第２基点データＤｌ２との間にあるデータＤであれば、中央位置のデータＤｍに限られず、テストデータとして抽出してよい。
【００６０】
図１２に戻り、テストデータを抽出した後、データ生成装置１０は、テストデータ群生成部３６により、正常データ群Ａａに対してテストデータをファジングデータＦに置換して、テストデータ群Ｂａを生成する（ステップＳ３８）。図１４の例では、テストデータ群生成部３６は、正常データ群Ａａの第１基点データＤｌ１をファジングデータＦｌ１に置換し、第２基点データＤｌ２をファジングデータＦｌ２に置換し、テストデータであるデータＤｍをファジングデータＦｍに置換することで、テストデータ群Ｂａ１を生成する。
【００６１】
図１２に示すように、テストデータ群Ｂａを生成した後、データ生成装置１０は、ファジング実行部３８により、そのテストデータ群Ｂａを用いてファジングを実行する(ステップＳ４０)。すなわち、データ生成装置１０は、テストデータ群Ｂａを用いて対象プログラム１２Ａを作動させて、対象プログラム１２Ａが正常に作動したかを判定する。ファジングを実行したら、データ生成装置１０は、抽出したテストデータの総数、言い換えれば生成したテストデータ群Ｂの総数が、所定の閾値に到達したかを判断する（ステップＳ４２）。閾値に到達した場合(ステップＳ４２；Ｙｅｓ)、データ生成装置１０は、表示制御部４０により、ファジングの結果、すなわち対象プログラム１２Ａが正常に作動したかの判定結果を、表示部２２に出力し、表示させる（ステップＳ４４）。これにより、ファジングは終了する。なお、処理が終了しても、第１基点データＤｌ１及び第２基点データＤｌ２とは別の基点データＤｌがある場合、データ生成装置１０は、その別の基点データＤｌと第２基点データＤｌ２とを用いて、ステップＳ３４以降の処理を続けてよい。
【００６２】
抽出したテストデータの総数が閾値に到達しない場合（ステップＳ４２；Ｎｏ）、ステップＳ４６に進む。データ生成装置１０は、ステップＳ４６において、テストデータ群Ｂａのファジングの結果が正常である場合（ステップＳ４６；Ｙｅｓ）、テストデータ抽出部３４により、第１基点データＤｌ１とテストデータとの間のデータＤを、次のテストデータとして抽出し（ステップＳ４８）、ステップＳ３８に戻り、抽出した次のテストデータを用いてテストデータ群Ｂａを生成して、ファジングを実行する。一方、テストデータ群Ｂａのファジングの結果が正常でない場合（ステップＳ４６；Ｎｏ）、データ生成装置１０は、テストデータ抽出部３４により、テストデータと第２基点データＤｌ２との間のデータＤを、次のテストデータとして抽出し（ステップＳ５０）、ステップＳ３８に戻り、抽出した次のテストデータを用いてテストデータ群Ｂａを生成して、ファジングを実行する。すなわち、第２実施形態に係るデータ生成装置１０は、テストデータ群Ｂａのファジングの結果に応じて、次のテストデータ群Ｂａの生成に用いるテストデータを、異ならせる。
【００６３】
図１５及び図１６は、第２実施形態におけるテストデータ群を説明する図である。図１５は、テストデータ群Ｂａのファジングの結果が正常である場合、すなわち図１２のステップＳ４８の場合を示している。図１５に示すように、データＤｍをファジングデータＦｍに置換したテストデータ群Ｂａ１のファジング結果が正常である場合、テストデータ抽出部３４は、ファジングデータＦｌ１（第１基点データＤｌ１）とファジングデータＦｍ（テストデータであるデータＤｍ）との間にあるデータＤｎを、次のテストデータとして抽出する。ここでは、データＤｎは、ファジングデータＦｌ１とファジングデータＦｍとの中央位置にあるデータである。そして、テストデータ群生成部３６は、テストデータ群Ｂａ１に対し、次のテストデータとして抽出されたデータＤｎをファジングデータＦｎに置換して、次のテストデータ群Ｂａ２を生成する。すなわち、データ生成装置１０は、テストデータ群Ｂａ１のファジング結果が正常である場合、テストデータであるデータＤｍよりも第１基点データＤｌ１側に、第１基点データＤｌ１と関連してエラーを起こすデータＤがあるかを確認するために、第１基点データＤｌ１とデータＤｍとの間のデータＤｎをテストデータとして、次のテストデータ群Ｂａ２を生成する。
【００６４】
図１６は、直前にファジングを実行したテストデータ群Ｂａの結果が正常でない場合、すなわち図１２のステップＳ５０の場合を示している。図１６に示すように、テストデータ群Ｂａ１におけるファジングの結果が正常でない場合、テストデータ抽出部３４は、ファジングデータＦｍ（テストデータであるデータＤｍ）とファジングデータＦｌ２（第２基点データＤｌ２）との間にあるデータＤｏを、次のテストデータとして抽出する。ここでは、データＤｏは、ファジングデータＦｍとファジングデータＦｌ２との中央位置にあるデータである。そして、テストデータ群生成部３６は、テストデータ群Ｂａ１に対し、次のテストデータとして抽出されたデータＤｏをファジングデータＦｏに置換して、次のテストデータ群Ｂａ２を生成する。すなわち、データ生成装置１０は、テストデータ群Ｂａ１のファジング結果が正常でない場合、テストデータであるデータＤｍよりも第１基点データＤｌ１側のデータＤが、第１基点データＤｌ１と関連してエラーを起こすものであると推定する。そして、データ生成装置１０は、テストデータであるデータＤｍよりも第２基点データＤｌ２側に、第１基点データＤｌ１と関連してエラーを起こすデータＤがあるかを確認するために、データＤｍと第２基点データＤｌ２との間のデータＤｏをテストデータとして、次のテストデータ群Ｂａ２を生成する。
【００６５】
図１５及び図１６では、２つ目のテストデータ群Ｂａ２までについて説明したが、３つ目以降のテストデータ群Ｂａの生成も、同様に行われる。例えば、図１５において生成したテストデータ群Ｂａ２のファジング結果が正常である場合、データ生成装置１０は、ファジングデータＦｌ１（第１基点データＤｌ１）と、ファジングデータＦｎ（直前のテストデータであるデータＤｎ）との間のデータＤをテストデータとして、３つ目のテストデータ群Ｂａ３を生成する。また、図１６において生成したテストデータ群Ｂａ２のファジング結果が正常である場合、データ生成装置１０は、ファジングデータＦｍ（データＤｍ）とファジングデータＦｏ（直前のテストデータであるデータＤｏ）との間のデータＤをテストデータとして、テストデータ群Ｂａ３を生成する。すなわち、データ生成装置１０は、ファジングの結果が正常である場合、直前に抽出したテストデータと、そのテストデータよりも第１基点データＤｌ１側の直近のファジングデータＦとの間のデータＤを、次のテストデータとして抽出するといえる。
【００６６】
また、図１５において生成したテストデータ群Ｂａ２のファジング結果が正常でない場合、データ生成装置１０は、ファジングデータＦｎ（直前のテストデータであるデータＤｎ）とファジングデータＦｍ（データＤｍ）との間のデータＤをテストデータとして、３つ目のテストデータ群Ｂａ３を生成する。また、図１６において生成したテストデータ群Ｂａ２のファジング結果が正常でない場合、データ生成装置１０は、ファジングデータＦｏ（直前のテストデータであるデータＤｏ）とファジングデータＦｌ２（第２基点データＤｌ２）との間のデータＤをテストデータとして、テストデータ群Ｂａ３を生成する。すなわち、データ生成装置１０は、ファジングの結果が正常でない場合、直前に抽出したテストデータと、そのテストデータよりも第２基点データＤｌ２側の直近のファジングデータＦとの間のデータＤを、次のテストデータとして抽出するといえる。
【００６７】
第２実施形態に係るデータ生成装置１０は、このように、直前に抽出したテストデータと、そのテストデータの直近のファジングデータＦとの間のデータＤを、次のテストデータとして抽出することを続ける。これにより、テストデータの位置は、収束してゆく。従って、図１２のステップＳ４２の閾値は、予め定めた所定数であってもよいが、テストデータの位置を収束させる分の数であってもよい。
【００６８】
このように、第２実施形態に係るデータ生成装置１０は、第１基点データＤｌ１と第２基点データＤｌ２との間のデータＤをテストデータとしてテストデータ群を生成するため、第１基点データＤｌ１に関連するアドレスのエラーを、好適に検出することができる。さらに、ファジングデータＦの間のデータＤを、テストデータとして順に抽出していくため、例えば隣接するテストデータを順に抽出していく第１実施形態よりも、抽出するテストデータの数を抑えることができ、テスト負担を抑制することができる。
【００６９】
以上説明したように、第２実施形態においては、基点データ取得部３２が、基点データＤｌとして、第１基点データＤｌ１と第２基点データＤｌ２との情報を取得する。そして、テストデータ抽出部３４は、第１基点データＤｌ１と第２基点データＤｌ２とに対して所定関係を有するデータＤを、テストデータとして抽出する。このデータ生成装置１０は、エラーとなることが既知の第１基点データＤｌ１と第２基点データＤｌ２とに対して所定関係を有するデータＤを、テストデータとして抽出するため、第１基点データＤｌ１に関連するアドレスのエラーを、好適に検出することができる。
【００７０】
また、テストデータ抽出部３４は、正常データ群Ａ内において、第１基点データＤｌ１と第２基点データＤｌ２との間にあるデータＤを、テストデータとして抽出する。このデータ生成装置１０は、エラーとなることが既知の第１基点データＤｌ１と第２基点データＤｌ２との間のデータＤを、テストデータとして抽出するため、第１基点データＤｌ１に関連するアドレスのエラーを、好適に検出することができる。
【００７１】
また、テストデータ抽出部３４は、テストデータ群Ｂａ１を用いて対象プログラム１２Ａを作動させると対象プログラム１２Ａが正常に作動しない場合に、テストデータと第２基点データＤｌ２との間にあるデータＤｎを、新たなテストデータとして抽出する。そして、テストデータ抽出部３４は、テストデータ群Ｂａ１を用いて対象プログラム１２Ａを作動させると対象プログラム１２Ａが正常に作動する場合に、第１基点データＤｌ１とテストデータとの間にあるデータＤｏを、新たなテストデータとして抽出する。このデータ生成装置１０は、テストデータ群Ｂ１ａでのファジングでエラーが発生した際に、テストデータ（データＤｍ）より第１基点データＤｌ１側のデータＤをファジングデータＦに変換した場合に、第１基点データＤｌ１に関連したエラーが発生すると推定する。そして、データ生成装置１０は、現在のテストデータであるデータＤｍよりも第２基点データＤｌ２側のデータＤｏを新たなテストデータとしてファジングを進めることで、テストの数を抑制して、テスト負担を減らすことができる。また、データ生成装置１０は、テストデータ群Ｂ１ａでのファジングでエラーが発生しない際に、テストデータ（データＤｍ）より第１基点データＤｌ１側のデータＤについて、エラーが発生するかをより詳細に確認する必要があると判断する。そのため、データ生成装置１０は、第１基点データＤｌ１とテストデータ（データＤｍ）との間のデータＤｎを新たなテストデータとしてファジングを進めて、テスト精度を向上させることができる。
【００７２】
なお、図１２の説明では、１つのテストデータ群Ｂａを生成する毎に、ファジングを実行していた。しかし、データ生成装置１０は、ファジング実行前に複数のテストデータ群Ｂａを生成し、複数のテストデータ群Ｂａが生成された後に、それらのテストデータ群Ｂのそれぞれについてファジングを実行してもよい。この場合、例えば、第１基点データＤｌ１と第２基点データＤｌ２との間のデータＤのそれぞれをテストデータとしたテストデータ群Ｂａを予め生成しておき、ファジングの結果に応じて、次に使用するテストデータ群Ｂａを選択して、ファジングを実行すればよい。すなわち、テストデータ群Ｂａ１のファジング結果が正常である場合、図１５に示すテストデータ群Ｂａ２を選択して、テストデータ群Ｂａ１のファジング結果が正常でない場合、図１６に示すテストデータ群Ｂａ２を選択すればよい。また、第２実施形態におけるテストデータ群Ｂａは、第１実施形態の図７での説明と同様に、第１基点データＤｌ１及び第２基点データＤｌ２をファジングデータＦｌ１、Ｆｌ２に置き換えなくてもよいし、置換済みのファジングデータＦをテストデータに戻してもよい。
【００７３】
（第３実施形態）
次に、第３実施形態について説明する。第３実施形態に係るデータ生成装置１０は、第１実施形態の方法を用いたテストデータの抽出と、第２実施形態の方法を用いたテストデータの抽出との、両方を行うものである。第３実施形態において、第１実施形態又は第２実施形態と構成が共通する箇所は、説明を省略する。
【００７４】
第３実施形態に係るデータ生成装置１０は、第２実施形態と同じ方法で生成したテストデータ群Ｂａを用いてファジングを実行しつつ、第１実施形態と同じ方法で生成したテストデータ群Ｂを用いてファジングを実行する。すなわち、第３実施形態に係るデータ生成装置１０は、第１基点データＤｌ１と第２基点データＤｌ２との間のデータＤをテストデータとしてテストデータ群Ｂａを生成しつつ、隣接するデータＤをテストデータとして順番に抽出しながら、テストデータ群Ｂを生成する。以下、第３実施形態におけるファジングの実行フローについて、具体的に説明する。なお、説明の便宜上、第１実施形態と同様に隣接するデータＤを順に抽出する場合のテストデータを、補助テストデータとし、その補助テストデータをファジングデータＦに置換したテストデータ群を、補助テストデータ群Ｂｂと記載する。
【００７５】
図１７は、第３実施形態に係るファジング実行のフローを説明するフローチャートである。図１７に示すように、第３実施形態に係るデータ生成装置１０は、ステップＳ３０からステップＳ５０までは、図１２に示すフローと同じである。そして、テストデータ群Ｂａのファジングの結果が正常でなく（ステップＳ４６；Ｎｏ）、テストデータであるデータＤｍと第２基点データＤｌ２との間のデータＤｏを、次のテストデータとして抽出した場合に（ステップＳ５０）、データ生成装置１０は、ステップＳ３８に戻る処理と並行して、第１基点データＤｌ１とテストデータであるデータＤｍとの間のデータＤから、補助テストデータを抽出する（ステップＳ５２）。そして、データ生成装置１０は、補助テストデータをファジングデータＦに置換することで、補助テストデータ群Ｂｂを生成し（ステップＳ５４）、生成した補助テストデータ群Ｂｂを用いて対象プログラム１２Ａを作動させてファジングを実行する（ステップＳ５６）。そして、データ生成装置１０は、生成した補助テストデータの数が閾値に到達したかを判断して（ステップＳ５８）、閾値に到達したら（ステップＳ５８；Ｙｅｓ）、ファジングの結果を表示部２２に表示させて、本処理を終了する。一方、生成した補助テストデータの数が閾値に到達しない場合（ステップＳ５８；Ｎｏ）、ステップＳ５２に戻り、次の補助テストデータを抽出して処理を続ける。以下、補助テストデータ群の生成方法について説明する。
【００７６】
図１８は、第３実施形態に係る補助テストデータ群の一例を説明する図である。図１８
に示すように、データ生成装置１０は、テストデータ群Ｂａ１におけるファジングの結果が正常でない場合、データＤｏをファジングデータＦｏに置換したテストデータ群Ｂａ２を生成してファジングを続けつつ、補助テストデータ群Ｂｂ１を生成する。具体的には、テストデータ抽出部３４は、ファジングデータＦｌ１（第１基点データＤｌ１）に対し、ファジングデータＦｍ（データＤｍ）側に隣接するデータＤｑを、補助テストデータとして抽出する。そして、テストデータ群生成部３６は、補助テストデータとして抽出したデータＤｑを、ファジングデータＦｑに置換して、補助テストデータ群Ｂｂ１を生成する。
【００７７】
また、テストデータ抽出部３４は、ファジングデータＦｑ（直前の補助テストデータであるデータＤｑ）に対し、ファジングデータＦｍ（データＤｍ）側に隣接するデータＤｒを、次の補助テストデータとして抽出する。テストデータ群生成部３６は、直前の補助テストデータ群Ｂｂ１に対して、次の補助テストデータであるデータＤｒをファジングデータＦｒに置き換えて、次の補助テストデータ群Ｂｂ２を生成する。以降も同様に、直前で抽出した補助テストデータに対し、ファジングデータＦｍ（データＤｍ）側に隣接するデータＤを次の補助テストデータとして抽出して、補助テストデータ群Ｂｂを生成する。ファジング実行部３８は、生成した補助テストデータ群Ｂｂのそれぞれについて、ファジングを実行する。なお、データ生成装置１０は、ファジングデータＦｌ１（第１基点データＤｌ１）とファジングデータＦｍ（データＤｍ）との間にある全てのデータＤを、補助テストデータとして抽出する。すなわち、図１７のステップＳ５８における閾値は、ファジングデータＦｌ１（第１基点データＤｌ１）とファジングデータＦｍ（データＤｍ）との間のデータＤの総数となる。ただし、閾値は、それに限られず、任意の値であってよい。
【００７８】
上述のように、第２実施形態に係るデータ生成装置１０は、テストデータ群Ｂａのファジングの結果が正常でない場合には、データＤｍより第１基点データＤｌ１側のデータＤで、第１基点データＤｌ１と関連したエラーが発生すると推定して、第１基点データＤｌ１とデータＤｍとの間のデータＤについてファジングを実行しない。それに対して、第３実施形態に係るデータ生成装置１０は、第１基点データＤｌ１とデータＤｍとの間のデータＤを、補助テストデータとして抽出してファジングを行う。すなわち、第３実施形態に係るデータ生成装置１０は、第１基点データＤｌ１と第２基点データＤｌ２との間のデータＤを抽出して行うファジングにおいては抽出しなかったデータＤを抽出して補助的にファジングを実行する。従って、第３実施形態によると、テスト負担を抑制しつつ、検出精度の低下をより好適に抑えることができる。
【００７９】
なお、第３実施形態に係るデータ生成装置１０は、補助テストデータの抽出を、テストデータ群Ｂａのファジングの結果が正常でない場合にのみ行っていたが、それに限られない。第３実施形態に係るデータ生成装置１０は、第２実施形態で説明したファジングと、第１実施形態で説明したファジングとの、両方を実施するものであればよい。
【００８０】
（表示例）
次に、表示部２２によるファジングの結果の表示例について説明する。表示部２２は、図８で例示したように、表示制御部４０の制御により、ファジング実行部３８によるファジングの結果を表示する。以降で、ファジングの結果の表示の他の例について説明する。なお、これらの表示例は、全ての実施形態に適用可能である。
【００８１】
図１９から図２２は、表示部による表示の他の例を示す図である。表示制御部４０は、ファジングの結果、すなわちファジング実行部３８による判定結果を、図１９から図２２のように表示部２２に表示させてもよい。図１９は、エラーが生じたデータＤを示すカラーマップである。図１９の横軸は、番号が１から３０までのデータＤを示し、縦軸は、番号が３１から６０までのデータＤを示している。番号とは、正常データ群Ａ内におけるデータＤのアドレスを意味している。図１９は、それぞれのデータＤを所定数で区分けして、複数の領域ＡＲを表示している。図１９の例では、１番から１０番までのデータＤと、１１番から２０番までのデータＤと、２１番から３０番までのデータＤとを区切り、３１番から４０番までのデータＤと、４１番から５０番までのデータＤと、５１番から６０番までのデータＤとを区切って、９つの領域ＡＲを表示している。そして、表示制御部４０は、領域ＡＲ内に含まれるデータＤのうち、ファジングデータＦに置換した場合にエラーが生じたデータＤの数を、領域ＡＲの色で表現する。図１９の例では、２１番から３０番までのデータＤと５１番から６０番までのデータＤとの領域ＡＲの色が濃くなっており、これは、２１番から３０番までのデータＤと５１番から６０番までのデータＤのうち、エラーが生じたデータＤの数が多くなっていることを示している。このように、データＤを所定数で区切って領域ＡＲを生成し、エラーが生じたデータＤの個数に応じて、領域ＡＲの色を異ならせることで、どのアドレスにエラーが集中するかを、容易に認識することができる。
【００８２】
図２０は、エラーが生じたデータＤを示す散布図である。図２０の横軸は、番号が１から３０までのデータＤを示し、縦軸は、番号が３１から６０までのデータＤを示している。図２０の例では、エラーが生じたデータＤを、番号が１から３０までのデータＤと番号が３１から６０までのデータＤとの二次元上に、ポイントＰとしてマッピングしている。このように散布図上でエラーが生じたデータＤを表示することで、例えば重心を抽出することも可能となり、どのアドレスにエラーが集中するかを、容易に認識することができる。図２０のような散布図を用いることで、好適にクラスタリングを行うことが可能となる。
【００８３】
図２１は、エラーが生じたデータＤを示す棒グラフである。図２１の横軸は、番号が１から６０までのデータＤを、１０個ずつ区分したものであり、縦軸は、エラーが生じたデータＤの数である。図２１のように棒グラフで示すことによっても、どのアドレスにエラーが集中するかを、容易に認識することができる。
【００８４】
図２２は、エラーが生じたデータＤを示す円形のデンドログラムである。図２２の円周は、番号ごとのデータＤを示しており、ポイントＰは、エラーが生じたデータＤを示している。線で連結されたポイントＰは、互いに関連してエラーが生じたデータＤであることを示している。このようにデンドログラムを用いてエラーが生じたデータＤを示すことで、データＤ同士の関連性を容易に認識することができる。
【００８５】
以上、本発明の実施形態を説明したが、これら実施形態の内容により実施形態が限定されるものではない。また、前述した構成要素には、当業者が容易に想定できるもの、実質的に同一のもの、いわゆる均等の範囲のものが含まれる。さらに、前述した構成要素は適宜組み合わせることが可能であり、各実施形態の構成を組み合わせることも可能である。さらに、前述した実施形態の要旨を逸脱しない範囲で構成要素の種々の省略、置換又は変更を行うことができる。
【符号の説明】
【００８６】
１  データ生成システム
１０  データ生成装置
１２Ａ  対象プログラム
２０  入力部
２２  表示部
２４  制御部
２６  記憶部
３０  正常データ群取得部
３２  基点データ取得部
３４  テストデータ抽出部
３６  テストデータ群生成部
３８  ファジング実行部
４０  表示制御部
Ａ  正常データ群
Ｂ  テストデータ群
Ｄ  データ
Ｄｌ  基点データ
Ｆ  ファジングデータ
【図１】
2020107284.tif 000003
【図２】
2020107284.tif 000004
【図３】
2020107284.tif 000005
【図４】
2020107284.tif 000006
【図５】
2020107284.tif 000007
【図６】
2020107284.tif 000008
【図７】
2020107284.tif 000009
【図８】
2020107284.tif 000010
【図９】
2020107284.tif 000011
【図１０】
2020107284.tif 000012
【図１１】
2020107284.tif 000013
【図１２】
2020107284.tif 000014
【図１３】
2020107284.tif 000015
【図１４】
2020107284.tif 000016
【図１５】
2020107284.tif 000017
【図１６】
2020107284.tif 000018
【図１７】
2020107284.tif 000019
【図１８】
2020107284.tif 000020
【図１９】
2020107284.tif 000021
【図２０】
2020107284.tif 000022
【図２１】
2020107284.tif 000023
【図２２】
2020107284.tif 000024