(57)【特許請求の範囲】
【請求項１】
Ｎ−１（Ｎ≧２）回目の動作検証の際に、レコード群を記憶する第１の記憶部から、第１の読み出し開始位置を開始位置として第１のレコード読み出し単位で順次レコードを読み出して、前記動作検証の対象となるソフトウェアによる処理対象として順次出力し、
Ｎ回目の動作検証の際に、前記第１の読み出し開始位置を前記第１のレコード読み出し単位とは異なるレコード単位分シフトした第２の読み出し開始位置を開始位置として、前記第１の記憶部から、前記第１のレコード読み出し単位でレコードを読み出して、前記ソフトウェアによる処理対象として順次出力する、
処理をコンピュータに実行させるソフトウェア動作検証プログラム。
【請求項２】
請求項１において、
前記Ｎ−１回目、前記Ｎ回目の動作検証の際の前記出力は、さらに、前記第１の記憶部に記憶された前記レコード群のうち、前記第１の読み出し開始位置の第１のレコードを第２の記憶部に保持し、読み出し対象の前記第１のレコード読み出し単位のレコードが前記第１のレコードを含む場合に、前記第１のレコードを前記第２の記憶部から読み出し、前記第１のレコード以外のレコードを前記第１の記憶部から読み出す、
ソフトウェア動作検証プログラム。
【請求項３】
請求項１または２において、
前記Ｎ回目の動作検証の際の前記出力は、さらに、前記レコード群のうち、所定の順番に読み出す第２のレコードが含む、複数の部分レコードの位置を入れ替え、前記第２のレコードを変更する、
ソフトウェア動作検証プログラム。
【請求項４】
請求項２において、
前記Ｎ−１回目の動作検証の際の前記出力は、さらに、前記第１のレコード読み出し単位で順次読み出した前記レコード群のうち、前記Ｎ回目の動作検証の際に所定の順番に読み出す第２のレコードを前記第２の記憶部に記憶し、
前記Ｎ回目の動作検証の際の前記出力は、さらに、読み出し対象の前記第１のレコード読み出し単位のレコードが前記第２のレコードを含む場合に、前記第２のレコードを前記第２の記憶部から読み出し、前記第２のレコード以外のレコードを前記第１の記憶部から読み出す、
ソフトウェア動作検証プログラム。
【請求項５】
請求項４において、
前記Ｎ−１回目の動作検証の際の前記出力は、前記Ｎ回目の動作検証の際に最後に読み出す第２のレコードを前記第２の記憶部に記憶し、
前記Ｎ回目の動作検証の際の前記出力は、読み出し対象の前記第１のレコード読み出し単位のレコードが、前記最後に読み出す前記第２のレコードを含む場合に、前記第２のレコードを前記第２の記憶部から読み出し、前記第２のレコード以外のレコードを前記第１の記憶部から読み出す、
ソフトウェア動作検証プログラム。
【請求項６】
請求項４または５において、
前記Ｎ回目の動作検証の際の前記出力は、前記第１、第２のレコードを前記第１の記憶部から読み出す第１の処理時間と、前記第１、第２のレコードを前記第２の記憶部から読み出す第２の処理時間との差分時間内に前記第２のレコードを変更する、
ソフトウェア動作検証プログラム。
【請求項７】
請求項４乃至６のいずれかにおいて、
前記Ｎ回目の動作検証の際の前記出力は、前記第１、第２のレコードを前記第２の記憶部から読み出し前記第２のレコードを変更する場合の、前記第１のレコード読み出し単位のレコードの読み出し処理時間が、前記第１、第２のレコードを前記第１の記憶部から読み出す場合の、前記第１のレコード読み出し単位のレコードの読み出し処理時間に満たない場合、処理を待機する、
ソフトウェア動作検証プログラム。
【請求項８】
処理部が、Ｎ−１（Ｎ≧２）回目の動作検証の際に、レコード群を記憶する第１の記憶部から、第１の読み出し開始位置を開始位置として第１のレコード読み出し単位で順次レコードを読み出して、前記動作検証の対象となるソフトウェアによる処理対象として順次出力し、
処理部が、Ｎ回目の動作検証の際に、前記第１の読み出し開始位置を前記第１のレコード読み出し単位とは異なるレコード単位分シフトした第２の読み出し開始位置を開始位置として、前記第１の記憶部から、前記第１のレコード読み出し単位でレコードを読み出して、前記ソフトウェアによる処理対象として順次出力する、
ソフトウェア動作検証方法。
【請求項９】
レコード群を記憶する第１の記憶部と、
前記第１の記憶部から読み出した前記レコード群を記憶する第２の記憶部と、
Ｎ−１（Ｎ≧２）回目の動作検証の際に、レコード群を記憶する第１の記憶部から、第１の読み出し開始位置を開始位置として第１のレコード読み出し単位で順次レコードを読み出して前記第２の記憶部に記憶し、前記第２の記憶部の前記第１のレコード読み出し単位のレコードを、前記動作検証の対象となるソフトウェアによる処理対象として順次出力し、Ｎ回目の動作検証の際に、前記第１の読み出し開始位置を前記第１のレコード読み出し単位とは異なるレコード単位分シフトした第２の読み出し開始位置を開始位置として、前記第１の記憶部から、前記第１のレコード読み出し単位でレコードを読み出して前記第２の記憶部に記憶し、前記第２の記憶部の前記第１のレコード読み出し単位のレコードを、前記ソフトウェアによる処理対象として順次出力する処理部と、
を有するソフトウェア動作検証装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウェア動作検証プログラム、ソフトウェア動作検証方法、及び、ソフトウェア動作検証装置に関する。
【背景技術】
【０００２】
ソフトウェアの動作検証（テスト）では、検証対象のソフトウェアは、所定のテストデータに基づいて処理を行い、テスト結果を出力する。テストの実行者は、テスト結果に基づいて、検証対象のソフトウェアの動作が適切であるか否かを判定する。
【０００３】
テストには、容量の大きいテストデータ（ビッグデータ）を使用するテストがある。また、検証対象のソフトウェアを適切に検証するために、テストデータの容量は大きい方が望ましい。更に、テストでは、十分なテストケースを検証するために、テストデータのバリエーションが多い方が望ましい。それぞれのバリエーションについて、容量が大きいテストデータを使用する場合、大容量のストレージ装置を用意する必要がある。
【０００４】
一方、テストデータの容量を抑えるために、共通のテストデータを変更することによって、テストデータのバリエーションを生成する方法がある。
【０００５】
テストデータに基づく動作検証については、例えば、特許文献１〜４に記載される。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平２００５−２４９７３５号公報
【特許文献２】特開平１１−１４９３８９号公報
【特許文献３】特開２００９−１６３６０９号公報
【特許文献４】特開平９−２０３７７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、テストでは、様々なテストデータを、連続的にテストすることが、テスト精度やテスト時間の短縮の面で好ましい。共通のテストデータを変更しながら様々なテストデータを生成する場合、テスト期間中に、テストデータの変更ための処理時間が生じる。しかも、テストデータの容量が大きい場合、テストデータの変更のための処理時間も増加する。したがって、テストデータの変更のための処理時間がかかり、実際のテスト以外の処理の時間、即ち、オーバヘッドが生じる。
【０００８】
テストでは、実際の運用と同じタイミングで処理が行われることが望ましい。したがって、テスト以外の処理の時間は、抑制されることが望ましい。
【０００９】
１つの側面は、本発明は、テストデータのバリエーションを増加させる際の所要時間の増大を抑止することを目的とする。
【課題を解決するための手段】
【００１０】
第１の態様では、Ｎ−１（Ｎ≧２）回目の動作検証の際に、レコード群を記憶する第１の記憶部から、第１の読み出し開始位置を開始位置として第１のレコード読み出し単位で順次レコードを読み出して、前記動作検証の対象となるソフトウェアによる処理対象として順次出力し、Ｎ回目の動作検証の際に、前記第１の読み出し開始位置を前記第１のレコード読み出し単位とは異なるレコード単位分シフトした第２の読み出し開始位置を開始位置として、前記第１の記憶部から、前記第１のレコード読み出し単位でレコードを読み出して、前記ソフトウェアによる処理対象として順次出力する、処理をコンピュータに実行させる。
【発明の効果】
【００１１】
１つの側面によれば、テストデータのバリエーションを増加させる際の所要時間の増大を抑止することができる。
【図面の簡単な説明】
【００１２】
【図１】本実施の形態におけるテストシステムの構成図である。
【図２】図１に示した、ドライバプログラム１０による、区分データｄｔの読み出し処理を説明する図である。
【図３】図１に示した情報処理装置１００における検証対象のソフトウェア３０が、図１に示したテストデータＤＴに基づくテストを繰り返す処理を説明する図である。
【図４】第１のストレージ装置２０内のテストデータＤＴの読み出し開始位置をテストＴｓごとにシフトする処理を模式的に説明する図である。
【図５】検証対象のソフトウェア３０で発生し得る障害の一例を説明する図である。
【図６】図１に示した情報処理装置１００のハードウェア構成図である。
【図７】図６に示した情報処理装置１００のドライバプログラム１０のソフトウェアブロックの構成図である。
【図８】先頭位置データのバッファリングを説明する図である。
【図９】３回目のテストＴｓ３の先頭位置データ及び最終データのバッファリング処理を説明する図である。
【図１０】４回目のテストＴｓ４の先頭位置データ及び最終データのバッファリング処理を説明する図である。
【図１１】５回目のテストＴｓ５の先頭位置データ及び最終データのバッファリング処理を説明する図である。
【図１２】最終データの内容の加工（変更）処理を説明する図である。
【図１３】図７に示したテスト開始モジュール１２の処理を説明するフローチャート図である。
【図１４】図７に示したテスト開始通知モジュール１３の処理を説明するフローチャート図である。
【図１５】図７に示した、アクセスモジュール１４の処理の詳細を説明する第１のフローチャート図である。
【図１６】図７に示したアクセスモジュール１４の処理の詳細を説明する第２のフローチャート図である。
【図１７】最終データをバッファに保持する処理の一例を説明する第１の図である。
【図１８】最終データをバッファに保持する処理の一例を説明する第２の図である。
【図１９】図１６に示した、ディスク読み込みルーチンの処理の詳細を説明するフローチャート図である。
【図２０】図１６に示した、先頭位置読み込みルーチンの処理の詳細を説明するフローチャート図である。
【図２１】図１６に示した、バッファ読み込みルーチンの処理の詳細を説明するフローチャート図である。
【図２２】１回目のテストＴｓ１のアクセスモジュール１４の処理を模式的に説明する図である。
【図２３】２回目のテストＴｓ２のアクセスモジュール１４の処理を模式的に説明する図である。
【図２４】３回目のテストＴｓ３のアクセスモジュール１４の処理を模式的に説明する図である。
【図２５】図１６に示した、ディスク書き込みルーチンの処理の詳細を説明するフローチャート図である。
【図２６】第１の方法によるエビデンスの記録を模式的に説明する図である。
【図２７】第２の方法によるエビデンスの記録を模式的に説明する図である。
【図２８】図１６に示した、ウェイトルーチンの処理を説明するフローチャート図である。
【図２９】図７に示した入れ替えモジュール１５の処理を説明するフローチャート図である。
【図３０】図７に示した、パラメータ生成モジュール１１の所要時間の取得処理を説明するフローチャート図である。
【図３１】図７に示した、パラメータ生成モジュール１１の余裕時間の取得処理を説明するフローチャート図である。
【図３２】図３１で説明した指示プログラムが呼び出す（図３１のＳ１５２）、実行プログラムの処理の詳細を説明するフローチャート図である。
【図３３】図３１、図３２のフローチャート図で取得した余裕時間を使用して入れ替え可能なレコード数（入れ替え数）の算出処理を説明するフローチャート図である。
【図３４】図３３で説明した入れ替え実行プログラムの処理を説明するフローチャート図である。
【発明を実施するための形態】
【００１３】
以下、図面にしたがって本発明の実施の形態について説明する。ただし、本発明の技術的範囲はこれらの実施の形態に限定されず、特許請求の範囲に記載された事項とその均等物まで及ぶものである。
【００１４】
［テストシステム］
図１は、本実施の形態におけるテストシステムの構成図である。図１に示すテストシステムは、情報処理装置１００と第１、第２のストレージ装置２０、４０を有する。情報処理装置１００は、第１、第２のストレージ装置２０、４０（ストレージ装置、ディスクともいう）と接続する。第１のストレージ装置２０は、テストデータＤＴを記憶し、第２のストレージ装置４０は、情報処理装置１００が出力するテスト結果を記憶する。なお、図１では、第１、第２のストレージ装置２０、４０を別のストレージ装置として示しているが、同一のストレージ装置であってもよい。
【００１５】
図１に示す情報処理装置１００では、ＯＳ（Operating System：ＯＳ）６０上で、検証対象のソフトウェア３０が動作する。検証対象のソフトウェア３０は、図１に示すテストシステムで、機能や性能の検証（テスト）の対象となるソフトウェアである。検証対象のソフトウェア３０は、ＯＳ６０を介し、第１のストレージ装置２０が記憶するテストデータＤＴを読み出して所定の処理を行うとともに、処理結果をテスト結果として第２のストレージ装置４０に書き込む。そして、第２のストレージ装置４０に記憶されたテスト結果を分析することによって、検証対象のソフトウェア３０が適切に動作したか否かが判定可能になる。
【００１６】
情報処理装置１００のＯＳ６０は、第１、第２のストレージ装置２０、４０からのデータの読み出し処理、及び、第１、第２のストレージ装置２０、４０へのデータの書き込み処理を行うドライバプログラム（ソフトウェア動作検証プログラム）１０を含む。ドライバプログラム１０は、検証対象のソフトウェア３０からのテストデータＤＴの読み出し要求に応答して、第１のストレージ装置２０からテストデータＤＴを読み込む。また、ドライバプログラム１０は、検証対象のソフトウェア３０からのテスト結果の書き込み指示に応答して、第２のストレージ装置４０に、テスト結果を書き込む。
【００１７】
本実施の形態におけるテストデータＤＴは、例えば、ＣＳＶ（Comma-Separated Values：ＣＳＶ）形式のデータである。また、検証対象のソフトウェア３０は、例えば、ＣＳＶ形式のテストデータＤＴを読み出して、読み出したテストデータＤＴから検索条件に合致するデータを抽出し出力する。なお、テストデータＤＴは、ＣＳＶ形式のデータに限定されるものではなく、検証対象のソフトウェア３０の処理も、検索条件に合致するデータの抽出処理に限定されるものではない。
【００１８】
また、本実施の形態におけるテストデータＤＴは、大容量のデータである。したがって、検証対象のソフトウェア３０は、第１のストレージ装置２０から、テストデータＤＴを区分して読み出す。検証対象のソフトウェア３０は、テストデータＤＴを区分した区分データｄｔ−ａ〜ｄｔ−ｄの読み出し処理と、各区分データｄｔ−ａ〜ｄｔ−ｄに基づく所定の処理を、順次、繰り返すことによって、大容量のテストデータＤＴに基づいたテストを行う。
【００１９】
図１の例にしたがって、テスト実行時の、検証対象のソフトウェア３０とドライバプログラム１０の処理の流れを説明する。初めに、検証対象のソフトウェア３０は、テストデータＤＴの読み込み開始をドライバプログラム１０に指示するともに（ａ１）、第１の区分データｄｔ−ａの読み出し要求をＯＳ６０に出力する（ａ２）。
【００２０】
ＯＳ６０のドライバプログラム１０は読み出し要求に応答して、第１のストレージ装置２０から第１の区分データｄｔ−ａを読み出し（ａ３）、検証対象のソフトウェア３０に通知する（ａ２）。検証対象のソフトウェア３０は、通知に応答して、第１の区分データｄｔ−ａから検索条件に合致するデータを抽出し、第２のストレージ装置４０に記憶する（ａ４）。
【００２１】
次に、検証対象のソフトウェア３０は、第２の区分データｄｔ−ｂの読み出し要求をＯＳ６０に出力する（ａ５）。ドライバプログラム１０は読み出し要求に応答して、第１のストレージ装置２０から第２の区分データｄｔ−ｂを読み出し（ａ６）、検証対象のソフトウェア３０に通知する（ａ５）。検証対象のソフトウェア３０は、通知に応答して、第２の区分データｄｔ−ｂから検索条件に合致するデータを抽出し、第２のストレージ装置４０に記憶する（ａ７）。同様にして、検証対象のソフトウェア３０は、テストデータＤＴに基づく処理が完了するまで、第３、第４の区分データｄｔ−ｃ、ｄｔ−ｄの読み込み処理、及び、抽出処理を繰り返す（ａ８〜ａ１３）。
【００２２】
図１に示すように、テストデータＤＴの容量が大きいことから、検証対象のソフトウェア３０は、テストデータＤＴを区分した区分データｄｔ−ａ〜ｄｔ−ｄ（区分データｄｔともいう）を読み出し、所定の処理を行う。また、検証対象のソフトウェア３０は、図１に示した、テストデータＤＴに基づく一連のテスト処理ａ１〜ａ１３を、検索条件を変化させながら繰り返す。一連のテスト処理ａ１〜ａ１３を繰り返す処理については、図３にしたがって後述する。
【００２３】
［区分データの読み出し］
次に、図２にしたがって、図１に示した、ドライバプログラム１０が第１〜第４の区分データｄｔ−ａ〜ｄｔ−ｄを読み込む処理を説明する。
【００２４】
図２は、図１に示した、ドライバプログラム１０による、区分データｄｔの読み出し処理を説明する図である。図２において、図１で示したものと同一のものは、同一の記号で示す。図２は、図１で説明した、第１の区分データｄｔ−ａ、及び、第２の区分データｄｔ−ｂの読み出し処理を例示する。
【００２５】
ドライバプログラム１０は、検証対象のソフトウェア３０から、第１の区分データｄｔ−ａの読み出し要求を受信する（ａ２−１、図１のａ２に対応）。ドライバプログラム１０は、複数回（図２の例では、３回、SU回）に渡って読み出し処理を行い、第１の区分データｄｔ−ａを読み出す（ａ３−１〜ａ３−６、図１のａ３に対応）。回数「SU」回については、図１３のフローチャート図で後述する。そして、ドライバプログラム１０は、読み出しの完了を検証対象のソフトウェア３０に通知する（ａ２−２）。ドライバプログラム１０が１回の読み出し処理で読み出すデータを、単位データと称する。
【００２６】
同様にして、第２の区分データｄｔ−ｂの読み出し要求に応じて（ａ５−１、図１のａ５に対応）、ドライバプログラム１０は、単位データの読み出し処理を３回行い、第２の区分データｄｔ−ｂを読み出す（ａ６−１〜ａ６−６、図１のａ６に対応）。そして、ドライバプログラム１０は、読み出しの完了を検証対象のソフトウェア３０に通知する（ａ５−２）。
【００２７】
図示していないが、ドライバプログラム１０は、第３の区分データｄｔ−ｃ、及び、第４の区分データｄｔ−ｄについても、同様にして、第１のストレージ装置２０から、順次、読み出す。また、検証対象のソフトウェア３０による、区分データｄｔ−ａ〜ｄｔ−ｄの読み出し要求の出力回数（図２の例では、４回）を、回数「KAZU」と称する。回数「KAZU」については、図１３のフローチャート図で後述する。
【００２８】
次に、図３にしたがって、図１に示した、一連のテスト処理ａ１〜ａ１３を繰り返す処理を説明する。
【００２９】
［テストの繰り返し］
図３は、図１に示した情報処理装置１００における検証対象のソフトウェア３０が、図１に示したテストデータＤＴに基づくテストを繰り返す処理を説明する図である。図３において、図１で示したものと同一のものは、同一の記号で示す。
【００３０】
図３では、テストプログラム５０と、図１に示した、検証対象のソフトウェア３０と、ＯＳ６０のドライバプログラム１０と、第１のストレージ装置２０とを示す。テストプログラム５０は、検証対象のソフトウェア３０のテストの流れを制御するプログラムである。
【００３１】
図３では、検証対象のソフトウェア３０が、図１に示したテストデータＤＴに基づくテスト処理を、２回繰り返す場合（１、２回目のテストＴｓ１、Ｔｓ２）を例示する。テストプログラム５０は、テストの実行開始をドライバプログラム１０に通知する（ｘ１）。
【００３２】
（１回目のテスト）
テストプログラム５０は、１回目のテストＴｓ１の実行を、検証対象のソフトウェア３０に指示する（ａ１−１）。指示に応答して、検証対象のソフトウェア３０は、１回目のテストＴｓ１のテストデータＤＴの読み出し要求をドライバプログラム１０に通知する（ａ１−２、図１のａ１に対応）。
【００３３】
図２で前述したとおり、検証対象のソフトウェア３０は、第１の区分データｄｔ−ａを、ドライバプログラム１０を介して読み出す（ａ２−１〜ａ２−２、ａ３−１〜ａ３−６）。そして、検証対象のソフトウェア３０は、第１の区分データｄｔ−ａに基づいて、検索条件に合致するデータの抽出処理を行う。次に、検証対象のソフトウェア３０は、第２の区分データｄｔ−ｂを、ドライバプログラム１０を介して読み出し（ａ５−１〜ａ５−２、ａ６−１〜ａ６−６）、検索条件に合致するデータの抽出処理を行う。
【００３４】
図示していないが、同様にして、検証対象のソフトウェア３０は、第３、第４の区分データｄｔ−ｃ、ｄｔ−ｄを読み出し、検索条件に合致するデータの抽出処理を行う。検証対象のソフトウェア３０は、テストデータＤＴ（第１〜第４の区分データｄｔ−ａ〜ｄｔ−ｄ）に基づく抽出処理が完了すると、抽出結果をテストプログラム５０に出力するとともに（ａ１−３）、第２のストレージ装置４０（図３に不図示）に記憶する。これにより、１回目のテストＴｓ１が完了する。
【００３５】
（２回目のテスト）
１回目のテストＴｓ１が終了すると、テストプログラム５０は、２回目のテストＴｓ２の開始を、検証対象のソフトウェア３０に指示する（ｂ１−１）。指示に応答して、検証対象のソフトウェア３０は、２回目のテストＴｓ１のテストデータＤＴの読み出し要求をドライバプログラム１０に通知する（ｂ１−２）。
【００３６】
１回目のテストＴｓ１と同様にして、検証対象のソフトウェア３０は、第１〜第４の区分データｄｔ−ａ〜ｄｔ−ｄを、読み出し（ｂ２−１〜ｂ３−６、ｂ５−１〜ｂ６−６）、検索条件に合致するデータの抽出処理を行う。そして、検証対象のソフトウェア３０は、抽出結果をテストプログラム５０に出力するとともに（ｂ１−３）、第２のストレージ装置４０に記憶する。これにより、２回目のテストＴｓ２が完了する。
【００３７】
３回目以降のテスト（図示せず）についても、検証対象のソフトウェア３０は、１、２回目のテストＴｓ１、Ｔｓ２（テストＴｓともいう）と同様の処理を行う。テストデータＤＴの容量が大きいことから、各テストＴｓは、同一のテストデータＤＴに基づく。検証対象のソフトウェア３０は、例えば、検索条件を変更しながら、テストＴｓを繰り返す。テストＴｓごとに検索条件が異なることにより、抽出結果も異なる。
【００３８】
一方、検証対象のソフトウェア３０は、十分なバリエーションを有するテストデータＤＴに基づいてテストを行うことが望ましい。例えば、テストＴｓごとに異なるテストデータＤＴに基づくことにより、検証対象のソフトウェア３０の動作をより高精度に検証可能になる。
【００３９】
しかしながら、図１で前述したとおり、テストＴｓそれぞれのテストデータＤＴの容量は大きい。したがって、テストＴｓごとに異なるテストデータＤＴを用意することを想定した場合、大容量のストレージ装置を用意する必要が生じ、コストも増加する。このため、テストデータＤＴの容量を抑えながら、テストＴｓごとに、テストデータＤＴのバリエーションを増加させることが望ましい。
【００４０】
［テストデータのバリエーション］
テストデータＤＴの容量を抑えながらテストデータＤＴのバリエーションを増加させる方法として、共通のテストデータＤＴに基づいて、テストデータＤＴを加工する方法がある。例えば、情報処理装置１００は、テスト時に、読み出したテストデータＤＴが含むデータの変更処理や、テストデータＤＴが含むデータの順番を変更することによって、テストデータＤＴのバリエーションを生成する。
【００４１】
テストデータＤＴが有するデータの内容を変更する場合を説明する。例えば、情報処理装置１００は、第１のストレージ装置２０からテストデータＤＴをバッファ（メモリ領域）に読み込み、バッファが保持する所定のデータを上書きする。本実施の形態におけるテストデータＤＴの容量は大きい。したがって、テストデータＤＴの読み込み、及び、上書きにかかる処理時間によって、テストデータＤＴの検証対象のソフトウェア３０への通知が遅延してしまう。
【００４２】
また、テストデータＤＴが含むデータの順番を変更する場合を例示する。例えば、情報処理装置１００は、第１のストレージ装置２０からテストデータＤＴをバッファに読み込み、バッファが保持するデータを入れ替える。ただし、テストデータＤＴの容量が大きいことから、テストデータＤＴの読み込み、及び、データの入れ替えにかかる処理時間によって、テストデータＤＴの検証対象のソフトウェア３０への通知が遅延してしまう。
【００４３】
このように、共通のテストデータＤＴに基づいて、テストデータＤＴを加工する場合、テストデータＤＴの加工処理が生じることにより、テストデータＤＴの検証対象のソフトウェア３０への通知が遅延してしまう。つまり、テスト時に、検証対象のソフトウェア３０によるテスト処理以外の処理の時間（以下、オーバヘッドと称する）が生じてしまう。しかも、本実施の形態のテストデータＤＴの容量は大きいため、テストデータＤＴの加工処理によるオーバヘッドも大きくなってしまう。
【００４４】
一方、実際の運用時に生じ得る障害を検出するために、検証対象のソフトウェア３０のテストは、実際の運用の同一のタイミングで行われることが望ましい。即ち、テストの有効性の観点から、検証対象のソフトウェア３０によるテストデータＤＴの読み出し要求に対する区分データｄｔの出力は、実運用と同一のタイミングで行われることが望ましい。つまり、テストの実行時に、検証対象のソフトウェア３０によるテスト処理以外の処理時間（オーバヘッド）は、抑えられることが望ましい。テストが実運用と同一のタイミングで行われることにより、実運用で生じ得る特定の資源条件を検証可能になり、実運用で生じ得る障害を検出可能になる。
【００４５】
また、例えば、図３で説明したテストＴｓの間に、テストデータＤＴの加工処理を行う場合、テストＴｓ間で、オーバヘッドが生じる。テストＴｓ同士の間隔についても、実際の運用と同一のタイミングであることが望ましい。したがって、テストＴｓ間のオーバヘッドについても、抑制されることが望ましい。
【００４６】
なお、オーバヘッドを抑えるために、テストデータＤＴの加工処理を行うためのＣＰＵ（Central Processing Unit：ＣＰＵ）を増設し、当該ＣＰＵが、テストＴｓと並行してテストデータＤＴの加工処理を行う方法が検討される。しかしながら、ＣＰＵを増設することによって、テストの実行環境が実際の運用環境と異なってしまうため、望ましくない。
【００４７】
このように、テストデータＤＴのバリエーションを増加させながら、テスト時のオーバヘッドを抑えることが求められる。なお、テストデータＤＴの加工処理時間により、全てのテストＴｓが完了するまでの時間についても長期化してしまう。このため、テストの効率（時間の短縮）の観点からも、テストデータＤＴのバリエーションの生成にかかる処理時間は、抑制されることが望ましい。
【００４８】
［本実施の形態の概要］
したがって、本実施の形態のドライバプログラム１０は、第１のストレージ装置２０内のテストデータＤＴの読み出し開始位置をテストＴｓごとにシフトする。
【００４９】
つまり、ドライバプログラム１０は、Ｎ−１回目のテストＴｓでは、テストデータＤＴを記憶する第１のストレージ装置２０から、第１の読み出し開始位置を開始位置として区分データｄｔの単位データ数分、読み出す。そして、ドライバプログラム１０は、読み出した区分データｄｔを検証対象のソフトウェア３０による処理対象として順次、出力する。そして、Ｎ回目のテストＴｓでは、第１の読み出し開始位置を区分データｄｔの単位データ数とは異なる単位データ数分シフトした第２の読み出し開始位置を開始位置として、第１のストレージ装置２０から、区分データｄｔの単位データ数分、読み出す。そして、ドライバプログラム１０は、読み出した区分データｄｔを検証対象のソフトウェア３０による処理単位として順次出力する。
【００５０】
図４は、第１のストレージ装置２０内のテストデータＤＴの読み出し開始位置をテストＴｓごとにシフトする処理を模式的に説明する図である。図４の例では、１回目〜３回目のテストＴｓ１〜Ｔｓ３のそれぞれにおける、テストデータＤＴの読み出し順を例示する。
【００５１】
図４の例では、テストデータＤＴは、８個の単位データ（データ１〜データ８）を有する。単位データは、図２で説明したとおり、例えば、ドライバプログラム１０が１回に読み出すデータである。また、図４に示す、番号「１」〜「８」は、ドライバプログラム１０による単位データの読み出し順を示す。なお、図４の例では、テストデータＤＴが８個の単位データを有する場合を例示しているが、実際には、テストデータＤＴは多量の単位データを有する。
【００５２】
図４の例では、検証対象のソフトウェア３０は、テストデータＤＴを３回（区分データｄｔ−ａ〜ｄｔ−ｃ、区分データｄｔ−ｄは無し）に区分して、読み出す。つまり、検証対象のソフトウェア３０は、区分データｄｔの読み出し要求（図３のａ２−１、ａ５−１等）を、３回、ドライバプログラム１０に出力する。ドライバプログラム１０は、読み出し要求のそれぞれに応答して、２個または３個の単位データを読み出し、検証対象のソフトウェア３０に通知する。
【００５３】
（１回目のテスト）
１回目のテストＴｓ１では、ドライバプログラム１０は、第１のストレージ装置２０の、テストデータＤＴの先頭位置から、テストデータＤＴを読み出す。つまり、ドライバプログラム１０は、テストデータＤＴを、データ１〜データ８の順に読み込む。即ち、１回目のテストＴｓ１の第１の区分データｄｔ−ａは、データ１〜データ３に相当する。同様にして、１回目のテストＴｓ１の第２の区分データｄｔ−ｂは、データ４〜データ６に相当し、第３の区分データｄｔ−ｃはデータ７、データ８に相当する。
【００５４】
（２回目のテスト）
２回目のテストＴｓ２では、ドライバプログラム１０は、第１のストレージ装置２０の、データ２の位置から、テストデータＤＴを読み出す。つまり、ドライバプログラム１０は、テストデータＤＴを、データ２〜データ８、データ１の順に読み込む。即ち、２回目のテストＴｓ２の第１の区分データｄｔ−ａは、データ２〜データ４に相当する。同様にして、２回目のテストＴｓ１の第２の区分データｄｔ−ｂは、データ５〜データ７に相当し、第３の区分データｄｔ−ｃはデータ８、データ１に相当する。
【００５５】
（３回目のテスト）
３回目のテストＴｓ３では、ドライバプログラム１０は、第１のストレージ装置２０の、データ３の位置から、テストデータＤＴを読み出す。つまり、ドライバプログラム１０は、テストデータＤＴを、データ３〜データ８、データ１、データ２の順に読み込む。即ち、３回目のテストＴｓ３の第１の区分データｄｔ−ａは、データ３〜データ５に相当する。同様にして、３回目のテストＴｓ３の第２の区分データｄｔ−ｂは、データ６〜データ８に相当し、第３の区分データｄｔ−ｃはデータ１、データ２に相当する。
【００５６】
図４に示すように、第１〜第３の区分データｄｔ−ａ〜ｄｔ−ｃが含む単位データは、テストＴｓ１〜Ｔｓ３ごとに異なる。具体的に、第１の区分データｄｔ−ａは１回目のテストＴｓ１はデータ１〜データ３を有し、２回目のテストＴｓ２はデータ２〜データ４を有し、３回目のテストＴｓ３は、データ３〜５を有する。
【００５７】
このように、テストデータＤＴの読み出し開始位置をテストＴｓごとにシフトすることによって、検証対象のソフトウェア３０が処理の対象とする区分データｄｔが有する単位データは、テストＴｓごとに変化する。区分データｄｔがテストＴｓごとに異なることにより、検証対象のソフトウェア３０による、区分データｄｔに基づく処理も異なる。したがって、より高精度に検証対象のソフトウェア３０のテストを行うことが可能になる。
【００５８】
また、テストデータＤＴの読み出し開始位置をテストＴｓごとにシフトする場合、ドライバプログラム１０が、バッファに読み込んだデータを加工する必要がない。バッファに読み込んだデータの加工処理時間が生じないため、テストデータＤＴの検証対象のソフトウェア３０への通知の遅延が抑えられる。
【００５９】
つまり、本実施の形態におけるドライバプログラム１０は、単に、第１のストレージ装置２０内のテストデータＤＴの読み出し位置を変更するだけであるため、テストデータの変更のための処理時間が生じない。したがって、ドライバプログラム１０は、テストデータＤＴのバリエーションを増加させる際の所要時間の増大を抑止することができる。このため、テストデータＤＴのバリエーションを増やしながら、実運用と同一のタイミングまたは近いタイミングで、検証対象のソフトウェア３０にテストデータＤＴを出力することが可能になる。
【００６０】
ここで、図５にしたがって、検出の対象となる、検証対象のソフトウェア３０で発生し得る障害の一例を説明する。
【００６１】
図５は、検証対象のソフトウェア３０で発生し得る障害の一例を説明する図である。図１〜図３で前述したとおり、検証対象のソフトウェア３０は、第１〜第４の区分データｄｔ−ａ〜ｄｔ−ｄ（区分データｄｔともいう）のそれぞれに基づいて、検索条件に合致したデータを抽出する。そして、それぞれのテストＴｓの完了時に、検証対象のソフトウェア３０は、抽出結果のデータを、テストプログラム５０に出力するとともに（ａ１−３、ｂ１−３）、第２のストレージ装置４０に記憶する。
【００６２】
したがって、検証対象のソフトウェア３０は、第４の区分データｄｔ−ｄに基づく抽出処理が完了するまでの間、第１〜第３の区分データｄｔ−ａ〜ｄｔ−ｃに基づく抽出結果のデータを内部のメモリ領域（以下、バッファと称する）に保持する。抽出結果のデータをバッファに保持するために、検証対象のソフトウェア３０は、バッファ（図５の例では、データ３個分の領域）をアロケートして確保する。そして、検証対象のソフトウェア３０は、確保したバッファに、抽出結果のデータを順次、格納する。
【００６３】
図５の例によると、検証対象のソフトウェア３０は、第１の区分データｄｔ−ａのうち検索条件に合致したデータｄｔ−ａ４、ｄｔ−ａ５、を、バッファＲｂ１に格納する。同様にして、検証対象のソフトウェア３０は、第２の区分データｄｔ−ｂのうち検索条件に合致したデータｄｔ−ｂ３を、バッファＲｂ１に格納する。そして、検証対象のソフトウェア３０は、合致したデータｄｔ−ｂ４をバッファＲｂ１に格納しようとするが、バッファＲｂ１には空き領域がない。
【００６４】
したがって、検証対象のソフトウェア３０は、新たに、バッファＲｂ２をアロケートする。バッファＲｂ２をアロケートが完了した後、検証対象のソフトウェア３０は、合致したデータｄｔ−ｂ４をバッファＲｂ２に格納する。このように、合致したデータｄｔ−ｂ４のバッファへの格納の待ち合わせ処理が生じる。仮に、検証対象のソフトウェア３０の、バッファへの格納の待ち合わせ処理に障害がある場合、合致したデータｄｔ−ｂ４のバッファへの格納処理は、失敗する。
【００６５】
図５に示すように、特定の資源条件（図５の例では、バッファの不足）に応じて顕在化する障害がある。したがって、検証対象のソフトウェア３０のテストでは、様々な形態の資源条件が生じることが望ましい。様々な形態の資源条件は、テストＴｓによって、検証対象のソフトウェア３０の処理、即ち、検索条件の合致タイミングが変化する場合に、生じ易い。即ち、様々な形態の資源条件は、図４に示したように、テストＴｓごとに、区分データｄｔに基づく処理結果が異なる場合に生じ易い。
【００６６】
したがって、図４に示したように、テストＴｓごとにテストデータＤＴの読み出し開始位置をシフトすることによって、特定の資源条件や、検索条件の合致タイミングによって顕在化する障害の検証を行うことが可能になる。これにより、検証対象のソフトウェア３０のテストを、より高精度に行うことが可能になる。
【００６７】
次に、図６、図７にしたがって、図１に示した情報処理装置１００のハードウェア構成、及び、ソフトウェアブロック図を説明する。
【００６８】
［情報処理装置のハードウェア構成］
図６は、図１に示した情報処理装置１００のハードウェア構成図である。情報処理装置１００は、例えば、ＣＰＵ（Central Processing Unit：ＣＰＵ）１０１、ＲＡＭ（Random Access Memory：ＲＡＭ）２０１や不揮発性メモリ２０２等を備えるメモリ１０２、通信インタフェース部１０３、外部インタフェース部１０４を有する。各部は、バス１０６を介して相互に接続する。
【００６９】
ＣＰＵ１０１は、バス１０６を介してメモリ１０２等と接続するとともに、情報処理装置１００全体の制御を行う。通信インタフェース部１０３は、インターネット等を介して、他の機器（図示せず）と接続する。メモリ１０２のＲＡＭ２０１は、ＣＰＵ１０１が処理を行うデータ等を記憶する。また、外部インタフェース部１０４は、図１に示した第１、第２のストレージ装置２０、４０と接続する。
【００７０】
メモリ１０２の不揮発性メモリ２０２は、ＣＰＵ１０１が実行するＯＳ６０のプログラムを格納する領域（図示せず）や、ＯＳ６０上で動作する検証対象のソフトウェアを格納する格納領域３０を備える。また、不揮発性メモリ２０２は、ドライバプログラムを格納する格納領域１０を備える。また、不揮発性メモリ２０２は、パラメータファイル格納領域ｐｆを備える。不揮発性メモリ２０２は、ＨＤＤ（Hard disk drive：ＨＤＤ）、不揮発性半導体メモリ等で構成される。
【００７１】
検証対象のソフトウェア格納領域３０の検証対象のソフトウェア（以下、検証対象のソフトウェア３０と称する）は、ＣＰＵ１０１の実行によって、検証対象のソフトウェア３０の処理を実現する。ドライバプログラム格納領域１０のドライバプログラム（以下、ドライバプログラム１０と称する）は、ＣＰＵ１０１の実行によって、第１、第２のストレージ装置２０、４０（図１）へのアクセス処理等を実現する。ドライバプログラム１０の処理の詳細は、図７にしたがって後述する。テストの実行者は、例えば、検証対象のソフトウェアの検証時に、ドライバプログラム（図示せず）を、図６に示す、テスト用のドライバプログラム１０に入れ替える。
【００７２】
パラメータファイル格納領域ｐｆのパラメータファイル（以下、パラメータファイルｐｆと称する）は、ドライバプログラム１０が参照するテーブルである。パラメータファイルｐｆの詳細は、図７で後述する。
【００７３】
［情報処理装置のソフトウェアブロック］
図７は、図６に示した情報処理装置１００のドライバプログラム１０のソフトウェアブロックの構成図である。図７に示すように、ドライバプログラム１０は、例えば、パラメータ生成モジュール１１、テスト開始モジュール１２、テスト開始通知モジュール１３、アクセスモジュール１４、入れ替えモジュール１５を有する。
【００７４】
パラメータ生成モジュール１１は、アクセスモジュール１４が参照するパラメータファイル（図６）ｐｆを生成するモジュールである。パラメータ生成モジュール１１は、テストを行う前に、予め、パラメータファイルｐｆを生成しておく。パラメータファイルｐｆは、例えば、区分データｄｔの読み込み処理の所要時間や余裕時間等のパラメータを有する。所要時間は図３１にしたがって、余裕時間は図３１、図３２にしたがって後述する。パラメータ生成モジュール１１の処理の詳細を、図３１〜図３４のフローチャート図にしたがって後述する。
【００７５】
テスト開始モジュール１２は、テスト全体の初期処理を行うモジュールである。テスト開始モジュール１２は、テスト全体の初期処理を行うとともに、テストの開始をテスト開始通知モジュール１３に通知する。テスト開始モジュール１２の処理の詳細は、図１３のフローチャート図で後述する。テスト開始通知モジュール１３は、テスト開始モジュール１２からの通知に応じて、テストＴｓの初期処理を行うとともに、テストＴｓの開始をアクセスモジュール１４に通知する。テスト開始通知モジュール１３の処理の詳細は、図１４のフローチャート図で後述する。
【００７６】
アクセスモジュール１４は、テストＴｓのテストデータＤＴの第１のストレージ装置２０からの読み出し、及び、テストＴｓのテスト結果の第２のストレージ装置４０への書き込み処理等を行うモジュールである。アクセスモジュール１４は、パラメータ生成モジュール１１が生成したパラメータファイルｐｆを参照して、読み出し、及び、書き込み処理を行う。アクセスモジュール１４の処理の詳細は、図１５〜図２８のフローチャート図で後述する。
【００７７】
入れ替えモジュール１５は、アクセスモジュール１４が呼び出すモジュールであって、テストＴｓの最後に読み出す単位データ（以下、最終データ）を変更するモジュールである。入れ替えモジュール１５の処理の詳細は、図２９のフローチャート図で後述する。
【００７８】
以下、図６に示したハードウェア構成が処理する処理内容を、図７に示したソフトウェアのモジュール１１〜１５を用いて、順次、説明する。
【００７９】
［先頭位置データのバッファリング］
図４にしたがって、本実施の形態におけるアクセスモジュール１４のテストデータＤＴのバリエーションの生成について説明した。アクセスモジュール１４は、図４に示した、テストデータＤＴの読み出し開始位置のシフト処理に加えて、さらに、テストデータＤＴの先頭位置の単位データ（以下、先頭位置データ）をバッファに保持してもよい。これにより、テストデータＤＴの読み出し処理時間を短縮可能になる。
【００８０】
図８にしたがって、先頭位置データをバッファに保持する処理（以下、バッファリング）を説明する。
【００８１】
図８は、先頭位置データのバッファリングを説明する図である。図８では、１回目のテストＴｓ１、及び、２回目のテストＴｓ２を例示する。図８に示す１回目、２回目のテストＴｓ１、Ｔｓ２のテストデータＤＴの各単位データの読み出し順は、図４と同様である。図８において、図４で示したものと同一のものは、同一の記号で示す。
【００８２】
図８に示すように、アクセスモジュール１４は、１回目のテストＴｓ１の前に、予め、先頭位置データ「データ１」をバッファｂｆ０に保持しておく。したがって、アクセスモジュール１４は、第１の区分データｄｔ−ａの読み出し要求に応じて、データ１を、第１のストレージ装置２０からではなく、バッファｂｆ０から読み出す。また、アクセスモジュール１４は、データ２、データ３を第１のストレージ装置２０から読み出す。
【００８３】
２回目のテストＴｓ２でも、アクセスモジュール１４は、先頭位置データ「データ１」をバッファｂｆ０に保持する。２回目のテストＴｓ２では、先頭位置データ「データ１」は、最後に読み出すデータ（最終データ）である。したがって、アクセスモジュール１４は、第３の区分データｄｔ−ｃに読み出し要求に応じて、データ８を第１のストレージ装置２０から読み出すとともに、データ１をバッファｂｆ０から読み出す。
【００８４】
このように、アクセスモジュール１４は、Ｎ−１回目、Ｎ回目のテストＴｓの際に、さらに、テストデータＤＴのうち、第１の読み出し開始位置の第１のレコード（単位レコード）をバッファ（第２の記憶部）に保持している。そして、アクセスモジュール１４は、読み出し対象の第１の区分データｄｔが第１のレコードを含む場合に、第１のレコードをバッファから読み出し、第１のレコード以外の単位レコードを第１のストレージ装置２０から読み出す。
【００８５】
図４で説明したとおり、本実施の形態におけるアクセスモジュール１４は、テストデータＤＴの読み出し開始位置をテストＴｓごとにシフトする。一方、読み出し開始位置をシフトすることによって、テストＴｓによっては、一部の単位データの読み出し処理がシーケンシャルの読み出し処理にならない場合がある。
【００８６】
例えば、図８に示す、２回目のテストＴｓ２の区分データｄｔ−ｃは、データ８及びデータ１を含む。データ８とデータ１とは連続したアドレスに位置しないため、区分データｄｔ−ｃの読み出し処理は、シーケンシャルの読み出し処理にはならない。これにより、読み出し開始位置のシフトを行わない場合に対して、読み出し処理時間が増加することがある。
【００８７】
したがって、図８に示すように、アクセスモジュール１４は、シーケンシャルによる読み出し処理にならない最後位置の単位データ（データ８）と先頭位置の単位データ（データ１）のうち、先頭位置の単位データをメモリ領域（バッファ）に保持する。そして、アクセスモジュール１４は、テストＴｓのそれぞれで、先頭位置データ「データ１」については、バッファから読み出す。本実施の形態におけるテストデータＤＴの容量は大きいため、テストデータＤＴの単位データ全てをバッファに保持しておくことは容易ではない。したがって、アクセスモジュール１４は、テストデータＤＴのうち、先頭位置データをバッファに保持する。
【００８８】
バッファｂｆ０からのデータの読み出し処理は、第１、第２のストレージ装置２０、４０からの読み出し処理に対して速い。したがって、先頭位置データ「データ１」をバッファｂｆ０から読み出し可能になることによって、データ１の読み出し処理を短縮可能になる。つまり、テストデータＤＴの読み出し処理時間を短縮可能になる。
【００８９】
テストデータＤＴの読み出し処理時間を短縮可能になることにより、読み出し開始位置のシフトによって生じ得るオーバヘッドを解消可能になる。したがって、読み出し開始位置をシフトすることによって、テストデータＤＴのバリエーションを増やしながら、テストデータＤＴの読み出し処理を、実運用と同一のタイミングで行うことが可能になる。
【００９０】
［最終データのバッファリング］
本実施の形態におけるアクセスモジュール１４は、さらに、所定の順番に読み出す単位データをバッファに保持してもよい。これにより、テストデータＤＴの読み出し処理時間を短縮可能になる。
【００９１】
具体的に、アクセスモジュール１４は、読み出した単位データのうち、次回のテストＴｓで所定の順番に読み出す単位データを、バッファに保持しておく。そして、次回のテストＴｓでは、アクセスモジュール１４は、所定の順番に読み出す単位データについては、第１のストレージ装置２０からではなく、バッファから読み出す。
【００９２】
単位データ全てをバッファに保持することは容易ではないため、アクセスモジュール１４は、先頭位置データに加えて、次回のテストＴｓで所定の順番に読み出す単位データをバッファに保持しておく。本実施の形態では、アクセスモジュール１４は、次回のテストＴｓで最後に読み出す単位データ（最終データ）を、バッファに保持する場合を例示する。図８にしたがって、最終データのバッファリングを説明する。
【００９３】
（１回目のテスト）
図８に戻り、１回目のテストＴｓ１では、アクセスモジュール１４は、先頭位置データ「データ１」に加えて、１回目のテストＴｓ１で最後に読み出す単位データ（最終データ）「データ８」をバッファｂｆ１に保持しておく。
【００９４】
前述したとおり、アクセスモジュール１４は、第１の区分データｄｔ−ａの読み出し要求に応じて、先頭位置データ「データ１」をバッファｂｆ０から読み出し、データ２、データ３を第１のストレージ装置２０から読み出す。なお、「データ１」は、２回目のテストＴｓ２における最終データである。したがって、アクセスモジュール１４は、２回目のテストＴｓ２の最終データ「データ１」を、バッファｂｆ２に保持しておく。
【００９５】
アクセスモジュール１４は、第２の区分データｄｔ−ｂの読み出し要求に応じて、データ４〜データ６を第１のストレージ装置２０から読み出す。また、アクセスモジュール１４は、第３の区分データｄｔ−ｃの読み出し要求に応じて、データ７を第１のストレージ装置２０から読み出すとともに、保持しているバッファｂｆ１からデータ８（最終データ）を読み出す。データ８をバッファｂｆ１から読み出し可能になることによって、データ８の読み出し処理時間を短縮可能になる。
【００９６】
（２回目のテスト）
図８に示す、２回目のテストＴｓ２では、アクセスモジュール１４は、第１の区分データｄｔ−ａの読み出し要求に応じて、データ２〜データ４を第１のストレージ装置２０から読み出す。このとき、アクセスモジュール１４は、３回目のテストＴｓ３の最終データ「データ２」をバッファｂｆ３に保持しておく。
【００９７】
アクセスモジュール１４は、第２の区分データｄｔ−ｂの読み出し要求に応じて、データ５〜データ７を第１のストレージ装置２０から読み出す。また、アクセスモジュール１４は、第３の区分データｄｔ−ｃの読み出し要求に応じて、データ８を第１のストレージ装置２０から読み出すとともに、データ１をバッファｂｆ０またはバッファｂｆ２から読み出す。
【００９８】
図８に示すように、全てのテストＴｓを通して、先頭位置データはデータ１を示すのに対し、最終データはテストＴｓごとに異なる単位データを示す。最終データ「データ１」をバッファｂｆ０またはバッファｂｆ２から読み出し可能になることによって、データ８の読み出し処理時間を短縮可能になる。
【００９９】
このように、アクセスモジュール１４は、Ｎ−１回目のテストＴｓの際に、さらに、読み出したテストデータＤＴのうち、Ｎ回目のテストＴｓの際に所定の順番に読み出す第２のレコード（単位レコード）をバッファ（第２の記憶部）に記憶する。そして、アクセスモジュール１４は、Ｎ回目のテストＴｓの際に、読み出し対象の区分データｄｔが第２のレコードを含む場合に、第２のレコードをバッファから読み出し、第２のレコード以外のレコードを第１のストレージ装置２０（第１の記憶部）から読み出す。所定の順番に読み出す単位データをバッファから読み出し可能になることによって、テストデータＤＴの読み出し処理時間をさらに短縮可能になる。
【０１００】
ここで、図９〜図１１にしたがって、３回目〜５回目のテストＴｓ３〜Ｔｓ５における、先頭位置データ及び最終データのバッファリングの流れを説明する。図９〜図１１に示す２回目、３回目のテストＴｓ２、Ｔｓ３のテストデータＤＴの各単位データの読み出し順は、図４と同様である。また、図９〜図１１において、図４、図８で示したものと同一のものは、同一の記号で示す。
【０１０１】
（３回目のテスト）
図９は、３回目のテストＴｓ３の先頭位置データ及び最終データのバッファリング処理を説明する図である。図９は、２回目のテストＴｓ２（図８と同一）、及び、３回目のテストＴｓ３における先頭位置データ及び最終データのバッファリングを例示する。
【０１０２】
アクセスモジュール１４は、第１の区分データｄｔ−ａの読み出し要求に応じて、データ３〜データ５を第１のストレージ装置２０から読み出す。このとき、アクセスモジュール１４は、４回目のテストＴｓ４で最終データとなるデータ３をバッファｂｆ４に保持しておく。
【０１０３】
次に、アクセスモジュール１４は、第２の区分データｄｔ−ｂの読み出し要求に応じて、データ６〜データ８を第１のストレージ装置２０から読み出す。また、アクセスモジュール１４は、第３の区分データｄｔ−ｃの読み出し要求に応じて、バッファｂｆ０からデータ１を読み出し、２回目のテストＴｓ２で保持したバッファｂｆ３からデータ２を読み出す。先頭位置データ「データ１」及び最終データ「データ２」をバッファｂｆ０、ｂｆ３から読み出すことによって、テストデータＤＴの読み込み処理時間を短縮可能になる。
【０１０４】
（４回目のテスト）
図１０は、４回目のテストＴｓ４の先頭位置データ及び最終データのバッファリング処理を説明する図である。図１０は、３回目のテストＴｓ３（図９と同一）、及び、４回目のテストＴｓ４における先頭位置データ及び最終データのバッファリングを例示する。
【０１０５】
アクセスモジュール１４は、第１の区分データｄｔ−ａの読み出し要求に応じて、データ４〜データ６を第１のストレージ装置２０から読み出す。このとき、アクセスモジュール１４は、５回目のテストＴｓ５で最終データとなるデータ４をバッファｂｆ５に保持しておく。
【０１０６】
次に、アクセスモジュール１４は、第２の区分データｄｔ−ｂの読み出し要求に応じて、データ７〜データ８を第１のストレージ装置２０から読み出すとともに、バッファｂｆ０からデータ１を読み出す。また、アクセスモジュール１４は、第３の区分データｄｔ−ｃの読み出し要求に応じて、データ２を第１のストレージ装置２０から読み出すとともに、データ３をバッファｂｆ４から読み出す。先頭位置データ「データ１」及び最終データ「データ３」をバッファｂｆ０、ｂｆ４から読み出すことによって、テストデータＤＴの読み込み処理時間を短縮可能になる。
【０１０７】
（５回目のテスト）
図１１は、５回目のテストＴｓ５の先頭位置データ及び最終データのバッファリング処理を説明する図である。図１１は、４回目のテストＴｓ４（図１０と同一）、及び、５回目のテストＴｓ５における先頭位置データ及び最終データのバッファリングを例示する。
【０１０８】
アクセスモジュール１４は、第１の区分データｄｔ−ａの読み出し要求に応じて、データ５〜データ７を第１のストレージ装置２０から読み出す。このとき、アクセスモジュール１４は、６回目のテストＴｓ６で最終データとなるデータ５をバッファｂｆ６に保持しておく。
【０１０９】
次に、アクセスモジュール１４は、第２の区分データｄｔ−ｂの読み出し要求に応じて、データ８、データ２を第１のストレージ装置２０から読み出すとともに、データ１をバッファｂｆ０から読み出す。また、アクセスモジュール１４は、第３の区分データｄｔ−ｃの読み出し要求に応じて、データ３を第１のストレージ装置２０から読み出すとともに、データ４をバッファｂｆ５から読み出す。
【０１１０】
図１１に示すように、第２の区分データｄｔ−ｂの読み出し要求に応じた、単位データ（データ８、データ２）の読み出し処理は、シーケンシャルによる読み出し処理ではなくなってしまう。ただし、先頭位置データ「データ１」及び最終データ「データ４」をバッファｂｆ０、ｂｆ５から読み出すことによって、テストデータＤＴの読み込み時間を短縮可能になる。これにより、一部の単位データ（データ８、データ２）の読み出し処理がシーケンシャルによる読み出し処理ではなくなることによって生じるオーバヘッドを解消可能になる。
【０１１１】
［単位データの内容の変更］
図８〜図１１で説明してきたとおり、アクセスモジュール１４は、先頭位置データ及び最終データをバッファから読み出すことにより、テストデータＤＴの読み出し処理時間を短縮する。短縮時間は、テストデータＤＴがシーケンシャルによる読み出しにならない場合に生じる遅延時間よりも大きい。つまり、先頭位置データ及び最終データをバッファから読み出すことによって、実際の運用時より読出し処理時間が短くなる。
【０１１２】
したがって、入れ替えモジュール１５は、短縮時間を利用して、さらに、前回のテストＴｓでバッファｂｆ１〜ｂｆ６に保持した単位データの内容を変更する。つまり、入れ替えモジュール１５は、先頭位置データ及び最終データを、第１のストレージ装置２０から読み出す処理時間と、当該データをバッファから読み出す処理時間との差分時間内に、最終データを変更する。
【０１１３】
図８〜図１１で説明したとおり、バッファｂｆ１〜ｂｆ６に保持する単位データ（本実施の形態では最終データ）は、テストＴｓごとに異なる。テストＴｓごとに異なる単位データを変更することによって、テストデータＤＴのバリエーションをさらに増加させることが可能になる。また、短縮時間を利用することにより、読み出したデータの検証対象のソフトウェア３０への通知時間を、実際の運用時と同一にすることができる。
【０１１４】
また、アクセスモジュール１４は、テストＴｓの開始時に、予め、変更の対象の単位データ（最終データ）をバッファｂｆ１〜ｂｆ６に保持している。これにより、当該単位データ（最終データ）の第１のストレージ装置２０からの読み出し処理が不要になるため、より効率的に、単位データを変更することが可能になる。また、変更対象の単位データは前回のテストＴｓで保持されるため、テストＴｓの間に、別途変更対象の単位データを読み出しておく必要もない。したがって、テストＴｓの間のオーバヘッドが生じることを回避可能になる。
【０１１５】
なお、本実施の形態では、入れ替えモジュール１５は、最後に読み出す最終データの内容を変更する。最終データを変更の対象とすることにより、テストＴｓの短縮時間を利用して、最終データを変更することが可能になる。
【０１１６】
図１２は、最終データの内容の加工（変更）処理を説明する図である。図１２は、変更前後の最終データ（単位データ）ｌｄ−１、ｌｄ−２、及び、入れ替え定義テーブルｔｂを示す。図１２の例では、最終データｌｄ−１、ｌｄ−２は、１０個のレコードを有する。ただし、単位データは、実際には多量のレコードを有する。
【０１１７】
入れ替えモジュール１５は、入れ替え定義テーブルｔｂに基づいて、最終データｌｄ−１が含む複数のレコードの順番を入れ替えることによって、最終データｌｄ−１の内容を変更する。図１２に示す入れ替え定義テーブルｔｂ内のコードｃｄ１は、入れ替え定義テーブルｔｂが有する入れ替えパターン総数を示す。また、コードｃｄ２はパターン番号を示し、コードｃｄ３はパターン番号のレコードの入れ替え数を示し、コードｃｄ４は、入れ替え対象のレコードの情報を示す。
【０１１８】
例えば、パターン番号「Ｎｏ１−１」に基づいて、最終データｌｄ−１を加工する場合を例示する。図１２の入れ替え定義テーブルｔｂによると、パターン「Ｎｏ１−１」のレコード入れ替え数は３つである（ｃｄ３）。また、入れ替え対象のレコードは、レコード１とレコード５、レコード２とレコード３、及び、レコード８とレコード１０である（ｃｄ４）。したがって、入れ替えモジュール１５は、図１２に示す最終データｌｄ−１のレコード１とレコード５の位置、レコード２とレコード３の位置、及び、レコード８とレコード１０の位置を入れ替える。これにより、入れ替えモジュール１５は、図１２に示す最終データｌｄ−２を生成する。
【０１１９】
なお、図１２の例では、レコード入れ替え数が３つである場合を例示した。ただし、前述したとおり、単位データは実際には多量のレコードを有する。したがって、入れ替えモジュール１５は、実際には多量のレコードを入れ替える。
【０１２０】
次に、図１３〜図３４のフローチャート図にしたがって、図７に示したドライバプログラム１０の各モジュール１１〜１５の処理の詳細を説明する。
【０１２１】
［テスト開始モジュール］
図１３は、図７に示したテスト開始モジュール１２の処理を説明するフローチャート図である。テスト開始モジュール１２は、テストの初期処理を行う。
【０１２２】
テストプログラム５０（図３）は、例えば、パラメータ１〜パラメータ３を指定して、テスト開始モジュール１２を呼び出す。パラメータ１は、区分データｄｔのサイズを示し、パラメータ２はテストデータＤＴのデータ長を示す。パラメータ３は、テストデータＤＴを記憶する第１のストレージ装置２０のアドレス情報を示す。
【０１２３】
Ｓ１１：テスト開始モジュール１２は、パラメータ１の区分データｄｔのサイズを、変数「READ_SIZE」にセットする。
【０１２４】
Ｓ１２：テスト開始モジュール１２は、アクセスモジュール１４による１回の読み出し処理に対応するバッファのサイズを、変数「BUF_SIZE」にセットする。本実施の形態では、変数「BUF_SIZE」は、単位データのサイズに対応する。
【０１２５】
Ｓ１３：テスト開始モジュール１２は、変数「BUF_SIZE」と変数「READ_SIZE」とに基づいて、区分データｄｔの読み出し要求に使用するバッファの数を算出し、変数「SU」にセットする。即ち、変数「SU」は、区分データｄｔの読み出し要求に応じた、単位データの読み出し回数である。
【０１２６】
Ｓ１４：テスト開始モジュール１２は、パラメータ２が示すテストデータＤＴのデータ長と、変数「READ_SIZE」とに基づいて、１回のテストＴｓ内の読み出し要求の数を算出する。そして、テスト開始モジュール１２は、算出した読み出し要求の数を、メモリ（図６のＲＡＭ２０１）上の変数「KAZU」（図１３の例では、１０２４回）にセットする。
【０１２７】
Ｓ１５：テスト開始モジュール１２は、第１のストレージ装置２０から、テストデータＤＴの先頭位置データ（本実施の形態では、「データ１」）を読み出し（ロードし）、バッファｂｆ０（図８〜図１１）に保持する。バッファｂｆ０は、例えば、ドライバプログラム１０のスタティック領域に保持するバッファを示す。ドライバプログラム１０は、全てのテストＴｓを通して、バッファｂｆ０にデータ１を保持する。
【０１２８】
Ｓ１６：テスト開始モジュール１２は、第１のストレージ装置２０から、１回目のテストＴｓ１の最終データ（図８の例では、「データ８」）を読み出し（ロードし）、バッファ（図８の例では、バッファｂｆ１に格納する。
【０１２９】
Ｓ１７：テスト開始モジュール１２は、図７に示したパラメータ生成モジュール１１が予め生成したパラメータファイルｐｆから所要時間「８５３ｍｓｅｃ（milli second：ｍｓｅｃ）」を読み出し、メモリ（図６のＲＡＭ２０１）に保持しておく。
【０１３０】
Ｓ１８：テスト開始モジュール１２は、パラメータ３が示す、第１のストレージ装置２０内のテストデータＤＴを格納するアドレス（図１３の例では、アドレス「ab1563e0」）を、メモリ（図６のＲＡＭ２０１）に保持しておく。
【０１３１】
Ｓ１９：テスト開始モジュール１２は、テストＴｓのカウンターを示す変数「TESTNUM」を初期化する。変数「TESTNUM」の初期値は値「１」である。
【０１３２】
Ｓ２０：テスト開始モジュール１２は、検証対象のソフトウェア３０からの読み出し要求のカウンターを示す変数「NUM」を値「１」に初期化する。また、テスト開始モジュール１２は、テストＴｓ内の単位データの読み出し順を示す変数「Read番号」を値「１」に初期化する。
【０１３３】
Ｓ２１：テスト開始モジュール１２は、入れ替え定義テーブルｔｂ（図１２）を読み出し、入れ替え定義テーブルｔｂの情報を保持する。
【０１３４】
Ｓ２２：テスト開始モジュール１２は、パラメータファイルｐｆから読み出した入れ替え数を、変数「PATTERN_SU」にセットする。
【０１３５】
Ｓ２３：テスト開始モジュール１２は、図７に示したテスト開始通知モジュール１３にテストの開始を指示する。
【０１３６】
［テスト開始通知モジュール］
図１４は、図７に示したテスト開始通知モジュール１３の処理を説明するフローチャート図である。テスト開始通知モジュールは、テストＴｓの初期処理を行う。図１３に示したテスト開始モジュール１２は、テストＴｓの回数を示すパラメータ１を指定して、テスト開始通知モジュール１３を呼び出す。
【０１３７】
Ｓ３１：テスト開始通知モジュール１３は、パラメータ１が示す、テストＴｓの回数を、変数「TESTNUM」にセットする。
【０１３８】
Ｓ３２：テスト開始通知モジュール１３は、検証対象のソフトウェア３０からの読み出し要求のカウンターを示す変数「NUM」を値「１」に初期化する。
【０１３９】
Ｓ３３：テスト開始通知モジュール１３は、図７に示したアクセスモジュール１４に、テストＴｓの開始を指示する。
【０１４０】
［アクセスモジュール］
図１５〜図２８にしたがって、図７に示したアクセスモジュール１４の処理の詳細を説明する。図１５〜図２８は、図１３で説明した回数「SU」分の、単位データの読出し処理を説明するフローチャート図である。
【０１４１】
図１５は、図７に示した、アクセスモジュール１４の処理の詳細を説明する第１のフローチャート図である。
【０１４２】
Ｓ４１：アクセスモジュール１４は、検証対象のソフトウェア３０からのアクセス要求の種別を判定する。
【０１４３】
Ｓ４２：アクセス要求の種別が読み出し要求の場合（Ｓ４１のｒｅａｄ）、アクセスモジュール１４は、さらに、読み出し要求の対象のアドレスが、テストデータＤＴのアドレスであるか否かを判定する。
【０１４４】
Ｓ４３：要求の種別が書き込み要求の場合（Ｓ４１のｗｒｉｔｅ）、または、読み出し要求の対象のアドレスがテストデータＤＴのアドレスではない場合（Ｓ４２のＮｏ）、アクセスモジュール１４は、通常のアクセス処理を行う。
【０１４５】
Ｓ４４：アクセスモジュール１４は、現在の時刻「Ｓ」（開始時刻）を取得する。
【０１４６】
Ｓ４５：アクセスモジュール１４は、テストデータＤＴの読み出し開始位置のシフト数を算出する。シフト数を算出する数式は、「剰余｛（TESTNUM−１）÷（SU×KAZU）｝」である。例えば、変数「TESTNUM」が値「１」である場合の、シフト数は値「０」である。また、変数「TESTNUM」が値「２」である場合のシフト数は値「１」であって、変数「TESTNUM」が値「３」である場合のシフト数は値「２」である。
【０１４７】
Ｓ４６：アクセスモジュール１４は、単位データの読み込み処理の回数のカウンターを示す変数「ｉ」に、値「１」をセットする。
【０１４８】
図１６は、図７に示したアクセスモジュール１４の処理の詳細を説明する第２のフローチャート図である。図１６のフローチャート図は、図１５のフローチャート図の続きの処理を示す。
【０１４９】
Ｓ４７：アクセスモジュール１４は、読み込み対象の単位データが先頭位置データであるか否かを判定する。具体的に、アクセスモジュール１４は、読み出し順を示す変数「Read番号」と、数式「（SU×KAZU）＋１−シフト数」の値とが一致するか否かを判定する。シフト数が値「０」の場合、アクセスモジュール１４は、数式の結果を値「１」とする。
【０１５０】
Ｓ４８：読み込み対象の単位データが先頭位置データではない場合（Ｓ４７のＮｏ）、アクセスモジュール１４は、読み込み対象の単位データの第１のストレージ装置２０内の読み込みアドレス、及び、読み込みデータの格納アドレスを算出する。
【０１５１】
ストレージ装置２０内の読み込みアドレスの算出式は、数式「テストデータＤＴの第１のストレージ装置２０内の格納アドレス＋READ_SIZE×（シフト数＋（ｉ−１））」である。読み込みデータの格納アドレスの算出式は、数式「読み込みデータの格納アドレス＋READ_SIZE×（ｉ−１）」である。
【０１５２】
Ｓ４９：次に、アクセスモジュール１４は、図１９に示すディスク読み込みルーチンを呼び出し、第１のストレージ装置２０からの単位データの読み込み処理を依頼する。
【０１５３】
Ｓ５０：工程Ｓ４９の後、アクセスモジュール１４は、変数「Read番号」が値「１」であるか否かを判定する。即ち、アクセスモジュール１４は、工程Ｓ４９で読み出したデータが、対象のテストＴｓで初めに読み出した単位データ（次回のテストＴｓの最終データ）であるか否かを判定する。
【０１５４】
Ｓ５１：変数「Read番号」が値「１」である場合（Ｓ５０のＹｅｓ）、即ち、読み出した単位データが次回のテストＴｓの最終データである場合、アクセスモジュール１４は、読み出した単位データを保持したバッファを、保持キューにつなぐ。保持キューについては、図１７、図１８にしたがって後述する。アクセスモジュール１４は、１回目のテストＴｓ１では「データ１」を保持するバッファｂｆ２を、保持キューにつなぐ。また、アクセスモジュール１４は、２回目のテストＴｓ２では「データ２」を保持するバッファｂｆ３を、３回目のテストＴｓ３では「データ３」を保持するバッファｂｆ４を、保持キューにつなぐ。
【０１５５】
Ｓ５２：工程Ｓ４７の判定の結果、読み込み対象の単位データが先頭位置データである場合（Ｓ４７のＹｅｓ）、アクセスモジュール１４は、図２０に示す、先頭位置読み込みルーチンを呼び出し、読み込み処理を依頼する。
【０１５６】
１回目のテストＴｓ１では、変数「Read番号」が値「１」の場合に、読み込み対象のデータが、先頭位置データとなる。また、２回目のテストＴｓ２では変数「Read番号」が値「８」の場合に、３回目のテストＴｓ３では変数「Read番号」が値「７」の場合に、読み込み対象のデータが先頭位置データとなる。
【０１５７】
Ｓ５３：工程Ｓ５２において、アクセスモジュール１４は、先頭位置データを第１のストレージ装置２０ではなく、バッファｂｆ０から読み出すため、読み込み処理時間を短縮できる。したがって、アクセスモジュール１４は、ウェイトフラグをＯＮ状態に変更する。
【０１５８】
Ｓ５４：工程Ｓ５０の判定の結果、変数「Read番号」が値「１」ではない場合（Ｓ５０のＮｏ）、または、工程Ｓ５１や工程Ｓ５３の後、アクセスモジュール１４は、変数「Read番号」をインクリメントする。
【０１５９】
Ｓ５５：また、アクセスモジュール１４は、変数「ｉ」をインクリメントする。
【０１６０】
Ｓ５６：アクセスモジュール１４は、インクリメント後の変数「Read番号」が、値「KAZU×SU」と一致するか否かを判定する。つまり、アクセスモジュール１４は、次に読み出すデータが、テストＴｓの最終データであるか否かを判定する。
【０１６１】
Ｓ５７：工程Ｓ５６の判定の結果、変数「Read番号」が値「KAZU×SU」と一致しない場合（Ｓ５６のＮｏ）、即ち、次に読み込むデータが最終データではない場合、アクセスモジュール１４は、変数「ｉ」が変数「SU」より大きいか否かを判定する。つまり、アクセスモジュール１４は、工程Ｓ４９、または、工程Ｓ５２で読み出した単位データが、検証対象のソフトウェア３０からの読み出し要求に対応する最後の単位データであるか否かを判定する。
【０１６２】
Ｓ５８：変数「ｉ」が変数「SU」より大きい場合（Ｓ５７のＹｅｓ）、即ち、読み出し要求に対応する最後の単位データである場合、アクセスモジュール１４は、読み出し要求の回数を示す変数「NUM」をインクリメントする。変数「ｉ」が変数「SU」以下の場合（Ｓ５７のＮｏ）、アクセスモジュール１４は、工程Ｓ４７の処理に遷移し、変数「Read番号」に対応する単位データを読み込む。
【０１６３】
Ｓ５９：アクセスモジュール１４は、変数「NUM」が、変数「KAZU」を超えたか否かを判定する。つまり、アクセスモジュール１４は、対象の読み出し要求が、テストＴｓの最後の読み出し要求であるか否かを判定する。
【０１６４】
Ｓ６０：変数「Read番号」が値「KAZU×SU」と一致する場合（Ｓ５６のＹｅｓ）、即ち、次に読み込む単位データが最終データである場合、アクセスモジュール１４は、図２１に示す、バッファ読み込みルーチンを呼び出し、最終データの読み込み処理を依頼する。本実施の形態では、変数「Read番号」が値「８」の場合に、次に読み込む単位データが最終データであることを示す。
【０１６５】
Ｓ６１：次に読み込むデータが最終データである場合（Ｓ５６のＹｅｓ）、アクセスモジュール１４は、図２１に示す、ディスク書き込みルーチンを呼び出し、第２のストレージ装置４０への、テストのエビデンス（証拠）の書き込み処理を依頼する。本実施の形態では、ディスク書き込みルーチンは、最終データの読み出し後に、テストのエビデンスを第１のストレージ装置２０に記憶する。ただし、ドライバプログラム１０は、検証対象のソフトウェア３０の処理の終了時に（図３のａ１−３、ｂ１−３）、テストのエビデンスを記憶してもよい。
【０１６６】
Ｓ６２：また、アクセスモジュール１４は、保持キューにつないでいた、最終データを保持するバッファ（図１７、図１８）を、空きキューへ返却する。
【０１６７】
Ｓ６３：工程Ｓ６０において、アクセスモジュール１４は、最終データを第１のストレージ装置２０ではなく、バッファｂｆ１〜ｂｆ６（図８〜図１１）から読み出すため、読み込み処理時間を短縮できる。したがって、アクセスモジュール１４は、ウェイトフラグをＯＮにする。
【０１６８】
Ｓ６４：工程Ｓ５９の判定の結果、変数「NUM」が変数「KAZU」より大きい場合（Ｓ５９のＹｅｓ）、対象の読み出し要求が、対象のテストＴｓにおける最後の読み出し要求であることを示す。したがって、アクセスモジュール１４は、次のテストＴｓの準備として、変数「NUM」を値「０」に初期化する。
【０１６９】
Ｓ６５：また、アクセスモジュール１４は、次のテストＴｓの準備として、変数「TESTNUM」をインクリメントする。
【０１７０】
Ｓ６６：また、アクセスモジュール１４は、次のテストＴｓの準備として、変数「Read番号」を値「１」に初期化する。
【０１７１】
Ｓ６７：工程Ｓ６６の処理の後、及び、変数「NUM」が変数「KAZU」以下の場合（Ｓ５９のＮｏ）、アクセスモジュール１４は、ウェイトフラグがＯＮ状態であるか否かを判定する。変数「NUM」が変数「KAZU」以下の場合（Ｓ５９のＮｏ）、対象の読み出し要求が、最後の読み出し要求ではないため、工程Ｓ６４〜Ｓ６６の処理を行わない。
【０１７２】
Ｓ６８：ウェイトフラグがＯＮである場合（Ｓ６７のＹｅｓ）、アクセスモジュール１４は、図２８に示す、ウェイトルーチンを呼び出す。SU回の読出し処理内で、いずれかの単位データをバッファから読み出した場合（Ｓ５３、Ｓ６３）、ウェイトフラグはＯＮ状態になっている。ウェイトルーチンは、読出し要求に対応する読出し処理時間が、実運用と同様になるように、処理を待機する。
【０１７３】
（保持キュー）
ここで、図１７、図１８にしたがって、図１５、図１６（Ｓ５１、Ｓ６２）で説明した、最終データを保持する処理の一例を説明する。アクセスモジュール１４は、読み出した単位データを格納したバッファを保持キューにつなぐ。図１７、図１８は、検証対象のプログラムと、アクセスモジュール１４と、第１のストレージ装置２０を示す。図１７、図１８において、図１で示したものと同一のものは、同一の記号で示す。
【０１７４】
図１７は、最終データをバッファに保持する処理の一例を説明する第１の図である。図１７は、Ｎ−１回目のテストＴｓの処理を例示する。アクセスモジュール１４は、検証対象のソフトウェア３０からの区分データｄｔの読み出し要求に応答して（ｂ１１）、バッファキューからバッファを取得する（ｂ１２）。アクセスモジュール１４は、第１のストレージ装置２０から読み出した区分データｄｔの各単位データを（ｂ１３〜ｂ１４）、取得したバッファに順次格納する。そして、アクセスモジュール１４は、バッファに格納した単位データを複写して、検証対象のソフトウェア３０を通知する（ｂ１５）。
【０１７５】
検証対象のソフトウェア３０への通知後、アクセスモジュール１４は、Ｎ回目のテストＴｓの最終データを保持したバッファについては解放せずに、保持キューｑｅにつなげる（ｂ１６、図１６の工程Ｓ５１）。また、最終データ以外の単位データを保持する各バッファについては、アクセスモジュール１４は、検証対象のソフトウェア３０への通知後（ｂ１５）、解放する。
【０１７６】
図１８は、最終データをバッファに保持する処理の一例を説明する第２の図である。図１８は、Ｎ回目のテストＴｓの処理を例示する。アクセスモジュール１４は、図１７と同様にして、検証対象のソフトウェア３０からの読み出し要求に応答して（ｂ２１）、第１のストレージ装置２０から単位データを読み出す。
【０１７７】
ただし、最終データについては、アクセスモジュール１４は、保持キューｑｅがつなぐバッファから最終データを読み出し（ｂ２２）、図１２で説明した最終データの変更処理を行う（ｂ２３）。そして、アクセスモジュール１４は、変更後の最終データを複写し、検証対象のソフトウェア３０に通知する（ｂ２４）。検証対象のソフトウェア３０への通知後、アクセスモジュール１４は、最終データを保持するバッファを開放する（ｂ２５、図１６の工程Ｓ６２）。
【０１７８】
図１７、図１８に示すように、保持キューｑｅを利用することによって、データのバッファへの格納処理の回数を抑制可能になる。格納処理回数を抑制可能になることにより、最終データの読み出し処理にかかる時間を短縮可能になる。これにより、テスト実行時のオーバヘッドを抑えることが可能になる。
【０１７９】
［ディスク読み込みルーチン（図１６の工程Ｓ４９）］
図１９は、図１６に示した、ディスク読み込みルーチンの処理の詳細を説明するフローチャート図である。ディスク読み込みルーチンは、第１のストレージ装置２０から、単位データを読み出す。
【０１８０】
Ｓ７１：アクセスモジュール１４は、第１のストレージ装置２０から読み込んだデータを保持するバッファを確保する。
【０１８１】
Ｓ７２：アクセスモジュール１４は、第１のストレージ装置２０から、図１６の工程Ｓ４８で算出した、ストレージ装置２０内の読み込みアドレスに位置する単位データを読み出す。
【０１８２】
Ｓ７３：アクセスモジュール１４は、読み出した単位データを、図１６の工程Ｓ４８で算出した、読み込みデータの格納アドレスに複写して書き込む。
【０１８３】
［先頭位置読み込みルーチン（図１６の工程Ｓ５２）］
図２０は、図１６に示した、先頭位置読み込みルーチンの処理の詳細を説明するフローチャート図である。先頭位置読み込みルーチンは、先頭位置データを保持するバッファｂｆ０（図８〜図１１）から、先頭位置データ「データ１」を読み出す。
【０１８４】
Ｓ８１：アクセスモジュール１４は、変数「ｉ」に基づいて、読み込みデータの格納アドレスを算出する。算出処理の詳細は、図１６の工程Ｓ４８で説明したとおりである。
【０１８５】
Ｓ８２：アクセスモジュール１４は、工程Ｓ８１で算出した読み込みデータ格納アドレスに、バッファｂｆ０に保持する先頭位置データを複写する。
【０１８６】
Ｓ８３：アクセスモジュール１４は、自プロセスをロックし、図７に示した入れ替えモジュール１５のプロセスのロックを解除する。先頭位置データをバッファｂｆ０から読み出すことにより、読み込み処理時間が短くなる。したがって、アクセスモジュール１４は、入れ替えモジュール１５に最終データの変更処理（図１２）を実行させる。
【０１８７】
Ｓ８４：アクセスモジュール１４は、入れ替えモジュール１５のプロセスの処理が終了するまで、待機する。
【０１８８】
［バッファ読み込みルーチン（図１６の工程Ｓ６０）］
図２１は、図１６に示した、バッファ読み込みルーチンの処理の詳細を説明するフローチャート図である。バッファ読み込みルーチンは、最終データを保持するバッファｂｆ１〜ｂｆ６（図８〜図１１）から、最終データを読み出す。
【０１８９】
Ｓ９１：アクセスモジュール１４は、図２０の工程Ｓ８３と同様にして、自プロセスをロックし、図７に示した入れ替えモジュール１５のプロセスのロックを解除する。
【０１９０】
Ｓ９２：アクセスモジュール１４は、図２０の工程Ｓ８４と同様にして、入れ替えモジュール１５のプロセスの処理が終了するまで、待機する。
【０１９１】
Ｓ９３：ロック状態の解除に応答して、アクセスモジュール１４は、変数「ｉ」に基づいて、読み込みデータ格納アドレスを算出する。算出処理の詳細は、図１６の工程Ｓ４８で説明したとおりである。
【０１９２】
Ｓ９４：アクセスモジュール１４は、工程Ｓ９３で算出した読み込みデータ格納アドレスに、入れ替えモジュール１５が加工した最終データを複写する。
【０１９３】
ここで、図２２〜図２４にしたがって、１回目〜３回目のテストＴｓ１〜Ｔｓ３のアクセスモジュール１４の処理を説明する。図２２〜図２４において、図８で示したものと同一のものは、同一の記号で示す。図２２〜図２４は、検証対象のソフトウェア３０と、アクセスモジュール１４と、第１のストレージ装置２０とを示す。
【０１９４】
（１回目のテスト）
図２２は、１回目のテストＴｓ１のアクセスモジュール１４の処理を模式的に説明する図である。１回目のテストＴｓ１では、アクセスモジュール１４は、予め、先頭位置データ「データ１」をバッファｂｆ０に、最終データ「データ８」をバッファｂｆ１に保持する。
【０１９５】
アクセスモジュール１４は、先頭位置データの読み出し時に、「データ１」をバッファｂｆ０から読み出すとともに（図１６のＳ５２）、入れ替えモジュール１５に、バッファｂｆ１が保持する最終データ「データ８」の加工処理を行わせる。また、アクセスモジュール１４は、２回目のテストＴｓ２の最終データ「データ１」を、バッファｂｆ２に保持しておく（Ｓ５１）。
【０１９６】
アクセスモジュール１４は、データ２〜データ７を、第１のストレージ装置２０から読み出す（Ｓ４９）。また、アクセスモジュール１４は、最終データ「データ８」の読み出し時に、最終データ「データ８」の加工処理を入れ替えモジュール１５に行わせ、最終データ「データ８」をバッファｂｆ１から読み出す（Ｓ６０）。
【０１９７】
（２回目のテスト）
図２３は、２回目のテストＴｓ２のアクセスモジュール１４の処理を模式的に説明する図である。２回目のテストＴｓ１では、アクセスモジュール１４は、先頭位置データ「データ１」をバッファｂｆ０に、最終データ「データ１」をバッファｂｆ２に保持する。
【０１９８】
アクセスモジュール１４は、データ２〜データ７を、第１のストレージ装置２０から読み出す（図１６のＳ４９）。また、アクセスモジュール１４は、３回目のテストＴｓ３の最終データ「データ２」を、バッファｂｆ３に保持しておく（Ｓ５１）。アクセスモジュール１４は、最終データ「データ１」の読み出し時に、最終データ「データ１」の加工処理を入れ替えモジュール１５に行わせ、最終データ「データ１」をバッファｂｆ２から読み出す（Ｓ６０）。
【０１９９】
（３回目のテスト）
図２４は、３回目のテストＴｓ３のアクセスモジュール１４の処理を模式的に説明する図である。１回目、２回目のテストＴｓ１、Ｔｓ２と同様にして、アクセスモジュール１４は、先頭位置データ「データ１」をバッファｂｆ０に保持する。また、最終データ「データ２」をバッファｂｆ３に保持する。
【０２００】
アクセスモジュール１４は、アクセスモジュール１４は、データ３〜データ７を、第１のストレージ装置２０から読み出す（図１６のＳ４９）。また、アクセスモジュール１４は、３回目のテストＴｓ３の最終データ「データ３」を、バッファｂｆ４に保持しておく（Ｓ５１）。
【０２０１】
また、アクセスモジュール１４は、先頭位置データの読み出し時に、「データ１」をバッファｂｆ０から読み出すとともに（Ｓ５２）、入れ替えモジュール１５に、バッファｂｆ３が保持する最終データ「データ２」の加工処理を行わせる。また、アクセスモジュール１４は、最終データ「データ２」の読み出し時に、最終データ「データ２」の加工処理を入れ替えモジュール１５に行わせ、最終データ「データ２」をバッファｂｆ３から読み出す（Ｓ６０）。
【０２０２】
［ディスク書き込みルーチン（図１６の工程Ｓ６１）］
図２５は、図１６に示した、ディスク書き込みルーチンの処理の詳細を説明するフローチャート図である。ドライバプログラム１０は、テストの証拠として、各テストＴｓで入力したテストデータＤＴを記録する。ただし、前述したとおり、本実施の形態におけるテストデータＤＴの容量は大きい。したがって、テストデータＤＴ全てを記録すると、大容量のストレージ装置が必要となってしまう。また、テストデータＤＴの記録処理に時間がかかり、テスト実行時のオーバヘッドになり得る。
【０２０３】
本実施の形態では、テストデータＤＴが有する単位データのリストはテストＴｓ間で同様であるが、単位データの読み出し順及び最終データの内容はテストＴｓ間で異なる。したがって、本実施の形態におけるドライバプログラム１０は、最終データが示す単位データ、及び、変更後の最終データの内容を、テストＴｓのエビデンスとして記憶する。
【０２０４】
テストの実行者は、エビデンスとして記憶した情報に基づいて、テストデータＤＴを復元することができる。具体的に、テストの実行者は、最終データが示す単位データに基づいて、テストＴｓの各単位データの読み出し順を識別できる。また、テストの実行者は、最終データの内容に基づいて、最終データの変更内容を識別できる。
【０２０５】
このように、本実施の形態におけるドライバプログラム１０は、テストデータＤＴを復元可能にしながら、エビデンスとして記録するデータの容量を抑えることができる。また、記憶対象のデータの容量が小さいことから、ドライバプログラム１０は、エビデンスの記録処理によって生じるオーバヘッドを抑えることができる。
【０２０６】
ここで、図２６、図２７にしたがって、エビデンスの記録方式を説明する。図２６、図２７は、図２４に示した３回目のテストＴｓ３のエビデンスを記録する場合を例示する。
【０２０７】
図２６は、第１の方法によるエビデンスの記録を模式的に説明する図である。図２６の例では、ディスク書き込みルーチンは、最終データ「データ２」の第１のストレージ装置２０上のアドレス情報（アドレスＡ）、バッファｂｆ３が保持する「データ２」の内容を含むエビデンスファイルｅｖを、第２のストレージ装置４０に記録する。
【０２０８】
図２７は、第２の方法によるエビデンスの記録を模式的に説明する図である。図２７の例では、ディスク書き込みルーチンは、最終データ「データ２」の第１のストレージ装置２０上のアドレス情報（アドレスＡ）のみを記録する。アドレス情報のサイズは小さい。したがって、ディスク書き込みルーチンは、各テストＴｓのアドレス情報（アドレスＡ、アドレスＢ）を情報処理装置１００のＲＡＭ２０１（図６）に保持してもよい。または、ディスク書き込みルーチンは、各テストＴｓのアドレス情報を含むエビデンスファイルｅｖを、不揮発性メモリ２０２に記憶してもよい。
【０２０９】
図２５のディスク書き込みルーチンのフローチャート図に戻る。図２５のフローチャート図は、図２６に示した第１の方法に対応する。
【０２１０】
Ｓ１０１：アクセスモジュール１４は、保持キュー（図１７、図１８）がつなぐバッファ（図８〜図１１のバッファｂｆ１〜ｂｆ６）が保持する単位データ（最終データ）の、第１のストレージ装置２０内のアドレス（位置）情報を取得する。
【０２１１】
Ｓ１０２：アクセスモジュール１４は、テストＴｓの回数を示す変数「TESTNUM」、工程Ｓ１０１で取得したアドレス情報、及び、最終データの内容を含むエビデンスファイルｅｖを、第２のストレージ装置４０に書き込む。
【０２１２】
［ウェイトルーチン（図１６の工程Ｓ６８）］
図２８は、図１６に示した、ウェイトルーチンの処理を説明するフローチャート図である。
【０２１３】
Ｓ１１１：アクセスモジュール１４は、現在の時刻「Ｅ」（終了時刻）を取得する。
【０２１４】
Ｓ１１２：アクセスモジュール１４は、待機する時間（待機時間）を算出する。待機時間は、パラメータファイルｐｆが有する所要時間（「８５３ｍｓｅｃ」）から、処理時間（工程Ｓ１１１で取得した終了時刻「Ｅ」−開始時刻「Ｓ」）を減算した時間である。つまり、待機時間は、第１のストレージ装置２０から、SU回、単位データを読み出す場合の所要時間から、実際に、アクセスモジュール１４がSU回の単位データの読み出し処理に要した処理時間を減算した差分時間を示す。
【０２１５】
Ｓ１１３：アクセスモジュール１４は、工程Ｓ１１２で算出した待機時間分、処理を待機する。先頭位置データ及び最終データをバッファから読み出すことによって、テストデータＤＴの読み出し処理時間を短縮可能になる。これにより、テストデータＤＴの読み出し処理が、実運用より早くなる場合がある。したがって、ウェイトルーチンは、読み出し処理時間が、実運用の読み出し処理の所要時間と一致するように、処理を待機する。
【０２１６】
つまり、アクセスモジュール１４は、先頭位置データ及び最終データをバッファから読み出し最終データを変更する場合の区分データｄｔの読み出し時間が、当該データを第１のストレージ装置２０から読み出す場合の読み出し時間に満たない場合、処理を待機する。これにより、ドライバプログラム１０は、検証対象のソフトウェア３０への読み出したデータの通知時間を、実際の運用時と同一にすることができる。したがって、ドライバプログラム１０は、検証対象のソフトウェア３０をより高精度に行うことができる。
【０２１７】
［入れ替えモジュール］
図２９は、図７に示した入れ替えモジュール１５の処理を説明するフローチャート図である。図２９に示す入れ替え定義テーブルｔｂは、図１２と同様である。
【０２１８】
Ｓ１２１：入れ替えモジュール１５は、数式「（TESTNUM−１）÷PATTERN_SUの剰余＋１」にしたがって、番号を算出する。例えば、変数「TESTNUM」が値「１」の場合、即ち、１回目のテストＴｓの場合、番号は、値「１」である。
【０２１９】
Ｓ１２２：入れ替えモジュール１５は、入れ替え定義テーブルｔｂの情報を参照して、工程Ｓ１２１で算出した番号と一致するパターン番号（図１２のｃｄ１）の情報を読み出す。具体的に、入れ替えモジュール１５は、入れ替え数（ｃｄ３）、及び、入れ替え対象のレコード情報（ｃｄ４）を取得する。また、番号が「１」の場合、入れ替えモジュール１５は、例えば、先頭位置データの読み出し時にはパターン番号「Ｎｏ１−１」の情報（ｃｄ１０）を読み出し、最終データの読み出し時にはパターン番号「Ｎｏ１−２」の情報（ｃｄ１１）を読み出す。
【０２２０】
Ｓ１２３：入れ替えモジュール１５は、入れ替え数を変数「REPLACE_NUM」にセットする。図１２に示す入れ替え定義テーブルｔｂによると、パターン番号「１」（「Ｎｏ１−１」）の入れ替え数は値「３」である。入れ替え数は、１つ分の単位データをバッファから読み出すことによる短縮時間内で入れ替え可能なレコード数である。入れ替え数の算出処理については、図３３、図３４にしたがって後述する。
【０２２１】
Ｓ１２４：入れ替えモジュール１５は、保持キューｑｅ（図１７）から、最終データを保持するバッファ（図８〜図１１のバッファｂｆ１〜ｂｆ６）のアドレスを取得し、変数「ADDRESS」にセットする。
【０２２２】
Ｓ１２５：入れ替えモジュール１５は、入れ替え数のカウンターを示す変数「ｋ」を、値「１」に初期化する。
【０２２３】
Ｓ１２６：入れ替えモジュール１５は、変数「Ｌ１」及び変数「Ｌ２」に、入れ替える対象のレコード（行）をセットする。図１２に示す入れ替え定義テーブルｔｂによると、入れ替える対象のレコードは、レコード１とレコード５、レコード２とレコード３、及び、レコード８とレコード１０である（図１２のｃｄ４）。したがって、入れ替えモジュール１５は、まず、変数「Ｌ１」にレコード１を、変数「Ｌ２」にレコード５をセットする。
【０２２４】
Ｓ１２７：入れ替えモジュール１５は、変数「ADDRESS」が示すバッファ上で、変数「Ｌ１」と、変数「Ｌ２」が示すレコードの内容を入れ替える。つまり、入れ替えモジュール１５は、レコード１とレコード５の位置を入れ替える。
【０２２５】
Ｓ１２８：入れ替えモジュール１５は、変数「ｋ」の値をインクリメントする。
【０２２６】
Ｓ１２９：入れ替えモジュール１５は、変数「ｋ」の値が、変数「REPLACE_NUM」を超えるか否かを判定する。つまり、入れ替えモジュール１５は、工程Ｓ１２３でセットした入れ替え数分のレコードの入れ替え処理が完了したか否かを判定する。変数「ｋ」の値が、変数「REPLACE_NUM」以下の場合（Ｓ１２９のＮｏ）、即ち、入れ替え数分の入れ替え処理が完了していない場合、入れ替えモジュール１５は、工程Ｓ１２６〜Ｓ１２８の処理を繰り返す。
【０２２７】
Ｓ１３０：一方、変数「ｋ」の値が、変数「REPLACE_NUM」を超える場合（Ｓ１２９のＹｅｓ）、入れ替え数分の入れ替え処理が完了したことを示す。したがって、入れ替えモジュール１５は、自プロセスをロックし、アクセスモジュール１４のロック状態を解除する。
【０２２８】
本実施の形態におけるアクセスモジュール１４は、先頭位置データ及び最終データをバッファから読み出す場合（図２０、図２１）、１回のテストＴｓ内で、２回、入れ替えモジュール１５のプロセスを実行する。一方、２回目のテストＴｓ２（図８）では、最終データがデータ１を示すことにより、先頭位置データと最終データがともにデータ１を示す。
【０２２９】
したがって、アクセスモジュール１４は、１回目、３回目のテストＴｓ１、Ｔｓでは、入れ替えモジュール１５のプロセスを２回実行するのに対し、２回目のテストＴｓ２では入れ替えモジュール１５のプロセスを１回実行する。即ち、２回目のテストＴｓ２における、最終データが有するレコードの入れ替え数は、１回目、３回目のテストＴｓ１、Ｔｓ３に対して半数となる。これにより、テストデータＤＴの読み出し要求に対する読み込みデータの通知を、実運用と同一のタイミングにすることが可能になる。
【０２３０】
［パラメータ生成モジュール］
図３０〜図３４にしたがって、パラメータ生成モジュール１１の処理を説明する。パラメータ生成モジュール１１は、テストを実行する前に、予め、図６、図７に示すパラメータファイルｐｆを生成しておく。パラメータファイルｐｆは、所要時間、余裕時間、入れ替え数等のパラメータを有する。
【０２３１】
図３０にしたがって、パラメータ生成モジュール１１の所要時間の取得処理を説明する。また、図３１、図３２にしたがって、パラメータ生成モジュール１１の余裕時間の取得処理を説明する。また、図３３、図３４にしたがって、パラメータ生成モジュール１１の入れ替え数の算出処理を説明する。
【０２３２】
（所要時間）
図３０は、図７に示した、パラメータ生成モジュール１１の所要時間の取得処理を説明するフローチャート図である。所要時間は、区分データｄｔの読み込み処理にかかる所要時間を示す。
【０２３３】
Ｓ１３１：パラメータ生成モジュール１１は、所要時間の計測回数のカウンターを示す変数「ｉ」を、値「１」に初期化する。
【０２３４】
Ｓ１３２：パラメータ生成モジュール１１は、現在時刻「Ｓ」（開始時刻）を取得する。
【０２３５】
Ｓ１３３：パラメータ生成モジュール１１は、単位データの読み込み回数を示す変数「ｊ」を、値「１」に初期化する。
【０２３６】
Ｓ１３４：パラメータ生成モジュール１１は、第１のストレージ装置２０が記憶する単位データの読み込み処理を、アクセスモジュール１４に指示する。
【０２３７】
Ｓ１３５：読み込み処理後、パラメータ生成モジュール１１は、変数「ｊ」をインクリメントする。
【０２３８】
Ｓ１３６：パラメータ生成モジュール１１は、変数「ｊ」の値が、変数「SU」の値を超えるか否かを判定する。つまり、パラメータ生成モジュール１１は、区分データｄｔの読み出し処理が完了したか否かを判定する。変数「ｊ」の値が変数「SU」の値以下の場合（Ｓ１３６のＮｏ）、即ち、区分データｄｔの読み込み処理が完了していない場合、パラメータ生成モジュール１１は、工程Ｓ１３４、Ｓ１３５の処理を繰り返す。
【０２３９】
Ｓ１３７：変数「ｊ」の値が変数「SU」の値を超える場合（Ｓ１３６のＹｅｓ）、即ち、区分データｄｔの読み出し処理が完了した場合、現在時刻「Ｅ」（終了時刻）を取得する。
【０２４０】
Ｓ１３８：パラメータ生成モジュール１１は、工程Ｓ１３７で取得した終了時刻「Ｅ」から、工程Ｓ１３２で取得した開始時刻「Ｓ」を減算し、ｉ回目の区分データｄｔの読み出し処理の所要時間［ｉ］を算出し、記憶する。
【０２４１】
Ｓ１３９：パラメータ生成モジュール１１は、変数「ｉ」の値が、予め定めた計測回数を示す変数「Ｎ」の値を超えたか否かを判定する。変数「ｉ」の値が変数「Ｎ」の値以下の場合（Ｓ１３９のＮｏ）、パラメータ生成モジュール１１は、工程Ｓ１３２〜工程Ｓ１３８の処理を繰り返す。
【０２４２】
Ｓ１４０：一方、変数「ｉ」の値が変数「Ｎ」の値を超える場合（Ｓ１３９のＹｅｓ）、パラメータ生成モジュール１１は、Ｎ回分の所要時間の平均値を算出し、所要時間として出力する。
【０２４３】
Ｓ１４１：パラメータ生成モジュール１１は、工程Ｓ１４０で算出した所要時間に基づいてテストの実行者が指定した所要時間を、パラメータファイルｐｆに格納する。
【０２４４】
（余裕時間）
図３１は、図７に示した、パラメータ生成モジュール１１の余裕時間の取得処理を説明するフローチャート図である。余裕時間は、アクセスモジュール１４が、１つの単位データを、第１のストレージ装置２０から読み出さないことによって短縮するＣＰＵ実行時間を示す。
【０２４５】
Ｓ１５１：パラメータ生成モジュール１１の指示プログラムは、カウンターを示す変数「ｉ」を値「１」に初期化する。
【０２４６】
Ｓ１５２：指示プログラムは、自プロセスのＣＰＵ実行時間「Ｓ」を取得する。ＣＰＵ実行時間「Ｓ」は、計測前の累積時間を示す。
【０２４７】
Ｓ１５３：指示プログラムは、図３２で後述する、実行プログラムを呼び出す。実行プログラムは、１つの単位データの、第１のストレージ装置２０からの読み込み処理の前処理、及び、単位データの読み出し後の第１のストレージ装置２０からの割り込み後処理を実行する。
【０２４８】
Ｓ１５４：指示プログラムは、実行プログラムが完了すると、自プロセスのＣＰＵ実行時間「Ｅ」を取得する。ＣＰＵ実行時間「Ｅ」は、計測後の累積時間を示す。
【０２４９】
Ｓ１５５：指示プログラムは、変数「ｉ」をインクリメントする。
【０２５０】
Ｓ１５６：指示プログラムは、値「ｉ」の値が、予め定めた計測回数を示す変数「Ｎ」の値を超えたか否かを判定する。変数「ｉ」の値が変数「Ｎ」の値以下の場合（Ｓ１５６のＮｏ）、パラメータ生成モジュール１１は、工程Ｓ１５２〜工程Ｓ１５５の処理を繰り返す。
【０２５１】
Ｓ１５７：変数「ｉ」の値が変数「Ｎ」の値を超える場合（Ｓ１５６のＹｅｓ）、指示プログラムは、工程Ｓ１５４で取得したＣＰＵ実行時間「Ｅ」から、工程Ｓ１５１で取得したＣＰＵ実行時間「Ｓ」を減算した時間を、余裕時間として算出する。また、指示プログラムは、Ｎ回分の余裕時間の平均値を算出し、余裕時間として出力する。
【０２５２】
Ｓ１５８：指示プログラムは、工程Ｓ１５７で算出した余裕時間を、図６、図７に示したパラメータファイルｐｆに格納する。図３１の例における余裕時間は、時間「８５μｓｅｃ（microsecond）」である。
【０２５３】
図３２は、図３１で説明した指示プログラムが呼び出す（図３１のＳ１５２）、実行プログラムの処理の詳細を説明するフローチャート図である。
【０２５４】
Ｓ１６１：実行プログラムは、第１のストレージ装置２０の読み込み処理の前処理を実行する。前処理は、読み込んだデータを保持するバッファの獲得処理や、第１のストレージ装置２０への読み込み指示処理等を含む。
【０２５５】
Ｓ１６２：実行プログラムは、第１のストレージ装置２０からの読み出し完了割り込み後の処理を実行する。割り込み後の処理は、バッファの返却処理や、検証対象のソフトウェア３０が指定したアドレスへのバッファの内容の複写処理等を含む。
【０２５６】
（入れ替え数の取得）
図３３は、図３１、図３２のフローチャート図で取得した余裕時間を使用して入れ替え可能なレコード数（入れ替え数）の算出処理を説明するフローチャート図である。
【０２５７】
Ｓ１７１：パラメータ生成モジュール１１の入れ替え指示プログラムは、図７に示したパラメータファイルｐｆから、図３１、図３２のフローチャート図で取得した余裕時間「８５μｓｅｃ」を取得する。
【０２５８】
Ｓ１７２：入れ替え指示プログラムは、入れ替え数を示す変数「ｉ」を、値「１」に初期化する。
【０２５９】
Ｓ１７３：入れ替え指示プログラムは、自プロセスのＣＰＵ実行時間「Ｓ」を取得する。ＣＰＵ実行時間「Ｓ」は、計測前の累積時間を示す。
【０２６０】
Ｓ１７４：入れ替え指示プログラムは、パラメータに変数「ｉ」を指定し、図３４に示す、入れ替え実行プログラムを呼び出す。入れ替え実行プログラムは、変数「ｉ」に示す入れ替え数のレコードの入れ替え処理を実行する。
【０２６１】
Ｓ１７５：入れ替え指示プログラムは、自プロセスのＣＰＵ実行時間「Ｅ」を取得する。ＣＰＵ実行時間「Ｅ」は、計測後の累積時間を示す。
【０２６２】
Ｓ１７６：入れ替え指示プログラムは、ＣＰＵ実行時間「Ｅ」からＣＰＵ実行時間「Ｓ」を減算した実行時間を算出する。
【０２６３】
Ｓ１７７：入れ替え指示プログラムは、変数「ｉ」をインクリメントする。
【０２６４】
Ｓ１７８：入れ替え指示プログラムは、工程Ｓ１７６で算出した実行時間が、工程Ｓ１７１で取得した余裕時間を超えるか否かを判定する。実行時間が余裕時間以下の場合（Ｓ１７８のＮｏ）、変数「ｉ」に示す入れ替え数より多くのレコードを入れ替え可能であることを示す。したがって、入れ替え指示プログラムは、実行時間が余裕時間を超えるまで（Ｓ１７８のＹｅｓ）変数「ｉ」をインクリメントし、工程Ｓ１７３〜工程Ｓ１７７の処理を繰り返す。
【０２６５】
Ｓ１７９：一方、実行時間が余裕時間を超える場合（Ｓ１７８のＹｅｓ）、余裕時間内で、変数「ｉ」が示す入れ替え数のレコードの書き換え処理を完了できないことを示す。したがって、入れ替え指示プログラムは、変数「ｉ」の値を出力する。
【０２６６】
Ｓ１８０：入れ替え指示プログラムは、変数「ｉ」の値に基づいて、テストの実行者が指定した入れ替え数を、図７に示したパラメータファイルｐｆに格納する。図３３の例では、入れ替え数は、２０個である。
【０２６７】
図３４は、図３３で説明した入れ替え実行プログラムの処理を説明するフローチャート図である。
【０２６８】
Ｓ１８１：入れ替え実行プログラムは、図３３に示す、入れ替え指示プログラムがパラメータとして指定した値「ｉ」を、変数「Ｌ」にセットする。
【０２６９】
Ｓ１８２：入れ替え実行プログラムは、単位データのサイズに対応する変数「BUF_SIZE」のサイズ分のメモリ（バッファ）を獲得し、獲得したバッファにランダム値をセットする。
【０２７０】
Ｓ１８３：入れ替え実行プログラムは、バッファが有するレコードの数を取得する。
【０２７１】
Ｓ１８４：入れ替え実行プログラムは、工程Ｓ１８３で取得したレコード数（１〜レコード数）から、ランダムに変数「Ｌ」個のペアを取得する。
【０２７２】
Ｓ１８５：入れ替え実行プログラムは、変数「ｊ」を値「１」で初期化する。
【０２７３】
Ｓ１８６：入れ替え実行プログラムは、工程Ｓ１８３で取得したＬ個のペアのうち、変数「ｊ」番目のペアにしたがって、バッファが有する２つのレコードの位置を入れ替える。
【０２７４】
Ｓ１８７：入れ替え実行プログラムは、変数「ｊ」の値をインクリメントする。
【０２７５】
Ｓ１８８：入れ替え実行プログラムは、変数「ｊ」が変数「Ｌ」を超えるまで（Ｓ１８８のＹｅｓ）、工程Ｓ１８６、工程Ｓ１８７の処理を繰り返す。
【０２７６】
［他の実施の形態］
上記の実施の形態では、先頭位置データ及び最終データをバッファｂｆ０〜ｂｆ６から読み出すことによる短縮時間内で、最終データの変更を行う場合を例示した。ただし、ドライバプログラム１０は、短縮時間を超過して、最終データの変更処理を行ってもよい。これにより、ドライバプログラム１０は、テストデータのバリエーションをさらに増加させることができる。短縮時間を超過したとしても、テストデータＤＴの読み出し時間は、短縮時間によって低減可能になる。したがって、ドライバプログラム１０は、オーバヘッドを抑制しながらテストデータのバリエーションを増加させることができる。
【０２７７】
また、上記の実施の形態では、最終データの変更処理として、最終データが有するレコードの位置を入れ替える処理を例示した。ドライバプログラム１０は、さらに、所定のデータやランダムデータにしたがって、最終データを上書きしてもよい。ドライバプログラム１０は、所定のデータやランダムデータ、及び、上書き対象のレコードの指定を有する入れ替え定義テーブルｔｂに基づいて、最終データを変更する。これにより、ドライバプログラム１０は、最終データのバリエーションをさらに増加させることができる。
【０２７８】
また、上記の実施の形態では、テストデータＤＴの読み出し開始位置を１つの単位データのサイズ分、シフトする場合を例示した。ただし、この例に限定されるものではない。ドライバプログラム１０は、例えば、テストＴｓごとに、５つの単位データのサイズ分、テストデータＤＴの読み出し開始位置をシフトしてもよい。
【０２７９】
また、このとき、ドライバプログラム１０は、例えば、第１のストレージ装置２０における所定位置の５つの単位データ、または、所定の読み出し順の５つの単位データをバッファに保持しておいてもよい。つまり、ドライバプログラム１０は、例えば、各テストＴｓで、所定数の単位データをバッファリングする。これにより、ドライバプログラム１０は、テストデータＤＴの読み出し処理時間をさらに短縮することができる。
【０２８０】
また、ドライバプログラム１０は、例えば、テストデータＤＴが５００個の単位データを有する場合、１００番目、２００番目、３００番目等の単位データをバッファに保持してもよい。つまり、ドライバプログラム１０は、テストデータＤＴのうち、所定の規則に沿った単位データを、バッファに保持してもよい。
【０２８１】
また、上記の実施の形態では、テストプログラム５０がテストの実行を制御する場合を例示した。ただし、この例に限定されるものではなく、テストプログラム５０は必ずしも必要ではない。
【０２８２】
以上の実施の形態をまとめると、次の付記のとおりである。
【０２８３】
（付記１）
Ｎ−１（Ｎ≧２）回目の動作検証の際に、レコード群を記憶する第１の記憶部から、第１の読み出し開始位置を開始位置として第１のレコード読み出し単位で順次レコードを読み出して、前記動作検証の対象となるソフトウェアによる処理対象として順次出力し、
Ｎ回目の動作検証の際に、前記第１の読み出し開始位置を前記第１のレコード読み出し単位とは異なるレコード単位分シフトした第２の読み出し開始位置を開始位置として、前記第１の記憶部から、前記第１のレコード読み出し単位でレコードを読み出して、前記ソフトウェアによる処理対象として順次出力する、
処理をコンピュータに実行させるソフトウェア動作検証プログラム。
【０２８４】
（付記２）
付記１において、
前記Ｎ−１回目、前記Ｎ回目の動作検証の際の前記出力は、さらに、前記第１の記憶部に記憶された前記レコード群のうち、前記第１の読み出し開始位置の第１のレコードを第２の記憶部に保持し、読み出し対象の前記第１のレコード読み出し単位のレコードが前記第１のレコードを含む場合に、前記第１のレコードを前記第２の記憶部から読み出し、前記第１のレコード以外のレコードを前記第１の記憶部から読み出す、
ソフトウェア動作検証プログラム。
【０２８５】
（付記３）
付記１または２において、
前記Ｎ回目の動作検証の際の前記出力は、さらに、前記レコード群のうち、所定の順番に読み出す第２のレコードが含む、複数の部分レコードの位置を入れ替え、前記第２のレコードを変更する、
ソフトウェア動作検証プログラム。
【０２８６】
（付記４）
付記３において、
前記Ｎ−１回目の動作検証の際の前記出力は、さらに、前記第１のレコード読み出し単位で順次読み出した前記レコード群のうち、前記Ｎ回目の動作検証の際に前記所定の順番に読み出す第２のレコードを前記第２の記憶部に記憶し、
前記Ｎ回目の動作検証の際の前記出力は、さらに、読み出し対象の前記第１のレコード読み出し単位のレコードが前記第２のレコードを含む場合に、前記第２のレコードを前記第２の記憶部から読み出し、前記第２のレコード以外のレコードを前記第１の記憶部から読み出す、
ソフトウェア動作検証プログラム。
【０２８７】
（付記５）
付記４において、
前記Ｎ−１回目の動作検証の際の前記出力は、前記Ｎ回目の動作検証の際に最後に読み出す第２のレコードを前記第２の記憶部に記憶し、
前記Ｎ回目の動作検証の際の前記出力は、読み出し対象の前記第１のレコード読み出し単位のレコードが、前記最後に読み出す前記第２のレコードを含む場合に、前記第２のレコードを前記第２の記憶部から読み出し、前記第２のレコード以外のレコードを前記第１の記憶部から読み出す、
ソフトウェア動作検証プログラム。
【０２８８】
（付記６）
付記４または５において、
前記Ｎ回目の動作検証の際の前記出力は、前記第１、第２のレコードを前記第１の記憶部から読み出す第１の処理時間と、前記第１、第２のレコードを前記第２の記憶部から読み出す第２の処理時間との差分時間内に前記第２のレコードを変更する、
ソフトウェア動作検証プログラム。
【０２８９】
（付記７）
付記３乃至６のいずれかにおいて、
前記Ｎ回目の動作検証の際の前記出力は、前記第１、第２のレコードを前記第２の記憶部から読み出し前記第２のレコードを変更する場合の、前記第１のレコード読み出し単位のレコードの読み出し処理時間が、前記第１、第２のレコードを前記第１の記憶部から読み出す場合の、前記第１のレコード読み出し単位のレコードの読み出し処理時間に満たない場合、処理を待機する、
ソフトウェア動作検証プログラム。
【０２９０】
（付記８）
付記３乃至７のいずれかにおいて、
前記Ｎ−１回目、前記Ｎ回目の動作検証の際の前記出力は、さらに、前記第２のレコードの前記第１の記憶部内の位置情報を出力する、
ソフトウェア動作検証プログラム。
【０２９１】
（付記９）
付記８において、
前記Ｎ−１回目、前記Ｎ回目の動作検証の際の前記出力は、前記第２のレコードの前記第１の記憶部内の位置情報に加えて、前記第２のレコードを出力する、
ソフトウェア動作検証プログラム。
【０２９２】
（付記１０）
処理部が、Ｎ−１（Ｎ≧２）回目の動作検証の際に、レコード群を記憶する第１の記憶部から、第１の読み出し開始位置を開始位置として第１のレコード読み出し単位で順次レコードを読み出して、前記動作検証の対象となるソフトウェアによる処理対象として順次出力し、
処理部が、Ｎ回目の動作検証の際に、前記第１の読み出し開始位置を前記第１のレコード読み出し単位とは異なるレコード単位分シフトした第２の読み出し開始位置を開始位置として、前記第１の記憶部から、前記第１のレコード読み出し単位でレコードを読み出して、前記ソフトウェアによる処理対象として順次出力する、
ソフトウェア動作検証方法。
【０２９３】
（付記１１）
付記１において、
前記Ｎ−１回目、前記Ｎ回目の動作検証の際の前記出力は、さらに、前記第１の記憶部に記憶された前記レコード群のうち、前記第１の読み出し開始位置の第１のレコードを第２の記憶部に保持し、読み出し対象の前記第１のレコード読み出し単位のレコードが前記第１のレコードを含む場合に、前記第１のレコードを前記第２の記憶部から読み出し、前記第１のレコード以外のレコードを前記第１の記憶部から読み出す、
ソフトウェア動作検証方法。
【０２９４】
（付記１２）
付記１０または１１において、
前記Ｎ回目の動作検証の際の前記出力は、さらに、前記レコード群のうち、所定の順番に読み出す第２のレコードが含む、複数の部分レコードの位置を入れ替え、前記第２のレコードを変更する、
ソフトウェア動作検証方法。
【０２９５】
（付記１３）
付記１２において、
前記Ｎ−１回目の動作検証の際の前記出力は、さらに、前記第１のレコード読み出し単位で順次読み出した前記レコード群のうち、前記Ｎ回目の動作検証の際に前記所定の順番に読み出す第２のレコードを前記第２の記憶部に記憶し、
前記Ｎ回目の動作検証の際の前記出力は、さらに、読み出し対象の前記第１のレコード読み出し単位のレコードが前記第２のレコードを含む場合に、前記第２のレコードを前記第２の記憶部から読み出し、前記第２のレコード以外のレコードを前記第１の記憶部から読み出す、
ソフトウェア動作検証方法。
【０２９６】
（付記１４）
付記１３において、
前記Ｎ−１回目の動作検証の際の前記出力は、前記Ｎ回目の動作検証の際に最後に読み出す第２のレコードを前記第２の記憶部に記憶し、
前記Ｎ回目の動作検証の際の前記出力は、読み出し対象の前記第１のレコード読み出し単位のレコードが、前記最後に読み出す前記第２のレコードを含む場合に、前記第２のレコードを前記第２の記憶部から読み出し、前記第２のレコード以外のレコードを前記第１の記憶部から読み出す、
ソフトウェア動作検証方法。
【０２９７】
（付記１５）
付記１３または１４において、
前記Ｎ回目の動作検証の際の前記出力は、前記第１、第２のレコードを前記第１の記憶部から読み出す第１の処理時間と、前記第１、第２のレコードを前記第２の記憶部から読み出す第２の処理時間との差分時間内に前記第２のレコードを変更する、
ソフトウェア動作検証方法。
【０２９８】
（付記１６）
レコード群を記憶する第１の記憶部と、
前記第１の記憶部から読み出した前記レコード群を記憶する第２の記憶部と、
Ｎ−１（Ｎ≧２）回目の動作検証の際に、レコード群を記憶する第１の記憶部から、第１の読み出し開始位置を開始位置として第１のレコード読み出し単位で順次レコードを読み出して前記第２の記憶部に記憶し、前記第２の記憶部の前記第１のレコード読み出し単位のレコードを、前記動作検証の対象となるソフトウェアによる処理対象として順次出力し、Ｎ回目の動作検証の際に、前記第１の読み出し開始位置を前記第１のレコード読み出し単位とは異なるレコード単位分シフトした第２の読み出し開始位置を開始位置として、前記第１の記憶部から、前記第１のレコード読み出し単位でレコードを読み出して前記第２の記憶部に記憶し、前記第２の記憶部の前記第１のレコード読み出し単位のレコードを、前記ソフトウェアによる処理対象として順次出力する処理部と、
を有するソフトウェア動作検証装置。
【０２９９】
（付記１７）
付記１６において、
前記第２の記憶部は、前記第１の記憶部に記憶された前記レコード群のうち、前記第１の読み出し開始位置の第１のレコードを記憶し、
前記処理部は、前記Ｎ−１回目、前記Ｎ回目の動作検証の際に、さらに、読み出し対象の前記第１のレコード読み出し単位のレコードが前記第１のレコードを含む場合に、前記第１のレコードを前記第２の記憶部から読み出し、前記第１のレコード以外のレコードを前記第１の記憶部から読み出す、
ソフトウェア動作検証装置。
【０３００】
（付記１８）
付記１６または１７において、
前記処理部は、前記Ｎ回目の動作検証の際に、さらに、前記レコード群のうち、所定の順番に読み出す第２のレコードが含む、複数の部分レコードの位置を入れ替え、前記第２のレコードを変更する、
ソフトウェア動作検証装置。
【０３０１】
（付記１９）
付記１８において、
前記処理部は、前記Ｎ−１回目の動作検証の際に、さらに、前記第１のレコード読み出し単位で順次読み出した前記レコード群のうち、前記Ｎ回目の動作検証の際に前記所定の順番に読み出す第２のレコードを前記第２の記憶部に記憶し、前記Ｎ回目の動作検証の際に、さらに、読み出し対象の前記第１のレコード読み出し単位のレコードが前記第２のレコードを含む場合に、前記第２のレコードを前記第２の記憶部から読み出し、前記第２のレコード以外のレコードを前記第１の記憶部から読み出す、
ソフトウェア動作検証装置。
【０３０２】
（付記２０）
付記１９において、
前記処理部は、前記Ｎ−１回目の動作検証の際に、前記Ｎ回目の動作検証の際に最後に読み出す第２のレコードを前記第２の記憶部に記憶し、前記Ｎ回目の動作検証の際に、読み出し対象の前記第１のレコード読み出し単位のレコードが、前記最後に読み出す前記第２のレコードを含む場合に、前記第２のレコードを前記第２の記憶部から読み出し、前記第２のレコード以外のレコードを前記第１の記憶部から読み出す、
ソフトウェア動作検証装置。
【符号の説明】
【０３０３】
１００：情報処理装置、１０：ドライバプログラム、２０：第１のストレージ装置、３０：検証対象のソフトウェア、４０：第２のストレージ装置、５０：テストプログラム、６０：ＯＳ
【図１】
0006497058.tif 000002
【図２】
0006497058.tif 000003
【図３】
0006497058.tif 000004
【図４】
0006497058.tif 000005
【図５】
0006497058.tif 000006
【図６】
0006497058.tif 000007
【図７】
0006497058.tif 000008
【図８】
0006497058.tif 000009
【図９】
0006497058.tif 000010
【図１０】
0006497058.tif 000011
【図１１】
0006497058.tif 000012
【図１２】
0006497058.tif 000013
【図１３】
0006497058.tif 000014
【図１４】
0006497058.tif 000015
【図１５】
0006497058.tif 000016
【図１６】
0006497058.tif 000017
【図１７】
0006497058.tif 000018
【図１８】
0006497058.tif 000019
【図１９】
0006497058.tif 000020
【図２０】
0006497058.tif 000021
【図２１】
0006497058.tif 000022
【図２２】
0006497058.tif 000023
【図２３】
0006497058.tif 000024
【図２４】
0006497058.tif 000025
【図２５】
0006497058.tif 000026
【図２６】
0006497058.tif 000027
【図２７】
0006497058.tif 000028
【図２８】
0006497058.tif 000029
【図２９】
0006497058.tif 000030
【図３０】
0006497058.tif 000031
【図３１】
0006497058.tif 000032
【図３２】
0006497058.tif 000033
【図３３】
0006497058.tif 000034
【図３４】
0006497058.tif 000035