(57)【要約】【課題】プロセッサを含むシステムのランダムテストにおいて、試験のランダム性を損なうことなく、先行する試験命令の不正動作を容易に検出可能にする技術を提供すること。【解決手段】プロセッサを含むシステムに実行させる試験命令の並びである試験命令列を取得する試験命令列取得部１１と、試験命令列において、先行の試験命令により更新された記憶領域が参照されないまま更新される後続の試験命令をチェックポイントとして検出するチェックポイント検出部１２と、試験命令列の先頭から各チェックポイントの直前まで、および、試験命令列の先頭から末尾までを、システムに順次実行させる試験命令列実行部１３と、システムによる各実行結果を検証する実行結果検証部１４とを備える。【選択図】      図１
2018088213.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサを含むシステムに実行させる試験命令の並びである試験命令列を取得する試験命令列取得部と、
前記試験命令列において、先行の試験命令により更新された記憶領域が参照されないまま更新される後続の試験命令をチェックポイントとして検出するチェックポイント検出部と、
前記試験命令列の先頭から前記各チェックポイントの直前まで、および、前記試験命令列の先頭から末尾までを、前記システムに順次実行させる試験命令列実行部と、
前記システムによる各実行結果を検証する実行結果検証部と、
を備えた検証装置。
【請求項２】
前記試験命令列実行部は、前記各チェックポイントについて、当該チェックポイントの試験命令を一時的に割り込み命令に置き換えることにより、前記試験命令列の先頭から当該チェックポイントの直前までを前記システムに実行させることを特徴とする請求項１に記載の検証装置。
【請求項３】
前記実行結果検証部は、前記試験命令列の先頭から前記各チェックポイントの直前までの実行結果については、当該チェックポイントの命令において更新される予定の記憶領域について検証を行い、前記試験命令列の先頭から末尾までの実行結果については、各試験命令において更新される記憶領域について検証を行うことを特徴とする請求項１または請求項２に記載の検証装置。
【請求項４】
コンピュータ装置が、
プロセッサを含むシステムに実行させる試験命令の並びである試験命令列を取得し、
前記試験命令列において、先行の試験命令により更新された記憶領域が参照されないまま更新される後続の試験命令をチェックポイントとして検出し、
前記試験命令列の先頭から前記各チェックポイントの直前まで、および、前記試験命令列の先頭から末尾までを、前記システムに順次実行させ、
前記システムによる各実行結果を検証する方法。
【請求項５】
プロセッサを含むシステムに実行させる試験命令の並びである試験命令列を取得する試験命令列取得ステップと、
前記試験命令列において、先行の試験命令により更新された記憶領域が参照されないまま更新される後続の試験命令をチェックポイントとして検出するチェックポイント検出ステップと、
前記試験命令列の先頭から前記各チェックポイントの直前まで、および、前記試験命令列の先頭から末尾までを、前記システムに順次実行させる試験命令列実行ステップと、
前記システムによる各実行結果を検証する実行結果検証ステップと、
をコンピュータ装置に実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサを含むシステムのテストを行う技術に関する。
【背景技術】
【０００２】
プロセッサを含むシステムに、ランダムに生成された試験命令列を実行させて不正動作を検出するランダムテストが知られている。ランダムテストにおける不正動作の検出は、試験命令列を最後まで実行した結果により判断される。ところが、ランダムテストでは、試験命令の並びがランダムに決定されるため、先行する試験命令の実行結果が参照されないまま、後続の試験命令により上書きされてしまう場合がある。このような場合、先行する試験命令が不正動作を起こしても、後続の試験命令によりその不正動作が隠れてしまう。このように、一般的なランダムテストでは、先行する試験命令が起こした不正動作を検出できない場合があるという問題があった。
【０００３】
このような問題に関連する技術の一例が、特許文献１に記載されている。この関連技術は、試験命令列を生成する際に、各レジスタが変更可能であるか否かを表すフラグを用いる。具体的には、この関連技術は、１つの試験命令を生成する度に、生成した試験命令で書き込み対象となったレジスタのフラグを、変更不可を表すよう更新する。また、この関連技術は、生成した試験命令で読み込み対象となったレジスタのフラグを、変更可能を表すよう更新する。そして、この関連技術は、次の試験命令としてランダムに生成した試験命令において書き込み対象となったレジスタのうち、変更不可のフラグがセットされているものがある場合は、その試験命令を採用せずにランダムな生成をやり直す。これにより、この関連技術は、後続の試験命令により先行の試験命令の実行結果が参照されないまま上書きされるような試験命令列を生成しない。
【０００４】
また、このような問題に関連する他の技術の一例が、特許文献２に記載されている。この関連技術は、試験命令列を生成する際に、変更レジスタテーブルを用いる。具体的には、この関連技術は、１つの試験命令を生成する度に、生成した試験命令で変更されるレジスタを、変更レジスタテーブルに登録する。また、この関連技術は、生成した試験命令で参照されるレジスタを、変更レジスタテーブルから抹消する。ただし、生成した試験命令で変更されるレジスタが、変更レジスタテーブルに既に登録されている場合がある。この場合、この関連技術は、その試験命令に先行して、そのレジスタを参照する試験命令を組み込む。これにより、この関連技術は、後続の試験命令により先行の試験命令の実行結果が参照されないまま上書きされるような試験命令列を生成しない。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第２９０３７２１号公報
【特許文献２】特開平０９−３３０２４２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１および特許文献２に記載された関連技術には、次のような課題があった。
【０００７】
これらの関連技術は、先行する試験命令の不正動作を検出可能にするために、試験命令列を書き換えている。しかしながら、試験命令列を書き換えることは、試験のランダム性を損なう。また、試験命令列を書き換えると、レジスタやメモリの依存関係のテストが難しくなる場合もある。そのため、これらの関連技術を用いたランダムテストは、偏った試験内容になってしまうという問題があった。
【０００８】
本発明は、上述の課題を解決するためになされたものである。すなわち、本発明は、プロセッサを含むシステムのランダムテストにおいて、試験のランダム性を損なうことなく、先行する試験命令の不正動作を容易に検出可能にする技術を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本発明の検証装置は、プロセッサを含むシステムに実行させる試験命令の並びである試験命令列を取得する試験命令列取得部と、前記試験命令列において、先行の試験命令により更新された記憶領域が参照されないまま更新される後続の試験命令をチェックポイントとして検出するチェックポイント検出部と、前記試験命令列の先頭から前記各チェックポイントの直前まで、および、前記試験命令列の先頭から末尾までを、前記システムに順次実行させる試験命令列実行部と、前記システムによる各実行結果を検証する実行結果検証部と、を備える。
【００１０】
また、本発明の方法は、コンピュータ装置が、プロセッサを含むシステムに実行させる試験命令の並びである試験命令列を取得し、前記試験命令列において、先行の試験命令により更新された記憶領域が参照されないまま更新される後続の試験命令をチェックポイントとして検出し、前記試験命令列の先頭から前記各チェックポイントの直前まで、および、前記試験命令列の先頭から末尾までを、前記システムに順次実行させ、前記システムによる各実行結果を検証する方法。
【００１１】
また、本発明のプログラムは、プロセッサを含むシステムに実行させる試験命令の並びである試験命令列を取得する試験命令列取得ステップと、前記試験命令列において、先行の試験命令により更新された記憶領域が参照されないまま更新される後続の試験命令をチェックポイントとして検出するチェックポイント検出ステップと、前記試験命令列の先頭から前記各チェックポイントの直前まで、および、前記試験命令列の先頭から末尾までを、前記システムに順次実行させる試験命令列実行ステップと、前記システムによる各実行結果を検証する実行結果検証ステップと、をコンピュータ装置に実行させる。
【発明の効果】
【００１２】
本発明は、プロセッサを含むシステムのランダムテストにおいて、試験のランダム性を損なうことなく、先行する試験命令の不正動作を容易に検出可能にする技術を提供することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施の形態としての検証装置の構成を示すブロック図である。
【図２】本発明の実施の形態としての検証装置のハードウェア構成の一例を示す図である。
【図３】本発明の実施の形態としての検証装置の動作を説明するフローチャートである。
【図４】本発明の実施の形態としての検証装置がチェックポイントを検出する動作を説明するフローチャートである。
【図５】本発明の実施の形態としての検証装置がチェックポイントの直前までの試験命令列を実行する動作を説明するフローチャートである。
【図６】本発明の実施の形態において取得される試験命令列の具体例を説明する図である。
【図７】本発明の実施の形態において生成される更新リストの具体例を説明する図である。
【図８】本発明の実施の形態において生成されるチェックポイントリストの具体例を説明する図である。
【発明を実施するための形態】
【００１４】
以下、本発明の実施の形態について、図面を参照して詳細に説明する。
【００１５】
本発明の実施の形態としての検証装置１の機能ブロック構成を図１に示す。図１において、検証装置１は、試験命令列取得部１１と、チェックポイント検出部１２と、試験命令列実行部１３と、実行結果検証部１４とを含む。
【００１６】
ここで、検証装置１は、図２に示すようなハードウェア要素によって構成可能である。図２において、検証装置１は、プロセッサ１００１、レジスタ１００２、メモリ１００３を含む。この場合、検証装置１の各機能ブロックは、メモリ１００３に格納されるコンピュータ・プログラムを読み込んで実行し各部を制御するプロセッサ１００１によって構成される。なお、この例では、プロセッサ１００１、レジスタ１００２およびメモリ１００３は、検証対象となるシステム１００を構成する。つまり、この例では、検証装置１は、検証対象となるシステム１００上に実現される。ただし、検証装置１のハードウェア構成は、上述の構成に限定されない。また、検証装置１は、検証対象となるシステム１００に含まれるプロセッサ１００１とは異なるプロセッサを用いて構成されてもよい。
【００１７】
次に、各機能ブロックについて説明する。
【００１８】
試験命令列取得部１１は、試験命令列を取得する。ここで、試験命令列は、システム１００に実行させる試験命令の並びである。また、試験命令列は、ランダムに生成されたものであることが望ましい。具体的には、試験命令列では、命令の種類およびその命令によりアクセスされる記憶領域の割り当てがランダムに選択された試験命令が、ランダムに決定された順序で並んでいる。例えば、試験命令においてアクセスされる記憶領域は、レジスタ１００２およびメモリ１００３のいずれかまたは両方から選択されて割り当てられるものとする。
【００１９】
また、取得した試験命令列は、メモリ１００３上に記憶されるものとする。例えば、試験命令列取得部１１は、試験命令列を生成することにより取得し、メモリ１００３上に記憶してもよい。あるいは、試験命令列取得部１１は、外部の試験命令列生成プログラム等により生成された試験命令列がメモリ１００３上に格納されている位置を表す情報を取得してもよい。
【００２０】
チェックポイント検出部１２は、試験命令列におけるチェックポイントを検出する。ここで、チェックポイントとは、先行の試験命令により更新された記憶領域が参照されないまま更新される後続の試験命令をいうものとする。
【００２１】
試験命令列実行部１３は、チェックポイント検出部１２によって検出された各チェックポイントについて、先頭から該チェックポイントの直前までの試験命令列を、システム１００に実行させる。また、試験命令列実行部１３は、試験命令列の先頭から末尾までを、システム１００に実行させる。
【００２２】
具体的には、試験命令列実行部１３は、試験命令列を、チェックポイントの直前で命令の実行が停止するように一時的に設定する。このような設定は、例えば、割り込み処理により実現されてもよい。具体的には、試験命令列実行部１３は、チェックポイントの命令を、ソフトウェア的な割り込みを発生させる割り込み命令に一時的に置き換えてもよい。この場合、試験命令列実行部１３は、置き換えの前に、置き換えられる命令をメモリ１００３上の退避領域に退避しておき、そのチェックポイントまでの試験命令列の実行が終了した後に、退避領域の命令を元の試験命令列における位置に書き戻す。あるいは、試験命令列実行部１３は、実行中の命令アドレスがチェックポイントの命令アドレスに一致すると、その命令を実行する代わりにハードウェア的な割り込みを発生させるよう設定してもよい。
【００２３】
また、チェックポイントの直前までの試験命令列の実行を、割り込み処理により実現する場合、割り込み処理としては、例えば、その時点までの試験命令列の実行結果を出力装置（図示せず）に出力する処理が設定されていてもよい。
【００２４】
実行結果検証部１４は、システム１００による実行結果を検証する。具体的には、実行結果検証部１４は、各チェックポイントの直前までの試験命令列の実行結果、および、先頭から末尾までの試験命令列の実行結果を、それぞれの期待値と比較する。
【００２５】
あるチェックポイントの直前までの試験命令列の実行結果とは、当該チェックポイントの試験命令でアクセスされる予定の記憶領域に格納された値であってもよい。ここで、チェックポイントの試験命令は、先行の試験命令により更新された記憶領域が参照されないまま更新される後続の試験命令である。したがって、チェックポイントの直前までの試験命令列の実行結果において、チェックポイントの試験命令でアクセスされる予定の記憶領域に格納された値は、先行の試験命令により更新された値であることが期待される。つまり、チェックポイントの直前までの試験命令列の実行結果において、チェックポイントの試験命令でアクセスされる予定の記憶領域に格納された値が期待値通りでなければ、先行の試験命令により不正動作が起きた可能性が検出されることになる。
【００２６】
また、先頭から末尾までの試験命令列の実行結果とは、試験命令列で更新される全ての記憶領域の値であってもよい。
【００２７】
なお、先頭から各チェックポイントの直前までの試験命令列の実行結果、および、先頭から末尾までの試験命令列の実行結果としてそれぞれ期待される期待値は、試験命令列に基づいて事前に求められているものとする。
【００２８】
また、実行結果検証部１４は、実行結果が期待値通りでない場合、エラーを出力する。また、実行結果検証部１４は、最初に、先頭から、先頭に最も近いチェックポイントの直前までの試験命令列を実行させ、その後、順次、先頭から次のチェックポイントの直前までの試験命令列を実行させてもよい。また、実行結果検証部１４は、いずれかのチェックポイントの直前までの試験命令列の実行結果についてエラーを出力した場合、動作を終了してもよい。
【００２９】
以上のように構成された検証装置１の動作について、図３を参照して説明する。
【００３０】
まず、試験命令列取得部１１は、試験命令列を取得する（ステップＳ１１）。
【００３１】
次に、チェックポイント検出部１２は、試験命令列において１つまたはそれ以上のチェックポイントを検出する（ステップＳ１２）。ステップＳ１２の動作の詳細については後述する。
【００３２】
次に、試験命令列実行部１３は、検出されたチェックポイントの１つを選択する（ステップＳ１３）。
【００３３】
例えば、ステップＳ１３の初回の実行であれば、試験命令列実行部１３は、試験命令列の先頭に最も近いチェックポイントを選択する。また、ステップＳ１３の初回の実行でなければ、試験命令列実行部１３は、前回のステップＳ１３で選択したチェックポイントの次に先頭に近いチェックポイントを選択する。
【００３４】
次に、試験命令列実行部１３は、試験命令列の先頭から選択したチェックポイントの直前までの試験命令列を、システム１００に実行させる（ステップＳ１４）。ステップＳ１４の動作の詳細については後述する。
【００３５】
次に、実行結果検証部１４は、システム１００による試験命令列の実行結果を読み込む（ステップＳ１５）。
【００３６】
具体的には、前述のように、実行結果検証部１４は、該当するチェックポイントの試験命令により更新される予定の記憶領域の値を読み込めばよい。
【００３７】
そして、実行結果検証部１４は、実行結果の検証結果が正常であるか否かを判断する（ステップＳ１６）。具体的には、実行結果検証部１４は、実行結果が期待値通りであるか否かを判定すればよい。
【００３８】
ここで、検証結果が正常でない場合（ステップＳ１６でＮｏ）、実行結果検証部１４は、検証結果として、エラーを出力する（ステップＳ２０）。そして、検証装置１は、動作を終了する。
【００３９】
一方、検証結果が正常である場合（ステップＳ１６でＹｅｓ）、検証装置１は、次のチェックポイントがあるか否かを判断する（ステップＳ１７）。
【００４０】
ここで、次のチェックポイントがある場合（ステップＳ１７でＹｅｓ）、検証装置１は、次のチェックポイントについて、ステップＳ１３からの動作を繰り返す。
【００４１】
一方、次のチェックポイントがない場合（ステップＳ１７でＮｏ）、試験命令列実行部１３は、試験命令列の先頭から末尾までを、システム１００に実行させる（ステップＳ１８）。
【００４２】
次に、実行結果検証部１４は、システム１００による試験命令列の実行結果を読み込む（ステップＳ１９）。
【００４３】
具体的には、実行結果検証部１４は、システム１００による試験命令列の実行により更新される全ての記憶領域の値を読み込めばよい。
【００４４】
次に、実行結果検証部１４は、実行結果の検証結果が正常であるか否かを検証し、検証結果を出力する（ステップＳ２０）。具体的には、実行結果検証部１４は、実行結果が期待値通りであるか否かを出力すればよい。
【００４５】
次に、ステップＳ１２におけるチェックポイントの検出動作の詳細について、図４を参照して説明する。この検出動作では、チェックポイント検出部１２は、チェックポイントリストを生成する。チェックポイントリストは、チェックポイントとなる試験命令の識別情報と、その試験命令で更新される記憶領域の識別情報とを関連付けた情報からなる。試験命令の識別情報としては、試験命令が格納されているメモリ１００３上のアドレスが適用可能である。また、記憶領域の識別情報としては、レジスタ１００２の番号またはメモリ１００３上のアドレスが適用可能である。また、この検出動作では、チェックポイント検出部１２は、チェックポイントリストを生成する過程で用いる情報として、更新リストを用いる。更新リストは、ある試験命令の実行までに更新されたが参照されていない記憶領域の識別情報の一覧を保持する。この動作の開始時には、チェックポイントリストおよび更新リストには、情報は格納されていないものとする。
【００４６】
図４では、まず、チェックポイント検出部１２は、試験命令列の先頭から順に、１つの試験命令を読み込む（ステップＳ３１）。
【００４７】
次に、チェックポイント検出部１２は、更新リストに、この試験命令で参照される記憶領域の識別情報が既に記憶されているか否かを判断する（ステップＳ３２）。
【００４８】
ここで、該当する識別情報が記憶されていない場合（ステップＳ３２でＮｏ）、チェックポイント検出部１２の動作はステップＳ３４に進む。
【００４９】
一方、該当する識別情報が既に記憶されている場合（ステップＳ３２でＹｅｓ）、チェックポイント検出部１２は、更新リストから、該当する記憶領域の識別情報を削除する（ステップＳ３３）。
【００５０】
次に、チェックポイント検出部１２は、更新リストに、この試験命令で更新される記憶領域の識別情報が既に記憶されているか否かを判断する（ステップＳ３４）。
【００５１】
ここで、該当する識別情報が記憶されていない場合（ステップＳ３４でＮｏ）、チェックポイント検出部１２は、該当する識別情報を更新リストに追加する（ステップＳ３５）。
【００５２】
一方、該当する識別情報が既に記憶されている場合（ステップＳ３４でＹｅｓ）、チェックポイント検出部１２は、チェックポイントリストに、この試験命令の識別情報と、この試験命令で更新される記憶領域の識別情報とを関連付けて登録する（ステップＳ３６）。
【００５３】
そして、チェックポイント検出部１２は、この試験命令が試験命令列の最後でなければ（ステップＳ３７でＮｏ）、次の試験命令について、ステップＳ３１からの動作を繰り返す。
【００５４】
一方、この試験命令が試験命令列の最後であれば（ステップＳ３７でＹｅｓ）、チェックポイント検出部１２は、チェックポイントの検出動作を終了する。
【００５５】
次に、ステップＳ１４における、あるチェックポイントの直前までの試験命令列の実行動作の詳細について、図５を参照して説明する。
【００５６】
まず、試験命令列実行部１３は、試験命令列において、選択されたチェックポイントの試験命令を、退避領域に退避する（ステップＳ４１）。
【００５７】
次に、試験命令列実行部１３は、試験命令列において、選択されたチェックポイントの試験命令を、割り込み処理を発生させる割り込み命令に書き換える（ステップＳ４２）。
【００５８】
なお、前述したように、割り込み処理としては、その時点までの実行結果を出力装置に出力する処理が設定されていてもよい。
【００５９】
次に、試験命令列実行部１３は、選択されたチェックポイントの直前までの試験命令列を、システム１００に実行させる（ステップＳ４３）。具体的には、システム１００は、先頭から順に試験命令を実行し、チェックポイントの割り込み処理により、その直前までの試験命令列の実行結果を、出力装置に出力することになる。
【００６０】
次に、試験命令列実行部１３は、ステップＳ４１で退避したチェックポイントの試験命令を、チェックポイントの位置に書き戻す（ステップＳ４４）。そして、試験命令列実行部１３は、このチェックポイントの直前までの試験命令列の実行動作を終了する。
【００６１】
以上で、検証装置１の動作の説明を終了する。
【００６２】
次に、検証装置１の動作を具体例で説明する。
【００６３】
この例では、図６に示す試験命令列が取得されたことを想定する（ステップＳ１１）。この試験命令列は、１０個の試験命令からなる。各試験命令には、先頭から順に命令１〜命令１０の識別情報が割り当てられている。各試験命令の行に記載された命令アドレスは、その試験命令が格納されているメモリ１００３上のアドレスを表している。各試験命令は、割り当てられた記憶領域から読み込んだ値、または、読み込んだ値に四則演算を施した結果を、割り当てられた記憶領域に書き込む命令である。ここでは、割り当て対象のレジスタ１００２は８つあり、ＲＥＧ＃ｎ（ｎは０〜７までの整数）は、ｎ番目のレジスタ１００２の値を表している。また、ＭＥＭ（ｘ）は、メモリ１００３におけるアドレスｘの値を表している。ここでは、各レジスタ１００２に格納される値のサイズと、ＭＥＭ（ｘ）でアクセスされる値のサイズとは、等しいものとし、例えば８バイトであるとする。また、「＜−」は、右辺の値で左辺の記憶領域を更新する命令を表す。また、「＋」、「−」、「＊」、「÷」は、それぞれ、加算、減算、乗算、除算を表している。
【００６４】
まず、ステップＳ１２におけるチェックポイントの検出動作について説明する。
【００６５】
まず、チェックポイント検出部１２は、命令１「ＲＥＧ＃０＜−ＭＥＭ（０ｘ２００００）」を読み込む（ステップＳ３１）。命令１で参照される記憶領域は、ＭＥＭ（０ｘ２００００）であり、更新される記憶領域は、ＲＥＧ＃０である。
【００６６】
ここで、命令１は先頭の命令であるため、更新リストには、命令１で参照または更新される記憶領域の識別情報は記憶されていない（ステップＳ３２でＮｏ、Ｓ３４でＮｏ）。そこで、チェックポイント検出部１２は、命令１で更新される記憶領域の識別情報であるＲＥＧ＃０を、更新リストに追加する（ステップＳ３５）。更新リストは、図７の命令１の列に示す通りとなる。
【００６７】
そして、チェックポイント検出部１２は、命令１が最後の命令ではないので（ステップＳ３７でＮｏ）、ステップＳ３１からの動作を繰り返す。
【００６８】
次の命令２「ＲＥＧ＃３＜−ＲＥＧ＃１＋ＲＥＧ＃２」についてのステップＳ３１からの処理は、命令１についての処理と略同様である。すなわち、チェックポイント検出部１２は、命令２で参照または更新される記憶領域の識別情報が更新リストに記憶されていないので、更新される記憶領域ＲＥＧ＃３を、更新リストに追加する。更新リストは、図７の命令２の列に示す通りとなる。
【００６９】
次の命令３「ＭＥＭ（０ｘ２０１００）＜−ＲＥＧ＃４＊ＲＥＧ＃５」についてのステップＳ３１からの処理は、命令１、２についての処理と略同様である。すなわち、チェックポイント検出部１２は、命令３で参照または更新される記憶領域の識別情報が更新リストに記憶されていないので、更新される記憶領域ＭＥＭ（０ｘ２０１００）を、更新リストに追加する。更新リストは、図７の命令３の列に示す通りとなる。
【００７０】
次に、チェックポイント検出部１２は、命令４「ＲＥＧ＃４＜−ＲＥＧ＃３−ＲＥＧ＃０」を読み込む（ステップＳ３１）。命令４で参照される記憶領域は、ＲＥＧ＃３およびＲＥＧ＃０であり、更新される記憶領域は、ＲＥＧ＃４である。
【００７１】
ここで、更新リストには、命令４で参照されるＲＥＧ＃３およびＲＥＧ＃０が記憶されている（ステップＳ３２でＹｅｓ）。そこで、チェックポイント検出部１２は、ＲＥＧ＃３およびＲＥＧ＃０を、更新リストから削除する（ステップＳ３３）。
【００７２】
また、更新リストには、命令４で更新されるＲＥＧ＃４は記憶されていない（ステップＳ３４でＮｏ）。そこで、チェックポイント検出部１２は、命令４で更新される記憶領域の識別情報であるＲＥＧ＃４を、更新リストに追加する。更新リストは、図７の命令４の列に示す通りとなる。
【００７３】
次の命令５「ＲＥＧ＃３＜−ＲＥＧ＃２÷ＲＥＧ＃６」についてのステップＳ３１からの処理は、命令１〜３についての処理と略同様である。すなわち、チェックポイント検出部１２は、命令５で参照または更新される記憶領域の識別情報が更新リストに記憶されていないので、更新される記憶領域ＲＥＧ＃３を、更新リストに追加する。更新リストは、図７の命令５の列に示す通りとなる。
【００７４】
次の命令６「ＭＥＭ（０ｘ２００１８）＜−ＲＥＧ＃０」についてのステップＳ３１からの処理は、命令１〜３、５についての処理と略同様である。すなわち、チェックポイント検出部１２は、命令６で参照または更新される記憶領域の識別情報が更新リストに記憶されていないので、更新される記憶領域ＭＥＭ（０ｘ２００１８）を、更新リストに追加する。更新リストは、図７の命令６の列に示す通りとなる。
【００７５】
次に、チェックポイント検出部１２は、命令７「ＭＥＭ（０ｘ２０１００）＜−ＲＥＧ＃５」を読み込む（ステップＳ３１）。命令７で参照される記憶領域は、ＲＥＧ＃５であり、更新される記憶領域は、ＭＥＭ（０ｘ２０１００）である。
【００７６】
ここで、更新リストには、命令７で参照される記憶領域の識別情報は記憶されていないが（ステップＳ３２でＮｏ）、更新されるＭＥＭ（０ｘ２０１００）が記憶されている（ステップＳ３４でＹｅｓ）。
【００７７】
そこで、チェックポイント検出部１２は、命令７の命令アドレス０ｘ１０３０および更新される記憶領域の識別情報ＭＥＭ（０ｘ２０１００）を関連付けて、チェックポイントリストに追加する。
【００７８】
これにより、チェックポイントリストには、図８の１行目に示す情報が追加された。なお、更新リストは、命令６までが解析された時点からの更新はなく、命令７の列に示す通りとなる。
【００７９】
次の命令８「ＲＥＧ＃７＜−  ＲＥＧ＃２＋ＲＥＧ＃０」についてのステップＳ３１からの処理は、命令１〜３、５〜６についての処理と略同様である。すなわち、チェックポイント検出部１２は、命令８で参照または更新される記憶領域の識別情報が更新リストに記憶されていないので、更新される記憶領域ＲＥＧ＃７を、更新リストに追加する。更新リストは、図７の命令８の列に示す通りとなる。
【００８０】
次の命令９「ＲＥＧ＃４＜−ＭＥＭ（０ｘ２００２０）」についてのステップＳ３１からの処理は、命令７についての処理と略同様である。すなわち、チェックポイント検出部１２は、命令９で参照される記憶領域の識別情報が更新リストに記憶されていないので、更新リストを更新しない。また、チェックポイント検出部１２は、命令９で更新される記憶領域の識別情報ＲＥＧ＃４が更新リストに記憶されているので、命令９の命令アドレス０ｘ１０４０と、更新される記憶領域の識別情報ＲＥＧ＃４とを関連付けて、チェックポイントリストに追加する。これにより、チェックポイントリストには、図８の２行目に示す情報が追加された。なお、更新リストは、命令８までが解析された時点からの更新はなく、命令９の列に示す通りとなる。
【００８１】
次に、チェックポイント検出部１２は、命令１０「ＭＥＭ（０ｘ２００５０）＜−ＲＥＧ＃７」を読み込む（ステップＳ３１）。命令１０で参照される記憶領域は、ＲＥＧ＃７であり、更新される記憶領域は、ＭＥＭ（０ｘ２００５０）である。
【００８２】
ここで、更新リストには、命令１０で参照されるＲＥＧ＃７が記憶されている（ステップＳ３２でＹｅｓ）。そこで、チェックポイント検出部１２は、ＲＥＧ＃７を、更新リストから削除する（ステップＳ３３）。
【００８３】
また、更新リストには、命令１０で更新されるＭＥＭ（０ｘ２００５０）は記憶されていない（ステップＳ３４でＮｏ）。そこで、チェックポイント検出部１２は、命令１０で更新される記憶領域の識別情報であるＭＥＭ（０ｘ２００５０）を、更新リストに追加する。更新リストは、図７の命令１０の列に示す通りとなる。
【００８４】
そして、チェックポイント検出部１２は、命令１０が最後の命令であるため（ステップＳ３７でＹｅｓ）、ステップＳ１２のチェックポイントの検出動作を終了する。
【００８５】
これにより、図８に示すチェックポイントリストが生成された。
【００８６】
次に、試験命令列実行部１３は、生成されたチェックポイントリストに基づいて、システム１００に、順次、試験命令列を実行させる。
【００８７】
具体的には、まず、試験命令列実行部１３は、最初のチェックポイントの命令アドレスである０ｘ１０３０の命令７を選択する（ステップＳ１３）。
【００８８】
次に、試験命令列実行部１３は、命令７を退避領域にバックアップする（ステップＳ１４、Ｓ４１）。
【００８９】
次に、試験命令列実行部１３は、命令アドレス０ｘ１０３０に、割り込み命令を上書きする（ステップＳ４２）。
【００９０】
次に、試験命令列実行部１３は、システム１００に、試験命令列の先頭の命令１からを順次実行させる（ステップＳ４３）。このとき、命令７に置き換えられた割り込み命令により、命令アドレス０ｘ１０３０で命令の実行が停止する。つまり、システム１００は、命令１から命令６までを実行して処理を停止する。そこで、実行結果検証部１４は、それまでの実行結果を出力装置に出力する。
【００９１】
次に、実行結果検証部１４は、退避領域にバックアップした命令７を、割り込み命令に書き換えた命令アドレス０ｘ１０３０に書き戻す（ステップＳ４４）。
【００９２】
次に、実行結果検証部１４は、チェックポイントリストを参照し、停止している命令アドレス０ｘ１０３０に関連付けられた記憶領域の識別情報であるＭＥＭ（０ｘ２０１００）の値を取得する（ステップＳ１５）。
【００９３】
そして、実行結果検証部１４は、ＭＥＭ（０ｘ２０１００）の値を期待値と比較する（ステップＳ１６）。
【００９４】
ここでは、ＭＥＭ（０ｘ２０１００）の値は、期待値通りであったものとする（ステップＳ１６でＹｅｓ）。
【００９５】
そして、次のチェックポイントがあるので（ステップＳ１７でＹｅｓ）、試験命令列実行部１３は、次のチェックポイントの命令アドレスである０ｘ１０４０の命令９を選択する（ステップＳ１３）。
【００９６】
次に、試験命令列実行部１３は、命令９を退避領域にバックアップする（ステップＳ１４、Ｓ４１）。
【００９７】
次に、試験命令列実行部１３は、命令アドレス０ｘ１０４０に、割り込み命令を上書きする（ステップＳ４２）。
【００９８】
次に、試験命令列実行部１３は、システム１００に、試験命令列の先頭の命令１からを順次実行させる（ステップＳ４３）。このとき、命令９に置き換えられた割り込み命令により、命令アドレス０ｘ１０４０で命令の実行が停止する。つまり、システム１００は、命令１から命令８までを実行して処理を停止する。そこで、実行結果検証部１４は、それまでの実行結果を出力装置に出力する。
【００９９】
次に、実行結果検証部１４は、退避領域にバックアップした命令９を、割り込み命令に書き換えた命令アドレス０ｘ１０４０に書き戻す（ステップＳ４４）。
【０１００】
次に、実行結果検証部１４は、チェックポイントリストを参照し、停止している命令アドレス０ｘ１０４０に関連付けられた記憶領域の識別情報であるＲＥＧ＃４の値を取得する（ステップＳ１５）。
【０１０１】
そして、実行結果検証部１４は、ＲＥＧ＃４の値を期待値と比較する（ステップＳ１６）。
【０１０２】
ここでは、ＲＥＧ＃４の値は、期待値通りであったものとする（ステップＳ１６でＹｅｓ）。
【０１０３】
そして、実行結果検証部１４は、今回のチェックポイントが最後のチェックポイントであり、次のチェックポイントがないので（ステップＳ１７でＮｏ）、次のステップＳ１８に進む。
【０１０４】
すなわち、実行結果検証部１４は、試験命令列の先頭の命令１から末尾の命令１０までを、システム１００に実行させる（ステップＳ１８）。
【０１０５】
そして、実行結果検証部１４は、試験命令列の命令において更新される全ての記憶領域の値を読み込む（ステップＳ１９）。
【０１０６】
そして、実行結果検証部１４は、読み込んだ記憶領域の値それぞれを期待値と比較し、その結果を出力する（ステップＳ２０）。
【０１０７】
以上で、具体例の説明を終了する。
【０１０８】
次に、本発明の実施の形態の効果について述べる。
【０１０９】
本発明の実施の形態としての検証装置は、プロセッサを含むシステムのランダムテストにおいて、試験のランダム性を損なうことなく、先行する試験命令の不正動作を容易に検出することができる。
【０１１０】
その理由について説明する。本実施の形態では、試験命令列取得部が、プロセッサを含むシステムに実行させる試験命令の並びである試験命令列を取得する。そして、チェックポイント検出部が、試験命令列において、先行の試験命令により更新された記憶領域が参照されないまま更新される後続の試験命令をチェックポイントとして検出する。そして、試験命令列実行部が、試験命令列の先頭から各チェックポイントの直前までおよび先頭から末尾までを、システムに順次実行させる。そして、実行結果検証部が、システムによる各実行結果を検証するからである。
【０１１１】
このように、本実施の形態は、試験命令列の途中で不正動作が発生した場合でも、後続の命令がこの実行結果を上書きする前までの実行結果をチェックするので、より確実に不正動作を検出できるようになる。
【０１１２】
更に、本実施の形態は、チェックポイントの直前まで試験命令列の実行において、全ての記憶領域を検証の対象とせず、当該チェックポイントにおいて参照される予定の記憶領域を検証の対象とする。このように、本実施の形態は、各チェックポイントの直前までの試験命令列の実行結果について検証処理を行うため、検証処理自体の回数を増やすものの、各検証処理において検証対象となる記憶領域の数の増大を抑制する。その結果、本実施の形態は、処理時間の増加を軽減することができる。
【０１１３】
なお、本発明の実施の形態において、検証装置の各機能ブロックが、メモリに記憶されたコンピュータ・プログラムを実行するＣＰＵによって実現される例を中心に説明した。これに限らず、各機能ブロックの一部、全部、または、それらの組み合わせが専用のハードウェアにより実現されていてもよい。
【０１１４】
また、上述した本発明の実施の形態において、検証装置の機能ブロックは、複数の装置に分散されて実現されてもよい。
【０１１５】
また、上述した本発明の実施の形態において、各フローチャートを参照して説明した検証装置の動作を、本発明のコンピュータ・プログラムとしてコンピュータ装置の記憶装置（記憶媒体）に格納しておく。そして、係るコンピュータ・プログラムを当該ＣＰＵが読み出して実行するようにしてもよい。そして、このような場合において、本発明は、係るコンピュータ・プログラムのコードあるいは記憶媒体によって構成される。
【０１１６】
また、本発明は、上述した本発明の実施の形態に限定されず、様々な態様で実施されることが可能である。
【符号の説明】
【０１１７】
１  検証装置
１１  試験命令列取得部
１２  チェックポイント検出部
１３  試験命令列実行部
１４  実行結果検証部
１００  システム
１００１  プロセッサ
１００２  レジスタ
１００３  メモリ
【図１】
2018088213.tif 000003
【図２】
2018088213.tif 000004
【図３】
2018088213.tif 000005
【図４】
2018088213.tif 000006
【図５】
2018088213.tif 000007
【図６】
2018088213.tif 000008
【図７】
2018088213.tif 000009
【図８】
2018088213.tif 000010