(57)【特許請求の範囲】
【請求項１】
コンピュータに、
特定のプログラムが複数回実行される場合、前記複数回の実行の各々について、前記特定のプログラムの実行時間を記憶装置に記憶し、
前記記憶装置に記憶された実行時間に応じて前記複数回の実行が分類された結果から算出される、分類により生成されたグループに属する実行の数が前記複数回の実行の総数に占める割合に応じて、前記特定のプログラムの実行ルートが安定しているか判定する、
処理を実行させる判定プログラム。
【請求項２】
前記特定のプログラムの実行ルートが安定しているか判定する処理において、
前記割合が所定値以上である場合、前記特定のプログラムの実行ルートが安定していると判定する、
請求項１記載の判定プログラム。
【請求項３】
前記特定のプログラムの実行時間を前記記憶装置に記憶する処理において、
前記特定のプログラムの開始から終了までの時間である第１の実行時間を取得し、
前記特定のプログラムにおける複数のポイントの各々について、前記特定のプログラムの開始から当該ポイントまでの時間である第２の実行時間を取得し、
前記第１の実行時間と、前記複数のポイントの各々について取得した前記第２の実行時間とを前記記憶装置に記憶する、
処理を実行させる請求項１又は２記載の判定プログラム。
【請求項４】
前記特定のプログラムの実行時間を前記記憶装置に記憶する処理において、
前記複数のポイントの各々について、当該ポイントにおいてアクセスされる、第２の記憶装置における領域のアドレスを取得し、前記記憶装置に格納する、
処理を実行させ、
前記特定のプログラムの実行ルートが安定しているか判定する処理において、
前記記憶装置に記憶された実行時間及びアドレスに基づき前記複数回の実行を分類する、
処理を実行させる請求項３記載の判定プログラム。
【請求項５】
前記記憶装置はメモリであり、
前記第２の記憶装置はディスク装置であり、
前記コンピュータに、
前記特定のプログラムを複数回実行する前に、前記複数のポイント各々について、当該ポイントにおいてアクセスされる、前記第２の記憶装置における領域のデータを前記記憶装置にコピーする、
処理をさらに実行させ、
前記特定のプログラムの実行時間を記憶装置に記憶する処理において、
前記複数のポイントの各々において、前記記憶装置にコピーされたデータにアクセスする、
処理を実行させる請求項４記載の判定プログラム。
【請求項６】
前記特定のプログラムの実行時間を記憶装置に記憶する処理において、
前記複数のポイントの各々において、前記記憶装置にコピーされたデータにアクセスした場合に、前記第２の記憶装置に対してダミーのアクセス要求を発行する、
処理を実行させる請求項５記載の判定プログラム。
【請求項７】
前記複数のポイントの各々においてアクセスされる領域は、前記特定のプログラムの実行によって所定回数以上アクセスされる領域であるという第１の条件を満たす
請求項３記載の判定プログラム。
【請求項８】
前記複数のポイントの各々においてアクセスされる領域のアドレスは、当該ポイントの直前のポイントにおいてアクセスされる領域のアドレスと連続しないアドレスであるという第２の条件を満たす、
処理を実行させる請求項３記載の判定プログラム。
【請求項９】
前記実行時間は、ＣＰＵ（Central Processing Unit）実行時間である
請求項１記載の判定プログラム。
【請求項１０】
コンピュータが、
特定のプログラムが複数回実行される場合、前記複数回の実行の各々について、前記特定のプログラムの実行時間を記憶装置に記憶し、
前記記憶装置に記憶された実行時間に応じて前記複数回の実行が分類された結果から算出される、分類により生成されたグループに属する実行の数が前記複数回の実行の総数に占める割合に応じて、前記特定のプログラムの実行ルートが安定しているか判定する、
処理を実行する判定方法。
【請求項１１】
記憶装置と、
特定のプログラムが複数回実行される場合、前記複数回の実行の各々について、前記特定のプログラムの実行時間を前記記憶装置に記憶し、前記記憶装置に記憶された実行時間に応じて前記複数回の実行が分類された結果から算出される、分類により生成されたグループに属する実行の数が前記複数回の実行の総数に占める割合に応じて、前記特定のプログラムの実行ルートが安定しているか判定する判定部と、
を有する情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトウエアテストに関する。
【背景技術】
【０００２】
ソフトウエアテストとは、プログラムが正しく動作するか、意図しない動作をしないか、或いは目標の品質に到達しているか等を確認する作業のことである。
【０００３】
ソフトウエアテストを行う者が自ら開発したプログラムであれば、ソースコードに基づき、プログラムの実行ルートを網羅するためのテストセット（テストプログラムとも呼ばれる）を作成し、テストセットの有効性を確認することができる。このような、プログラムの内部構造を理解した上で行うソフトウエアテストは、ホワイトボックステストと呼ばれる。
【０００４】
一方、ＯＥＭ（Original Equipment Manufacturer）やＯＳＳ（Open Source Software）を利用する場合には、自らがソースコードを作成することなくプログラムを開発することができる。通常、このような方法で作成されたプログラムのテストにはブラックボックステストが利用される。ブラックボックステストとは、プログラムの入力及び出力に着目し、様々な入力に対して仕様書通りの出力が得られるかどうかを確認するテストのことである。
【０００５】
ところで、プログラムの実行ルートは、コンピュータ資源の状態または過去のアクセス履歴などの内部状態の違いが原因で、同じ入力であっても異なる実行ルートになることがある。プログラムのソースコードを理解している場合には、実行ルートを特定することは可能である。しかし、ＯＥＭやＯＳＳ等を利用して作成したプログラムの場合、内部状態を把握することが難しく、実行ルートの特定が困難である。従って、同じ入力について複数回のテストを実行した場合に実行ルートが安定しているかわからないという問題がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０１２−１３３７２１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
従って、本発明の目的は、１つの側面では、プログラムの実行ルートの安定性を評価できるようにするための技術を提供することである。
【課題を解決するための手段】
【０００８】
本発明の１つの態様では、特定のプログラムが複数回実行される場合、複数回の実行の各々について、特定のプログラムの実行時間を記憶装置に記憶し、記憶装置に記憶された実行時間に応じて複数回の実行が分類された結果から算出される、分類により生成されたグループに属する実行の数が複数回の実行の総数に占める割合に応じて、特定のプログラムの実行ルートが安定しているか判定する処理を含む。
【発明の効果】
【０００９】
１つの側面では、プログラムの実行ルートの安定性を評価することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は、情報処理装置の構成を示す図である。
【図２】図２は、ドライバの機能ブロック図である。
【図３】図３は、本実施の形態の概要について説明するための図である。
【図４】図４は、事前の設定処理の処理フローを示す図である。
【図５】図５は、対象範囲について説明するための図である。
【図６】図６は、開始ブロック及び終了ブロックについて説明するための図である。
【図７】図７は、範囲テーブルに格納されるデータの一例を示す図である。
【図８】図８は、アクセステーブルに格納されるデータの一例を示す図である。
【図９】図９は、テストプログラムの実行を開始する際にトレース処理部が実行する処理の処理フローを示す図である。
【図１０】図１０は、モード格納領域に格納されるデータの一例を示す図である。
【図１１】図１１は、トレース処理の処理フローを示す図である。
【図１２】図１２は、終端アドレス格納領域に格納されるデータの一例を示す図である。
【図１３】図１３は、テストプログラムの実行を終了する際にトレース処理部が実行する処理の処理フローを示す図である。
【図１４】図１４は、アクセスフラグ設定処理の処理フローを示す図である。
【図１５】図１５は、アクセステーブルに格納されるデータの一例を示す図である。
【図１６】図１６は、メモリにロードされるデータの量の抑制について説明するための図である。
【図１７】図１７は、ロード部が実行する処理の処理フローを示す図である。
【図１８】図１８は、マップテーブルに格納されるデータ及び確保されたメモリ領域の一例を示す図である。
【図１９】図１９は、検証処理を開始する際に検証部が実行する処理の処理フローを示す図である。
【図２０】図２０は、各テストを開始する際に検証部が実行する処理の処理フローを示す図である。
【図２１】図２１は、検証処理の処理フローを示す図である。
【図２２】図２２は、ダミーのアクセス要求について説明するための図である。
【図２３】図２３は、検証処理の処理フローを示す図である。
【図２４】図２４は、第１結果テーブルに格納されるデータの一例を示す図である。
【図２５】図２５は、各テストを終了する際に検証部が実行する処理の処理フローを示す図である。
【図２６】図２６は、検証処理を終了する際に検証部が実行する処理の処理フローを示す図である。
【図２７】図２７は、検証処理の結果を集約する処理の処理フローを示す図である。
【図２８Ａ】図２８Ａは、プロセスＧＩＤの付与について説明するための図である。
【図２８Ｂ】図２８Ｂは、第２結果テーブルに格納されるデータの一例を示す図である。
【図２９】図２９は、トータルの実行時間の集約例を示す図である。
【図３０】図３０は、集約された結果を整形する処理の処理フローを示す図である。
【図３１】図３１は、第３結果テーブルに格納されるデータの一例を示す図である。
【図３２】図３２は、使用可能なメモリの量が少ない場合におけるディスクアクセスの一例を示す図である。
【図３３】図３３は、使用可能なメモリの量が多い場合におけるディスクアクセスの一例を示す図である。
【図３４】図３４は、整形された結果の一例を示す図である。
【図３５】図３５は、整形された結果の一例を示す図である。
【図３６】図３６は、実行ルートの安定性を評価する処理の処理フローを示す図である。
【図３７】図３７は、コンピュータの機能ブロック図である。
【発明を実施するための形態】
【００１１】
図１に、本実施の形態における情報処理装置１の構成を示す。情報処理装置１は、メモリ（例えば主記憶）に設けられるワークデータ格納部１１と、例えばＨＤＤ（Hard Disk Drive）であるディスク装置１２とを有する。テストプログラム１４は、ソフトウエアテストの対象のプログラムである対象プログラム１５をＮ（Ｎは２以上の自然数）回呼び出し、Ｎ回のテストを実行する。各テストにおける入力値は同じである。ＯＳ（Operating System）におけるカーネル１３のプログラム、テストプログラム１４、対象プログラム１５、及びドライバ１０のプログラムは主記憶にロードされ、情報処理装置１におけるＣＰＵ（Central Processing Unit）に実行されることで、以下で説明するような各種機能を実現する。
【００１２】
図２に、ドライバ１０の機能ブロック図を示す。ドライバ１０は、トレース処理部１０１と、ロード部１０３と、検証部１０５とを有する。トレース処理部１０１は、ワークデータ格納部１１に格納されたデータに基づきトレース処理を実行し、処理結果をディスク装置１２に格納する。ロード部１０３は、ディスク装置１２に格納された、対象プログラム１５からアクセスされるデータを、ワークデータ格納部１１にロードする。検証部１０５は、トレース処理部１０１によってディスク装置１２に格納されたデータ及びワークデータ格納部１１にロードされたデータに基づき検証処理を実行し、処理結果をディスク装置１２に格納する。
【００１３】
なお、種々のプログラムに共通の特徴として、以下のようなディスクアクセスを行うことが挙げられる。（１）ディスク装置１２上の動作環境ファイルから、プログラムの動作条件等を読み込む、（２）プログラムの動作条件に従い処理を実行し、処理結果に応じてディスク装置１２上のデータの更新や追加を行う、（３）ディスク装置１２上の領域を作業領域として使用する、（４）発生したエラーの内容や実行ログをディスク装置１２に記録する。本実施の形態においては、このようなディスクアクセスに着目する。
【００１４】
図３を用いて、本実施の形態において実行される処理の概要について説明する。図３にいて、対象プログラム１５とドライバ１０との間の矢印はディスクアクセスの実行指示及びディスクアクセスの結果の通知を表し、ドライバ１０とディスク装置１２との間の矢印はディスクアクセスを表す。本実施の形態においては、まずドライバ１０におけるトレース処理部１０１が処理を実行する。トレース処理部１０１は、対象プログラム１５によってアクセスされるディスク装置１２の領域を調べ、対象プログラム１５の実行時間（ＣＰＵ時間或いはＣＰＵ実行時間とも呼ばれる。単位はｍｓ（ミリ秒）。）をカーネル１３から取得するポイント（以下、取得ポイントと呼ぶ）を決定する。図３においては、データ３０１にアクセスする処理と、データ３０２にアクセスする処理とが取得ポイントである。なお、実行時間とは、対象プログラム１５の実行を開始してから経過した時間である。
【００１５】
次に、ロード処理において、ドライバ１０におけるロード部１０３は、取得ポイントにおいてアクセスされるデータ３０１及び３０２をディスク装置１２内の領域から読み出し、ワークデータ格納部１１にコピーする。
【００１６】
そして、検証処理において、ドライバ１０における検証部１０５は、取得ポイントにおいて実行時間をカーネル１３から取得する。この際、ディスク装置１２内の領域におけるデータ３０１及び３０２にはアクセスせず、ワークデータ格納部１１にロードされたデータ３０１及び３０２にアクセスする。これにより、アクセスに要する時間を短縮できるので、短縮分の時間と実行時間の取得に要する時間とを相殺できるようになる。取得した実行時間及びディスクアクセスの際のアクセス先アドレスは、ディスク装置１２に保存される。
【００１７】
本実施の形態においては、Ｎ回のテストの各々について検証処理が実行される。そして、検証処理において取得された、対象プログラム１５の実行完了までに要する時間と、各取得ポイントに到達するまでに要する時間と、アクセス先のアドレスを要素とするアドレス列とに基づき、Ｎ回のテストがグループ化される。ユーザは、グループの数及び各グループに属するテストの数等に基づき、実行ルートのばらつきを確認できるので、対象プログラム１５の実行ルートの安定性を評価できるようになる。
【００１８】
次に、図４乃至図３６を用いて、情報処理装置１が実行する処理をより具体的に説明する。まず、図４乃至図８を用いて、事前の設定処理について説明する。本処理は、テストプログラム１４毎に行われる。
【００１９】
トレース処理部１０１は、各対象範囲の先頭アドレス及び最終アドレスの指定をユーザから受け付ける（図４：ステップＳ１）。対象範囲とは、図５に示すように、ディスク装置１２における領域の範囲のことであり、対象プログラム１５からアクセスされる領域の範囲である。
【００２０】
トレース処理部１０１は、開始ブロックを特定し、開始ブロックのブロック番号及びアドレスを、ワークデータ格納部１１における範囲テーブルに格納する（ステップＳ３）。開始ブロックとは、対象範囲における最も若い（すなわち、アドレスを表す番号が最も小さい）アドレスをＸとした場合において、アドレスＸを含むブロックである。例えば図６の例であれば、矢印６０１が指し示すブロックが開始ブロックである。
【００２１】
トレース処理部１０１は、最終ブロックを特定し、最終ブロックのブロック番号及びアドレスを、ワークデータ格納部１１における範囲テーブルに格納する（ステップＳ５）。最終ブロックとは、対象範囲において最も若くない（すなわち、アドレスを表す番号が最も大きい）アドレスをＸとした場合において、アドレスＸを含むブロックである。例えば図６の例であれば、矢印６０２が指し示すブロックが最終ブロックである。
【００２２】
図７に、範囲テーブルに格納されるデータの一例を示す。図７の例では、テストプログラム１４の名前（以下、テストプログラム名と呼ぶ）と、開始ブロックのブロック番号と、開始ブロックのアドレスと、最終ブロックのブロック番号と、最終ブロックのアドレスとが格納される。
【００２３】
図４の説明に戻り、トレース処理部１０１は、開始ブロックから最終ブロックまでの各ブロックについて、ワークデータ格納部１１におけるアクセステーブルにエントリを生成する（ステップＳ７）。
【００２４】
図８に、アクセステーブルに格納されるデータの一例を示す。図８の例では、テストプログラム名と、ブロック番号と、範囲フラグと、アクセスフラグとが格納される。範囲フラグ及びアクセスフラグは「ＯＮ」又は「ＯＦＦ」に設定されるが、ステップＳ７の時点においては「ＯＦＦ」に設定される。
【００２５】
図４の説明に戻り、トレース処理部１０１は、アクセステーブルに格納された範囲フラグのうち、ステップＳ１において指定を受け付けた対象範囲に含まれるブロックの範囲フラグを「ＯＮ」に設定する（ステップＳ９）。そして処理を終了する。
【００２６】
以上のような処理を実行すれば、初期的な状態のアクセステーブルを用意することができるようになる。
【００２７】
次に、図９及び図１０を用いて、トレース処理を開始する際にトレース処理部１０１が実行する処理について説明する。
【００２８】
まず、トレース処理部１０１は、実行が開始されるテストプログラム１４のテストプログラム名に対応するアクセステーブルからデータを読み込む（図９：ステップＳ１１）。
【００２９】
トレース処理部１０１は、ワークデータ格納部１１におけるモード格納領域に格納された、モードを表す情報を「トレース」に設定する（ステップＳ１３）。そして処理を終了する。モード格納領域には、例えば図１０に示すような態様で、モードを表す情報が格納される。
【００３０】
以上のような処理を実行すれば、トレース処理部１０１がトレース処理を開始できるようになる。
【００３１】
次に、図１１及び図１２を用いて、トレース処理部１０１が実行するトレース処理について説明する。本処理は、ディスクアクセスが行われる度に実行される。なお、ディスクアクセスのパラメータは、アクセス先のアドレス（ここでは、アクセスされる領域における最も若いアドレス）及びアクセスされるデータのサイズである。
【００３２】
まず、トレース処理部１０１は、ワークデータ格納部１１におけるモード格納領域に格納された、モードを表す情報が「検証」に設定されているか判断する（図１１：ステップＳ２１）。モードを表す情報が「検証」に設定されている場合（ステップＳ２１：Ｙｅｓルート）、処理は端子Ａを介して図２１のステップＳ１０１に移行する。ステップＳ１０１以降においては、トレース処理部１０１から呼び出された検証部１０５が検証処理を実行することになる。検証処理については後で説明する。
【００３３】
モードを表す情報が「検証」に設定されていない場合（ステップＳ２１：Ｎｏルート）、トレース処理部１０１は、ワークデータ格納部１１におけるモード格納領域に格納された、モードを表す情報が「トレース」に設定されているか判断する（ステップＳ２３）。
【００３４】
モードを表す情報が「トレース」に設定されていない場合（ステップＳ２３：Ｎｏルート）、モードを表す情報は「通常」である。従って、ドライバ１０は、パラメータに従い通常のディスクアクセスを実行する（ステップＳ２５）。そして処理を終了する。
【００３５】
一方、モードを表す情報が「トレース」に設定されている場合（ステップＳ２３：Ｙｅｓルート）、トレース処理部１０１は、アクセス先のアドレスが、範囲フラグが「ＯＮ」であるブロックに含まれるか判断する（ステップＳ２７）。範囲フラグは、アクセステーブル（図８）に格納されるフラグである。
【００３６】
アクセス先のアドレスが、範囲フラグが「ＯＮ」であるブロックに含まれない場合（ステップＳ２７：Ｎｏルート）、ドライバ１０は、通常のディスクアクセスを実行する（ステップＳ２５）。そして処理を終了する。
【００３７】
一方、アクセス先のアドレスが、範囲フラグが「ＯＮ」であるブロックに含まれる場合（ステップＳ２７：Ｙｅｓルート）、トレース処理部１０１は、ワークデータ格納部１１における終端アドレス格納領域に格納された終端アドレスと、アクセス先のアドレスとを比較する（ステップＳ２９）。終端アドレス格納領域は、例えば図１２に示すような態様で終端アドレスが格納される。終端アドレスとは、前回のディスクアクセスにおいてアクセスされる領域における最後の（すなわち、終端の）アドレスのことである。
【００３８】
トレース処理部１０１は、アクセス先のアドレスは、終端アドレスの次のアドレスであるか判断する（ステップＳ３１）。ステップＳ３１の処理によって、前回のディスクアクセスと今回のディスクアクセスとが一連のディスクアクセスであるかが判断される。なお、初回の処理の場合には終端アドレス格納領域に終端アドレスが格納されていないので、処理はステップＳ３１のＮｏルートに進む。
【００３９】
アクセス先のアドレスは、終端アドレスの次のアドレスである場合（ステップＳ３１：Ｙｅｓルート）、ステップＳ３７の処理に移行する。一方、アクセス先のアドレスは、終端アドレスの次のアドレスではない場合（ステップＳ３１：Ｎｏルート）、トレース処理部１０１は、アクセス先のアドレスを含むブロックのブロック番号ｎを特定する（ステップＳ３３）。
【００４０】
トレース処理部１０１は、ブロック番号ｎのブロックについてのアクセス数ＡＮ（ｎ）を１インクリメントする（ステップＳ３５）。
【００４１】
トレース処理部１０１は、今回のディスクアクセスの終端アドレスをアクセス先のアドレス及びサイズから特定し、終端アドレス格納領域に格納（ここでは、上書き）する（ステップＳ３７）。そして処理を終了する。
【００４２】
以上のような処理を実行すれば、アクセス先のアドレスが不連続であるポイントについてアクセス数を計数できるようになる。
【００４３】
次に、図１３乃至図１６を用いて、トレース処理を終了する際にトレース処理部１０１が実行する処理について説明する。
【００４４】
まず、トレース処理部１０１は、アクセスフラグ設定処理を実行する（ステップＳ４１）。アクセスフラグ設定処理については、図１４及び図１５を用いて説明する。
【００４５】
トレース処理部１０１は、ブロック番号を表す変数ｊをｊ＝０と設定する（図１４：ステップＳ５１）。
【００４６】
トレース処理部１０１は、ブロック番号ｊのブロックについてのアクセス数ＡＮ（ｊ）が閾値より大きいか判断する（ステップＳ５３）。閾値は、予めユーザによって設定される。ＡＮ（ｊ）が閾値以下である場合（ステップＳ５３：Ｎｏルート）、ステップＳ５７の処理に移行する。
【００４７】
ＡＮ（ｊ）が閾値より大きい場合（ステップＳ５３：Ｙｅｓルート）、トレース処理部１０１は、アクセステーブルに格納されたアクセスフラグのうち、ブロック番号ｊのブロックについてのアクセスフラグを「ＯＮ」に設定する（ステップＳ５５）。
【００４８】
トレース処理部１０１は、変数ｊを１インクリメントし（ステップＳ５７）、ｊが最終ブロック番号より大きいか判断する（ステップＳ５９）。ステップＳ５９において使用される最終ブロック番号は、範囲テーブル（図７）に格納された最終番号である。
【００４９】
ｊが最終ブロック番号以下である場合（ステップＳ５９：Ｎｏルート）、次のｊについて処理するため、ステップＳ５３の処理に戻る。一方、ｊが最終ブロック番号より大きい場合（ステップＳ５９：Ｙｅｓルート）、トレース処理部１０１は、ワークデータ格納部１１におけるアクセステーブルをディスク装置１２にコピーする。そして呼び出し元の処理に戻る。アクセスフラグ設定処理により、アクセステーブルには、例えば図１５に示すようなデータが格納されるようになる。図１５に示すように、範囲フラグ及びアクセスフラグはＯＮ又はＯＦＦに設定される。
【００５０】
図１３の説明に戻り、トレース処理部１０１は、ワークデータ格納部１１における終端アドレス格納領域における終端アドレスを削除する（ステップＳ４３）。さらに、トレース処理部１０１は、ワークデータ格納部１１におけるモード格納領域に格納された、モードを表す情報を「通常」に設定する（ステップＳ４５）。そして処理を終了する。
【００５１】
以上のように取得ポイントを決定すれば、メモリにロードされるデータの量を抑制することができるようになる。図１６を用いて、メモリにロードされるデータの量の抑制について説明する。図１６においては、対象プログラム１５が「巨大なサイズのデータから条件を満たすレコードを抽出し、抽出したレコードの内容を解析し、解析の結果を出力する」という処理を実行するためのプログラムであるとする。本実施の形態によれば、巨大なサイズのデータ（ここでは、データ１６０１乃至１６０４）のうち、データ１６０１をメモリにロードし、データ１６０２乃至１６０４をメモリにロードしない。よって、メモリにデータをロードすることによって他の処理に影響が及ぶ（例えば、他の処理に遅延が発生する）ようなことが無くなる。
【００５２】
また、本実施の形態によれば、頻繁には発生しないディスクアクセスもメモリへのロードの対象から外される。さらに、対象プログラム１５によるディスクアクセスとは関係が無いディスクアクセス（例えば、ＯＳによる定期パトロール及びログの書き込みなど）も、メモリへのロードの対象から外される。これにより、対象となる領域をさらに絞り込むことができるようになる。
【００５３】
次に、図１７及び図１８を用いて、ロード部１０３が実行する処理について説明する。本処理は、テストプログラム１４毎に実行される。
【００５４】
まず、ロード部１０３は、ディスク装置１２におけるアクセステーブル内のデータを読み込む（図１７：ステップＳ７１）。なお、ワークデータ格納部１１にアクセステーブルが残っている場合には、ワークデータ格納部１１におけるアクセステーブル内のデータを読み込むようにしてもよい。
【００５５】
ロード部１０３は、アクセステーブルに格納されたアクセスフラグが「ＯＮ」であるブロックの数ｂを計数する（ステップＳ７３）。
【００５６】
ロード部１０３は、ブロック数ｂ＊ブロックサイズ分のメモリ領域をワークデータ格納部１１内に確保する（ステップＳ７５）。そして、ロード部１０３は、アクセスフラグが「ＯＮ」であるブロック内のデータを、ステップＳ７５において確保したメモリ領域にコピーする（ステップＳ７７）。
【００５７】
ロード部１０３は、アクセスフラグが「ＯＮ」であるブロックのブロック番号と、そのブロック内のデータが格納されたメモリ上のアドレスとを対応付けて、ディスク装置１２におけるマップテーブルに格納する（ステップＳ７９）。そして処理を終了する。
【００５８】
以上のような処理を実行することで生成されるマップテーブルの一例を図１８の下段に示す。図１８の下段に示した例では、ブロック番号と、メモリ領域のアドレスとが対応付けて格納される。図１８の上段は確保されたメモリ領域を表しており、ここでは、１ブロックのサイズが０ｘ２０００（＝８１９２）（バイト）であるので、０ｘ２０００＊ｂ（バイト）のメモリ領域が確保されている。
【００５９】
次に、図１９を用いて、検証処理を開始する際に検証部１０５が実行する処理について説明する。本処理は、テストプログラム１４毎に行われる。
【００６０】
まず、検証部１０５は、ワークデータ格納部１１におけるモード格納領域に格納された、モードを表す情報を「検証」に設定する（図１９：ステップＳ８１）。
【００６１】
検証部１０５は、マップテーブル内のデータを読み込む（ステップＳ８３）。そして、検証部１０５は、テストの番号を表す変数ＴＥＳＴＮＵＭをＴＥＳＴＮＵＭ＝０と設定する（ステップＳ８５）。そして処理を終了する。
【００６２】
以上のような処理を実行すれば、テストプログラム１４について検証処理を開始できるようになる。
【００６３】
次に、図２０を用いて、各テストを開始する際に検証部１０５が実行する処理について説明する。本処理は、テスト毎に行われる。
【００６４】
まず、検証部１０５は、テストの番号を表す変数ＴＥＳＴＮＵＭを１インクリメントする（図２０：ステップＳ９１）。
【００６５】
検証部１０５は、取得ポイントの番号を表す変数ＣＯＵＮＴをＣＯＵＮＴ＝０と設定する（ステップＳ９３）。そして処理を終了する。
【００６６】
以上のような処理を実行すれば、検証部１０５が各テストについて検証処理を開始できるようになる。
【００６７】
次に、図２１乃至図２４を用いて、検証部１０５が実行する検証処理について説明する。本処理は、ディスクアクセスが行われる度に実行される。なお、ディスクアクセスのパラメータは、アクセス先のアドレス（ここでは、アクセスされる領域における最も若いアドレス）及びアクセスされるデータのサイズである。
【００６８】
まず、トレース処理部１０１に呼び出された検証部１０５は、アクセス先のアドレスと、アクセスされるデータのサイズとに基づき、ディスク装置１２内のアクセスされる領域に含まれるブロックのうち最初のブロックを特定する（図２１：ステップＳ１０１）。
【００６９】
検証部１０５は、ディスク装置１２におけるアクセステーブルに格納された範囲フラグのうち、ステップＳ１０１において特定されたブロックに対応する範囲フラグは「ＯＮ」であるか判断する（ステップＳ１０３）。
【００７０】
範囲フラグが「ＯＮ」ではない場合（ステップＳ１０３：Ｎｏルート）、ドライバ１０は、パラメータに従い、通常のディスクアクセスを実行する（ステップＳ１０５）。そして処理は端子Ｂを介して図２３の処理に移行し終了する。一方、範囲フラグが「ＯＮ」である場合（ステップＳ１０３：Ｙｅｓルート）、検証部１０５は、アクセス先のアドレスを、ワークデータ格納部１１におけるアドレス格納領域に追加する（ステップＳ１０７）。アドレス格納領域は、アクセス先のアドレスが蓄積される領域（例えばカーネル空間の領域）である。
【００７１】
検証部１０５は、ステップＳ１０１において特定されたブロックに対応するアクセスフラグが「ＯＮ」であるか判断する（ステップＳ１０９）。アクセスフラグは「ＯＮ」ではない場合（ステップＳ１０９：Ｎｏルート）、今回のディスクアクセスは取得ポイントではない。従って、ドライバ１０は、パラメータに従い、通常のディスクアクセスを実行する（ステップＳ１０５）。そして処理は端子Ｂを介して図２３の処理に移行し終了する。
【００７２】
一方、ステップＳ１０１において特定されたブロックに対応するアクセスフラグが「ＯＮ」である場合（ステップＳ１０９：Ｙｅｓルート）、検証部１０５は、取得ポイントの番号を表す変数ＣＯＵＮＴを１インクリメントする（ステップＳ１１１）。
【００７３】
検証部１０５は、アクセス先のアドレスとサイズとから、ディスクアクセスの分割数ＤＮを算出する（ステップＳ１１３）。例えば、１回のディスクアクセスでアクセス可能なデータの量でサイズを割った値に１を加えることによって、ディスクアクセスの分割数ＤＮが算出される。１回のディスクアクセスでアクセス可能なデータの量の算出にアクセス先のアドレスが必要である場合には、アクセス先のアドレスも使用される。
【００７４】
検証部１０５は、分割されたディスクアクセスの番号を表す変数ｉをｉ＝１と設定する（ステップＳ１１５）。そして、検証部１０５は、アクセス先のアドレスに対応するメモリアドレスをマップテーブルから特定し、特定されたメモリアドレスが示すメモリ領域にアクセスを行う（ステップＳ１１７）。
【００７５】
検証部１０５は、ディスク装置１２に対して、ダミーのアクセス要求を発行する（ステップＳ１１９）。そして、検証部１０５は、スリープ状態に移行する（ステップＳ１２１）。そして処理は端子Ｃを介して図２３のステップＳ１２３に移行する。ステップＳ１１９及びＳ１２１の処理について、図２２を用いて説明する。
【００７６】
ディスク装置１２にアクセスする代わりにワークデータ格納部１１にアクセスすると、通常はディスク装置１２へのアクセスが発生した後に行われる、割り込みハンドラによる通知が行われなくなる。そのため、ドライバ１０が割り込みハンドラからの通知の延長上で実行する処理を実行できなくなる。そこで本実施の形態においては、図２２に示すような方法によって、割り込みハンドラからの通知が行われるようにする。図２２に示すように、ドライバ１０の検証部１０５が対象プログラム１５からのディスクアクセスを検出すると、アクセス先のアドレスを調べることにより、取得ポイントであるか判断する。取得ポイントである場合、検証部１０５は、ディスク装置１２に対してダミーのアクセス要求を発行し、スリープ状態に移行する。ダミーのアクセス要求は実際のアクセス要求とは異なり、データの読み書きは行われないが、カーネル１３がディスクアクセスが発生したことを検出する。ディスクアクセスが発生したことをカーネル１３から通知された割り込みハンドラは、ドライバ１０に対して通知を行うことにより、検証部１０５のスリープ状態を解除する。
【００７７】
図２３の説明に移行し、検証部１０５は、割り込みハンドラからの通知に従いスリープ状態を解除すると（ステップＳ１２３）、ｉ＝１が成立するか判断する（ステップＳ１２５）。ｉ＝１が成立しない場合（ステップＳ１２５：Ｎｏルート）、ドライバ１０は、パラメータに従い、通常のディスクアクセスを実行する（ステップＳ１２７）。そしてステップＳ１３５の処理に移行する。
【００７８】
一方、ｉ＝１が成立する場合（ステップＳ１２５：Ｙｅｓルート）、検証部１０５は、対象プログラム１５のプロセスのプロセスＩＤ（IDentifier）をＯＳのカーネル１３から取得する（ステップＳ１２９）。また、検証部１０５は、ステップＳ１２９において取得したプロセスＩＤに対応する実行時間を、ＯＳのカーネル１３から取得する（ステップＳ１３１）。なお、実行時間は、プロセスの実行開始時点からステップＳ１３１の処理時点までの間の時間であるが、このような情報をカーネル１３から取得できない場合もある。そのような場合には、プロセスの実行開始時点における時刻の情報をステップＳ９３の処理の後に保存し、ステップＳ１３１においてカーネル１３から取得した時刻との差を求めてもよい。
【００７９】
検証部１０５は、ＣＯＵＮＴ、アドレス格納領域に格納された最後のアドレス、及び実行時間を、ワークデータ格納部１１における第１結果テーブルに追加する（ステップＳ１３３）。但し、該当するプロセスＩＤについて第１結果テーブルが存在しない場合（すなわち、ＣＯＵＮＴ＝１である場合）には、ステップＳ１３３において、テストプログラムの識別子、プロセスＩＤ、ＴＥＳＴＮＵＭ、ＣＯＵＮＴ、アドレス、及び実行時間を含む第１結果テーブルが生成される。
【００８０】
図２４に、第１結果テーブルに格納されるデータの一例を示す。図２４の例では、テストプログラム名（図２４においては、テストプログラムＡ）と、プロセスＩＤ（図２４においては、１００１）と、ＴＥＳＴＮＵＭ（図２４においては、Ｎｏ．１）と、ＣＯＵＮＴ（図２４においては、「１」、「２」及び「３」）と、アクセス先のアドレスと、実行時間とが格納される。このように、第１結果テーブルはプロセスＩＤ毎に生成される。
【００８１】
図２３の説明に戻り、検証部１０５は、ｉを１インクリメントし（ステップＳ１３５）、ｉがＤＮより大きいか判断する（ステップＳ１３７）。ｉがＤＮ以下である場合（ステップＳ１３７：Ｎｏルート）、ステップＳ１２５の処理に戻る。一方、ｉがＤＮより大きい場合（ステップＳ１３７：Ｙｅｓルート）、処理は終了する。
【００８２】
以上のような処理を実行すれば、各テストについて、各取得ポイントに到達するまでに要する時間と、アクセス先のアドレスを要素とするアドレス列とを記録できるようになる。本実施の形態によれば、ソースコードに改変を加えなくてもよいので、ソースコードが公開されていないような場合にも対処可能である。
【００８３】
次に、図２５を用いて、各テストを終了する際に検証部１０５が実行する処理について説明する。本処理は、テスト毎に行われる。
【００８４】
まず、検証部１０５は、ワークデータ格納部１１におけるアドレス格納領域に格納されたアドレスをディスク装置１２に書き込む（図２５：ステップＳ１４１）。また、検証部１０５は、ワークデータ格納部１１における第１結果テーブルをディスク装置１２に書き込む（ステップＳ１４３）。
【００８５】
そして、検証部１０５は、テストプログラム名、プロセスＩＤ、ＴＥＳＴＮＵＭ、及びテストの終了までに要する時間（すなわち、対象プログラム１５の実行が終了するまでに要する時間。以下、トータルの実行時間と呼ぶ。）を、ディスク装置１２に書き込む（ステップＳ１４５）。そして処理を終了する。
【００８６】
以上のような処理を実行すれば、ディスク装置１２に格納したデータを後の処理に利用できるようになる。
【００８７】
次に、図２６を用いて、検証処理を終了する際に検証部１０５が実行する処理について説明する。本処理は、テストプログラム１４毎に行われる。
【００８８】
まず、検証部１０５は、ワークデータ格納部１１にロードされたデータをディスク装置１２に書き戻し（図２６：ステップＳ１５１）、データが格納されていた領域を解放する。
【００８９】
検証部１０５は、ワークデータ格納部１１におけるモード格納領域に格納された、モードを表す情報を「通常」に設定する（ステップＳ１５３）。そして処理を終了する。
【００９０】
以上のような処理を実行すれば、テストプログラム１４について検証処理を終了できるようになる。
【００９１】
次に、図２７乃至図２９を用いて、検証処理の結果を集約する処理について説明する。
【００９２】
まず、検証部１０５は、情報処理装置１において現在存在するプロセスのプロセスＩＤをＯＳのカーネル１３から取得し、プロセスＩＤリストを生成する（図２７：ステップＳ１６１）。プロセスＩＤリストに含まれるプロセスＩＤは、常駐プロセスのプロセスＩＤと、非常駐プロセスのプロセスＩＤとを含む。ステップＳ１６１の実行時点においては対象プログラム１５を実行していないので、対象プログラム１５のプロセスＩＤはプロセスＩＤリストには含まれない。
【００９３】
検証部１０５は、ディスク装置１２における第１結果テーブル（すなわち、プロセスＩＤ毎に生成された第１結果テーブル）から、プロセスＩＤを抽出する。そして、第１結果テーブルから抽出されたプロセスＩＤのうち、プロセスＩＤリストに含まれないプロセスＩＤを特定する（ステップＳ１６３）。ステップＳ１６３において抽出されたプロセスＩＤは、対象プログラム１５のプロセスＩＤを含む。従って、ステップＳ１６３において特定されるプロセスＩＤは、対象プログラム１５のプロセスＩＤを含む。また、ステップＳ１６３において特定されるプロセスＩＤは、テストプログラム１４の実行中には常駐していたがステップＳ１６１の処理時点においては常駐していないプロセスのプロセスＩＤ等をも含む。
【００９４】
検証部１０５は、特定されたプロセスＩＤについての第１結果テーブル内の結果を、ディスク装置１２から読み出す（ステップＳ１６５）。
【００９５】
検証部１０５は、ステップＳ１６５において読み出した結果を、アドレス列の少なくとも一部が同じであるものが同じグループになるようにグループ化を実行する（ステップＳ１６７）。図２８Ａに、グループ化の一例を示す。図２８Ａの例においては、プロセスＩＤが「２１１」であるプロセスについての結果２８０１と、プロセスＩＤが「３０２」であるプロセスについての結果２８０２とが示されている。結果２８０１におけるアドレス列（0x01008800,0x0156ab10,0x0100A800）と、結果２８０２におけるアドレス列（0x01008800,0x0156ab10,0x0100A800）とは一致するので、両者は同じグループになるようにグループ化が行われる。
【００９６】
検証部１０５は、グループの番号を表す変数であるｉをｉ＝１と設定する（ステップＳ１６９）。そして、検証部１０５は、グループｉに属する結果を集約し、グループｉに属するプロセスＩＤをプロセスＧＩＤ（Group IDentifier）で置換し、集約及び置換後の結果を第２結果テーブルとしてディスク装置１２に格納する（ステップＳ１７１）。
【００９７】
図２８Ｂに、第２結果テーブルに格納されるデータの一例を示す。図２８Ｂの例では、テストプログラムの識別子と、プロセスＧＩＤと、取得ポイントを表す番号（すなわちＣＯＵＮＴ）と、アクセス先のアドレスと、実行時間とが格納される。なお、図２８ＢにおいてはＮｏ．１のアドレス列（0x01008800,0x0156ab10,0x0100A800）とＮｏ．２のアドレス列（0x01008800,0x0156ab10,0x0100A800）とが完全に一致するが、ステップＳ１７１の処理においては、アドレス列の少なくとも一部が一致する場合であっても同じ第２結果テーブルに結果が格納される。
【００９８】
検証部１０５は、ｉを１インクリメントし（ステップＳ１７３）、ｉがグループ数より大きいか判断する（ステップＳ１７５）。グループ数とは、ステップＳ１６７におけるグループ化によって生成されたグループの数である。ｉがグループ数以下である場合（ステップＳ１７５：Ｎｏルート）、次のグループについて処理するため、ステップＳ１７１の処理に戻る。
【００９９】
一方、ｉがグループ数より大きい場合（ステップＳ１７５：Ｙｅｓルート）、検証部１０５は、ステップＳ１４５においてディスク装置１２に格納されたトータルの実行時間を集約し（ステップＳ１７７）、集約結果をディスク装置１２に格納する。そして処理を終了する。なお、ステップＳ１７７における集約は、ステップＳ１６７におけるグループ化の結果に基づいて行われる。
【０１００】
図２９に、トータルの実行時間の集約例を示す。図２９の例では、テストプログラムの識別子と、プロセスＧＩＤと、各テストついてのトータルの実行時間とを含むデータを生成することで集約が行われる。
【０１０１】
対象プログラム１５のプロセスは、テストプログラム１４の実行によってＮ回生成されるが、各回のプロセスＩＤは異なっているため、プロセスＩＤを使用して結果を集約することは困難である。そこで、上で述べたようにアドレス列を使用すれば、対象プログラム１５についての結果を集約することができるようになる。
【０１０２】
次に、図３０乃至図３５を用いて、集約された結果を整形する処理について説明する。
【０１０３】
まず、検証部１０５は、ディスク装置１２における第２結果テーブルに含まれるプロセスＧＩＤの数Ｍを特定する（図３０：ステップＳ１８１）。上で述べたように、第２結果テーブルはプロセスＧＩＤ毎に生成されるので、Ｍは第２結果テーブルの数と同じである。
【０１０４】
検証部１０５は、プロセスＧＩＤをカウントするための変数ｉをｉ＝１と設定する（ステップＳ１８３）。そして、検証部１０５は、ディスク装置１２における結果テーブルに含まれるプロセスＧＩＤのうち未処理のプロセスＧＩＤを１つ特定し、特定されたプロセスＧＩＤについての結果を、そのプロセスＧＩＤに対応する第２結果テーブルから取得する（ステップＳ１８５）。
【０１０５】
検証部１０５は、同じアドレスについての実行時間が同じカラムになるように、ステップＳ１８５において取得した結果の形式を変更する（ステップＳ１８７）。そして、検証部１０５は、形式変更後の結果を第３結果テーブルとしてディスク装置１２に格納する（ステップＳ１８９）。
【０１０６】
図３１に、第３結果テーブルに格納されるデータの一例を示す。図３１の例では、テストプログラムの識別子と、プロセスＧＩＤと、取得ポイントを表す番号と、アクセス先のアドレスと、テスト番号と、取得ポイントにおいて取得した実行時間とが格納される。図３１の例では、アドレス列（0x01008800,0x0156ab10,0x0100A800,0x0156ab20,0x0100C800,0x0156ab30,0x0100E800,0x016100a0,0x015a0000）とアドレス列（0x01008800,0x016100a0,0x015a0000）が出現している。
【０１０７】
図３０の説明に戻り、検証部１０５は、ｉを１インクリメントし（ステップＳ１９１）、ｉがＭより大きいか判断する（ステップＳ１９３）。ｉがＭ以下である場合（ステップＳ１９３：Ｎｏルート）、次のｉについて処理するため、ステップＳ１８５の処理に戻る。一方、ｉがＭより大きい場合（ステップＳ１９３：Ｙｅｓルート）、処理は終了する。
【０１０８】
以上のような処理を実行すれば、検証処理の結果がユーザにとってより把握しやすいような形式に変更されるようになる。なお、ステップＳ１９３が終了した後に、第３結果テーブルの内容を表示装置等に出力してもよい。
【０１０９】
なお、背景技術の欄で述べたように、同じ対象プログラム１５を実行したとしても、情報処理装置１における資源の状態等の違いによってプログラムの実行ルートが変わり、結果としてアドレス列も変わることがある。
【０１１０】
図３２乃至図３５を用いて、アドレス列のばらつきについて説明する。図３２に、使用可能なメモリの量が少ない場合におけるディスクアクセスの一例を示す。図３２の例においては、使用可能なメモリの量が少ないため、ディスク装置１２におけるデータ３２１は、３回に分けてメモリに読み出される。それに伴い、メモリ上のデータの一部を廃棄するため、廃棄したことを記録するためのログ３２２に対してもアクセスが行われる。また、管理ファイル３２３と、終了したことを記録するためのログ３２４とにもアクセスが行われる。
【０１１１】
図３３に、使用可能なメモリの量が多い場合におけるディスクアクセスの一例を示す。図３３の例においては、使用可能なメモリの量が多いため、ディスク装置１２におけるデータ３２１は１回でメモリに読み出される。そのため、メモリ上のデータの一部を廃棄しないため、廃棄したことを記録するためのログ３２２に対してはアクセスが行われない。そして、図３２の例と同様、管理ファイル３２３と、終了したことを記録するためのログ３２４とにもアクセスが行われる。
【０１１２】
使用可能なメモリの量が少ない場合にトレース処理を実行し、取得ポイントを決定したとすると、図３０に示した処理によって、例えば図３４に示すようなデータが生成される。図３４に示した例では、７つの取得ポイントについて実行時間が示されている。テスト１及びテスト２は、使用可能なメモリの量が少ない状態において行われたテストであるため、７つの取得ポイントの全てについて実行時間が取得されている。これに対し、テスト３は、使用可能なメモリの量が多い状態において行われたテストであるため、データ３２１には１回しかアクセスされず且つログ３２２にはアクセスされないため、３つの取得ポイントについてのみ実行時間が取得されている。
【０１１３】
これに対し、使用可能なメモリの量が多い場合にトレース処理を実行し、取得ポイントを決定したとすると、図３０に示した処理によって、例えば図３５に示すようなデータが生成される。図３５に示した例では、使用可能なメモリの量が少ない場合及び多い場合のいずれにおいても、３つの取得ポイントについて実行時間が示されている。テスト１及びテスト２においては、ログ３２２にアクセスする処理が行われるため、テスト１及びテスト２の実行時間はテスト３の実行時間より長い。この原因は、アドレス１についての取得ポイントからアドレス６についての取得ポイントまでの間に有ることがわかる。
【０１１４】
次に、図３６を用いて、実行ルートの安定性を評価する処理について説明する。ここでは、対象プログラム１５についての第３結果テーブルに基づき、対象プログラム１５についての実行ルートの安定性を評価する処理について説明する。
【０１１５】
まず、検証部１０５は、ディスク装置１２における第３結果テーブルからデータを読み出し（図３６：ステップＳ２０１）、アドレス列に基づき、Ｎ回のテストについて第１のグループ分けを実行する（ステップＳ２０３）。第１のグループ分けにおいては、例えば、アドレス列が全く同じであるテストが同じグループに属するようにグループ分けが行われる。アドレス列が全く同じであるテストは、実行ルートが同じである可能性が高いと考えられるからである。
【０１１６】
検証部１０５は、ステップＳ２０３におけるグループ分けの結果が所定の条件を満たす（すなわち、アドレス列のタイプが所定数に収斂する）か判断する（ステップＳ２０５）。ステップＳ２０５においては、例えば、グループに属するテストの数がテスト総数に占める割合が所定値以上である条件が各グループについて成立するか判断される。また、所定の条件は、グループの数が所定数（例えば２）以下であるという条件であってもよい。また、所定の条件は、或る１つ又は２つのグループに属するテストの数がテスト総数に占める割合が所定値以上であるという条件であってもよい。ステップＳ２０３におけるグループ分けの結果が所定の条件を満たさない場合（ステップＳ２０５：Ｎｏルート）、ステップＳ２０７の処理に移行する。
【０１１７】
一方、ステップＳ２０３におけるグループ分けの結果が所定の条件を満たす場合（ステップＳ２０５：Ｙｅｓルート）、検証部１０５は、ステップＳ２０３において行われたグループ分けの結果に対して、トータルの実行時間に基づき第２のグループ分けを実行する（ステップＳ２０９）。ステップＳ２０９においては、ステップＳ１７７における集約の結果が利用される。第２のグループ分けにおいては、例えば、トータルの実行時間が同じである（ここでは、実行時間の差が所定時間より短い）テストが同じグループに属するようにグループ分けが行われる。トータルの実行時間が同じであるテストは、実行ルートが同じである可能性が高いと考えられるからである。
【０１１８】
検証部１０５は、ステップＳ２０９におけるグループ分けの結果が所定の条件を満たすか判断する（ステップＳ２１１）。ステップＳ２０９におけるグループ分けの結果が所定の条件を満たさない場合（ステップＳ２１１：Ｎｏルート）、ステップＳ２０７の処理に移行する。
【０１１９】
一方、ステップＳ２０９におけるグループ分けの結果が所定の条件を満たす場合（ステップＳ２１１：Ｙｅｓルート）、検証部１０５は、ステップＳ２０９において行われたグループ分けの結果に対して、各測定ポイントまでの実行時間に基づき第３のグループ分けを実行する（ステップＳ２１３）。ステップＳ２１３においては、各測定ポイントまでの実行時間が同じである（ここでは、実行時間の差が所定時間より短い）テストが同じグループに属するようにグループ分けが行われる。各測定ポイントまでの実行時間が同じであるテストは、実行ルートが同じである可能性が高いと考えられるからである。
【０１２０】
検証部１０５は、ステップＳ２１３におけるグループ分けの結果が所定の条件を満たすか判断する（ステップＳ２１５）。ステップＳ２１３におけるグループ分けの結果が所定の条件を満たさない場合（ステップＳ２１５：Ｎｏルート）、検証部１０５は、対象プログラム１５の実行ルートが安定していないことを示すデータを生成する（ステップＳ２０７）。
【０１２１】
一方、ステップＳ２１３におけるグループ分けの結果が所定の条件を満たす場合（ステップＳ２１５：Ｙｅｓルート）、検証部１０５は、対象プログラム１５の実行ルートが安定していることを示すデータを生成する（ステップＳ２１７）。
【０１２２】
検証部１０５は、ステップＳ２１７又はＳ２０７において生成したデータを表示装置等に出力する（ステップＳ２１９）。そして処理を終了する。
【０１２３】
以上のような処理を実行すれば、対象プログラム１５の実行ルートの安定性を評価できるようになる。例えば、同じ入力でＮ回テストを実行したにも関わらず、実行ルートにばらつきがある場合には、対象プログラム１５の実行ルートが安定していないとわかる。また、テストプログラム１４の網羅性の確認することを目的として複数回のテストを実行したにも関わらず、特定の実行ルートしか通っていない場合には、ユーザはそれに応じてテストプログラム１４を作り直すなどの対策を行えるようになる。
【０１２４】
また、ＯＳ呼び出しの履歴を使用して実行ルートの状態を判定する方法においては、ＯＳ呼び出しの履歴を記録することに時間がかかるため、記録時の動作は実際の運用時の動作（すなわち、記録をしない場合の動作）とは異なることになる。また、履歴の量が大量になるため、履歴をメモリに保持できず、ディスクに履歴を保存することになるため、テストセットが終了するまでの時間が長くなるという問題がある。しかし、本実施の形態の方法であれば、これらの問題は生じない。
【０１２５】
以上本発明の一実施の形態を説明したが、本発明はこれに限定されるものではない。例えば、上で説明したドライバ１０の機能ブロック構成は実際のプログラムモジュール構成に一致しない場合もある。
【０１２６】
また、上で説明したデータ保持構成は一例であって、上記のような構成でなければならないわけではない。さらに、処理フローにおいても、処理結果が変わらなければ処理の順番を入れ替えることも可能である。さらに、並列に実行させるようにしても良い。
【０１２７】
また、ステップＳ２０５、Ｓ２１１、及びＳ２１５においては所定数を２としているが、所定数は２に限られるわけではない。
【０１２８】
また、図３６を用いて説明した処理においては、アドレス列、トータルの実行時間、及び各測定ポイントまでの実行時間に基づき判断を行っているが、これらのうちいずれかに基づき判断を行ってもよいし、いずれか２つに基づき判断を行ってもよい。
【０１２９】
なお、上で述べた情報処理装置１は、コンピュータ装置であって、図３７に示すように、メモリ２５０１とＣＰＵ（Central Processing Unit）２５０３とハードディスク・ドライブ（ＨＤＤ：Hard Disk Drive）２５０５と表示装置２５０９に接続される表示制御部２５０７とリムーバブル・ディスク２５１１用のドライブ装置２５１３と入力装置２５１５とネットワークに接続するための通信制御部２５１７とがバス２５１９で接続されている。オペレーティング・システム（ＯＳ：Operating System）及び本実施例における処理を実施するためのプログラムは、ＨＤＤ２５０５に格納されており、ＣＰＵ２５０３により実行される際にはＨＤＤ２５０５からメモリ２５０１に読み出される。ＣＰＵ２５０３は、上記プログラムの処理内容に応じて表示制御部２５０７、通信制御部２５１７、ドライブ装置２５１３を制御して、所定の動作を行わせる。また、処理途中のデータについては、主としてメモリ２５０１に格納されるが、ＨＤＤ２５０５に格納されるようにしてもよい。本発明の実施例では、上で述べた処理を実施するための上記プログラムはコンピュータ読み取り可能なリムーバブル・ディスク２５１１に格納されて頒布され、ドライブ装置２５１３からＨＤＤ２５０５にインストールされる。インターネットなどのネットワーク及び通信制御部２５１７を経由して、ＨＤＤ２５０５にインストールされる場合もある。このようなコンピュータ装置は、上で述べたＣＰＵ２５０３、メモリ２５０１などのハードウエアとＯＳ及び上記プログラムなどのプログラムとが有機的に協働することにより、上で述べたような各種機能を実現する。
【０１３０】
以上述べた本発明の実施の形態をまとめると、以下のようになる。
【０１３１】
本実施の形態に係る判定方法は、（Ａ）特定のプログラムが複数回実行される場合、複数回の実行の各々について、特定のプログラムの実行時間を記憶装置に記憶し、（Ｂ）記憶装置に記憶された実行時間に応じた複数回の実行が分類された結果において、分類により生成されたグループに属する実行の数が複数回の実行の総数に占める割合が所定値以上である場合、特定のプログラムの実行ルートが安定していると判定する処理を含む。
【０１３２】
特定のプログラムの実行ルートが複数存在する場合、実行時間は一定ではなく、実行時間に応じて複数回の実行を分類することができる。そこで、上で述べたようにすれば、実行ルートの安定性を評価できるようになる。
【０１３３】
また、特定のプログラムの実行時間を記憶装置に記憶する処理において、（ａ１）特定のプログラムの開始から終了までの時間である第１の実行時間を取得し、（ａ２）特定のプログラムにおける複数のポイントの各々について、特定のプログラムの開始から当該ポイントまでの時間である第２の実行時間を取得し、（ａ３）第１の実行時間と、複数のポイントの各々について取得した第２の実行時間とを記憶装置に記憶してもよい。このようにすれば、同じグループに属するか否かの判定をより高精度で行えるようになる。
【０１３４】
また、特定のプログラムの実行時間を記憶装置に記憶する処理において、（ａ４）複数のポイントの各々について、当該ポイントにおいてアクセスされる、第２の記憶装置における領域のアドレスを取得し、記憶装置に格納してもよい。そして、複数回の実行を分類する処理において、（ｂ１）記憶装置に記憶された実行時間及びアドレスに基づき複数回の実行を分類してもよい。このようにすれば、実行時間は同じであるがアクセス先のアドレスが異なるような複数の実行を同じグループに分類することを防止できるようになる。
【０１３５】
また、上で述べた記憶装置はメモリであり、上で述べた第２の記憶装置はディスク装置であってもよい。そして、本判定方法は、（Ｃ）特定のプログラムを複数回実行する前に、複数のポイント各々について、当該ポイントにおいてアクセスされる、第２の記憶装置における領域のデータを記憶装置にコピーする処理をさらに含んでもよい。そして、特定のプログラムの実行時間を記憶装置に記憶する処理において、（ｂ２）複数のポイントの各々において、記憶装置にコピーされたデータにアクセスしてもよい。上で述べたようにすれば、ディスク装置に対するアクセスを行わなくて済むので、特定のプログラムの実行に要する時間を短縮できる。これにより、実行時間の取得にかかる時間と、短縮分の時間とを相殺できるようになる。
【０１３６】
また、特定のプログラムの実行時間を記憶装置に記憶する処理において、（ｂ３）複数のポイントの各々において、記憶装置にコピーされたデータにアクセスした場合に、第２の記憶装置に対してダミーのアクセス要求を発行してもよい。このようにすれば、割り込みハンドラからの通知によってスリープ状態を解除できるようになる。
【０１３７】
また、複数のポイントの各々においてアクセスされる領域は、特定のプログラムの実行によって所定回数以上アクセスされる領域であるという第１の条件を満たしてもよい。特定のプログラムの実行により発生する全てのアクセスについて実行時間を取得するのは現実的ではない。そこで、上で述べたようにすれば、ポイントの数を絞り込めるようになる。
【０１３８】
また、複数のポイントの各々においてアクセスされる領域のアドレスは、当該ポイントの直前のポイントにおいてアクセスされる領域のアドレスと連続しないアドレスであるという第２の条件を満たしてもよい。アドレスが連続する場合には同じ処理が続くケースが多い。従って、上で述べたようにすれば、処理が切り替わるポイントで実行時間を取得できるようになる。
【０１３９】
また、実行時間は、ＣＰＵ（Central Processing Unit）実行時間であってもよい。
【０１４０】
なお、上記方法による処理をプロセッサに行わせるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブルディスク、ＣＤ−ＲＯＭ、光磁気ディスク、半導体メモリ、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。尚、中間的な処理結果はメインメモリ等の記憶装置に一時保管される。
【０１４１】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０１４２】
（付記１）
コンピュータに、
特定のプログラムが複数回実行される場合、前記複数回の実行の各々について、前記特定のプログラムの実行時間を記憶装置に記憶し、
前記記憶装置に記憶された実行時間に応じて前記複数回の実行が分類された結果から算出される、分類により生成されたグループに属する実行の数が前記複数回の実行の総数に占める割合に応じて、前記特定のプログラムの実行ルートが安定しているか判定する、
処理を実行させる判定プログラム。
【０１４３】
（付記２）
前記特定のプログラムの実行ルートが安定しているか判定する処理において、
前記割合が所定値以上である場合、前記特定のプログラムの実行ルートが安定していると判定する、
付記１記載の判定プログラム。
【０１４４】
（付記３）
前記特定のプログラムの実行時間を前記記憶装置に記憶する処理において、
前記特定のプログラムの開始から終了までの時間である第１の実行時間を取得し、
前記特定のプログラムにおける複数のポイントの各々について、前記特定のプログラムの開始から当該ポイントまでの時間である第２の実行時間を取得し、
前記第１の実行時間と、前記複数のポイントの各々について取得した前記第２の実行時間とを前記記憶装置に記憶する、
処理を実行させる付記１又は２記載の判定プログラム。
【０１４５】
（付記４）
前記特定のプログラムの実行時間を前記記憶装置に記憶する処理において、
前記複数のポイントの各々について、当該ポイントにおいてアクセスされる、第２の記憶装置における領域のアドレスを取得し、前記記憶装置に格納する、
処理を実行させ、
前記特定のプログラムの実行ルートが安定しているか判定する処理において、
前記記憶装置に記憶された実行時間及びアドレスに基づき前記複数回の実行を分類する、
処理を実行させる付記３記載の判定プログラム。
【０１４６】
（付記５）
前記記憶装置はメモリであり、
前記第２の記憶装置はディスク装置であり、
前記コンピュータに、
前記特定のプログラムを複数回実行する前に、前記複数のポイント各々について、当該ポイントにおいてアクセスされる、前記第２の記憶装置における領域のデータを前記記憶装置にコピーする、
処理をさらに実行させ、
前記特定のプログラムの実行時間を記憶装置に記憶する処理において、
前記複数のポイントの各々において、前記記憶装置にコピーされたデータにアクセスする、
処理を実行させる付記４記載の判定プログラム。
【０１４７】
（付記６）
前記特定のプログラムの実行時間を記憶装置に記憶する処理において、
前記複数のポイントの各々において、前記記憶装置にコピーされたデータにアクセスした場合に、前記第２の記憶装置に対してダミーのアクセス要求を発行する、
処理を実行させる付記５記載の判定プログラム。
【０１４８】
（付記７）
前記複数のポイントの各々においてアクセスされる領域は、前記特定のプログラムの実行によって所定回数以上アクセスされる領域であるという第１の条件を満たす
付記３記載の判定プログラム。
【０１４９】
（付記８）
前記複数のポイントの各々においてアクセスされる領域のアドレスは、当該ポイントの直前のポイントにおいてアクセスされる領域のアドレスと連続しないアドレスであるという第２の条件を満たす、
処理を実行させる付記３記載の判定プログラム。
【０１５０】
（付記９）
前記実行時間は、ＣＰＵ（Central Processing Unit）実行時間である
付記１記載の判定プログラム。
【０１５１】
（付記１０）
コンピュータが、
特定のプログラムが複数回実行される場合、前記複数回の実行の各々について、前記特定のプログラムの実行時間を記憶装置に記憶し、
前記記憶装置に記憶された実行時間に応じて前記複数回の実行が分類された結果から算出される、分類により生成されたグループに属する実行の数が前記複数回の実行の総数に占める割合に応じて、前記特定のプログラムの実行ルートが安定しているか判定する、
処理を実行する判定方法。
【０１５２】
（付記１１）
記憶装置と、
特定のプログラムが複数回実行される場合、前記複数回の実行の各々について、前記特定のプログラムの実行時間を前記記憶装置に記憶し、前記記憶装置に記憶された実行時間に応じて前記複数回の実行が分類された結果から算出される、分類により生成されたグループに属する実行の数が前記複数回の実行の総数に占める割合に応じて、前記特定のプログラムの実行ルートが安定しているか判定する判定部と、
を有する情報処理装置。
【符号の説明】
【０１５３】
１  情報処理装置    １０  ドライバ
１１  ワークデータ格納部    １２  ディスク装置
１３  カーネル    １４  テストプログラム
１５  対象プログラム    １０１  トレース処理部
１０３  ロード部    １０５  検証部
【図１】
0006409599.tif 000002
【図２】
0006409599.tif 000003
【図３】
0006409599.tif 000004
【図４】
0006409599.tif 000005
【図５】
0006409599.tif 000006
【図６】
0006409599.tif 000007
【図７】
0006409599.tif 000008
【図８】
0006409599.tif 000009
【図９】
0006409599.tif 000010
【図１０】
0006409599.tif 000011
【図１１】
0006409599.tif 000012
【図１２】
0006409599.tif 000013
【図１３】
0006409599.tif 000014
【図１４】
0006409599.tif 000015
【図１５】
0006409599.tif 000016
【図１６】
0006409599.tif 000017
【図１７】
0006409599.tif 000018
【図１８】
0006409599.tif 000019
【図１９】
0006409599.tif 000020
【図２０】
0006409599.tif 000021
【図２１】
0006409599.tif 000022
【図２２】
0006409599.tif 000023
【図２３】
0006409599.tif 000024
【図２４】
0006409599.tif 000025
【図２５】
0006409599.tif 000026
【図２６】
0006409599.tif 000027
【図２７】
0006409599.tif 000028
【図２８Ａ】
0006409599.tif 000029
【図２８Ｂ】
0006409599.tif 000030
【図２９】
0006409599.tif 000031
【図３０】
0006409599.tif 000032
【図３１】
0006409599.tif 000033
【図３２】
0006409599.tif 000034
【図３３】
0006409599.tif 000035
【図３４】
0006409599.tif 000036
【図３５】
0006409599.tif 000037
【図３６】
0006409599.tif 000038
【図３７】
0006409599.tif 000039