(57)【要約】      （修正有）【課題】ファイルファジングによるプログラムテストに供される入力ファイルにおける変更範囲に応じたタイミングでプログラムテストを終わらせるようにするプログラムテスト制御技術を提供する。【解決手段】プログラムテスト装置は、ファイルファジングによるプログラムテストに供される入力ファイルの変更箇所がテスト対象プログラムによって読み込まれたことを検出する検出部と、変更箇所がテスト対象プログラムによって読み込まれたことを検出した時点に基づいて決定したタイミングで、テスト対象プログラムの動作を終了させる停止部とを有する。【選択図】図８
2018173748.tif 000002
【特許請求の範囲】
【請求項１】
ファイルファジングによるプログラムテストに供される入力ファイルの変更箇所がテスト対象プログラムによって読み込まれたことを検出する検出部と、
前記変更箇所が前記テスト対象プログラムによって読み込まれたことを検出した時点に基づいて決定したタイミングで、前記テスト対象プログラムの動作を終了させる停止部と
を有するプログラムテスト装置。
【請求項２】
ファイルファジングによるプログラムテストに供される入力ファイルの変更箇所がテスト対象プログラムによって読み込まれたことを検出し、
前記変更箇所が前記テスト対象プログラムによって読み込まれたことを検出した時点に基づいて決定したタイミングで、前記テスト対象プログラムの動作を終了させる
処理を含み、コンピュータにより実行されるテスト制御方法。
【請求項３】
ファイルファジングによるプログラムテストに供される入力ファイルの変更箇所がテスト対象プログラムによって読み込まれたことを検出し、
前記変更箇所が前記テスト対象プログラムによって読み込まれたことを検出した時点に基づいて決定したタイミングで、前記テスト対象プログラムの動作を終了させる
処理をコンピュータに実行させるテスト制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムテストの制御技術に関する。
【背景技術】
【０００２】
ファイルファジングによるプログラムテストでは、正常ファイルの一部を書き換えたファイルを入力してテスト対象プログラムの動作を検証する処理を繰り返す。テスト対象プログラムを実行している最中に例外処理が起きれば、変更箇所がテスト対象プログラムの脆弱性に関わる可能性がある。
【０００３】
一方、所定時間が経過しても例外処理が起きない場合には、変更箇所がテスト対象プログラムの脆弱性に関わらないと想定される。但し、例外処理が起きなかったと結論付けるタイミングが問題となる。
【０００４】
早いタイミングでタイムアウトすると、例外処理の発生を見逃すかもしれない。一方、タイムアウトのタイミングが遅すぎると、テストに要する時間が無駄に長くなる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００９−１１６８４７号公報
【特許文献２】特表２０１６−５３０５８７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
本発明の目的は、一側面では、入力ファイルにおける変更範囲に応じたタイミングでプログラムテストを終わらせるようにすることである。
【課題を解決するための手段】
【０００７】
一態様に係るプログラムテスト装置は、（Ａ）ファイルファジングによるプログラムテストに供される入力ファイルの変更箇所がテスト対象プログラムによって読み込まれたことを検出する検出部と、（Ｂ）変更箇所がテスト対象プログラムによって読み込まれたことを検出した時点に基づいて決定したタイミングで、テスト対象プログラムの動作を終了させる停止部とを有する。
【発明の効果】
【０００８】
一側面としては、入力ファイルにおける変更範囲に応じたタイミングでプログラムテストを終わらせることができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、オリジナルファイルの例を示す図である。
【図２】図２は、入力ファイルの例を示す図である。
【図３】図３は、入力ファイルの例を示す図である。
【図４】図４は、例外処理の実行を検出する場合のシーケンスを示す図である。
【図５】図５は、入力ファイルのクローズを検出する場合のシーケンスを示す図である。
【図６】図６は、タイムアウトを検出する場合のシーケンスを示す図である。
【図７】図７は、変更箇所の読み込みを検出する場合のシーケンスを示す図である。
【図８】図８は、プログラムテスト装置のモジュール構成例を示す図である。
【図９】図９は、監視結果テーブルの例を示す図である。
【図１０】図１０は、テスト仕様データの例を示す図である。
【図１１】図１１は、テスト結果テーブルの例を示す図である。
【図１２】図１２は、メイン処理フローを示す図である。
【図１３】図１３は、入力ファイル生成処理フローを示す図である。
【図１４】図１４は、メイン処理フローを示す図である。
【図１５】図１５は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１０】
まず、ファイルファジングによるプログラムテストに供される入力ファイルの基礎となるオリジナルファイルについて説明する。図１に、オリジナルファイル１０１の例を示す。オリジナルファイル１０１は、例えばテスト対象プログラムである画像ビューワに読み込まれる画像ファイルである。オリジナルファイル１０１は、公開されている画像ファイルの仕様に従っている。つまり、オリジナルファイル１０１は、正常なファイルである。
【００１１】
この例におけるオリジナルファイル１０１は、ヘッダ及び本体を含んでいる。ヘッダに含まれるオフセット０ｘ０００００００Ａ乃至０ｘ０００００００Ｄに格納されているコード（０ｘ００４９４９２Ａ）は、本体の先頭オフセットを指すポインタである。テスト対象プログラムは、このポインタに基づいて本体のデータを取得する。尚、この例におけるオフセットは、ファイルの先頭位置を基準（０ｘ００００００００）とする相対的なアドレスである。
【００１２】
テストにおいてテスト対象プログラムに引き渡される入力ファイルは、このようなオリジナルファイル１０１の一部を変更することによって生成される。入力ファイルをテストファイルということもある。
【００１３】
図２に、入力ファイル２０１の例を示す。１回目に生成される入力ファイル２０１ａにおける変更範囲は、オフセット０ｘ００００００００乃至０ｘ０００００００３である。変更範囲には、置換コード０ｘＦＦＦＦＦＦＦＦが設定される。
【００１４】
変更範囲は、順次１バイト後方へスライドする。従って、２回目に生成される入力ファイル２０１ｂにおける変更範囲は、オフセット０ｘ０００００００１乃至０ｘ０００００００４である。３回目に生成される入力ファイル２０１ｃにおける変更範囲は、オフセット０ｘ０００００００２乃至０ｘ０００００００５である。いずれの場合にも、変更範囲に置換コード０ｘＦＦＦＦＦＦＦＦが設定される。
【００１５】
図３に示すように、８回目に生成される入力ファイル２０１ｈにおける変更範囲は、オフセット０ｘ０００００００７乃至０ｘ０００００００Ａである。従って、上述したポインタの一部が書き換えられることになる。入力ファイル２０１ｈを用いるテストでは、テスト対象プログラムが本体のデータを取得する際に正しく動作せず、例外処理が実行される。
【００１６】
例外処理が実行されれば異常動作が発生したものと看做す。この場合には、当該変更範囲が脆弱性に関わる可能性があると推察される。一方、例外処理が実行されない場合には、正常に動作したものと看做す。従来技術では、テスト対象プログラムを起動してから所定時間が経過した時点で、例外処理が実行されなかったと判断してその回のテストを終える。つまり、タイムアウトによってテスト対象プログラムを停止させ、次回のテストに移る。
【００１７】
このようにファイルファジングでは、変更範囲が異なる入力ファイル２０１を用いてテストを繰り返すので、人為的には予測し難い脆弱性を検出し易くなる。
【００１８】
但し、入力ファイル２０１における変更箇所が読み出されるタイミングは、変更箇所のオフセットによって異なる。例えば、或る範囲のデータは、早いタイミングで読み出され、別の範囲のデータは、遅いタイミングで読み出される。つまり、変更箇所が読み込まれるタイミングは、入力ファイル２０１毎に異なる。従って、繰り返されるテストにおいてタイムアウトの基準を一律に定めることは必ずしも妥当でない。或る入力ファイル２０１を用いるテストでは変更箇所が読み込まれた後も無駄にテストが継続され、別の入力ファイル２０１を用いるテストでは変更箇所が読み込まれる前にテストが打ち切られるような事態も想定される。つまり、一律に定めたタイムアウトの基準が短い場合には正しく検証が行われないケースが増え、同じくタイムアウトの基準が長い場合にはテストの効率が悪くなるという問題がある。
【００１９】
尚、画像ファイルを画像ビューワに読み込ませるテストでは、画像が表示された時点でデータの読み込みが完了したことを把握できるので、準備段階でテスト対象プログラムの挙動を分析することによってタイムアウトの基準を設定し易い。一方、出力を伴わない処理に用いられるデータについては、そのデータを用いる処理が完了した時点を外観として把握できないので、テスト対象プログラムの挙動によってタイムアウトの基準を定めることが難しいという問題もある。
【００２０】
ここでは、仕様が公開されている明示的ファイルの例を示したが、仕様が公開されていない暗黙的ファイルに本実施の形態を適用するようにしてもよい。また、ファイルファジングによるテストに供されるオリジナルファイル１０１及び入力ファイル２０１は、画像ファイルに限らない。他の形式のファイルがファイルファジングによるプログラムテストに供される場合もある。尚、上述した変更を変異といい、変更箇所と変異箇所といい、変更範囲を変異範囲ということもある。
【００２１】
本実施の形態では、ファイルファジングによるプログラムテストを行うテスト制御部において１つの異常判定と３つの正常判定とのうちのいずれかを得る。つまり、テスト結果は、４つに分類される。以下、各テスト結果を得る場合のシーケンスについて説明する。
【００２２】
まず、図４を用いて、テスト対象プログラム４０７における例外処理の実行を検出する場合のシーケンスについて説明する。例外処理が実行された場合に、テスト制御部４０１は、入力ファイル２０１を用いる処理によって異常が起きたと判断する。
【００２３】
テスト制御部４０１は、オリジナルファイル記憶部４０３に記憶されているオリジナルファイル１０１に基づいて入力ファイル２０１を生成する（Ｓ４２１）。生成された入力ファイル２０１は入力ファイル記憶部４０５に記憶される。そして、テスト制御部４０１は、テスト対象プログラム４０７を起動する（Ｓ４２３）。
【００２４】
テスト対象プログラム４０７は、動作中に入力ファイル２０１をオープンする（Ｓ４２５）。そして、テスト対象プログラム４０７は、入力ファイル２０１のデータを読み込む動作を繰り返す（Ｓ４２７乃至Ｓ４３１）。読み込まれる範囲は、同一であるとは限らない。
【００２５】
この例では、Ｓ４３１においてデータが読み込まれた後に、テスト対象プログラム４０７が例外処理を実行するものとする（Ｓ４３３）。テスト制御部４０１は、例外処理が実行されたことを検出すると（Ｓ４３５）、テスト対象プログラム４０７を強制終了させる（Ｓ４３７）。そして、テスト制御部４０１は、テスト結果をテスト結果記憶部４０９に書き込む（Ｓ４３９）。この例におけるテスト結果は、例外処理の実行を検出したことによる異常判定であることを示す。そして、テスト制御部４０１は、入力ファイル２０１を削除して（Ｓ４４１）、次のテストに移る。
【００２６】
続いて、図５を用いて入力ファイル２０１のクローズを検出する場合のシーケンスについて説明する。本実施の形態では、入力ファイル２０１がクローズされた時点で、テスト制御部４０１は、当該入力ファイル２０１を用いる処理が正常であったものと判断する。
【００２７】
テスト制御部４０１は、オリジナルファイル記憶部４０３に記憶されているオリジナルファイル１０１に基づいて入力ファイル２０１を生成する（Ｓ５０１）。生成された入力ファイル２０１は入力ファイル記憶部４０５に記憶される。そして、テスト制御部４０１は、テスト対象プログラム４０７を起動する（Ｓ５０３）。
【００２８】
テスト対象プログラム４０７は、動作中に入力ファイル２０１をオープンする（Ｓ５０５）。そして、テスト対象プログラム４０７は、入力ファイル２０１のデータを読み込む動作を繰り返す（Ｓ５０７乃至Ｓ５１１）。この間に、例外処理は行われないものとする。そして、テスト対象プログラム４０７は、入力ファイル２０１をクローズする（Ｓ５１３）。
【００２９】
テスト制御部４０１は、入力ファイル２０１がクローズされたことを検出すると（Ｓ５１５）、テスト対象プログラム４０７を強制終了させる（Ｓ５１７）。そして、テスト制御部４０１は、テスト結果をテスト結果記憶部４０９に書き込む（Ｓ５１９）。この例におけるテスト結果は、入力ファイル２０１のクローズを検出したことによる正常判定であることを示す。そして、テスト制御部４０１は、入力ファイル２０１を削除して（Ｓ５２１）、次のテストに移る。
【００３０】
続いて、図６を用いてタイムアウトを検出する場合のシーケンスについて説明する。本実施の形態では、テスト対象プログラム４０７が起動された時点からの経過時間が上限を超えると、テスト制御部４０１は、当該入力ファイル２０１を用いる処理が正常であったものと判断する。
【００３１】
テスト制御部４０１は、オリジナルファイル記憶部４０３に記憶されているオリジナルファイル１０１に基づいて入力ファイル２０１を生成する（Ｓ６０１）。生成された入力ファイル２０１は入力ファイル記憶部４０５に記憶される。そして、テスト制御部４０１は、テスト対象プログラム４０７を起動する（Ｓ６０３）。
【００３２】
テスト対象プログラム４０７は、動作中に入力ファイル２０１をオープンする（Ｓ６０５）。そして、テスト対象プログラム４０７は、入力ファイル２０１のデータを読み込む動作を繰り返す（Ｓ６０７乃至Ｓ６１３）。この間に、例外処理は行われないものとする。
【００３３】
この例では、Ｓ６１３におけるデータ読み込みを終えた時点でテスト対象プログラム４０７の実行時間が上限を超え、テスト制御部４０１がタイムアウトを検出する（Ｓ６１５）。
【００３４】
テスト制御部４０１は、タイムアウトを検出すると、テスト対象プログラム４０７を強制終了させる（Ｓ６１７）。そして、テスト制御部４０１は、テスト結果をテスト結果記憶部４０９に書き込む（Ｓ６１９）。この例におけるテスト結果は、タイムアウトを検出したことによる正常判定であることを示す。そして、テスト制御部４０１は、入力ファイル２０１を削除して（Ｓ６２１）、次のテストに移る。
【００３５】
続いて、図７を用いて変更箇所の読み込みを検出する場合のシーケンスについて説明する。本実施の形態では、入力ファイル２０１における変更箇所が読み込まれた時点から所定時間（以下、観察時間という。）が経過するまでに例外処理が実行されなければ、テスト制御部４０１は、当該入力ファイル２０１を用いる処理が正常であったものと判断する。
【００３６】
テスト制御部４０１は、オリジナルファイル記憶部４０３に記憶されているオリジナルファイル１０１に基づいて入力ファイル２０１を生成する（Ｓ７０１）。生成された入力ファイル２０１は入力ファイル記憶部４０５に記憶される。そして、テスト制御部４０１は、テスト対象プログラム４０７を起動する（Ｓ７０３）。
【００３７】
テスト対象プログラム４０７は、動作中に入力ファイル２０１をオープンする（Ｓ７０５）。そして、テスト対象プログラム４０７は、入力ファイル２０１のデータを読み込む動作を繰り返す（Ｓ７０７及びＳ７０９）。この例では、Ｓ７０９において変更箇所が読み込まれたものとする。尚、テスト制御部４０１は、変更範囲の一部又は全部が読取範囲と重複する場合に入力ファイル２０１における変更箇所が読み込まれたものと判定する。
【００３８】
テスト制御部４０１は、変更箇所の読み込みを検出した後（Ｓ７１１）、観察時間内において例外処理が実行されるか否かを判定する。観察時間内において例外処理の実行を検出した場合には、上述した図４に示したシーケンスの場合と同様に処理される。
【００３９】
テスト制御部４０１は、例外処理が実行されないまま観察時間が経過したと判定すると（Ｓ７１３）、テスト対象プログラム４０７を強制終了させる（Ｓ７１５）。そして、テスト制御部４０１は、テスト結果をテスト結果記憶部４０９に書き込む（Ｓ７１７）。この例におけるテスト結果は、変更箇所の読み込みによる正常判定であることを示す。そして、テスト制御部４０１は、入力ファイル２０１を削除して（Ｓ７１９）、次のテストに移る。以上で本実施の形態における概要の説明を終える。
【００４０】
以下、プログラムテスト装置８００の動作について説明する。図８に、プログラムテスト装置８００のモジュール構成例を示す。プログラムテスト装置８００は、上述したテスト制御部４０１、オリジナルファイル記憶部４０３、入力ファイル記憶部４０５、テスト対象プログラム４０７及びテスト結果記憶部４０９の他に、ＯＳ（オペレーティングシステム）８０１、監視部８０５、監視結果記憶部８０７及びテスト仕様記憶部８０９を有する。
【００４１】
テスト制御部４０１は、ファイルファジングによるプログラムテストを制御する。オリジナルファイル記憶部４０３は、オリジナルファイル１０１を記憶する。具体的には、オリジナルファイル記憶部４０３は、オリジナルファイル１０１のパスによって特定される。入力ファイル記憶部４０５は、入力ファイル２０１を記憶する。具体的には、入力ファイル記憶部４０５は、入力ファイル２０１のパスによって特定される。テスト結果記憶部４０９は、テスト結果テーブルを記憶する。テスト結果テーブルについては、図１１を用いて後述する。
【００４２】
ＯＳ８０１は、ファイルシステム８０３を含んでいる。ファイルシステム８０３は、ファイル操作を実行する。監視部８０５は、ファイルシステム８０３におけるファイル操作を監視する。監視結果記憶部８０７は、監視結果テーブルを記憶する。監視結果テーブルは、監視部８０５による監視結果として、ファイルシステム８０３におけるファイル操作の内容を記録する。監視結果テーブルについては、図９を用いて後述する。テスト仕様記憶部８０９は、テスト仕様データを記憶する。テスト仕様データについては、図１０を用いて後述する。
【００４３】
また、テスト制御部４０１は、生成部８２１、起動部８２３、第１検出部８２５、第２検出部８２７、第３検出部８２９、第４検出部８３１、停止部８３３、記録処理部８３５、削除部８３７及び判定部８３９を有する。
【００４４】
生成部８２１は、オリジナルファイル１０１に基づいて入力ファイル２０１を生成する。起動部８２３は、テスト対象プログラム４０７を起動する。第１検出部８２５は、テスト対象プログラム４０７における例外処理の実行を検出する。第２検出部８２７は、入力ファイル２０１のクローズを検出する。第３検出部８２９は、タイムアウトを検出する。第４検出部８３１は、入力ファイル２０１における変更箇所の読み込みを検出する。停止部８３３は、テスト対象プログラム４０７の動作を停止させる。具体的には、停止部８３３は、テスト対象プログラム４０７のプロセスを強制終了させる。記録処理部８３５は、テスト結果を記録する。削除部８３７は、入力ファイル２０１を削除する。判定部８３９は、入力ファイル２０１における変更箇所が読み込まれた時点から観察時間が過ぎたか否かを判定する。
【００４５】
上述したテスト制御部４０１、監視部８０５、生成部８２１、起動部８２３、第１検出部８２５、第２検出部８２７、第３検出部８２９、第４検出部８３１、停止部８３３、記録処理部８３５、削除部８３７及び判定部８３９は、ハードウエア資源（例えば、図１５）と、以下で述べる処理をプロセッサに実行させるプログラムとを用いて実現される。
【００４６】
上述したオリジナルファイル記憶部４０３、入力ファイル記憶部４０５、テスト結果記憶部４０９、監視結果記憶部８０７及びテスト仕様記憶部８０９は、ハードウエア資源（例えば、図１５）を用いて実現される。
【００４７】
図９に、監視結果テーブルの例を示す。この例における監視結果テーブルは、ファイル操作に対応するレコードを有している。監視結果テーブルのレコードは、プロセス名が格納されるフィールドと、ファイルパスが格納されるフィールドと、操作種別が格納されるフィールドと、先頭オフセットが格納されるフィールドと、サイズ（バイト）が格納されるフィールドとを有している。
【００４８】
プロセス名は、ＯＳ８０１のファイルシステム８０３に対してファイル操作を要求したプロセスを特定する。ファイルパスは、ファイルシステム８０３における操作対象であるファイルが格納されている場所及び当該ファイル名を特定する。操作種別は、ファイル操作の種別を特定する。アクセス範囲は、ファイルリードにおいて読み込まれたデータの範囲及びファイルライトにおいて書き込まれたデータの範囲を特定する。具体的には、アクセス範囲は、先頭オフセット及びサイズによって特定される。
【００４９】
図１０に、テスト仕様データの例を示す。この例におけるテスト仕様データは、テスト仕様に関する項目を含んでいる。具体的には、テスト対象プログラム４０７のパスが格納されるフィールドと、入力ファイル２０１のパスが格納されるフィールドと、テスト時間の上限（ｍｓ）が格納されるフィールドと、観察時間（ｍｓ）が格納されるフィールドと、オリジナルファイル１０１のパスが格納されるフィールドと、変更サイズ（バイト）が格納されるフィールドと、置換コードが格納されるフィールドと、シフトサイズ（バイト）が格納されるフィールドとを有している。
【００５０】
テスト対象プログラム４０７のパスは、テスト対象プログラム４０７が格納されている場所及びテスト対象プログラム４０７の名前を特定する。入力ファイル２０１のパスは、入力ファイル２０１が格納される場所及び入力ファイル２０１の名前を特定する。テスト時間の上限は、タイムアウトの基準である。観察時間は、変更箇所の読み込みを検出した後に例外処理が実行されるか否かを判定する期間の長さである。オリジナルファイル１０１のパスは、オリジナルファイル１０１が格納されている場所及びオリジナルファイル１０１の名前を特定する。変更サイズは、変更範囲のデータ長である。置換コードは、変更範囲に設定されるコードである。つまり、変更箇所の内容である。シフトサイズは、入力ファイル２０１を生成する度に変更範囲をシフトする幅である。
【００５１】
図１１に、テスト結果テーブルの例を示す。この例におけるテスト結果テーブルは、各回のテストに対応するレコードを有している。テスト結果テーブルのレコードは、回番号が格納されるフィールドと、先頭オフセットが格納されるフィールドと、サイズ（バイト）が格納されるフィールドと、テスト結果が格納されるフィールドと、現象が格納されるフィールドと、実行オフセットが格納されるフィールドとを有している。
【００５２】
回番号は、テストの回を特定する。変更範囲は、当該回の入力ファイル２０１における変更箇所を特定する。この例における変更範囲は、先頭オフセット及びサイズによって特定される。テスト結果には、例外処理の実行の検出に基づく異常判定である旨のコード、クローズの検出に基づく正常判定である旨のコード、タイムアウトの検出に基づく正常判定である旨のコード又は変更箇所の読み込みに基づく正常判定である旨のコードのいずれかである。テスト結果が例外処理の実行の検出に基づく異常判定である旨のコードである場合には、詳細に係るデータとして、現象のフィールドに例外処理の内容が格納され、実行オフセットのフィールドには実行された例外処理の命令コードのオフセットが格納される。尚、詳細に係るデータは省略するようにしてもよい。
【００５３】
続いて、テスト制御部４０１におけるメイン処理について説明する。図１２に、メイン処理フローを示す。生成部８２１は、入力ファイル生成処理を実行する（Ｓ１２０１）。
【００５４】
図１３に、入力ファイル生成処理フローを示す。生成部８２１は、変更範囲の先頭オフセットを特定する（Ｓ１３０１）。１回目の入力ファイル生成処理における変更範囲の先頭オフセットは、０ｘ００００００００である。生成部８２１は、入力ファイル生成処理の度、前回の先頭オフセットに１を加算して、当回の先頭オフセットを特定する。
【００５５】
生成部８２１は、オリジナルファイル記憶部４０３に記憶されているオリジナルファイル１０１のコピーを入力ファイル記憶部４０５に作成する（Ｓ１３０３）。生成部８２１は、コピーファイルにおける変更範囲のコードを置換コードに変換する（Ｓ１３０５）。生成部８２１は、テスト結果テーブルに新たなレコードを設け、変更範囲を設定する（Ｓ１３０７）。そして、生成部８２１が入力ファイル生成処理を終えると、呼び出し元のメイン処理に復帰する。
【００５６】
図１２の説明に戻る。起動部８２３は、テスト対象プログラム４０７を起動する（Ｓ１２０３）。起動部８２３は、引数で入力ファイル２０１のパスをテスト対象プログラム４０７に渡すようにしてもよい。
【００５７】
第１検出部８２５は、例外処理の実行を検出したか否かによって処理を分岐させる（Ｓ１２０５）。具体的には、テスト対象プログラム４０７が例外処理を実行すると、第１検出部８２５はＯＳ８０１からテスト対象プログラム４０７が例外処理を実行した旨の通知を受ける。第１検出部８２５は、当該通知を受けた場合に例外処理の実行を検出したと判定する。
【００５８】
例外処理の実行を検出したと判定した場合には、停止部８３３は、テスト対象プログラム４０７を終了させる（Ｓ１２０７）。そして、記録処理部８３５は、テスト結果を書き込む（Ｓ１２０９）。具体的には、当該回のレコードのテスト結果のフィールドに、例外処理の実行の検出に基づく異常判定である旨のコードが格納される。更に、現象のフィールドに例外処理の内容が格納され、実行オフセットのフィールドには実行された例外処理の命令コードのオフセットが格納される。例外処理の内容及び例外処理の命令コードのオフセットは、上記通知から得られる。
【００５９】
その後、削除部８３７は、入力ファイル２０１を削除し（Ｓ１２１１）、端子Ａを介して図１４に示したＳ１４１９の処理に移る。
【００６０】
一方、Ｓ１２０５において例外処理の実行を検出していないと判定した場合には、第２検出部８２７は、入力ファイル２０１のクローズを検出したか否かによって処理を分岐させる（Ｓ１２１３）。具体的には、第２検出部８２７は、監視結果記憶部８０７に書き込まれた監視結果、つまりファイルシステム８０３におけるファイル操作の記録に基づいて、入力ファイル２０１がクローズされたか否かを判定する。
【００６１】
入力ファイル２０１のクローズを検出したと判定した場合には、停止部８３３は、テスト対象プログラム４０７を終了させる（Ｓ１２１５）。そして、記録処理部８３５は、テスト結果を書き込む（Ｓ１２１７）。具体的には、当該回のレコードのテスト結果のフィールドに、入力ファイル２０１のクローズの検出に基づく正常判定である旨のコードが格納される。詳細に関するフィールドには、何も格納されない。
【００６２】
その後、削除部８３７は、入力ファイル２０１を削除し（Ｓ１２１９）、端子Ａを介して図１４に示したＳ１４１９の処理に移る。
【００６３】
一方、Ｓ１２１３において入力ファイル２０１のクローズを検出していないと判定した場合には、端子Ｂを介して図１４に示したＳ１４０１の処理に移る。
【００６４】
図１４の説明に移る。第３検出部８２９は、タイムアウトを検出したか否かによって処理を分岐させる（Ｓ１４０１）。具体的には、第３検出部８２９は、Ｓ１２０３でテスト対象プログラム４０７を起動した時点からの経過時間、つまりテスト時間が上限を超えた場合にタイムアウトを検出したと判定する。
【００６５】
タイムアウトを検出したと判定した場合には、停止部８３３は、テスト対象プログラム４０７を終了させる（Ｓ１４０３）。そして、記録処理部８３５は、テスト結果を書き込む（Ｓ１４０５）。具体的には、当該回のレコードのテスト結果のフィールドに、タイムアウトの検出に基づく正常判定である旨のコードが格納される。詳細に関するフィールドには、何も格納されない。
【００６６】
その後、削除部８３７は、入力ファイル２０１を削除し（Ｓ１４０７）、Ｓ１４１９の処理に移る。
【００６７】
一方、Ｓ１４０１においてタイムアウトを検出していないと判定した場合には、第４検出部８３１は、変更箇所の読み込みを検出したか否かによって処理を分岐させる（Ｓ１４０９）。具体的には、第４検出部８３１は、監視結果テーブルにリードに係るレコードが追加され、当該レコードにおけるアクセス範囲が入力ファイル２０１における変更範囲の一部又は全部と重複する場合に、変更箇所の読み込みを検出したと判定する。
【００６８】
変更箇所の読み込みを検出していないと判定した場合には、端子Ｄを介して図１２のＳ１２０５に示した処理に戻って、上述した処理を繰り返す。
【００６９】
一方、変更箇所の読み込みを検出したと判定した場合には、判定部８３９は、変更箇所が読み込まれた時点から観察時間が過ぎたか否かを判定する（Ｓ１４１１）。
【００７０】
変更箇所が読み込まれた時点から観察時間が過ぎていないと判定した場合には、端子Ｄを介して図１２のＳ１２０５に示した処理に戻って、上述した処理を繰り返す。
【００７１】
但し、Ｓ１４１１において変更箇所が読み込まれた時点から観察時間が過ぎていないと判定された場合には、繰り返されるＳ１４０９において、第４検出部８３１は、変更箇所の読み込みを検出したと判定する。そして、繰り返されるＳ１４１１において、判定部８３９は、再び変更箇所が読み込まれた時点から観察時間が過ぎたか否かを判定する（Ｓ１４１１）。観察時間が過ぎるまで、このような処理が繰り返される。この間の繰り返しにおけるＳ１２０５の処理で、例外処理の実行を検出したと判定すれば、上述したＳ１２０７乃至Ｓ１２１１の処理が実行される。
【００７２】
繰り返されるＳ１４１１において、変更箇所が読み込まれた時点から観察時間が過ぎたと判定された場合に、停止部８３３は、テスト対象プログラム４０７を終了させる（Ｓ１４１３）。そして、記録処理部８３５は、テスト結果を書き込む（Ｓ１４１５）。具体的には、当該回のレコードのテスト結果のフィールドに、変更箇所の読み込みに基づく正常判定である旨のコードが格納される。詳細に関するフィールドには、何も格納されない。
【００７３】
その後、削除部８３７は、入力ファイル２０１を削除し（Ｓ１４１７）、Ｓ１４１９の処理に移る。
【００７４】
Ｓ１４１９において、生成部８２１は、メイン処理を終了するか否かを判定する。例えばオリジナルファイル１０１の最後尾のコードを変更する入力ファイル２０１によるテストを終えた時点でメイン処理を終える。
【００７５】
メイン処理を終了しないと判定した場合には、端子Ｃを介して図１２のＳ１２０１に示した処理に戻って、上述した処理を繰り返す。以上で、メイン処理の説明を終える。
【００７６】
本実施の形態によれば、入力ファイルにおける変更範囲に応じたタイミングでプログラムテストを終わらせることができる。従って、正しい検証を効率良く行えるようになる。
【００７７】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上述の機能ブロック構成はプログラムモジュール構成に一致しない場合もある。
【００７８】
また、上で説明した各記憶領域の構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ、処理の順番を入れ替えることや複数の処理を並列に実行させるようにしても良い。
【００７９】
なお、上で述べたプログラムテスト装置８００は、コンピュータ装置であって、図１５に示すように、メモリ２５０１とＣＰＵ（Central Processing Unit）２５０３とハードディスク・ドライブ（ＨＤＤ：Hard Disk Drive）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティングシステム（ＯＳ：Operating System）及び本実施例における処理を実施するためのアプリケーション・プログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、アプリケーション・プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するためのアプリケーション・プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及びアプリケーション・プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【００８０】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【００８１】
本実施の形態に係るプログラムテスト装置は、（Ａ）ファイルファジングによるプログラムテストに供される入力ファイルの変更箇所がテスト対象プログラムによって読み込まれたことを検出する検出部と、（Ｂ）変更箇所がテスト対象プログラムによって読み込まれたことを検出した時点に基づいて決定したタイミングで、テスト対象プログラムの動作を終了させる停止部とを有する。
【００８２】
このようにすれば、入力ファイルにおける変更範囲に応じたタイミングでプログラムテストを終わらせることができる。尚、（Ａ）検出部は、例えば第４検出部８３１である。
【００８３】
なお、上で述べたプログラムテスト装置における処理をコンピュータに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納されるようにしてもよい。尚、中間的な処理結果は、一般的にメインメモリ等の記憶装置に一時保管される。
【００８４】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【００８５】
（付記１）
ファイルファジングによるプログラムテストに供される入力ファイルの変更箇所がテスト対象プログラムによって読み込まれたことを検出する検出部と、
前記変更箇所が前記テスト対象プログラムによって読み込まれたことを検出した時点に基づいて決定したタイミングで、前記テスト対象プログラムの動作を終了させる停止部と
を有するプログラムテスト装置。
【００８６】
（付記２）
ファイルファジングによるプログラムテストに供される入力ファイルの変更箇所がテスト対象プログラムによって読み込まれたことを検出し、
前記変更箇所が前記テスト対象プログラムによって読み込まれたことを検出した時点に基づいて決定したタイミングで、前記テスト対象プログラムの動作を終了させる
処理を含み、コンピュータにより実行されるテスト制御方法。
【００８７】
（付記３）
ファイルファジングによるプログラムテストに供される入力ファイルの変更箇所がテスト対象プログラムによって読み込まれたことを検出し、
前記変更箇所が前記テスト対象プログラムによって読み込まれたことを検出した時点に基づいて決定したタイミングで、前記テスト対象プログラムの動作を終了させる
処理をコンピュータに実行させるテスト制御プログラム。
【符号の説明】
【００８８】
１０１  オリジナルファイル    ２０１  入力ファイル
４０１  テスト制御部    ４０３  オリジナルファイル記憶部
４０５  入力ファイル記憶部    ４０７  テスト対象プログラム
４０９  テスト結果記憶部    ８００  プログラムテスト装置
８０１  ＯＳ    ８０３  ファイルシステム
８０５  監視部    ８０７  監視結果記憶部
８０９  テスト仕様記憶部    ８２１  生成部
８２３  起動部    ８２５  第１検出部
８２７  第２検出部    ８２９  第３検出部
８３１  第４検出部    ８３３  停止部
８３５  記録処理部    ８３７  削除部
８３９  判定部
【図１】
2018173748.tif 000003
【図２】
2018173748.tif 000004
【図３】
2018173748.tif 000005
【図４】
2018173748.tif 000006
【図５】
2018173748.tif 000007
【図６】
2018173748.tif 000008
【図７】
2018173748.tif 000009
【図８】
2018173748.tif 000010
【図９】
2018173748.tif 000011
【図１０】
2018173748.tif 000012
【図１１】
2018173748.tif 000013
【図１２】
2018173748.tif 000014
【図１３】
2018173748.tif 000015
【図１４】
2018173748.tif 000016
【図１５】
2018173748.tif 000017