(57)【要約】【課題】検証精度の低下を抑制することを課題とする。【解決手段】検証装置は、記憶装置に対してデータの読み書き命令を実行するソフトウェアに、読み書き命令を含む所定の処理を実行させて、当該所定の処理実行時に、記憶装置への書き込み命令が行われ、かつ、該書き込み命令後に読出し命令が行われるデータを特定する情報を記憶部に記憶する。検証装置、情報を記憶部に記憶した後に所定の処理をソフトウェアに実行させた際に、当該所定の処理時に書き込み命令を受けたデータのうち、記憶部に記憶される情報に基づき特定されるデータを記憶装置に記憶する。【選択図】図２
2015184822.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに、
記憶装置に対してデータの読み書き命令を実行するソフトウェアに、前記読み書き命令を含む所定の処理を実行させて、当該所定の処理実行時に、前記記憶装置への書き込み命令が行われ、かつ、該書き込み命令後に読出し命令が行われるデータを特定する情報を記憶部に記憶し、
前記情報を前記記憶部に記憶した後に前記所定の処理を前記ソフトウェアに実行させた際に、当該所定の処理時に書き込み命令を受けたデータのうち、前記記憶部に記憶される情報に基づき特定されるデータを前記記憶装置に記憶する
処理を実行させることを特徴とする制御プログラム。
【請求項２】
前記ソフトウェアの検証に用いるテストデータを前記記憶装置に生成する生成処理をテスト用ソフトウェアに実行させて、当該生成処理時に、前記記憶部に記憶される情報に基づき特定されるデータに対して書き込み命令が実行される場合、前記書き込み命令の対象データを前記記憶装置に書き込む処理を前記コンピュータにさらに実行させることを特徴とする請求項１に記載の制御プログラム。
【請求項３】
前記記憶装置に記憶する処理は、前記所定の処理時に、前記記憶部に記憶される情報に基づき特定されるデータの領域に対する書き込み命令に対しては、当該書き込み命令の対象データを前記記憶装置に書き込んで書き込み結果を応答し、前記記憶部に記憶される情報に基づき特定されるデータ以外の領域に対する書き込み命令に対しては、書き込みの完了を応答することを特徴とする請求項１に記載の制御プログラム。
【請求項４】
前記記憶装置内で隣接する第１の領域と第２の領域に対して、前記第１の領域に対して書き込み命令または読出し命令を実行してから、前記第２の領域に対して書き込み命令または読出し命令の実行完了までにかかる第１の時間を測定し、
前記記憶装置内で所定の距離離れた第３の領域と第４の領域に対して、前記第３の領域に対して書き込み命令または読出し命令を実行してから、前記第４の領域に対して書き込み命令または読出し命令の実行完了までにかかる第２の時間を測定し、
前記第１の時間と前記第２の時間との差分時間を算出する処理を前記コンピュータにさらに実行させ、
前記記憶装置に記憶する処理は、前記書き込み命令または読出し命令を実行してから、前記差分時間経過後に応答することを特徴とする請求項３に記載の制御プログラム。
【請求項５】
前記記憶部に記憶する処理は、複数のソフトウェアに前記所定の処理を実行させて、各ソフトウェアによる前記所定の処理実行時に、前記記憶装置への書き込み命令が行われ、かつ、該書き込み命令後に読出し命令が行われるデータを特定する情報を前記記憶部に記憶し、
前記記憶装置に記憶する処理は、前記複数のソフトウェアに対して順に前記所定の処理を実行させる際に、実行対象のソフトウェアまたは未実行のソフトウェアが読み出すデータを特定する情報以外の情報を前記記憶部から削除してから実行することを特徴とする請求項１に記載の制御プログラム。
【請求項６】
前記記憶装置に記憶する処理、および、前記記憶部に記憶する処理は、検証処理を実行する検証プログラムを実行し、検証プログラムによって前記ソフトウェアに前記所定の処理を実行させることを特徴とする請求項１に記載の制御プログラム。
【請求項７】
コンピュータが、
記憶装置に対してデータの読み書き命令を実行するソフトウェアに、前記読み書き命令を含む所定の処理を実行させて、当該所定の処理実行時に、前記記憶装置への書き込み命令が行われ、かつ、該書き込み命令後に読出し命令が行われるデータを特定する情報を記憶部に記憶し、
前記情報を前記記憶部に記憶した後に前記所定の処理を前記ソフトウェアに実行させた際に、当該所定の処理時に書き込み命令を受けたデータのうち、前記記憶部に記憶される情報に基づき特定されるデータを前記記憶装置に記憶する
処理を実行することを特徴とする制御方法。
【請求項８】
記憶装置に対してデータの読み書き命令を実行するソフトウェアに、前記読み書き命令を含む所定の処理を実行させて、当該所定の処理実行時に、前記記憶装置への書き込み命令が行われ、かつ、該書き込み命令後に読出し命令が行われるデータを特定する情報を記憶部に記憶する第１格納部と、
前記情報を前記記憶部に記憶した後に前記所定の処理を前記ソフトウェアに実行させた際に、当該所定の処理時に書き込み命令を受けたデータのうち、前記記憶部に記憶される情報に基づき特定されるデータを前記記憶装置に記憶する第２格納部と
を有することを特徴とする制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、制御プログラム、制御方法および制御装置に関する。
【背景技術】
【０００２】
近年、ビックデータの時代となり、扱うデータ量が膨大になったことから、ＩＣＴ（Information  and  Communication  Technology）環境も大規模化し、特に大容量の記憶装置が普及している。ストレージやディスクなどの記憶装置は、データを記録、参照するものであり、記録するデータ量が増加すれば記録可能な領域が減少する。ビックデータを支えるＩＣＴ環境では、膨大なデータを格納するために、記憶装置を増設することが行われている。
【０００３】
ソフトウェアとしては、処理対象の数量が増加すると、線形的あるいは指数関数的に処理時間が増加する。また、扱うデータ量が小規模の場合には障害とならなかったことが、データ量の大規模化に伴って障害として顕在化することがある。
【０００４】
このため、ソフトウェア開発において、実際の運用時の環境と同じ大容量の記憶装置を利用した環境または記憶装置が大量に接続された環境で、ソフトウェアの障害を顕在化させる検証手法が知られている。
【０００５】
また、検証対象のソフトウェアが実行するデータアクセスに対して、予め定義した応答を返すことで、当該ソフトウェアを検証するシミュレーション手法が知られている。具体的には、記憶装置をシミュレートするシミュレータは、ＯＳ（オペレーティングシステム）に対するアクセスはそのままＯＳに依頼し、書き込み命令は正常終了させ、読み出し命令に対しては予め定義したデータを応答する。
【０００６】
また、シミュレータに疑似領域を用意し、実際のディスク上のアドレスと疑似領域をマッピングさせ、疑似領域でデータの読み出しや書き込みを制御するシミュレーション手法が知られている。具体的には、シミュレータは、書き込み命令を受け付けると、疑似領域にデータの書き込みを実行し、読み出し命令を受け付けた場合は疑似領域からデータを読み出して応答する。また、シミュレータは、擬似領域に空きがなくなった場合は、受け付けた書き込み命令に対して何も実行せずに処理を正常終了させ、擬似領域がカバーする以外の領域に対する読み出し命令を受け付けた場合は、予め定義したデータを応答する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００１−２２６０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、上記技術では、運用環境と同じ記憶容量の記憶装置を用意してソフトウェアの動作検証を実行するには検証コストが高く、記憶装置の記憶容量を削減してソフトウェアの動作検証を実行すると、検証精度が低下する。
【０００９】
例えば、実際の運用環境と同等のデータ量で検証する場合、記憶装置の記憶容量の増大を招き、検証コストの増加につながる。さらに、単に検証実行時に要する記憶容量が増加するだけでなく、その後の検証のためにデータを保持する際に要する記憶容量も増加する。一方で、データ量を縮小させた環境で検証を行った場合、実際の運用時のデータ構成とは異なる構成しか作れないため、実際の運用時で正常な動作を適切に担保することができない。また、予め定義した応答を返すシミュレーション手法では、データ量を縮小させる必要はないが、予め定義したデータしか応答できないので、実際の運用時での正常な動作を適切に担保することができない。
【００１０】
１つの側面では、検証精度の低下を抑制することができる制御プログラム、制御方法および制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
第１の案では、コンピュータに、記憶装置に対してデータの読み書き命令を実行するソフトウェアに、前記読み書き命令を含む所定の処理を実行させて、当該所定の処理実行時に、前記記憶装置への書き込み命令が行われ、かつ、該書き込み命令後に読出し命令が行われるデータを特定する情報を記憶部に記憶する処理を実行させる。コンピュータに、前記情報を前記記憶部に記憶した後に前記所定の処理を前記ソフトウェアに実行させた際に、当該所定の処理時に書き込み命令を受けたデータのうち、前記記憶部に記憶される情報に基づき特定されるデータを前記記憶装置に記憶する処理を実行させる。
【発明の効果】
【００１２】
１実施形態によれば、検証精度の低下を抑制することができる。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施例１に係る検証装置を説明する図である。
【図２】図２は、実施例１に係る検証装置の機能構成を示す機能ブロック図である。
【図３】図３は、リード領域テーブルに記憶される情報の例を示す図である。
【図４】図４は、ワークテーブルに記憶される情報の例を示す図である。
【図５】図５は、ワークファイルの生成を説明する図である。
【図６】図６は、リード領域を特定する処理の流れを示すフローチャートである。
【図７】図７は、リード領域の割合を算出する処理の流れを示すフローチャートである。
【図８】図８は、ワークファイルを生成する処理の流れを示すフローチャートである。
【図９】図９は、実施例１に係る検証処理の流れを示すフローチャートである。
【図１０】図１０は、実施例２に係るワークファイルの構成変更を説明する図である。
【図１１】図１１は、実施例２に係る検証装置の機能構成を示す機能ブロック図である。
【図１２】図１２は、使用期間テーブルを説明する図である。
【図１３】図１３は、使用期間を抽出する処理の流れを示すフローチャートである。
【図１４】図１４は、使用期間テーブルの生成処理の流れを示すフローチャートである。
【図１５】図１５は、使用期間テーブルの生成処理の流れを示すフローチャートである。
【図１６】図１６は、ワークファイルの構成を変更する処理の流れを示すフローチャートである。
【図１７】図１７は、実施例２に係るワークファイルの構成変更の具体例を説明する図である。
【図１８】図１８は、待ち時間を算出する処理の流れを示すフローチャートである。
【図１９】図１９は、待ち時間テーブルの例を示す図である。
【図２０】図２０は、ハードウェア構成例を示す図である。
【発明を実施するための形態】
【００１４】
以下に、本願の開示する制御プログラム、制御方法および制御装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。
【実施例１】
【００１５】
［全体構成］
図１は、実施例１に係る検証装置を説明する図である。図１に示す検証装置１０は、ソフトウェアの開発段階において、ソフトウェアが正常に動作するかを検証するサーバなどの装置である。
【００１６】
まず、検証装置１０は、検証データ生成用プログラムを実行して、ストレージ装置５０に検証用の検証データを生成する。具体的には、検証装置１０は、所定の処理を実行する検証対象プログラムと同様の処理を実行する検証データ生成用プログラムを実行する。検証データ生成用プログラムは、ストレージ装置５０がＯＳ等の情報を管理する管理領域をオープンし、ストレージ装置５０のデータ領域に対してデータの書き込みやデータの読出しを実行して、ストレージ装置５０の検証データを生成する。
【００１７】
次に、検証装置１０は、検証対象プログラムを実行して検証処理を行う。具体的には、検証装置１０は、検証用プログラムを実行して、検証用プログラムによって検証対象プログラムに所定の処理を実行させる。検証用プログラムは、検証データ生成用プログラムを同様の処理を実行し、書き込み命令（以下、ライト命令と記載する場合がある）や読出し命令（以下、リード命令と記載する場合がある）を指示するコマンド等を検証対象プログラムに発行する。検証対象プログラムは、検証用プログラムから受け付けたコマンド等にしたがって、ストレージ装置５０の管理領域をオープンし、データ領域に対してデータの書き込みや読出しを実行する。
【００１８】
このように、検証装置１０は、検証対象プログラムを各開発段階で検証する際に、検証データ生成用プログラムで検証データを生成した後に検証処理を実行する。そして、検証装置１０は、書き込みや読出しが正常に終了するか、意図するデータを書き込みまたは読み出すことができるかなどを検証する。なお、実施例では、検証データ生成プログラムと検証対象プログラムとをまとめて「検証対象ソフトウェア」と記載する場合がある。
【００１９】
実施例１に係る検証装置１０は、ストレージ装置５０に対してデータの読み書き命令を実行する検証対象ソフトウェアに、読み書き命令を含む所定の処理を実行させる。このとき、検証装置１０は、当該所定の処理実行時に、ストレージ装置５０への書き込み命令が行われ、かつ、該書き込み命令後に読出し命令が行われるデータを特定する情報を記憶部に記憶する。
【００２０】
続いて、検証装置１０は、情報を記憶部に記憶した後に所定の処理を検証対象ソフトウェアに実行させた際に、当該所定の処理時にライト命令を受けたデータのうち、記憶部に記憶される情報に基づき特定されるデータをストレージ装置５０や検証装置１０内のワークファイル等に記憶する。
【００２１】
つまり、検証装置１０は、１回目の検証時に検証対象ソフトウェアがライト後にリードするデータを特定し、２回目からは特定したデータに対してだけ実際にライトを実行する。この結果、検証装置１０は、検証に要するデータ量を減らし、検証精度も向上させることができる。
【００２２】
［検証装置の機能構成］
図２は、実施例１に係る検証装置の機能構成を示す機能ブロック図である。図２に示すように、検証装置１０は、通信制御部１１、記憶部１２、制御部２０を有する。
【００２３】
通信制御部１１は、他の装置との通信を制御する処理部であり、例えば、ネットワークインタフェースカードなどである。例えば、通信制御部１１は、ストレージ装置５０に対してデータのライト命令やリード命令等を送信し、命令の実行結果をストレージ装置５０から受信する。
【００２４】
記憶部１２は、制御部２０が実行するプログラム等を記憶する記憶装置であり、例えばハードディスクやメモリなどである。この記憶部１２は、プログラムＤＢ１３、リード領域テーブル１４、ワークテーブル１５、ワークファイル１６等を記憶する。
【００２５】
プログラムＤＢ１３は、制御部２０が実行する各種プログラムを記憶する。例えば、プログラムＤＢ１３は、検証データ生成用プログラム、検証対象プログラム、検証用プログラム、リード領域を特定するトレースプログラム、ワークファイル等を作成する準備プログラム等を記憶する。
【００２６】
リード領域テーブル１４は、所定の処理実行時に、ストレージ装置５０へのライト命令が行われ、かつ、該ライト命令後にリード命令が行われるデータを特定する情報を記憶する。具体的には、リード領域テーブル１４は、検証対象ソフトウェアがリード命令を発行してデータを読み出すストレージ装置５０の領域を記憶する。
【００２７】
図３は、リード領域テーブルに記憶される情報の例を示す図である。図３に示すように、リード領域テーブル１４は、ブロック番号とリードされたか否かを示す情報とを対応付けて記憶する。図３の例では、ブロック番号０、ブロック番号１、ブロック番号６４がリードされた領域であることを示している。
【００２８】
一例を挙げると、オフセットが１２８から１１５２の領域にデータの書き込みが実行された後、データの読出しが実行された場合、ブロック番号０と１がリード領域として記録（ＯＮ）される。同様に、オフセットが６５５３から６５７９の領域にデータの書き込みが実行された後、データの読出しが実行された場合、ブロック番号６４がリード領域として記録される。
【００２９】
ワークテーブル１５は、ワークファイルの情報を記憶する。図４は、ワークテーブルに記憶される情報の例を示す図である。図４に示すように、ワークテーブル１５は、ワークファイル１６内のブロック番号と、ストレージ装置５０において実際に書き込み後に読み出されたブロック番号とを対応付けて記憶する。図４の例では、ワークファイル１６内のブロック番号０、１、２がそれぞれストレージ装置１５内のブロック番号０、１、６４に対応付けられている。
【００３０】
ワークファイル１６は、検証対象ソフトウェアが検証処理時にデータの書き込みを実行し、書き込み後に読出しを実行した領域を記憶する一時領域である。すなわち、ワークファイル１６は、検証対象ソフトウェアが検証処理時にリードする領域を連続領域で記憶する。
【００３１】
上記例で説明すると、ワークファイル１６は、ブロック番号０の領域に、ストレージ装置５０のブロック番号０に対応する領域に記憶されていたデータを記憶する。同様に、ワークファイル１６は、ブロック番号２の領域に、ストレージ装置５０のブロック番号６４に対応する領域に記憶されていたデータを記憶する。
【００３２】
制御部２０は、プロセッサなどであり、検証データ生成部２１、特定部２２、ワークファイル生成部２３、検証実行部２４を有する。なお、各処理部は、電子回路の一例やプロセッサが実行するプロセスなどの一例である。
【００３３】
検証データ生成部２１は、検証対象の検証データを生成する処理部である。例えば、検証データ生成部２１は、検証対象プログラムの検証を実行する前に、検証対象プログラムと同じ処理を実行する検証データ生成用プログラムをプログラムＤＢ１３から読み出して実行する。
【００３４】
１回目の実行時には、検証データ用生成プログラムは、ストレージ装置５０に対して、管理領域のオープン、データ領域へのデータ書き込みやデータ読み出しを実行して、検証データを生成する。２回目以降は、応答制御部２４ｂによって応答が制御される。
【００３５】
特定部２２は、検証対象ソフトウェアが読み出すデータの領域を特定する処理部である。例えば、特定部２２は、１回目の検証データ生成用プログラムの動作を監視し、検証データ生成用プログラムがデータを書き込んだ後に読出したデータの領域を特定する。そして、特定部２２は、特定した領域の情報をリード領域テーブル１４に格納する。
【００３６】
同様に、特定部２２は、ソフトウェア実行部２４ａが実行した１回目の検証対象プログラムの動作を監視し、検証対象プログラムがデータを書き込んだ後に読出したデータの領域を特定する。そして、特定部２２は、特定した領域の情報をリード領域テーブル１４に格納する。
【００３７】
なお、ここでは、検証前に検証データ生成用プログラムを実行してテストデータを生成する例を説明したが、検証データ生成用プログラムを用いない検証手法においても適用することができる。その場合、ストレージ装置５０にはすでに検証データが生成されているので、特定部２２は、初回の検証対象プログラムの処理を監視し、ストレージ装置５０から読み出されるデータの領域を特定する。
【００３８】
ワークファイル生成部２３は、リード領域テーブル１４に格納された情報に基づいて、ワークファイル１６を生成する処理部である。具体的には、ワークファイル生成部２３は、リード領域テーブル１４を参照して、リードされた順に、リードされた領域にワークファイル上のブロック番号を割り振って、ワークテーブル１５を生成する。
【００３９】
そして、ワークファイル生成部２３は、ワークテーブル１５を参照して、ワークファイル１６内に、リードされたストレージ装置５０の領域を割り当てる。すなわち、ワークファイル生成部２３は、ワークファイル１６内に、検証データ生成用プログラムまたは検証対象プログラムがストレージ装置５０からリードしたデータを格納する。
【００４０】
ここで、ワークファイルの生成の一例を説明する。図５は、ワークファイルの生成を説明する図である。図５に示すように、検証装置１０は、アクセステーブルとブロックテーブルとを記憶部１２等に保持する。アクセステーブルは、検証対象ソフトウェアごとに、検証対象ソフトウェアがアクセスするファイル名を記憶する。ブロックテーブルは、検証対象ソフトウェアがアクセスするファイル名ごとに、ブロック数とリード対象のブロック数とを記憶する。
【００４１】
また、アクセステーブルの各ファイルは、ポインタによってブロックテーブルに関連付けられており、ブロックテーブルの各ファイル名は、ポインタによってリード領域テーブル１４に関連付けられている。なお、各テーブルは、管理者等が事前に生成してもよく、制御部２０が各プログラムを解析して生成することもできる。また、各テーブルは、記憶部１２等に記憶される。
【００４２】
このような状態において、特定部２２は、検証対象ソフトウェアが実行されると、検証対象ソフトウェアがアクセスするファイル名をアクセステーブルから検索し、検索された各ファイルのブロック数とリード対象のブロック数とをブロックテーブルから特定する。そして、特定部２２は、検証対象ソフトウェアがアクセスするブロック総数の合計とリード対象のブロック総数の合計とから、リード対象領域の割合を算出する。これは、必要に応じて、テスト実施者がテストプログラムの実行単位をさらに分割または実行単位にまとめることを行う場合に使用できる。なお、特定部２２は、テストプログラムごと、または、分割したテストプログラムごとにディスクの使用率をディスプレイ等に表示させることもできる。
【００４３】
図５の例では、特定部２２は、検証対象ソフトウェアがアクセスするブロックの総数が１５０個、そのうちリード対象のブロック総数が２０となり、リードされるブロックの割合を「２０／１５０×１００≒１３％」と算出する。
【００４４】
さらに、特定部２２は、各ファイルへのアクセスを監視して、リードされたブロック番号にフラグ（ＯＮ）を立てる。図５の例では、特定部２２は、ファイル名「／ｕｒａｗａ／ｐｏｎｔｅ／ｅｍｅ１０」について、ブロック番号１、１２、１３、２２、５０がリードされたことを検出している。
【００４５】
その後、ワークファイル生成部２３は、リードされた領域にワークファイル１６上のブロック番号を割り振って、ワークテーブル１５を生成し、ワークファイル１６内に、リードされたストレージ装置５０の領域を割り当てる。
【００４６】
図５の例では、ワークファイル生成部２３は、ストレージ装置５０のブロック１、１２、１３、２２、５０に、ワークファイル１６内のブロック番号１、２、３、４、５を割り振る。そして、ワークファイル生成部２３は、ストレージ装置５０のブロック１、１２、１３、２２、５０の各領域に記憶されるデータを、ワークファイル１６内に領域が連続するように格納する。
【００４７】
図２に戻り、検証実行部２４は、ソフトウェア実行部２４ａと応答制御部２４ｂとを有し、これらによって、検証対象プログラムの動作を検証する処理部である。
【００４８】
ソフトウェア実行部２４ａは、検証対象プログラムを実行する処理部である。具体的には、ソフトウェア実行部２４ａは、検証データ生成部２１による検証データ生成プログラムの実行が完了した場合に、検証用プログラムをプログラムＤＢ１３から読み出して実行する。検証用プログラムは、プログラムＤＢ１３に記憶される検証対象プログラムに対して、データの書き込みや読出しを実行する。
【００４９】
応答制御部２４ｂは、１回目の検証時にストレージ装置５０へのアクセスを実行し、２回目以降の検証時は、ワークファイル１６を利用した応答制御を実行する処理部である。
【００５０】
具体的には、応答制御部２４ｂは、１回目の検証時、すなわち１回目の検証対象ソフトウェアの実行時には、各プログラムのアクセス要求をストレージ装置５０に対して実行して、その結果を応答する。ここで、アクセス要求とは、管理領域へのオープン要求、データ書き込み命令、データ読出し命令などである。
【００５１】
また、応答制御部２４ｂは、２回目の検証時、すなわち２回目の検証対象ソフトウェアの実行時には、リード領域テーブル１４を参照して応答を制御する。例えば、応答制御部２４ｂは、検証対象ソフトウェアから管理領域へのオープン要求を受け付けた場合には、パススルーさせて、ストレージ装置５０へ当該要求を送信する。
【００５２】
また、応答制御部２４ｂは、検証対象ソフトウェアからワークテーブル１５に記憶されない領域へのライト命令を受け付けた場合、ライト命令が正常に終了したことを検証対象ソフトウェアに応答する。つまり、応答制御部２４ｂは、実際の書き込みを実行せずに、応答の送信だけを実行する。
【００５３】
また、応答制御部２４ｂは、検証対象ソフトウェアからワークテーブル１５に記憶される領域へのライト命令を受け付けた場合、ワークファイル１６に対してデータの書き込みを実行し、その結果を応答する。例えば図４の例で説明すると、応答制御部２４ｂは、ストレージ装置５０上のブロック番号６４へのライト命令を受信すると、ワークファイル１６上のブロック番号２の領域にデータの書き込みを実行する。
【００５４】
また、応答制御部２４ｂは、検証対象ソフトウェアからワークテーブル１５に記憶されない領域へのリード命令を受け付けた場合、リード命令が正常に終了したことを検証プログラムに応答する。つまり、応答制御部２４ｂは、実際の読出しを実行せずに、応答の送信だけを実行する。
【００５５】
また、応答制御部２４ｂは、検証対象ソフトウェアからワークテーブル１５に記憶される領域へのリード命令を受け付けた場合、ワークファイル１６に対してデータの読出しを実行し、読み出したデータを検証対象ソフトウェアに応答する。例えば図４の例で説明すると、応答制御部２４ｂは、ストレージ装置５０上のブロック番号１０４８７に対するリード命令を受信すると、ワークファイル１６上のブロック番号３の領域に記憶されるデータを読み出して、検証対象ソフトウェアに応答する。
【００５６】
［処理の流れ］
次に、各処理部が実行する処理の流れについて説明する。ここでは、リード領域の特定処理、リード領域の割合を算出する処理、ワークファイルを生成する処理、検証処理の各処理について説明する。
【００５７】
（リード領域の特定処理）
図６は、リード領域を特定する処理の流れを示すフローチャートである。このフローチャートを実行することで、上記アクセステーブルやリード領域テーブル１４が生成される。
【００５８】
図６に示すように、特定部２２は、実行された検証対象ソフトウェアからデータアクセスを取得すると、当該データアクセスの種別を取得し（Ｓ１０１）、当該種別がライト命令であるかを判定する（Ｓ１０２）。
【００５９】
そして、特定部２２は、ライト命令であると判定した場合（Ｓ１０２：Ｙｅｓ）、ディスクドライバへライト命令の実行を依頼し（Ｓ１０３）、ライト命令の復帰値をセットして呼出元に戻る（Ｓ１０４）。
【００６０】
一方、特定部２２は、リード命令であると判定した場合（Ｓ１０２：Ｎｏ）、リード命令のパラメータであるオフセットやサイズから、読出し対象のブロック番号を特定する（Ｓ１０５）。続いて、特定部２２は、リード命令のパラメータであるファイルディスクリプター等からファイル名を取得する（Ｓ１０６）。
【００６１】
そして、特定部２２は、取得したファイルをキーにしてアクセステーブルを検索し、該当ファイルについてリード領域テーブル１４の該当ブロック番号のフィールドをＯＮにする（Ｓ１０７）。なお、特定部２２は、リード領域テーブル１４に該当するブロック番号がない場合、リード領域テーブル１４を拡張して同様の処理を実行する。
【００６２】
その後、特定部２２は、ディスクドライバへリード命令の実行を依頼し（Ｓ１０８）、リード命令の復帰値をセットして呼出元に戻る（Ｓ１０９）。
【００６３】
（リード領域の割合算出処理）
図７は、リード領域の割合を算出する処理の流れを示すフローチャートである。図７に示すように、特定部２２は、ファイルに関するカウンターであるｊに１をセットし（Ｓ２０１）、リード領域テーブル１４を読み込む（Ｓ２０２）。続いて、特定部２２は、変数であるｗｏｒｋ１とｗｏｒｋ２のそれぞれに１を設定する（Ｓ２０３）。
【００６４】
その後、特定部２２は、ブロック番号の通番であるｋに１を設定して（Ｓ２０４）、リード領域テーブル１４（ｊ，ｋ）の値がＯＮか否かを判定する（Ｓ２０５）。
【００６５】
ここで、特定部２２は、リード領域テーブル（ｊ，ｋ）がＯＮではない場合（Ｓ２０５：Ｎｏ）、ｗｏｒｋ２にｗｏｒｋ２＋１の値を設定する（Ｓ２０６）。一方、特定部２２は、リード領域テーブル（ｊ，ｋ）がＯＮである場合（Ｓ２０５：Ｙｅｓ）、ｗｏｒｋ１にｗｏｒｋ１＋１の値を設定する（Ｓ２０７）。
【００６６】
その後、特定部２２は、ｋにｋ＋１の値を代入し（Ｓ２０８）、ファイルの終端か否かを判定し（Ｓ２０９）、ファイルの終端ではない場合（Ｓ２０９：Ｎｏ）、Ｓ２０５に戻って以降を繰り返す。
【００６７】
一方、特定部２２は、ファイルの終端である場合（Ｓ２０９：Ｙｅｓ）、リード対象ブロック数（ｉ）にｗｏｒｋ１の値を設定し（Ｓ２１０）、ブロック総数（ｉ）にｗｏｒｋ２の値を設定する（Ｓ２１１）。
【００６８】
その後、特定部２２は、リード対象ブロック数（ｉ）とブロック総数（ｉ）とをブロックテーブルに格納した後（Ｓ２１２）、ｊにｊ＋１の値を設定し（Ｓ２１３）、ｊがファイルの総数を超えているかを判定する（Ｓ２１４）。
【００６９】
そして、特定部２２は、ｊがファイルの総数を超えていない場合（Ｓ２１４：Ｎｏ）、Ｓ２０２に戻って以降を繰り返す。一方、特定部２２は、ｊがファイルの総数を超えている場合（Ｓ２１４：Ｙｅｓ）、全ファイルに関するリード対象ブロック数とブロック総数とから、リード対象ブロック数の割合を算出して、ブロックテーブルに格納する（Ｓ２１５）。すなわち、特定部２２は、検証対象ソフトウェアがアクセスするブロック数のうちリード対象ブロック数の割合を算出する。
【００７０】
（ワークファイルの生成処理）
図８は、ワークファイルを生成する処理の流れを示すフローチャートである。図８に示すように、ワークファイル生成部２３は、ファイルに関するカウンターであるｊに１をセットし（Ｓ３０１）、リード領域テーブル（ｊ，ｋ）をコピーする（Ｓ３０２）。なお、ｋは、ブロック番号の通番、すなわちファイル位置に関するカウンターである。
【００７１】
続いて、ワークファイル生成部２３は、変数ｗに１を代入し（Ｓ３０３）、変数ｋに１を代入し（Ｓ３０４）、リード領域テーブル（ｊ，ｋ）の値がＯＮか否かを判定する（Ｓ３０５）。
【００７２】
そして、ワークファイル生成部２３は、リード領域テーブル（ｊ，ｋ）の値がＯＮである場合（Ｓ３０５：Ｙｅｓ）、ワークテーブル（ｊ，ｗ）にｋの値を設定し、ｗにｗ＋１の値を設定する（Ｓ３０６）。一方、ワークファイル生成部２３は、リード領域テーブル（ｊ，ｋ）の値がＯＮではない場合（Ｓ３０５：Ｎｏ）、Ｓ３０６を実行せずにＳ３０７を実行する。
【００７３】
その後、ワークファイル生成部２３は、ｋにｋ＋１の値を設定し（Ｓ３０７）、ファイルの終端か否かを判定し（Ｓ３０８）、ファイルの終端ではない場合（Ｓ３０８：Ｎｏ）、Ｓ３０５に戻って以降を繰り返す。
【００７４】
一方、ワークファイル生成部２３は、ファイルの終端である場合（Ｓ３０８：Ｙｅｓ）、ｊにｊ＋１の値を設定し（Ｓ３０９）、ｊがファイルの総数を超えているかを判定する（Ｓ３１０）。
【００７５】
そして、ワークファイル生成部２３は、ｊがファイルの総数を超えていない場合（Ｓ３１０：Ｎｏ）、Ｓ３０３に戻って以降を繰り返す。
【００７６】
一方、ワークファイル生成部２３は、ｊがファイルの総数を超えている場合（Ｓ３１０：Ｙｅｓ）、上述した処理で生成されたワークテーブル１５にしたがって、ワークファイル１６を生成する（Ｓ３１１）。その後、実行回数が２回目以降となる検証対象ソフトウェアが起動される（Ｓ３１２）。
【００７７】
（検証処理）
図９は、実施例１に係る検証処理の流れを示すフローチャートである。この処理は、検証対象ソフトウェアによるファイルアクセスが発生するたびに実行される。図９に示すように、応答制御部２４ｂは、検証対象ソフトウェアから命令を受け付けると、当該命令の種別がリード命令か否かを判定する（Ｓ４０１）。
【００７８】
そして、応答制御部２４ｂは、リード命令であると判定した場合（Ｓ４０１：Ｙｅｓ）、リード命令のパラメータであるファイルディスクリプター等からファイル名を取得する（Ｓ４０２）。続いて、応答制御部２４ｂは、ファイル名をキーにしてアクセステーブルを参照してファイル番号を特定する（Ｓ４０３）。
【００７９】
その後、応答制御部２４ｂは、リード命令のパラメータであるオフセットやサイズから、リード対象のブロック番号を特定する（Ｓ４０４）。そして、応答制御部２４ｂは、特定したストレージ装置５０のブロック番号をキーにしてワークテーブル１５を検索し、リード対象のワークファイル１６上のブロック番号を特定する（Ｓ４０５）。
【００８０】
続いて、応答制御部２４ｂは、動作モードがリード待ちモードであるかを判定する（Ｓ４０６）。なお、動作モードについては実施例３で詳細に説明する。
【００８１】
そして、応答制御部２４ｂは、動作モードがリード待ちモードである場合（Ｓ４０６：Ｙｅｓ）、特定したファイル番号が最後のファイル番号を示すラストファイル番号であるかを判定する（Ｓ４０７）。
【００８２】
ここで、応答制御部２４ｂは、特定したファイル番号が最後のファイル番号を示すラストファイル番号ではない場合（Ｓ４０７：Ｎｏ）、Ｓ４０８を実行する。すなわち、応答制御部２４ｂは、元のファイルにおいてリード対象のブロックの先頭にあたるブロック番号を「先頭ブロック−ｏｒｇ（ｉ）」にセットし、ワークファイル１６における先頭にあたるブロック番号を「先頭ブロック−ｗｏｒｋ（ｉ）」にセットする。
【００８３】
さらに、応答制御部２４ｂは、「ラストブロック−ｗｏｒｋ（ｉ）」が「先頭ブロック−ｗｏｒｋ（ｉ）」の次のブロックである場合（Ｓ４０９：Ｙｅｓ）、Ｓ４１０を実行する。すなわち、応答制御部２４ｂは、「ラストブロック−ｏｒｇ（ｉ）」が「先頭ブロック−ｏｒｇ（ｉ）」の次のブロックではないか否かを判定する。
【００８４】
ここで、応答制御部２４ｂは、「ラストブロック−ｏｒｇ（ｉ）」が「先頭ブロック−ｏｒｇ（ｉ）」の次のブロックではないと判定した場合（Ｓ４１０：Ｙｅｓ）、一定時間待機する（Ｓ４１１）。その後、応答制御部２４ｂは、ワークファイル１６の該当ブロックに対するリード命令をドライバへ依頼する（Ｓ４１２）。
【００８５】
そして、応答制御部２４ｂは、動作モードがリード待ちモードである場合（Ｓ４１３：Ｙｅｓ）、Ｓ４１４を実行する。すなわち、応答制御部２４ｂは、元のファイルにおいてリード対象のブロックの最後にあたるブロック番号を「ラストブロック−ｏｒｇ（ｉ）」にセットし、ワークファイル１６における最後にあたるブロック番号を「ラストブロック−ｗｏｒｋ（ｉ）」にセットする。
【００８６】
そして、応答制御部２４ｂは、ラストファイル番号にファイル番号をセットし（Ｓ４１５）、リード命令の復帰値をセットして呼出元に戻る（Ｓ４１６）。
【００８７】
なお、Ｓ４０６において、応答制御部２４ｂは、動作モードがリード待ちモードではない場合（Ｓ４０６：Ｎｏ）、Ｓ４０７からＳ４１１を実行することなく、Ｓ４１２を実行する。
【００８８】
また、Ｓ４０７において、応答制御部２４ｂは、特定したファイル番号が最後のファイル番号を示すラストファイル番号であると判定した場合（Ｓ４０７：Ｙｅｓ）、Ｓ４０８からＳ４１１を実行することなく、Ｓ４１２を実行する。
【００８９】
また、Ｓ４０９において、応答制御部２４ｂは、「ラストブロック−ｗｏｒｋ（ｉ）」が「先頭ブロック−ｗｏｒｋ（ｉ）」の次のブロックではないと判定した場合（Ｓ４０９：Ｎｏ）、Ｓ４１０とＳ４１１を実行することなく、Ｓ４１２を実行する。
【００９０】
同様に、Ｓ４１０において、応答制御部２４ｂは、「ラストブロック−ｏｒｇ（ｉ）」が「先頭ブロック−ｏｒｇ（ｉ）」の次のブロックであると判定した場合（Ｓ４１０：Ｎｏ）、Ｓ４１１を実行することなく、Ｓ４１２を実行する。
【００９１】
また、Ｓ４１３において、動作モードがリード待ちモードではないと判定した場合（Ｓ４１３：Ｎｏ）、Ｓ４１４およびＳ４１５を実行することなく、Ｓ４１６を実行する。
【００９２】
一方で、Ｓ４０１において、応答制御部２４ｂは、ライト命令であると判定した場合（Ｓ４０１：Ｎｏ）、ライト命令のパラメータであるファイルディスクリプター等からファイル名を取得する（Ｓ４１７）。続いて、応答制御部２４ｂは、ファイル名をキーにしてアクセステーブルを参照してファイル番号を特定する（Ｓ４１８）。
【００９３】
その後、応答制御部２４ｂは、ライト命令のパラメータであるオフセットやサイズから、ライト対象のブロック番号を特定する（Ｓ４１９）。そして、応答制御部２４ｂは、特定したストレージ装置５０のフロック番号をキーにしてリード領域テーブル１４を参照して、ＯＮになっているブロック番号が含まれているかを判定する（Ｓ４２０）。
【００９４】
ここで、応答制御部２４ｂは、ＯＮになっているブロック番号が含まれていない場合（Ｓ４２０：Ｎｏ）、そのまま処理を終了する。つまり、応答制御部２４ｂは、ライト対象の領域がその後にリードされない領域であることから、データの書き込みを実行したように見せかける。
【００９５】
一方、応答制御部２４ｂは、ＯＮになっているブロック番号が含まれている場合（Ｓ４２０：Ｙｅｓ）、特定したストレージ装置５０のフロック番号をキーにしてワークテーブル１５を検索し、ライト対象のワークファイル１６上のブロック番号を特定する（Ｓ４２１）。
【００９６】
続いて、応答制御部２４ｂは、動作モードがライト待ちモードであるかを判定する（Ｓ４２２）。なお、動作モードについては実施例３で詳細に説明する。
【００９７】
そして、応答制御部２４ｂは、動作モードがライト待ちモードである場合（Ｓ４２２：Ｙｅｓ）、特定したファイル番号が最後のファイル番号を示すラストファイル番号であるかを判定する（Ｓ４２３）。
【００９８】
ここで、応答制御部２４ｂは、特定したファイル番号が最後のファイル番号を示すラストファイル番号ではない場合（Ｓ４２３：Ｎｏ）、Ｓ４２４を実行する。すなわち、応答制御部２４ｂは、元のファイルにおいてライト対象のブロックの先頭にあたるブロック番号を「先頭ブロック−ｏｒｇ（ｉ）」にセットし、ワークファイル１６における先頭にあたるブロック番号を「先頭ブロック−ｗｏｒｋ（ｉ）」にセットする。
【００９９】
さらに、応答制御部２４ｂは、「ラストブロック−ｗｏｒｋ（ｉ）」が「先頭ブロック−ｗｏｒｋ（ｉ）」の次のブロックである場合（Ｓ４２５：Ｙｅｓ）、Ｓ４２６を実行する。すなわち、応答制御部２４ｂは、「ラストブロック−ｏｒｇ（ｉ）」が「先頭ブロック−ｏｒｇ（ｉ）」の次のブロックではないか否かを定する。
【０１００】
ここで、応答制御部２４ｂは、「ラストブロック−ｏｒｇ（ｉ）」が「先頭ブロック−ｏｒｇ（ｉ）」の次のブロックではないと判定した場合（Ｓ４２６：Ｙｅｓ）、一定時間待機する（Ｓ４２７）。その後、応答制御部２４ｂは、ワークファイル１６の該当ブロックに対するライト命令をドライバへ依頼する（Ｓ４２８）。
【０１０１】
そして、応答制御部２４ｂは、動作モードがライト待ちモードである場合（Ｓ４２９：Ｙｅｓ）、Ｓ４３０を実行する。すなわち、応答制御部２４ｂは、元のファイルにおいてライト対象のブロックの最後にあたるブロック番号を「ラストブロック−ｏｒｇ（ｉ）」にセットし、ワークファイル１６における最後にあたるブロック番号を「ラストブロック−ｗｏｒｋ（ｉ）」にセットする。
【０１０２】
そして、応答制御部２４ｂは、ラストファイル番号にファイル番号をセットし（Ｓ４３１）、ライト命令の復帰値をセットして呼出元に戻る（Ｓ４３２）。
【０１０３】
なお、Ｓ４２２において、応答制御部２４ｂは、動作モードがライト待ちモードではない場合（Ｓ４２２：Ｎｏ）、Ｓ４２３からＳ４２７を実行することなく、Ｓ４２８を実行する。
【０１０４】
また、Ｓ４２３において、応答制御部２４ｂは、特定したファイル番号が最後のファイル番号を示すラストファイル番号であると判定した場合（Ｓ４２３：Ｙｅｓ）、Ｓ４２４からＳ４２７を実行することなく、Ｓ４２８を実行する。
【０１０５】
また、Ｓ４２５において、応答制御部２４ｂは、「ラストブロック−ｗｏｒｋ（ｉ）」が「先頭ブロック−ｗｏｒｋ（ｉ）」の次のブロックではないと判定した場合（Ｓ４２５：Ｎｏ）、Ｓ４２６とＳ４２７を実行することなく、Ｓ４２８を実行する。
【０１０６】
同様に、Ｓ４２６において、応答制御部２４ｂは、「ラストブロック−ｏｒｇ（ｉ）」が「先頭ブロック−ｏｒｇ（ｉ）」の次のブロックであると判定した場合（Ｓ４２６：Ｎｏ）、Ｓ４２７を実行することなく、Ｓ４２８を実行する。
【０１０７】
また、Ｓ４２９において、動作モードがリード待ちモードではないと判定した場合（Ｓ４２９：Ｎｏ）、Ｓ４３０およびＳ４３１を実行することなく、Ｓ４３２を実行する。
【０１０８】
［効果］
このように、検証装置１０は、検証対象ソフトウェアの初回の実行の際に、検証対象ソフトウェアがアクセスする各ファイルのリード対象となる位置を記録し、記録した内容を基に該当領域サイズ分のワークファイル１６を生成する。そして、検証装置１０は、２回目以降に検証対象ソフトウェアを実行する際には、リード対象となる領域へのライトやリードなどのアクセスの際に実際のファイルではなく、ワークファイル１６へアクセスする。
【０１０９】
したがって、検証装置１０は、検証時に使用するストレージ装置の記憶容量を削減してソフトウェアの動作検証を行なう場合の、検証精度の低下を抑止できる。
【０１１０】
また、検証装置１０は、ソフトウェアのエンハンスやパッチ提供時において、大容量のディスクをその都度用意せずに、また、常時用意しておくことなく、検証処理が実行できる。このため、開発期間で保持するトータルの設備として、ディスク装置の削減が可能である。
【０１１１】
また、検証装置１０は、テスト実行前に大容量のテストデータを作成するケースにおいて、テストデータ作成にかかる時間を大幅に短縮できる。また、検証装置１０は、テストデータ生成を行うプログラムで読出し命令を行う領域のみディスクに対する書き込みを行う。従って、２回目以降のデータ生成に関する大半の書き込み命令はディスクへの書き込みを行わないので、テストの準備時間がほとんどかからない。このため、トータルの実行時間は、従来手法に比べ、大幅に短縮できる。さらに、使用するディスク容量が削減させることにより、ストレージ装置の台数についても２回目以降では削減できる。
【実施例２】
【０１１２】
ところで、実施例１では、複数の検証対象ソフトウェアを順次実行する場合、各検証対象ソフトウェアがリードする全領域を有するワークファイル１６を用意することになるが、これに限定されるものではなく、ワークファイル１６の容量を削減することもできる。
【０１１３】
そこで、実施例２では、検証装置１０が、未実行の検証対象ソフトウェアに対応する領域のワークファイル１６を用意して、検証対象ソフトウェアを順次実行することで、ワークファイル１６の容量を削減する例を説明する。なお、実施例２では、検証対象ソフトウェア１、検証対象ソフトウェア２、検証対象ソフトウェア３を順に検証するものとする。
【０１１４】
［処理の説明］
図１０は、実施例２に係るワークファイルの構成変更を説明する図である。検証装置１０は、検証対象プログラム１の検証を実行する場合、検証対象ソフトウェア１がリードする領域を有するワークファイル１６を生成して、検証を実行する。
【０１１５】
その後、検証装置１０は、検証対象プログラム２の検証を実行する場合、ワークファイル１６の構成を変更する準備プログラムを実行する。そして、検証装置１０は、検証対象ソフトウェア２がリードする領域を有するように、ワークファイル１６の構成を変更してから、検証を実行する。
【０１１６】
このようにすることで、検証装置１０は、１つの検証対象プログラムの検証完了後、以降の検証対象プログラムがリードする領域を有するようにワークファイル１６の構成を変更することで、ワークファイル１６の容量を削減することができる。
【０１１７】
［機能構成］
図１１は、実施例２に係る検証装置の機能構成を示す機能ブロック図である。なお、実施例１と同様の機能については、図２と同一符号を付し、詳細な説明を省略する。ここでは、使用期間テーブル１７、使用期間調査部２５、ワークファイル構成部２６について説明する。
【０１１８】
使用期間テーブル１７は、ストレージ装置５０の各ブロックがどの検証対象ソフトウェアからどの検証対象ソフトウェアまで使用されるかを示す情報を記憶するテーブルである。図１２は、使用期間テーブルを説明する図である。図１２に示すように、使用期間テーブル１７は、リード領域テーブル１４とライトされた領域を記憶するライト領域テーブルとを用いて生成される。なお、ライト領域テーブルは、記憶部１２等に格納されている。
【０１１９】
図１２の例では、ブロック番号１およびブロック番号２は、検証対象ソフトウェア１にリードおよびライトされる。ブロック番号３は、検証対象ソフトウェア１と検証対象ソフトウェア３にリードされ、検証対象ソフトウェア１と検証対象ソフトウェア２にライトされる。ブロック番号４は、いずれの検証対象ソフトウェアにもリードもライトもされない。
【０１２０】
ブロック番号５は、検証対象ソフトウェア２にリードされ、検証対象ソフトウェア１と検証対象ソフトウェア２にライトされる。ブロック番号６は、検証対象ソフトウェア２と検証対象ソフトウェア３にリードおよびライトされる。ブロック番号７−９は、いずれの検証対象ソフトウェアにもリードもライトもされない。
【０１２１】
この結果、使用期間テーブル１７には、ブロック番号１については検証対象ソフトウェア１で使用が開始されて使用が終了することから、ブロック番号１に対応付けて「始＆終」がセットされる。同様に、使用期間テーブル１７には、ブロック番号２については検証対象ソフトウェア１で使用が開始されて使用が終了することから、ブロック番号１に対応付けて「始＆終」がセットされる。
【０１２２】
また、ブロック番号３については検証対象ソフトウェア１で使用が開始されて、検証対象ソフトウェア３で使用が終了すると判定する。この結果、使用期間テーブル１７には、ブロック番号１に対応付けて「始」、ブロック番号２に対応付けて「中」、ブロック番号３に対応付けて「終」がセットされる。
【０１２３】
また、ブロック番号５については検証対象ソフトウェア１で使用が開始されて、検証対象ソフトウェア２で使用が終了すると判定する。この結果、使用期間テーブル１７には、ブロック番号１に対応付けて「始」、ブロック番号２に対応付けて「終」がセットされる。
【０１２４】
また、ブロック番号６については検証対象ソフトウェア２で使用が開始されて、検証対象ソフトウェア３で使用が終了すると判定する。この結果、使用期間テーブル１７には、ブロック番号２に対応付けて「始」、ブロック番号３に対応付けて「終」がセットされる。
【０１２５】
使用期間調査部２５は、各検証対象ソフトウェアがリードする領域やライトする領域に基づいて、ストレージ装置５０の各ブロックが使用される期間を特定する処理部である。例えば、特定部２２は、実施例１と同様の手法でリード領域テーブル１４を生成し、リード領域テーブル１４と同様の手法で、図１２に示したライト領域テーブルを生成する。そして、使用期間調査部２５は、図１２で説明した手法で、リード領域テーブル１４およびライト領域テーブルの情報にしたがって使用期間テーブル１７を生成する。
【０１２６】
ワークファイル構成部２６は、検証対象ソフトウェアの検証が完了すると、次以降の検証対象ソフトウェアに対応するワークファイル１６を生成する処理部である。例えば、ワークファイル構成部２６は、検証実行部２４から検証の順番の指定を受け付ける。
【０１２７】
そして、ワークファイル構成部２６は、検証対象ソフトウェア１の実行開始指示を検証実行部２４から受け付けると、検証対象ソフトウェア１、２、３のそれぞれで使用される領域を有するワークファイル１６を生成する。
【０１２８】
検証対象ソフトウェア１の実行が完了し、ワークファイル構成部２６は、検証対象ソフトウェア２の実行開始指示を検証実行部２４から受け付けると、検証対象ソフトウェア２、３で使用される領域を有するワークファイル１６を生成する。このようにして、ワークファイル構成部２６は、検証対象ソフトウェアが実行されるタイミングで、ワークファイル１６を生成する。なお、特定部２２は、実施例１と同様に、検証対象ソフトウェア１、検証対象ソフトウェア２、検証対象ソフトウェア３のそれぞれの検証対象ソフトウェアがアクセスするブロック総数の合計、リード対象のブロック総数の合計、リード対象領域の割合を算出する。これらの値をもとにして、検証対象ソフトウェアを分割することにより、ワークファイル１６の容量を削減することもできる。
【０１２９】
［処理の流れ］
次に、実施例２で実行される各処理について説明するが、検証処理については実施例１と同様の処理なので、詳細な説明は省略する。
【０１３０】
（使用期間の抽出処理）
図１３は、使用期間を抽出する処理の流れを示すフローチャートである。ここでは、検証対象ソフトウェア１に対して実行する例を説明するが、他の検証対象ソフトウェアについても同様に実行される。なお、このフローチャートを実行することで、上記アクセステーブル、リード領域テーブル１４、ライト領域テーブルが生成される。
【０１３１】
図１３に示すように、特定部２２は、検証対象ソフトウェア１が実行されると、検証対象ソフトウェア１を特定するカウンターｉに１を代入し（Ｓ５０１）、ファイルに関するカウンターｊに１を代入する（Ｓ５０２）。
【０１３２】
続いて、特定部２２は、検証対象ソフトウェア１からデータアクセスを取得すると、当該データアクセスの種別を取得し、当該種別がライト命令であるかを判定する（Ｓ５０３）。
【０１３３】
そして、特定部２２は、ライト命令と判定した場合（Ｓ５０３：Ｙｅｓ）、ライト領域テーブルを生成する（Ｓ５０４）。具体的には、特定部２２は、オフセットとサイズを基に、ライト領域テーブル（ｉ；ｊ，ｋ）の該当ブロック番号にＯＮを設定する。なお、ｋは、ブロック番号である。
【０１３４】
その後、特定部２２は、ｊにｊ＋１を代入した後（Ｓ５０５）、ライト命令の実行をディスクドライバへ依頼し（Ｓ５０６）、Ｓ５０３以降を繰り返す。
【０１３５】
一方、Ｓ５０３において、特定部２２は、リード命令と判定した場合（Ｓ５０３：Ｎｏ）、リード領域テーブルを生成する（Ｓ５０７）。具体的には、特定部２２は、オフセットとサイズを基に、リード領域テーブル（ｉ；ｊ，ｋ）の該当ブロック番号にＯＮを設定する。なお、ｋは、ブロック番号である。
【０１３６】
その後、特定部２２は、ｊにｊ＋１を代入した後（Ｓ５０８）、ライト命令の実行をディスクドライバへ依頼し（Ｓ５０６）、Ｓ５０３以降を繰り返す。
【０１３７】
（使用期間テーブルの生成処理）
図１４と図１５は、使用期間テーブルの生成処理の流れを示すフローチャートである。この処理では、使用期間テーブルとブロックテーブルとを作成する。また、図１４では、各テーブルの作成処理をシーケンシャルに実行する例を説明するが、並列に実行することもできる。
【０１３８】
図１４に示すように、使用期間調査部２５は、検証対象ソフトウェアを特定するカウンターｉに１を代入し（Ｓ６０１）、ファイルを表すカウンターｊに１を代入し（Ｓ６０２）、ブロック番号を表すカウンターｋに１を代入する（Ｓ６０３）。
【０１３９】
そして、使用期間調査部２５は、リード領域テーブル（ｉ；ｊ，ｋ）とライト領域テーブル（ｉ；ｊ，ｋ）とから、該当ブロックに対して最初にライトする検証対象ソフトウェアと最後にリードする検証対象ソフトウェアを特定する（Ｓ６０４）。このとき、使用期間調査部２５は、該当する検証対象ソフトウェアの番号を「最初の番号」と「最後の番号」に設定する。
【０１４０】
その後、使用期間調査部２５は、使用期間テーブル（ｉ；ｊ，ｋ）を生成する（Ｓ６０５）。具体的には、使用期間調査部２５は、使用期間テーブル（ｉ；ｊ，ｋ）を初期化する。続いて、使用期間調査部２５は、ｊが最初の番号、最後の番号としたとき、使用期間テーブル（ｉ；ｋ，最初の番号）＝“始”、使用期間テーブル（ｉ；ｋ，最後の番号）＝“終”と設定する。なお、最初の番号＝最後の番号のときは、“始＆終”が設定される。
【０１４１】
そして、使用期間調査部２５は、ｋにｋ＋１の値を設定し（Ｓ６０６）、ｋがファイルの終端番号以下の場合（Ｓ６０７：Ｎｏ）、Ｓ６０４以降を繰り返す。
【０１４２】
また、使用期間調査部２５は、ｋがファイルの終端番号より大きい場合（Ｓ６０７：Ｙｅｓ）、ｊにｊ＋１の値を設定し（Ｓ６０８）、ｊがファイル総数以下の場合（Ｓ６０９：Ｎｏ）、Ｓ６０３以降を繰り返す。つまり、使用期間調査部２５は、ファイルの最後のブロック番号である場合、Ｓ６０８を実行する。
【０１４３】
また、使用期間調査部２５は、ｊがファイル総数より大きい場合（Ｓ６０９：Ｙｅｓ）、ｉにｉ＋１の値を設定し（Ｓ６１０）、ｉが検証対象ソフトウェアの総数以下の場合（Ｓ６１１：Ｎｏ）、Ｓ６０２以降を繰り返す。
【０１４４】
その後、図１５に示すように、使用期間調査部２５は、ｉが検証対象ソフトウェアの総数より大きい場合（Ｓ６１１：Ｙｅｓ）、ｉに１を設定し（Ｓ６１２）、ｊに１を設定し（Ｓ６１３）、使用期間テーブルを読み込む（Ｓ６１４）。
【０１４５】
続いて、使用期間調査部２５は、変数ｗｏｒｋ１およびｗｏｒｋ２のそれぞれに１を設定し（Ｓ６１５）、ｋに１を設定し（Ｓ６１６）、使用期間テーブル（ｉ；ｊ，ｋ）の値が０か否かを判定する（Ｓ６１７）。つまり、使用期間調査部２５は、ｊ番目のファイルのブロック番号ｋが０か否かを判定する。
【０１４６】
そして、使用期間調査部２５は、使用期間テーブル（ｉ；ｊ，ｋ）の値が０以外の場合（Ｓ６１７：Ｎｏ）、ｗｏｒｋ１にｗｏｒｋ１＋１の値を設定し（Ｓ６１８）、ｋにｋ＋１の値を設定する（Ｓ６１９）。なお、使用期間調査部２５は、使用期間テーブル（ｉ；ｊ，ｋ）の値が０である場合（Ｓ６１７：Ｙｅｓ）、Ｓ６１８を実行することなくＳ６１９を実行する。
【０１４７】
続いて、使用期間調査部２５は、ファイルの終端ではない場合（Ｓ６２０：Ｎｏ）、Ｓ６１７以降を繰り返し、ファイルの終端である場合（Ｓ６２０：Ｙｅｓ）、リード対象ブロック数（ｉ）にｗｏｒｋ１の値を設定する（Ｓ６２１）。さらに、使用期間調査部２５は、ブロック総数（ｉ）にｗｏｒｋ２の値を設定する（Ｓ６２２）。
【０１４８】
その後、使用期間調査部２５は、リード対象ブロック数（ｉ）とブロック総数（ｉ）とをブロックテーブルにセットし（Ｓ６２３）、ｊにｊ＋１の値をセットする（Ｓ６２４）。そして、使用期間調査部２５は、ｊがファイルの総数を超えない場合（Ｓ６２５：Ｎｏ）、Ｓ６１４以降を繰り返す。
【０１４９】
一方、使用期間調査部２５は、ｊがファイルの総数を超える場合（Ｓ６２５：Ｙｅｓ）、全ファイルに関するリード対象ブロック数とブロック総数とから、リード対象ブロック数の割合を算出して、ブロックテーブルに格納する（Ｓ６２６）。なお、Ｓ６２６は、検証対象ソフトウェアごとに実行される。
【０１５０】
その後、使用期間調査部２５は、ｉにｉ＋１の値を設定し（Ｓ６２７）、ｉが検証対象ソフトウェアの総数を超えない場合は（Ｓ６２８：Ｎｏ）、Ｓ６１３以降を繰り返し、
ｉが検証対象ソフトウェアの総数を超える場合は（Ｓ６２８：Ｙｅｓ）、処理を終了する。
【０１５１】
（ワークファイルの構成変更処理）
図１６は、ワークファイルの構成を変更する処理の流れを示すフローチャートである。この処理は、複数の検証対象ソフトウェアが順次実行される場合に、各検証対象ソフトウェアの実行前に起動され、図１０に示した準備プログラムの処理に該当する。
【０１５２】
また、図１６では、検証対象ソフトウェアの番号を引数で渡すように制御しているが、呼ばれるたびに自身でカウントアップするように制御することもできる。この処理によって、順次実行される検証対象ソフトウェアに関する実行環境が生成される。つまり、１つ前の検証対象ソフトウェアに関するワークファイルの引き継ぎが実行される。
【０１５３】
図１６に示すように、ワークファイル構成部２６は、変数ｉに引数（検証対象ソフトウェア）をセットし（Ｓ７０１）、ファイルに関するカウンターｊに１を設定する（Ｓ７０２）。
【０１５４】
そして、ワークファイル構成部２６は、ワークファイル１６を読み込み、ＤＡＴＡ（ｒ）を生成し（Ｓ７０３）、ワークテーブル（ｊ，ｂ）を読み込む（Ｓ７０４）。なお、ｒ＝１、２、・・・、ＳＵＭ（ｊ）である。ＳＵＭ（ｊ）は、ｊ番目のワークファイル１６のブロック数である。この時点のワークファイル１６、ワークテーブルは、前の検証対象ソフトウェアの実行が完了した状態のデータである。
【０１５５】
その後、ワークファイル構成部２６は、ｂに１を設定し（Ｓ７０５）、ｋにワークテーブル（ｊ；ｂ）の値を設定する（Ｓ７０６）。そして、ワークファイル構成部２６は、使用期間テーブル（ｉ；ｊ，ｋ）の値を判定する（Ｓ７０７）。
【０１５６】
そして、ワークファイル構成部２６は、使用期間テーブル（ｉ；ｊ，ｋ）の値が“始”または“始＆終”である場合、今回の検証対象ソフトウェアに関するデータをセットする（Ｓ７０８）。具体的には、ワークファイル構成部２６は、新ＤＡＴＡ（ｋ）に０を設定する。
【０１５７】
また、ワークファイル構成部２６は、使用期間テーブル（ｉ；ｊ，ｋ）の値が“中”または“終”である場合、前回のワークファイル１６の内容をコピーする（Ｓ７０９）。また、ワークファイル構成部２６は、使用期間テーブル（ｉ；ｊ，ｋ）の値が空白である場合、何も実行せずにＳ７１０を実行する。
【０１５８】
その後、ワークファイル構成部２６は、リード領域テーブル（ｊ，ｋ）に使用期間テーブル（ｉ；ｊ，ｋ）の値を設定し（Ｓ７１０）、ｂにｂ＋１の値を設定する（Ｓ７１１）。すなわち、ワークファイル構成部２６は、リード領域テーブル１４を生成する。
【０１５９】
そして、ワークファイル構成部２６は、変数ｂの値がリード対象ブロック数以下の場合（Ｓ７１２：Ｎｏ）、Ｓ７０６以降を繰り返す。
【０１６０】
続いて、ワークファイル構成部２６は、リード領域テーブル（ｊ，ｋ）からワークテーブル（ｊ，ｂ）を生成する（Ｓ７１３）。つまり、今回の検証対象ソフトウェアの実行時に参照されるワークテーブル１５が生成される。なお、ｂ＝１、２、・・・、ＮＵＭ（ｊ）である。
【０１６１】
その後、ワークファイル構成部２６は、「新ＤＡＴＡ（ｒ）：ｒ＝１、２、・・・、ＳＵＭ（ｊ）」からワークファイル１６へ書き込む（Ｓ７１４）。
【０１６２】
そして、ワークファイル構成部２６は、ｊがファイルの総数を超えない場合（Ｓ７１５：Ｎｏ）、Ｓ７０３以降を繰り返す。一方、ｊがファイルの総数を超える場合（Ｓ７１５：Ｙｅｓ）、ソフトウェア実行部２４ａが該当する次の検証対象ソフトウェアを実行する（Ｓ７１６）。
【０１６３】
［効果］
このように、検証装置１０は、次の検証対象ソフトウェアを実行する際に、実行済みの検証対象ソフトウェアしか参照しないワークファイル１６の領域を削除し、次以降の検証対象ソフトウェアが参照するワークファイル１６を再構成する。その後、検証装置１０は、再構成後のワークファイル１６を用いて検証処理を実行する。
【０１６４】
図１７は、実施例２に係るワークファイルの構成変更の具体例を説明する図である。図１７に示すように、検証装置１０は、検証対象ソフトウェア１の検証時は、４つのブロックを有するワークファイル１６を用いて検証する。
【０１６５】
そして、検証装置１０は、検証対象ソフトウェア１の検証が終了すると、準備プログラムを実行して、ワークファイル１６の構成を変更する。この結果、検証装置１０は、検証対象ソフトウェア２の検証時は、３つのブロックを有するワークファイル１６を用いて検証する。
【０１６６】
そして、検証装置１０は、検証対象ソフトウェア２の検証が終了すると、準備プログラムを実行して、ワークファイル１６の構成を変更する。この結果、検証装置１０は、検証対象ソフトウェア３の検証時は、２つのブロックを有するワークファイル１６を用いて検証する。
【０１６７】
このように、検証装置１０は、実行対象の検証対象ソフトウェアの数が減るに連れてワークファイル１６が有するブロック数を減らすことができ、ワークファイル１６の容量を削減できる。
【実施例３】
【０１６８】
次に、検証装置１０は、より実動環境に近づけるために、リードやライトの応答を送信する際に、待ち時間を設けることができる。
【０１６９】
［処理の説明］
具体的には、以下の条件では、実際にファイルアクセスを行う場合とワークファイル１６にアクセスする場合で、ディスクから完了が返るタイミングが異なる。
（条件）続けて同じファイルへのアクセスを行う  かつ  直前のアクセスが実際のファイルアクセスでは離れた領域へアクセスを行う  かつ  ワークファイル上では連続した領域である。
【０１７０】
そこで、検証装置１０は、この条件に合致する場合は、アクセスを行う前に一定時間の待ちを入れることで実動環境に近づける。なお、リード命令、ライト命令のそれぞれに待ち時間を入れるかどうかについて、検証者に指定させることもできる。実施例では、この検証者の指定を動作モードと呼ぶ。
【０１７１】
検証装置１０は、検証対象ソフトウェアとは別に、予めサイズを定義したダミーファイルのリード命令およびライト命令を行う性能情報取得プログラムを用いる。性能情報取得プログラムでは、以下のように２つのダミーファイルを用意しておき、それぞれ同じサイズの連続した領域と、離れた領域に対するリード命令とライト命令を行い、その差を測定する。
【０１７２】
例えば、検証装置１０は、ストレージ装置５０に格納されるダミーファイルＸの先頭から「サイズ」分のリード命令またはライト命令を実施し、実行時間を計測する。続いて、検証装置１０は、「サイズ」分だけオフセットをずらし、「サイズ」分のリード命令またはライト命令を実施し、実行時間を計測する。検証装置１０は、上記処理を例えばｎ回など所定回数繰り返し、計測したｎ回の測定値の平均として「測定値１」を算出する。
【０１７３】
次に、検証装置１０は、ストレージ装置５０に格納されるダミーファイルＹの先頭から「サイズ」分のリード命令またはライト命令を実施し、実行時間を計測する。続いて、検証装置１０は、「サイズ」×２だけオフセットをずらし、「サイズ」分のリード命令またはライト命令を実施し、実行時間を計測する。検証装置１０は、上記処理を例えばｎ回など所定回数繰り返し、計測したｎ回の測定値の平均として「測定値２」を算出する。
【０１７４】
その後、検証装置１０は、「待ち時間  ＝  測定値２  −  測定値１」を算出する。そして、検証装置１０は、ライト命令やリード命令に対して応答を送信する場合、待ち時間経過後に応答を送信する。なお、ダミーファイルＸとダミーファイルＹは、同じファイルであってもよい。
【０１７５】
［処理の流れ］
図１８は、待ち時間を算出する処理の流れを示すフローチャートである。この処理は、上記性能情報取得プログラムが実行する処理である。また、ここでは、一例として、リード命令について説明するが、ライト命令に対しても同様に処理することができる。
【０１７６】
図１８に示すように、検証装置１０の検証実行部２４は、サイズに１Ｍｂｙｔｅを設定し（Ｓ８０１）、ダミーファイル１をオープンし（Ｓ８０２）、オフセットに０をセットする（Ｓ８０３）。
【０１７７】
そして、検証実行部２４は、変数ｉに１を設定した後（Ｓ８０４）、オフセットにオフセット＋サイズ×ｉの値を設定し（Ｓ８０５）、時刻を取得して開始時刻にセットする（Ｓ８０６）。続いて、検証実行部２４は、オフセットやサイズをパラメータとしてダミーファイル１をリードする（Ｓ８０７）。
【０１７８】
そして、検証実行部２４は、ダミーファイル１をリードした時刻を終了時刻にセットし（Ｓ８０８）、「リード時間（ｉ）＝終了時刻−開始時刻」を算出する（Ｓ８０９）。その後、検証実行部２４は、ｉにｉ＋１の値を設定し（Ｓ８１０）、ｉが予め定めた繰り返し回数を示す定数以下の場合（Ｓ８１１：Ｎｏ）、Ｓ８０５以降を繰り返す。
【０１７９】
一方、検証実行部２４は、ｉが予め定めた繰り返し回数を示す定数よりも大きい場合（Ｓ８１１：Ｙｅｓ）、平均リード時間（１）を計算する（Ｓ８１２）。
【０１８０】
その後、検証実行部２４は、ダミーファイル２をオープンし（Ｓ８１３）、オフセットに０をセットし（Ｓ８１４）、変数ｉに１を設定する（Ｓ８１５）。そして、検証実行部２４は、オフセットにオフセット＋サイズ×２ｉの値を設定し（Ｓ８１６）、時刻を取得して開始時刻にセットする（Ｓ８１７）。
【０１８１】
続いて、検証実行部２４は、オフセットやサイズをパラメータとしてダミーファイル２をリードする（Ｓ８１８）。そして、検証実行部２４は、ダミーファイル２をリードした時刻を終了時刻にセットし（Ｓ８１９）、「リード時間（ｉ）＝終了時刻−開始時刻」を算出する（Ｓ８２０）。
【０１８２】
その後、検証実行部２４は、ｉにｉ＋１の値を設定し（Ｓ８２１）、ｉが予め定めた繰り返し回数を示す定数以下の場合（Ｓ８２２：Ｎｏ）、Ｓ８１６以降を繰り返す。
【０１８３】
一方、検証実行部２４は、ｉが予め定めた繰り返し回数を示す定数よりも大きい場合（Ｓ８２２：Ｙｅｓ）、平均リード時間（２）を計算する（Ｓ８２３）。その後、検証実行部２４は、「平均リード時間（２）−平均リード時間（１）」を算出して、「リード待ち時間」に設定する（Ｓ８２４）。
【０１８４】
検証実行部２４は、上述した処理をリード命令とライト命令について実行することで、図１９に示す待ち時間テーブルを生成する。図１９は、待ち時間テーブルの例を示す図である。図１９に示すように、待ち時間テーブルは、リード待ち時間とライト待ち時間とを記憶する。
【０１８５】
図１９の例では、応答制御部２４ｂは、検証対象ソフトウェアからリード命令を受け付けた場合、リード命令実行後に１５０μｓｅｃ経過してから応答を送信する。また、応答制御部２４ｂは、検証対象ソフトウェアからライト命令を受け付けた場合、ライト命令実行後に１２０μｓｅｃ経過してから応答を送信する。なお、待ち時間テーブルは、記憶部１２に記憶されている。
【０１８６】
［結果］
このように、検証装置１０は、待ち時間を設けて応答することができ、ストレージ装置５０上で実際にリードまたはライトするので、待ち時間の信頼性も高い。この結果、検証装置１０は、より実動環境に近い検証処理を実行できるので、検証精度の向上が図れる。
【実施例４】
【０１８７】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。
【０１８８】
（記憶装置）
実施例では、検証装置１０は、ストレージ装置５０とは異なる記憶装置にワークファイル１６を生成する例を説明したが、これに限定されるものではなく、ストレージ装置５０内にワークファイル１６を生成することもできる。また、検証装置１０は、検証装置１０の記憶部１２やストレージ装置５０以外の別の記憶装置にワークファイル１６を生成することもできる。
【０１８９】
（システム）
また、本実施例において説明した各処理のうち、自動的におこなわれるものとして説明した処理の全部または一部を手動的におこなうこともできる。あるいは、手動的におこなわれるものとして説明した処理の全部または一部を公知の方法で自動的におこなうこともできる。この他、上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【０１９０】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散や統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【０１９１】
（ハードウェア）
図２０は、ハードウェア構成例を説明する図である。図２０に示すように、検証装置１０は、通信インタフェース１０ａ、ＨＤＤ（Hard  Disk  Drive）１０ｂ、メモリ１０ｃ、ＣＰＵ（Central  Processing  Unit）１０ｄを有する。また、図２０に示した各部は、バス等で相互に接続される。
【０１９２】
通信インタフェース１０ａは、他の装置との通信を制御するインタフェースであり、例えばネットワークインタフェースカードである。ＨＤＤ１０ｂは、図２等に示した機能を動作させるプログラム、ＤＢ、テーブルを記憶する。
【０１９３】
ＣＰＵ１０ｄは、図２等に示した各処理部と同様の処理を実行するプログラムをＨＤＤ１０ｂ等から読み出してメモリ１０ｃに展開することで、図２等で説明した各機能を実行するプロセスを動作させる。
【０１９４】
すなわち、このプロセスは、検証装置１０が有する各処理部と同様の機能を実行する。具体的には、ＣＰＵ１０ｄは、検証データ生成部２１、特定部２２、ワークファイル生成部２３、検証実行部２４等と同様の機能を有するプログラムをＨＤＤ１０ｂ等から読み出す。そして、ＣＰＵ１０ｄは、検証データ生成部２１、特定部２２、ワークファイル生成部２３、検証実行部２４と同様の処理を実行するプロセスを実行する。
【０１９５】
このように検証装置１０は、プログラムを読み出して実行することで検証方法を実行する情報処理装置として動作する。また、検証装置１０は、媒体読取装置によって記録媒体から上記プログラムを読み出し、読み出された上記プログラムを実行することで上記した実施例と同様の機能を実現することもできる。なお、この他の実施例でいうプログラムは、検証装置１０によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
【符号の説明】
【０１９６】
１０  検証装置
１１  通信制御部
１２  記憶部
１３  プログラムＤＢ
１４  リード領域テーブル
１５  ワークテーブル
１６  ワークファイル
２０  制御部
２１  検証データ生成部
２２  特定部
２３  ワークファイル生成部
２４  検証実行部
２４ａ  ソフトウェア実行部
２４ｂ  応答制御部
２５  使用期間調査部
２６  ワークファイル構成部
【図１】
2015184822.tif 000003
【図２】
2015184822.tif 000004
【図３】
2015184822.tif 000005
【図４】
2015184822.tif 000006
【図５】
2015184822.tif 000007
【図６】
2015184822.tif 000008
【図７】
2015184822.tif 000009
【図８】
2015184822.tif 000010
【図９】
2015184822.tif 000011
【図１０】
2015184822.tif 000012
【図１１】
2015184822.tif 000013
【図１２】
2015184822.tif 000014
【図１３】
2015184822.tif 000015
【図１４】
2015184822.tif 000016
【図１５】
2015184822.tif 000017
【図１６】
2015184822.tif 000018
【図１７】
2015184822.tif 000019
【図１８】
2015184822.tif 000020
【図１９】
2015184822.tif 000021
【図２０】
2015184822.tif 000022