(57)【特許請求の範囲】
【請求項１】
テストプログラムの実行により障害を検出する障害検出部と，障害が検出されたテストプログラムの障害箇所を絞り込む障害発生源絞込み部とを備える情報処理装置が行うコンピュータ試験方法であって，
前記障害検出部が，トラップ命令が埋め込まれたテストプログラムを複数回実行し，前記テストプログラムの実行における前記トラップ命令によるソフトウェアトラップ時にはレジスタおよびメモリのデータのログである第一のログを採取し，ハードウェアトラップ時にはレジスタのログである第二のログを採取し，ある回のテストプログラムの実行において採取した第一のログおよび第二のログと，他の回のテストプログラムの実行において採取した第一のログおよび第二のログとを比較して，不一致であったログ採取箇所の直前のソフトウェアトラップ発生箇所から，不一致であったログ採取箇所までの命令列を障害発生命令列として検出する過程と，
前記障害発生源絞込み部が，前記テストプログラムを複数回実行し，前記障害発生命令列の実行における少なくとも１箇所のハードウェアトラップ時に前記第一のログを採取し，ある回のテストプログラムの実行において採取した前記第一のログと，他の回のテストプログラムの実行において採取した前記第一のログとが一致するか不一致であるかを比較し，一致する場合に，一致したログ採取箇所より後方の命令列が障害発生命令列であるとし，不一致であった場合に，一致したログ採取箇所以前の命令列が障害発生命令列であるとして障害発生源を絞り込む過程とを有する
ことを特徴とするコンピュータ試験方法。
【請求項２】
さらに前記情報処理装置は，第二の障害発生源絞込み部を備え，
前記第二の障害発生源絞込み部が，設定されたアドレスの命令実行時にハードウェアトラップを発生させるハードウェア機能部に，前記障害発生命令列内のいずれかの命令のアドレスを設定し，前記テストプログラムを複数回実行し，前記障害発生命令列の実行における前記ハードウェア機能部によるハードウェアトラップ時に前記第一のログを採取し，ある回のテストプログラムの実行において採取した前記第一のログと，他の回のテストプログラムの実行において採取した前記第一のログとが一致するか不一致であるかを比較し，一致する場合に，一致したログ採取箇所より後方の命令列が障害発生命令列であるとし，不一致であった場合に，一致したログ採取箇所以前の命令列が障害発生命令列であるとして障害発生源を絞り込む過程を有する
ことを特徴とする請求項１に記載のコンピュータ試験方法。
【請求項３】
前記第一のログは，参照可能な全レジスタおよび試験対象となるメモリ域のデータのログであり，
前記第二のログは，カレントウインドウのレジスタのデータのログである
ことを特徴とする請求項１または請求項２に記載のコンピュータ試験方法。
【請求項４】
テストプログラムの実行により障害を検出する障害検出部と，障害が検出されたテストプログラムの障害箇所を絞り込む障害発生源絞込み部とを備える情報処理装置に，
前記障害検出部が，トラップ命令が埋め込まれたテストプログラムを複数回実行し，前記テストプログラムの実行における前記トラップ命令によるソフトウェアトラップ時にはレジスタおよびメモリのデータのログである第一のログを採取し，ハードウェアトラップ時にはレジスタのログである第二のログを採取し，ある回のテストプログラムの実行において採取した第一のログおよび第二のログと，他の回のテストプログラムの実行において採取した第一のログおよび第二のログとを比較して，不一致であったログ採取箇所の直前のソフトウェアトラップ発生箇所から，不一致であったログ採取箇所までの命令列を障害発生命令列として検出する処理と，
前記障害発生源絞込み部が，前記テストプログラムを複数回実行し，前記障害発生命令列の実行における少なくとも１箇所のハードウェアトラップ時に前記第一のログを採取し，ある回のテストプログラムの実行において採取した前記第一のログと，他の回のテストプログラムの実行において採取した前記第一のログとが一致するか不一致であるかを比較し，一致する場合に，一致したログ採取箇所より後方の命令列が障害発生命令列であるとし，不一致であった場合に，一致したログ採取箇所以前の命令列が障害発生命令列であるとして障害発生源を絞り込む処理とを
実行させるためのコンピュータ試験プログラム。
【請求項５】
トラップ命令が埋め込まれたテストプログラムを複数回実行し，前記テストプログラムの実行における前記トラップ命令によるソフトウェアトラップ時にはレジスタおよびメモリのデータのログである第一のログを採取し，ハードウェアトラップ時にはレジスタのログである第二のログを採取し，ある回のテストプログラムの実行において採取した第一のログおよび第二のログと，他の回のテストプログラムの実行において採取した第一のログおよび第二のログとを比較して，不一致であったログ採取箇所の直前のソフトウェアトラップ発生箇所から，不一致であったログ採取箇所までの命令列を障害発生命令列として検出する障害検出部と，
前記テストプログラムを複数回実行し，前記障害発生命令列の実行における少なくとも１箇所のハードウェアトラップ時に前記第一のログを採取し，ある回のテストプログラムの実行において採取した前記第一のログと，他の回のテストプログラムの実行において採取した前記第一のログとが一致するか不一致であるかを比較し，一致する場合に，一致したログ採取箇所より後方の命令列が障害発生命令列であるとし，不一致であった場合に，一致したログ採取箇所以前の命令列が障害発生命令列であるとして障害発生源を絞り込む障害発生絞込み部とを備える
ことを特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，試験命令列（テストプログラム）を用いて情報処理装置のシステム試験を行う技術に関するものであり，特に，試験において障害が検出された場合に，障害発生要因となる命令を含む命令列の範囲を自動的に絞り込むコンピュータ試験方法，プログラムおよび情報処理装置に関するものである。
【背景技術】
【０００２】
情報処理システムの試験方法として，試験命令列（テストプログラム）を試験対象の情報処理装置で実行させることにより試験を行う方法がある。以下では，乱数を用いて生成された試験命令列をランダム命令列と呼び，そのランダム命令列を用いた情報処理システムの試験をランダム命令列試験と呼ぶ。
【０００３】
ランダム命令列試験を実行するプログラムによる障害個所の絞込みとしては，例えば，以下の（ｉ），（ii）に示すような方法が従来考えられている。
【０００４】
（ｉ）ランダム命令列試験において障害が検出された場合に，ランダム命令列の最上部から複数命令を削除する。削除する命令は，数十命令から数百命令，数千命令の場合もある。削除した部分の命令列を，あらかじめソフトシミュレータで実行する。ソフトシミュレータによる実行結果の環境，すなわち全制御レジスタや試験対象メモリの内容を初期化データとして設定し，削除後の残りの部分の命令列を試験対象の情報処理システムで実行する。理論的に，部分削除を行う前のランダム命令列と同じ動作をすることとなる。このような作業を，削除する命令数を変えながら繰り返し，障害個所の絞込みを行う。
【０００５】
（ii）ランダム命令列試験において障害が検出された場合に，ランダム命令列の障害が発生したと考えられる個所から遠くない場所の命令をトラップ命令に書き換える。書き換え後のランダム命令列を試験対象の情報処理システムで実行し，書き換えられたトラップ命令の部分で全制御レジスタや試験対象メモリのログを採取する。このように採取されたログと，あらかじめ書き換え後のランダム命令列をソフトシミュレータで実行して採取されたログとを比較する。または，試験対象の情報処理装置で書き換え後のランダム命令列を２回実行し，その２回の試験結果として採取されたログ同士を比較する。このような作業を，ログの比較結果のＯＫ／ＮＧによってトラップ命令への書き換え場所を変えながら繰り返し，障害個所の絞込みを行う。
【０００６】
なお，ランダム命令列試験を用いて情報処理システムの試験を行う技術が記載された先行技術文献としては，例えば特許文献１などがある。特許文献１には，乱数値を用いて生成されたテスト命令列を生成し，生成されたテスト命令列を，ソフトシミュレータと試験対象装置とで実行し，双方のテスト結果やトラップポイントにおけるトレースデータを比較することにより，異常を検出する技術が記載されている。
【特許文献１】特開昭６４−２３３４４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
上記の（ｉ），（ii）に示すランダム命令列試験の問題点は，命令列を書き換えてしまうことにある。
【０００８】
プロセッサのハードウェアには，その性能を上げるために，内部にキャッシュ制御，命令パイプライン制御，先行制御，分岐予測制御，複数命令同時実行制御，ＲＡＳ制御などのさまざまな仕組みが設けられているため，環境が少しでも変化するとハードウェアの内部状態が大きく変わってしまう。その結果，命令列の書き換えにより障害の発生タイミングがずれてしまい，障害が再現されなくなる可能性がある。
【０００９】
上記の（ｉ），（ii）に示す方法では，明らかに命令列を変えているため，ハードウェアの内部状態が障害発生のタイミングからズレてしまう可能性が高く，障害が再現される可能性も低くなってしまう。このことから，障害を再現させながら障害個所の絞込みを実現させるためには，障害を検出した命令列を変更せずに，そのままの命令列で障害個所の絞込みを行う必要がある。
【００１０】
本発明は，試験命令列を変更することなく，障害個所の絞込みを実現する技術を提供することを目的とする。
【課題を解決するための手段】
【００１１】
試験命令列を用いた情報処理システムの試験において，ログを採取するトリガとして，ソフトウェアトラップとハードウェアトラップの２種類のトラップを用意する。ソフトウェアトラップは，試験命令列に埋め込まれたトラップ命令によって発生する割り込みである。ハードウェアトラップは，試験命令列中の命令を実行した結果として発生する割り込みである。
【００１２】
また，トラップ発生時に採取するログの種別として，フルログと簡易ログの２つのログ種別を用意する。フルログ採取では，広い範囲のコンピュータの状態，例えばレジスタとメモリのデータを採取する。簡易ログ採取では，フルログより狭い範囲のコンピュータの状態，例えばレジスタのデータのみを採取する。
【００１３】
これらのソフトウェアトラップ／ハードウェアトラップや，フルログ／簡易ログの特徴を生かして使い分けることにより，試験命令列の実行による障害の検出や，障害発生要因となる命令を含む命令列の範囲の絞込みを行う。
【００１４】
具体的には，テストプログラムの実行により障害を検出する障害検出部と，障害が検出されたテストプログラムの障害箇所を絞り込む障害発生源絞込み部とを備える情報処理装置が行うコンピュータ試験方法は，障害検出部が，トラップ命令が埋め込まれたテストプログラムを複数回実行し，テストプログラムの実行におけるトラップ命令によるソフトウェアトラップ時にはレジスタおよびメモリのデータのログである第一のログを採取し，ハードウェアトラップ時にはレジスタのログである第二のログを採取し，ある回のテストプログラムの実行において採取した第一のログおよび第二のログと，他の回のテストプログラムの実行において採取した第一のログおよび第二のログとを比較して，不一致であったログ採取箇所の直前のソフトウェアトラップ発生箇所から，不一致であったログ採取箇所までの命令列を障害発生命令列として検出する過程と，障害発生源絞込み部が，テストプログラムを複数回実行し，障害発生命令列の実行における少なくとも１箇所のハードウェアトラップ時に第一のログを採取し，ある回のテストプログラムの実行において採取した第一のログと，他の回のテストプログラムの実行において採取した第一のログとが一致するか不一致であるかを比較し，一致する場合に，一致したログ採取箇所より後方の命令列が障害発生命令列であるとし，不一致であった場合に，一致したログ採取箇所以前の命令列が障害発生命令列であるとして障害発生源を絞り込む過程とを有する。
【００１５】
また，上記のコンピュータ試験方法は，情報処理装置がさらに備える第二の障害発生源絞込み部が，設定されたアドレスの命令実行時にハードウェアトラップを発生させるハードウェア機能部に，障害発生命令列内のいずれかの命令のアドレスを設定し，テストプログラムを複数回実行し，障害発生命令列の実行におけるハードウェア機能部によるハードウェアトラップ時に第一のログを採取し，ある回のテストプログラムの実行において採取した第一のログと，他の回のテストプログラムの実行において採取した第一のログとが一致するか不一致であるかを比較し，一致する場合に，一致したログ採取箇所より後方の命令列が障害発生命令列であるとし，不一致であった場合に，一致したログ採取箇所以前の命令列が障害発生命令列であるとして障害発生源を絞り込む過程を有してもよい。
【００１６】
また，上記のコンピュータ試験方法において，第一のログが参照可能な全レジスタおよび試験対象となるメモリ域のデータのログであり，第二のログがカレントウインドウのレジスタのデータのログであってもよい。
【００１７】
また，コンピュータ試験プログラムは，テストプログラムの実行により障害を検出する障害検出部と，障害が検出されたテストプログラムの障害箇所を絞り込む障害発生源絞込み部とを備える情報処理装置に，障害検出部が，トラップ命令が埋め込まれたテストプログラムを複数回実行し，テストプログラムの実行におけるトラップ命令によるソフトウェアトラップ時にはレジスタおよびメモリのデータのログである第一のログを採取し，ハードウェアトラップ時にはレジスタのログである第二のログを採取し，ある回のテストプログラムの実行において採取した第一のログおよび第二のログと，他の回のテストプログラムの実行において採取した第一のログおよび第二のログとを比較して，不一致であったログ採取箇所の直前のソフトウェアトラップ発生箇所から，不一致であったログ採取箇所までの命令列を障害発生命令列として検出する処理と，障害発生源絞込み部が，テストプログラムを複数回実行し，障害発生命令列の実行における少なくとも１箇所のハードウェアトラップ時に第一のログを採取し，ある回のテストプログラムの実行において採取した第一のログと，他の回のテストプログラムの実行において採取した第一のログとが一致するか不一致であるかを比較し，一致する場合に，一致したログ採取箇所より後方の命令列が障害発生命令列であるとし，不一致であった場合に，一致したログ採取箇所以前の命令列が障害発生命令列であるとして障害発生源を絞り込む処理とを実行させる。
【００１８】
また，情報処理装置は，トラップ命令が埋め込まれたテストプログラムを複数回実行し，テストプログラムの実行におけるトラップ命令によるソフトウェアトラップ時にはレジスタおよびメモリのデータのログである第一のログを採取し，ハードウェアトラップ時にはレジスタのログである第二のログを採取し，ある回のテストプログラムの実行において採取した第一のログおよび第二のログと，他の回のテストプログラムの実行において採取した第一のログおよび第二のログとを比較して，不一致であったログ採取箇所の直前のソフトウェアトラップ発生箇所から，不一致であったログ採取箇所までの命令列を障害発生命令列として検出する障害検出部と，テストプログラムを複数回実行し，障害発生命令列の実行における少なくとも１箇所のハードウェアトラップ時に第一のログを採取し，ある回のテストプログラムの実行において採取した第一のログと，他の回のテストプログラムの実行において採取した第一のログとが一致するか不一致であるかを比較し，一致する場合に，一致したログ採取箇所より後方の命令列が障害発生命令列であるとし，不一致であった場合に，一致したログ採取箇所以前の命令列が障害発生命令列であるとして障害発生源を絞り込む障害発生絞込み部とを備える。
【発明の効果】
【００１９】
試験命令列を用いた情報処理システムの試験において，ソフトウェアトラップ／ハードウェアトラップやフルログ／簡易ログの特徴を生かして使い分けることにより，実行する試験命令列を変えずに，障害発生の検出から障害発生要因となる命令が含まれる命令列の範囲の絞込みまでを行うことが可能となる。実行する試験命令列を変えないので，障害検出時とハードウェアの状態がほぼ変わらない状況で，障害発生要因となる命令が含まれる命令列の範囲の絞込みを行うことが可能である。
【発明を実施するための最良の形態】
【００２０】
以下，本実施の形態について，図を用いて説明する。
【００２１】
本実施の形態において，試験対象であるサーバ，ＰＣ等の情報処理装置は，機能試験，アーキテクチャ試験等の基本動作試験がすでに完了していること，すなわち普通のアプリケーションが動作可能なレベルであることが前提である。以下，試験対象である情報処理装置を被試験装置と呼ぶ。
【００２２】
本実施の形態では，試験命令列としてランダム命令列を用い，ランダム命令列を用いたシステム試験を行うプログラムであるランダム命令列試験プログラムが被試験装置のメモリに展開され，被試験装置が，自分自身のＣＰＵをテストすることにより，自ＣＰＵのタイミングに依存する論理障害やクリティカルパスに依存する物理障害などを検出する。
【００２３】
図１は，本実施の形態による被試験装置の構成例を示す図である。被試験装置１は，ランダム命令列試験部１０を備える。ランダム命令列試験部１０は，被試験装置１に対するランダム命令列を用いたシステム試験を実行する手段であり，被試験装置１のコンピュータが備えるＣＰＵ，メモリ等のハードウェアと，ソフトウェアプログラムとにより実現される。ランダム命令列試験部１０は，ランダム命令列生成部１１，障害検出部１２，第一の障害発生源絞込み部１３，第二の障害発生源絞込み部１４，ログ情報保持部１５を備える。
【００２４】
ランダム命令列生成部１１は，ランダム命令列試験に用いるランダム命令列を生成する。ランダム命令列を生成する技術は周知技術であり，例えば特許第３９５４２４８号公報などに記載されている。
【００２５】
図２は，本実施の形態によるランダム命令列生成の例を説明する図である。以下，図２を用いて，ランダム命令列を生成する例を説明する。図２おいて，ｓｅｅｄ値テーブル１１０，複数の試験スクリプトテーブル１１１，命令変換テーブル１１２は，あらかじめ用意された情報である。
【００２６】
ｓｅｅｄ値テーブル１１０には，乱数を発生させるためのｓｅｅｄ値が記録されている。ｓｅｅｄ値とは，ランダム命令列を生成するための基となる数バイトのデータである。このｓｅｅｄ値をもとに決められたアルゴリズムでランダムデータを生成し，試験スクリプトテーブル１１１の命令生成定義ファイルに従って命令を生成する。ｓｅｅｄ値と試験スクリプトテーブル１１１とが決まれば，必ず同一のランダム命令列を生成することができる。
【００２７】
各試験スクリプトテーブル１１１には，各命令の生成頻度，命令の生成数，チェックポイント（check point ）の間隔などの情報が記録されている。試験スクリプトテーブル１１１とは，ランダム命令列を作成するための情報が格納されているテーブルであり，ランダム命令列生成ジェネレータは，この試験スクリプトテーブル１１１の情報を解析しながら，各カテゴリの命令を配置する。ランダム命令列生成時には，一定命令ステップごとに意図的に割り込みを起させる。意図的に割り込みを起させるポイントをチェックポイントと呼び，意図的に割り込みを起させる命令としてトラップ命令を使用する。
【００２８】
命令変換テーブル１１２には，命令識別コードとＡＮＤデータとＯＲデータとの対応情報が記録されている。命令変換テーブル１１２のＡＮＤデータ／ＯＲデータをランダムデータに掛け合わせることにより，命令が生成される。
【００２９】
ランダム命令列を生成する処理の流れを説明する。まず，試験スクリプトテーブル１１１を１つ選択する（ステップ（ｓ１））。ｓｅｅｄ値テーブル１１０のｓｅｅｄ値を用いて所定のアルゴリズムでランダムデータを生成し，生成されたランダムデータを試験命令列空間に書き込む（ステップ（ｓ２））。命令生成ポインタを，試験命令列空間の先頭に設定する（ステップ（ｓ３））。
【００３０】
命令生成ポインタから読み出した４バイトのランダムデータをインデックスとし，選択した試験スクリプトテーブル１１１の命令生成頻度に従って，１命令を抽出する（ステップ（ｓ４））。
【００３１】
抽出された命令と対応するＡＮＤデータ／ＯＲデータを命令変換テーブル１１２から取得し，上記４バイトのランダムデータに取得されたＡＮＤデータをａｎｄ条件で掛け合わせ，さらに取得されたＯＲデータをｏｒ条件で掛け合わせることにより命令を生成し，生成された命令を上記４バイトのランダムデータと置き換える（ステップ（ｓ５））。
【００３２】
命令生成ポインタを４バイト更新し，ステップ（ｓ５）を繰り返す（ステップ（ｓ６））。
【００３３】
試験スクリプトテーブル１１１のチェックポイント間隔で指定された命令数分だけ試験命令を生成した場合には，次の命令として，無条件にトラップ命令（図中の命令では，“ｔｒ”）を埋め込む（ステップ（ｓ７））。
【００３４】
以降，試験命令列空間に生成された命令の数が試験スクリプトテーブル１１１で指定された命令生成数になるまで，ステップ（ｓ４）〜ステップ（ｓ７）を繰り返す。
【００３５】
このような処理により，ランダム命令列を生成することができる。なお，ｓｅｅｄ値テーブル１１０のｓｅｅｄ値を更新するか，ステップ（ｓ１）で別の試験スクリプトテーブル１１１を選択することにより，別のランダム命令列を生成することができる。
【００３６】
図１において，障害検出部１２は，ランダム命令列を実行してログを採取する処理を２回実行し，採取された２回分のログ情報を比較することにより，障害の検出を行う。障害検出部１２は，ログ採取部１２０，ログ比較部１２１を備える。
【００３７】
ログ採取部１２０は，ランダム命令列を実行し，トラップ発生時にログを採取し，得られたログ情報をログ情報保持部１５に保持する。以下では，ログ採取部１２０によって採取され，ログ情報保持部１５に保持されるログ情報を“期待値ログ”と呼ぶ。
【００３８】
ログ比較部１２１は，ログ採取部１２０による期待値ログの取得後，再度同じランダム命令列を実行し，トラップ発生時にログを採取し，得られたログ情報をログ情報保持部１５に保持された期待値ログと比較する。以下では，ログ比較部１２１によって採取されるログ情報を“結果値ログ”と呼ぶ。
【００３９】
ログ採取部１２０とログ比較部１２１とでは，同じランダム命令列を実行しているので，得られる期待値ログと結果値ログとは，互いに一致するはずである。しかし，何らかのハードウェア異常，例えばタイミング異常，データ化け，高負荷によるクリティカルパスなどにより，期待値ログと結果値ログとで異なるログが採取される場合がある。障害検出部１２は，期待値ログと結果値ログとの比較において，互いのログが異なるトラップ発生点があれば，障害が検出されたものと判断する。
【００４０】
ここで，本実施の形態によるランダム命令列試験の概要について説明する。本実施の形態によるランダム命令列試験では，ログを採取するトリガとして，ソフトウェアトラップとハードウェアトラップの２種類のトラップを用意する。
【００４１】
ソフトウェアトラップは，プログラムによって意図的に発生される割り込みである。無条件にトラップを発生させる命令であるトラップ命令を，ランダム命令列中に一定間隔にを埋め込むことで，確実にトラップを発生させることができる。トラップ命令は，障害検出の有無を特定するためのチェックポイント（check point ）として有効である。以下では，ソフトウェアトラップをソフトトラップ（soft trap ）と呼ぶ。
【００４２】
ハードウェアトラップは，命令を実行した結果として発生する割り込みである。ハードウェアトラップの例としては，ゼロ除算や，非正規化数を使用したフローティング演算などがある。ハードウェアトラップは，プログラムによって意図的に発生させることができない。そのため，任意の場所でハードウェアトラップを発生させることはできない。以下では，ハードウェアトラップをハードトラップ（hard trap ）と呼ぶ。
【００４３】
このようなソフトトラップやハードトラップの割り込みが発生したときに，ハードウェア状態（汎用レジスタ，制御レジスタ，メモリ等の状態）を採取する。本実施の形態によるランダム命令列試験では，採取するログとして，フルログと簡易ログの２種類のログを用意する。
【００４４】
フルログは，広い範囲でコンピュータのハードウェアの状態が採取されたログであり，例えば，すべてのハードウェア制御情報と，試験で使用しているすべてのメモリデータとを採取したものである。フルログとして採取するデータは，全ウインドウの汎用レジスタ，フローティングレジスタ，全制御用レジスタ（control/status reg + asi register ），試験対象となる全メモリ域のデータなどである。
【００４５】
フルログでは，プログラムで参照可能なすべての制御レジスタと試験対象の全メモリ域を採取する。期待値ログと結果値ログとの比較において，フルログの比較がパスした場合には，そのフルログ採取のトラップ発生点以前の試験命令列の正常性，すなわちフルログ採取のトラップ発生点以前の試験命令列が正しく動作していることが保証される。つまり，試験命令列実行中に，あるトラップ発生点のフルログで障害が検出された場合，障害発生命令列の影響範囲は，障害が検出されたトラップ発生点の直前のフルログ採取のトラップ発生点から，障害が検出されたフルログ採取のトラップ発生点までに，絞ることができる。
【００４６】
ただし，フルログでは多量のデータを採取するため，プログラムでは制御できないハードウェア内部に保持された状態が変化してしまう可能性がある。例えば，メモリの内容をログするときに，キャッシュの書き換えが発生してしまい，ハードウェアの状態が変わってしまう場合がある。そのため，フルログ採取のトラップ発生点を跨いだ命令列に障害が隠れているようなケースでは，ハードウェア環境が変わることによる弊害で，障害が検出できなくなる可能性がある。
【００４７】
簡易ログは，フルログと比較して狭い範囲でコンピュータのハードウェアの状態が採取されたログであり，例えば，トラップ発生時に使用しているレジスタのデータのみを採取したものである。簡易ログとして採取するデータは，使用中のカレントウインドウの汎用レジスタ，フローティングレジスタのデータなどである。
【００４８】
簡易ログでは，トラップが発生したときに動作していたカレントウインドウの汎用レジスタとフローティングレジスタのみのデータの採取に留めているため，ハードウェア内部に保持された状態の変化を，最小限に抑えることができる。したがって，簡易ログのトラップ発生点を跨いだ命令列に障害が隠れているようなケースでも，障害が検出される可能性は高い。
【００４９】
ただし，期待値ログと結果値ログとの比較において，簡易ログではハードウェア制御レジスタの一部しか比較されないため，簡易ログの比較がパスした場合では，その簡易ログ採取のトラップ発生点以前の試験命令列の正常性が保証されない。つまり，試験命令列実行中に，あるトラップ発生点で障害が検出された場合，障害発生命令列の影響範囲は，たとえ障害が検出されたトラップ発生点の直前に簡易ログ採取のトラップ発生点があったとしても，障害が検出されたトラップ発生点の直前のフルログのトラップ発生点から，障害が検出されたトラップ発生点までとなる。
【００５０】
このように，フルログ採取のトラップ発生点では，そのトラップ発生点までのランダム命令列の実行による障害発生の有無の正確な検査を行い，簡易ログ採取のトラップ発生点では，ハードウェアの状態を変えない最低限の障害発生の検査を行う。
【００５１】
本実施の形態では，これらのソフトトラップ／ハードトラップやフルログ／簡易ログの特徴を生かして使い分けることにより，障害の検出や，障害発生命令列の影響範囲の絞込みを行う。
【００５２】
ランダム命令列試験では，ハードウェア状態の正常性を検証するために，ランダム命令列生成部１１でランダム命令列を作成する過程において，チェックポイントと呼ばれる，レジスタ類やメモリなどのハードウェア状態をログする仕組みが設けられる。チェックポイントには，無条件にトラップを発生させる命令であるトラップ命令が使用される。トラップ発生時の処理としては，ランダム命令列の実行１周目にハードウェア状態をログし，ランダム命令列の実行２周目も１週目と同様にハードウェア状態をログし，１周目にログした結果を期待値ログとして２周目のログと比較する。
【００５３】
また，チェックポイントのようなソフトトラップの他に，ハードトラップと呼ばれる，命令を実行した結果としてトラップが発生するケース（例えば，演算例外が発生した場合など）がある。ハードトラップが発生した場合でもハードウェア状態をログするが，すべてのハードトラップでチェックポイントと同等なログを取ってしまうと，ランダム命令のμアーキレベルの先行動作が途切れてしまい，本試験の狙いであるμアーキレベルでのタイミングのズレによる誤動作の検出率が，下がってしまう可能性が高い。これを避けるために，ハードトラップでは，例えばトラップ発生により状態が変化するレジスタなどの最小限のレジスタをログするに留める。
【００５４】
このように，本実施の形態によるランダム命令列試験では，ソフトトラップ／ハードトラップの２種類のトラップのログの量に変化を持たせることにより，障害検出率を高める効果が得られる。
【００５５】
図３は，本実施の形態による障害検出の例を説明する図である。以下，図３を用いて，障害の発生を検出し，障害が発生したと考えられる命令列である障害発生命令列を特定する例について説明する。
【００５６】
図３に示すランダム命令列において，トラップ命令は，チェックポイントとなるソフトトラップを発生させる命令である。トラップ命令によるチェックポイントでは，全レジスタ，試験対象全メモリのデータのログであるフルログが採取される。
【００５７】
図３に示すランダム命令列において，ランダム命令は，ランダム命令列内の一命令を示し，ここでは特に命令実行後にハードトラップが発生する命令を指す。命令実行後にハードトラップが発生する命令とは，例えば，演算命令であり，演算結果としてオーバフロートラップが発生する命令などである。ハードトラップ発生時には，ハードトラップ要因に関連するレジスタのデータのログである簡易ログが採取される。
【００５８】
ランダム命令列の実行１週目において，図３に示すように，ソフトトラップ発生時にはフルログを採取し，ハードトラップ発生時には簡易ログを採取する。採取されたログ情報を期待値ログとしてログ情報保持部１５に保持する。
【００５９】
図４は，ログ制御テーブルの例を示す図である。図４に示すログ制御テーブル１５０は，ログ情報保持部１５に保持されるログ情報の一例である。図４に示すログ制御テーブル１５０は，ログ番号，トラップ種別，ログ種別，ログ種別変更，トラップアドレス，圧縮ログデータの情報を有する。
【００６０】
ログ番号は，ログの識別番号である。トラップが発生し，ログが採取されるごとに，１番から順に番号が割り振られる。図４に示すログ制御テーブル１５０の例では，最後のログ番号がＮ番となっているので，ランダム命令列を１週実行させることにより，ソフトトラップとハードトラップとを合わせてＮ回のトラップが発生し，Ｎ個のログが採取されていることになる。
【００６１】
トラップ種別は，そのログがソフトトラップ発生によって採取されたログかハードトラップ発生によって採取されたログかを示す情報である。ログ種別は，そのログがフルログであるのか簡易ログであるのかを示す情報である。ログ種別変更は，ログ種別を変更してランダム命令列実行によるログの採取を行う場合に設定する情報である。ログ種別の変更については後述する。
【００６２】
トラップアドレスは，そのログが採取されるトリガとなるトラップが発生した命令のアドレスである。図４に示すログ制御テーブル１５０の例において，トラップアドレスの（アドレスＡ），（アドレスＢ），（アドレスＣ），（アドレスＤ），（アドレスＥ）は，それぞれ図３においてトラップが発生したトラップ命令Ａ，ランダム命令Ｂ，ランダム命令Ｃ，ランダム命令Ｄ，ランダム命令Ｅのアドレスを示す。
【００６３】
圧縮ログデータは，ログとして採取されたデータを圧縮して格納したものである。ここでは，採取されたデータを８バイトのチェックサム（checksum）に圧縮して格納している。チェックサムは，レジスタやメモリから採取されたデータが，定型バイト（ここでは，８バイト）ごとに分割され，加算された結果である。図４に示すログ制御テーブル１５０の例では，この圧縮ログデータが期待値ログとして保持されたログ情報である。
【００６４】
図３において，ランダム命令列の実行２週目では，１週目と同様に，ソフトトラップ発生時にはフルログを採取し，ハードトラップ発生時には簡易ログを採取する。採取されたログは，結果値ログとして期待値ログと比較される。
【００６５】
ハードウェア動作が正常であれば，それぞれのトラップ発生点において，期待値ログと結果値ログとが一致する。タイミング異常，データ化け，高負荷によるクリティカルパスなどの何らかのハードウェア異常により，期待値ログと結果値ログとが一致しないトラップ発生点があれば，障害が検出されたものと判断する。このとき，障害発生を示すエラー表示を出力するようにしてもよい。
【００６６】
チェックポイントでは，ソフトウェアで参照できるすべてのレジスタの結果がログされるため，チェックポイントでの比較結果が一致する場合には，それ以前の命令列の処理が正常に動作していることが保証される。そのため，障害原因となりうる命令列の範囲は，障害が検出されたトラップ発生点の直前のチェックポイントから，障害が検出されたトラップ発生点の命令までとなる。
【００６７】
図３に示す例において，トラップ命令Ａ，ランダム命令Ｂ，ランダム命令Ｃ，ランダム命令Ｄのトラップ発生点では，期待値ログと結果値ログとの比較結果が一致を示す“ＯＫ”となっている。ところが，ランダム命令Ｅのトラップ発生点では，期待値ログと結果値ログとの比較結果が不一致を示す“ＮＧ”となっており，ここで障害が検出されたものと判断される。障害発生要因となる命令が含まれると考えられる命令列である障害発生命令列は，障害が検出されたトラップ発生点の直前のチェックポイントの命令すなわちトラップ命令Ａから，障害が検出されたトラップ発生点の命令すなわちランダム命令Ｅまでの命令列となる。
【００６８】
なお，フルログにより正当性が保証されたトラップ発生点の命令は，障害発生命令列に含めなくてもよい。本実施の形態において，障害発生命令列が，障害が検出されたトラップ発生点の直前のフルログ採取のトラップ発生点の命令から，障害が検出されたトラップ発生点の命令までの命令列となっていても，その障害発生命令列の最上位となるフルログにより正当性が保証されたトラップ発生点の命令は，障害発生要因となる命令ではないと考えてもよい。この場合，障害発生命令列の最上位となるフルログにより正当性が保証されたトラップ発生点の命令の次の命令から，障害発生要因となる可能性がある命令と考えられる。
【００６９】
図１において，第一の障害発生源絞込み部１３は，障害検出部１２で障害発生命令列とされた範囲内のハードトラップ発生点で採取するログの種別を順にフルログに変更し，ランダム命令列を実行することにより，障害検出部１２により得られた障害発生命令列の範囲の絞込みを行う。このとき実行されるランダム命令列は，障害検出部１２で実行されたランダム命令列を変更せずに，同じものを用いる。第一の障害発生源絞込み部１３は，ログ種別変更部１３０，ログ採取部１３１，ログ比較部１３２を備える。
【００７０】
ログ種別変更部１３０は，障害検出部１２で障害発生命令列とされた範囲内のハードトラップ発生点で採取するログの種別を，所定の順番でフルログに変更する。フルログに変更する順番は，障害発生命令列におけるハードトラップ発生点の上位順や下位順，ほぼ中間となる点を選んでいくなど，どのような順番であってもよい。本実施の形態では，図４に示すログ制御テーブル１５０のログ種別変更の情報を用いて，ハードトラップ発生点で採取するログの種別を変更する。
【００７１】
ログ採取部１３１は，障害検出部１２で実行されたランダム命令列と同じランダム命令列を実行し，トラップ発生時にログを採取し，得られたログ情報を期待値ログとし，ログ情報保持部１５に保持する。本実施の形態では，ここで採取されたログ情報で図４に示すログ制御テーブル１５０の圧縮ログデータを更新することにより，期待値ログを保持するものとする。
【００７２】
ログ比較部１３２は，ログ採取部１３１による期待値ログの取得後，再度同じランダム命令列を実行し，トラップ発生時にログを採取し，得られたログ情報を結果値ログとして，ログ情報保持部１５に保持された期待値ログと比較する。
【００７３】
採取するログを簡易ログからフルログに変更したハードトラップ発生点で，期待値ログと結果値ログとが一致する場合には，そのログ種別をフルログに変更したハードトラップ発生点以後に障害発生命令列が絞り込まれる。採取するログを簡易ログからフルログに変更したハードトラップ発生点で，期待値ログと結果値ログとが一致しない場合には，そのログ種別をフルログに変更したハードトラップ発生点以前に障害発生命令列が絞り込まれる。障害発生命令列が間にハードトラップ発生点を含まないトラップ発生点間の命令列となるまで，ログ種別の変更，期待値ログの採取，期待値ログと結果値ログとの比較を繰り返し，障害発生命令列を絞り込む。
【００７４】
図５は，本実施の形態による第一の障害発生源絞込みの例を説明する図である。以下，図５を用いて，図３に示す障害発生命令列を絞り込む例について説明する。図５に示すランダム命令列は，図３に示すランダム命令列と同じものである。図３を用いて説明した障害検出の処理によって，トラップ命令Ａからランダム命令Ｅまでの障害発生命令列が得られている。
【００７５】
図５に示す障害発生源絞込みの例では，障害発生命令列の範囲内のハードトラップ発生点で採取するログの種別を，障害発生命令列の上位のハードトラップ発生点から順に簡易ログからフルログに変更し，ランダム命令列を実行して期待値ログと結果値ログとを採取し，比較して，障害発生命令列の範囲の絞込みを行う。
【００７６】
まず，障害発生命令列の範囲内の最上位のハードトラップ発生点であるランダム命令Ｂの点について，図４に示すログ制御テーブル１５０のログ種別変更の情報を更新することによって，採取するログの種別をフルログに変更する。
【００７７】
ランダム命令列の実行３週目において，図５に示すように，ソフトトラップ発生時と，ランダム命令Ｂによるハードトラップ発生時にはフルログを採取し，ランダム命令Ｂ以外のハードトラップ発生時には簡易ログを採取する。採取されたログ情報を期待値ログとしてログ情報保持部１５に保持する。
【００７８】
ランダム命令列の実行４週目では，３週目と同様に，ソフトトラップ発生時と，ランダム命令Ｂによるハードトラップ発生時にはフルログを採取し，ランダム命令Ｂ以外のハードトラップ発生時には簡易ログを採取する。採取されたログは，結果値ログとして期待値ログと比較される。
【００７９】
ランダム命令Ｂの位置でエラーが検出されれば，障害発生命令列をランダム命令Ｂ以前に絞り込むことができ，ランダム命令Ｂの位置でエラーが検出されなければ，障害発生命令列をランダム命令Ｂ以後に絞り込むことができる。図５に示す例では，ランダム命令Ｂのハードトラップ発生点で，期待値ログと結果値ログとの比較結果が一致を示す“ＯＫ”であるので，ランダム命令Ｂの位置で障害は検出されず，障害発生命令列は，ランダム命令Ｂからランダム命令Ｅまでの命令列に絞り込まれる。なお，ランダム命令Ｂの位置で障害が検出された場合には，障害発生命令列は，トラップ命令Ａからランダム命令Ｂまでの命令列に絞り込まれる。
【００８０】
図５に示す例において，４週目のランダム命令列の実行，障害発生命令列の絞込みが終了した時点で，障害発生命令列の両端であるランダム命令Ｂとランダム命令Ｅとの間には，まだランダム命令Ｃ，ランダム命令Ｄの２つのハードトラップ発生点が含まれている。そこで，フルログに変更するハードトラップ発生点を変えて，再度，障害発生命令列の範囲を絞り込むための処理を行う。
【００８１】
障害発生命令列の範囲内の，フルログによる正当性の確認がなされていない最上位のハードトラップ発生点であるランダム命令Ｃの点について，図４に示すログ制御テーブル１５０のログ種別変更の情報を更新することによって，採取するログの種別をフルログに変更する。このとき，前回にログ種別が変更されたランダム命令Ｂについてのフルログへの変更は，解除しておく。
【００８２】
ランダム命令列の実行５週目において，図５に示すように，ソフトトラップ発生時と，ランダム命令Ｃによるハードトラップ発生時にはフルログを採取し，ランダム命令Ｃ以外のハードトラップ発生時には簡易ログを採取する。採取されたログ情報を期待値ログとしてログ情報保持部１５に保持する。
【００８３】
ランダム命令列の実行６週目では，５週目と同様に，ソフトトラップ発生時と，ランダム命令Ｃによるハードトラップ発生時にはフルログを採取し，ランダム命令Ｃ以外のハードトラップ発生時には簡易ログを採取する。採取されたログは，結果値ログとして期待値ログと比較される。
【００８４】
図５に示すように，ランダム命令Ｃのハードトラップ発生点で，期待値ログと結果値ログとの比較結果が一致を示す“ＯＫ”であるので，ランダム命令Ｃの位置で障害は検出されず，障害発生命令列は，ランダム命令Ｃからランダム命令Ｅまでの命令列に絞り込まれる。なお，ランダム命令Ｃの位置で障害が検出された場合には，障害発生命令列は，ランダム命令Ｂからランダム命令Ｃまでの命令列に絞り込まれる。
【００８５】
図５に示す例において，６週目のランダム命令列の実行，障害発生命令列の絞込みが終了した時点で，障害発生命令列の両端であるランダム命令Ｃとランダム命令Ｅとの間には，まだランダム命令Ｄのハードトラップ発生点が含まれている。そこで，フルログに変更するハードトラップ発生点を変えて，再度，障害発生命令列の範囲を絞り込むための処理を行う。
【００８６】
障害発生命令列の範囲内の，フルログによる正当性の確認がなされていない最上位のハードトラップ発生点であるランダム命令Ｄの点について，図４に示すログ制御テーブル１５０のログ種別変更の情報を更新することによって，採取するログの種別をフルログに変更する。このとき，前回にログ種別が変更されたランダム命令Ｃについてのフルログへの変更は，解除しておく。
【００８７】
ランダム命令列の実行７週目において，図５に示すように，ソフトトラップ発生時と，ランダム命令Ｄによるハードトラップ発生時にはフルログを採取し，ランダム命令Ｄ以外のハードトラップ発生時には簡易ログを採取する。採取されたログ情報を期待値ログとしてログ情報保持部１５に保持する。
【００８８】
ランダム命令列の実行８週目では，７週目と同様に，ソフトトラップ発生時と，ランダム命令Ｄによるハードトラップ発生時にはフルログを採取し，ランダム命令Ｄ以外のハードトラップ発生時には簡易ログを採取する。採取されたログは，結果値ログとして期待値ログと比較される。
【００８９】
図５に示すように，ランダム命令Ｄのハードトラップ発生点で，期待値ログと結果値ログとの比較結果が一致を示す“ＯＫ”であるので，ランダム命令Ｄの位置で障害は検出されず，障害発生命令列は，ランダム命令Ｄからランダム命令Ｅまでの命令列に絞り込まれる。なお，ランダム命令Ｄの位置で障害が検出された場合には，障害発生命令列は，ランダム命令Ｃからランダム命令Ｄまでの命令列に絞り込まれる。
【００９０】
図５に示す例において，８週目のランダム命令列の実行，障害発生命令列の絞込みが終了した時点で，障害発生命令列の両端であるランダム命令Ｄとランダム命令Ｅとの間には，ハードトラップ発生点が含まれていない。よって，最終的に，最小範囲となる障害発生命令列は，ランダム命令Ｄからランダム命令Ｅまでの命令列に絞り込まれたことになる。このとき，ランダム命令Ｄとランダム命令Ｅとの間で障害が発生した旨を示すエラー情報を出力するようにしてもよい。
【００９１】
このように，第一の障害発生源絞込み部１３によって絞り込まれた障害発生命令列の両端となるトラップ発生点の間にはもうハードトラップ発生点が存在しないため，第一の障害発生源絞込み部１３による処理では，ランダム命令列を変更せずにこれ以上の障害発生命令列の絞込みはできない。ランダム命令列を変更せずにこれ以上の障害発生命令列の絞込みを行うためには，さらに別の仕組みを設けなければならない。
【００９２】
図１において，第二の障害発生源絞込み部１４は，第一の障害発生源絞込み部１３によって絞り込まれた障害発生命令列をさらに絞り込む処理を行う。
【００９３】
第二の障害発生源絞込み部１４による処理を実行するために，アドレスフェッチトラップレジスタ２０という新たなハードウェア機能を被試験装置１に設ける。アドレスフェッチトラップレジスタ２０は，このレジスタに登録されたアドレスと，プログラムカウンタのアドレスすなわち実行される命令のアドレスとが一致したときに，割り込みを発生させるハードウェア機能である。
【００９４】
第二の障害発生源絞込み部１４は，第一の障害発生源絞込み部１３によって絞り込まれた障害発生命令列内のランダム命令のアドレスを，順にアドレスフェッチトラップレジスタ２０に設定し，ランダム命令列を実行することにより，第一の障害発生源絞込み部１３によって絞り込まれた障害発生命令列の範囲のさらなる絞込みを行う。このとき実行されるランダム命令列は，障害検出部１２および第一の障害発生源絞込み部１３で実行されたランダム命令列を変更せずに，同じものを用いる。なお，アドレスフェッチトラップレジスタ２０に設定されたアドレスの命令実行によるハードトラップ発生時には，フルログが採取される。第二の障害発生源絞込み部１４は，アドレスフェッチトラップレジスタ設定部１４０，ログ採取部１４１，ログ比較部１４２を備える。
【００９５】
アドレスフェッチトラップレジスタ設定部１４０は，第一の障害発生源絞込み部１３によって絞り込まれた障害発生命令列内のランダム命令のアドレスを，所定の順番でアドレスフェッチトラップレジスタ２０に設定する。アドレスフェッチトラップレジスタ２０に設定するアドレスの順番は，障害発生命令列の上端の命令のアドレスから所定数の命令ずつ飛ばして進みながら順番に，障害発生命令列の下端の命令のアドレスから所定数の命令ずつ飛ばして戻りながら順番に，障害発生命令列の中間となる命令のアドレスを順に選択していくなど，どのような順番であってもよい。また，飛ばす命令数や最終的に障害発生命令列の範囲とする命令数なども，それぞれ１以上の任意の数である。
【００９６】
ログ採取部１４１は，障害検出部１２や第一の障害発生源絞込み部１３で実行されたランダム命令列と同じランダム命令列を実行し，トラップ発生時にログを採取し，得られたログ情報を期待値ログとし，ログ情報保持部１５に保持する。
【００９７】
ログ比較部１４２は，ログ採取部１４１による期待値ログの取得後，再度同じランダム命令列を実行し，トラップ発生時にログを採取し，得られたログ情報を結果値ログとして，ログ情報保持部１５に保持された期待値ログと比較する。
【００９８】
アドレスフェッチトラップレジスタ２０によるハードトラップ発生点で，期待値ログと結果値ログとが一致する場合には，そのアドレスフェッチトラップレジスタ２０によるハードトラップ発生点以後に障害発生命令列が絞り込まれる。アドレスフェッチトラップレジスタ２０によるハードトラップ発生点で，期待値ログと結果値ログとが一致しない場合には，そのアドレスフェッチトラップレジスタ２０によるハードトラップ発生点以前に障害発生命令列が絞り込まれる。障害発生命令列の範囲が所定の命令数以下になるまで，アドレスフェッチトラップレジスタ２０の設定／更新，期待値ログの採取，期待値ログと結果値ログとの比較を繰り返し，障害発生命令列を絞り込む。
【００９９】
図６は，本実施の形態による第二の障害発生源絞込みの例を説明する図である。以下，図６を用いて，図５の例で最終的に絞り込まれた障害発生命令列をさらに絞り込む例について説明する。図６に示すランダム命令列は，図５に示すランダム命令列と同じものであり，特に図５で最終的に障害発生命令列として絞り込まれたランダム命令Ｄからランダム命令Ｅまでの範囲をクローズアップして示したものである。
【０１００】
図６に示す障害発生源絞込みの例では，障害発生命令列の範囲内のランダム命令のアドレスを，所定の数命令単位で飛ばしながら上位から順にアドレスフェッチトラップレジスタ２０に設定し，ランダム命令列を実行して期待値ログと結果値ログとを採取し，比較して，障害発生命令列の範囲の絞込みを行う。
【０１０１】
まず，障害発生命令列の範囲内の最上位命令であるランダム命令Ｄから所定の数命令進んだランダム命令Ｘのアドレスをアドレスフェッチトラップレジスタ２０に設定することにより，ランダム命令Ｘの実行時にハードトラップを発生させ，フルログを採取するようにする。図６において，アドレスフェッチレジスタ２０に設定された（アドレスＸ）は，ランダム命令Ｘのアドレスを示している。
【０１０２】
ランダム命令列の実行９週目において，図６に示すように，ソフトトラップ発生時と，アドレスフェッチトラップレジスタ２０によるハードトラップ発生時すなわちランダム命令Ｘの実行時にはフルログを採取し，アドレスフェッチトラップレジスタ２０によるハードトラップ発生時以外のハードトラップ発生時には簡易ログを採取する。採取されたログ情報を期待値ログとしてログ情報保持部１５に保持する。
【０１０３】
ランダム命令列の実行１０週目では，９週目と同様に，ソフトトラップ発生時と，アドレスフェッチトラップレジスタ２０によるハードトラップ発生時すなわちランダム命令Ｘの実行時にはフルログを採取し，アドレスフェッチトラップレジスタ２０によるハードトラップ発生時以外のハードトラップ発生時には簡易ログを採取する。採取されたログは，結果値ログとして期待値ログと比較される。
【０１０４】
ランダム命令Ｘの位置でエラーが検出されれば，障害発生命令列をランダム命令Ｘ以前に絞り込むことができ，ランダム命令Ｘの位置でエラーが検出されなければ，障害発生命令列をランダム命令Ｘ以後に絞り込むことができる。図６に示す例では，ランダム命令Ｘのハードトラップ発生点で，期待値ログと結果値ログとの比較結果が一致を示す“ＯＫ”であるので，ランダム命令Ｘの位置で障害は検出されず，障害発生命令列は，ランダム命令Ｘからランダム命令Ｅまでの命令列に絞り込まれる。なお，ランダム命令Ｘの位置で障害が検出された場合には，障害発生命令列は，ランダム命令Ｄからランダム命令Ｘまでの命令列に絞り込まれる。
【０１０５】
図６に示す例において，１０週目のランダム命令列の実行，障害発生命令列の絞込みが終了した時点で，まだ障害発生命令列の範囲が所定の命令数以下になっていないものとする。そこで，アドレスフェッチトラップレジスタ２０に設定するランダム命令のアドレスを変えて，再度，障害発生命令列の範囲を絞り込むための処理を行う。
【０１０６】
障害発生命令列の範囲内の最上位命令であるランダム命令Ｘから所定の数命令進んだランダム命令Ｙのアドレスでアドレスフェッチトラップレジスタ２０の設定アドレスを更新することにより，ランダム命令Ｙの実行時にハードトラップを発生させ，フルログを採取するようにする。図６において，アドレスフェッチレジスタ２０に設定された（アドレスＹ）は，ランダム命令Ｙのアドレスを示している。
【０１０７】
ランダム命令列の実行１１週目において，図６に示すように，ソフトトラップ発生時と，アドレスフェッチトラップレジスタ２０によるハードトラップ発生時すなわちランダム命令Ｙの実行時にはフルログを採取し，アドレスフェッチトラップレジスタ２０によるハードトラップ発生時以外のハードトラップ発生時には簡易ログを採取する。採取されたログ情報を期待値ログとしてログ情報保持部１５に保持する。
【０１０８】
ランダム命令列の実行１２週目では，１１週目と同様に，ソフトトラップ発生時と，アドレスフェッチトラップレジスタ２０によるハードトラップ発生時すなわちランダム命令Ｙの実行時にはフルログを採取し，アドレスフェッチトラップレジスタ２０によるハードトラップ発生時以外のハードトラップ発生時には簡易ログを採取する。採取されたログは，結果値ログとして期待値ログと比較される。
【０１０９】
図６に示す例では，ランダム命令Ｙのハードトラップ発生点で，期待値ログと結果値ログとの比較結果が一致を示す“ＯＫ”であるので，ランダム命令Ｙの位置で障害は検出されず，障害発生命令列は，ランダム命令Ｙからランダム命令Ｅまでの命令列に絞り込まれる。なお，ランダム命令Ｙの位置で障害が検出された場合には，障害発生命令列は，ランダム命令Ｘからランダム命令Ｙまでの命令列に絞り込まれる。
【０１１０】
図６に示す例において，１２週目のランダム命令列の実行，障害発生命令列の絞込みが終了した時点で，まだ障害発生命令列の範囲が所定の命令数以下になっていないものとする。そこで，アドレスフェッチトラップレジスタ２０に設定するランダム命令のアドレスを変えて，再度，障害発生命令列の範囲を絞り込むための処理を行う。
【０１１１】
障害発生命令列の範囲内の最上位命令であるランダム命令Ｙから所定の数命令進んだランダム命令Ｚのアドレスでアドレスフェッチトラップレジスタ２０の設定アドレスを更新することにより，ランダム命令Ｚの実行時にハードトラップを発生させ，フルログを採取するようにする。図６において，アドレスフェッチレジスタ２０に設定された（アドレスＺ）は，ランダム命令Ｚのアドレスを示している。
【０１１２】
ランダム命令列の実行１３週目において，図６に示すように，ソフトトラップ発生時と，アドレスフェッチトラップレジスタ２０によるハードトラップ発生時すなわちランダム命令Ｚの実行時にはフルログを採取し，アドレスフェッチトラップレジスタ２０によるハードトラップ発生時以外のハードトラップ発生時には簡易ログを採取する。採取されたログ情報を期待値ログとしてログ情報保持部１５に保持する。
【０１１３】
ランダム命令列の実行１４週目では，１３週目と同様に，ソフトトラップ発生時と，アドレスフェッチトラップレジスタ２０によるハードトラップ発生時すなわちランダム命令Ｚの実行時にはフルログを採取し，アドレスフェッチトラップレジスタ２０によるハードトラップ発生時以外のハードトラップ発生時には簡易ログを採取する。採取されたログは，結果値ログとして期待値ログと比較される。
【０１１４】
図６に示す例では，ランダム命令Ｚのハードトラップ発生点で，期待値ログと結果値ログとの比較結果が不一致を示す“ＮＧ”であるので，ランダム命令Ｚの位置で障害が検出され，障害発生命令列は，ランダム命令Ｙからランダム命令Ｚまでの命令列に絞り込まれる。なお，ランダム命令Ｚの位置で障害が検出された場合には，障害発生命令列は，ランダム命令Ｚからランダム命令Ｅまでの命令列に絞り込まれる。
【０１１５】
図６に示す例において，１４週目のランダム命令列の実行，障害発生命令列の絞込みが終了した時点で，障害発生命令列の範囲が所定の命令数以下になっているものとする。よって，最終的に，最小範囲となる障害発生命令列は，ランダム命令Ｙからランダム命令Ｚまでの命令列に絞り込まれたことになる。このとき，ランダム命令Ｙとランダム命令Ｚとの間で障害が発生した旨を示すエラー情報を出力するようにしてもよい。
【０１１６】
このように，アドレスフェッチトラップレジスタ２０を利用することにより，障害発生命令列の範囲を任意の命令数以内に絞り込むことができる。所定の命令数を１とすれば，障害発生命令列の範囲を１命令に絞り込むことも可能である。
【０１１７】
以下では，本実施の形態によるランダム命令列試験の処理の流れの例を，フローチャートを用いて説明する。なお，以下に説明する処理の例は，図３，図５，図６等で説明した手順の流れに沿った処理の例である。
【０１１８】
図７は，本実施の形態による障害検出処理フローチャートである。ｓｅｅｄ値としてｓｅｅｄ値テーブル１１０に設定されたｓｅｅｄ値の初期値を選択し，試験スクリプトテーブル１１１を１つ選択する（ステップＳ１０）。
【０１１９】
ｓｅｅｄ値と試験スクリプトテーブル１１１との組合せから，所定のアルゴリズムによって，ランダム命令列を生成する（ステップＳ１１）。
【０１２０】
生成されたランダム命令列を実行し，トラップ発生時にログを収集し，収集されたログ情報を期待値ログとして保持する（ステップＳ１２）。このとき，トラップ命令によるソフトトラップ発生時にはフルログを採取し，ハードトラップ発生時には簡易ログを採取する。例えば，ハードトラップ発生時には，簡易ログを収集し，チェックサムで圧縮して図４に示すようなログ制御テーブル１５０に格納し，ソフトトラップ発生時には，フルログを収集し，チェックサムで圧縮して図４に示すようなログ制御テーブル１５０に格納する。再度，同じランダム命令列を実行し，トラップ発生時にログを収集し，収集されたログ情報を結果値ログとして保持された期待値ログと比較する（ステップＳ１３）。
【０１２１】
期待値ログと結果値ログとの比較により，エラーが検出されれば（ステップＳ１４），そのエラー情報を保持し（ステップＳ１５），第一の障害発生源絞込み処理に進む。ここでは，期待値ログと結果値ログとをトラップ発生点ごとに比較し，ログが不一致のトラップ発生点が存在する場合に，エラーが検出されたものと判断する。このとき，障害発生要因となる命令が含まれる命令列である障害発生命令列などのエラー情報が保持される。この時点での障害発生命令列は，エラーが検出されたトラップ発生点の直前のソフトトラップ発生点から，エラーが検出されたトラップ発生点までの命令列である。なお，第一の障害発生源絞込み処理については，図８を参照して後述する。
【０１２２】
エラーが検出されなければ（ステップＳ１４），試験スクリプトテーブルやｓｅｅｄ値を更新し（ステップＳ１０，ステップＳ１７），異なるｓｅｅｄ値によって規定のＭ回（ステップＳ１６），また全試験スクリプトテーブル１１１について完了するまで（ステップＳ１８），ランダム命令列による試験を実施する。ｓｅｅｄ値の更新は，例えば現在のｓｅｅｄ値をインクリメントするなどにより行う。
【０１２３】
図７に示す障害検出処理により，エラーが検出されたトラップ発生点の直前のソフトトラップ発生点から，エラーが検出されたトラップ発生点までの障害発生命令列が得られる。
【０１２４】
図８は，本実施の形態による第一の障害発生源絞込み処理フローチャートである。エラーが検出されたトラップ発生点の直前のトラップ発生点でフルログが採取されていれば（ステップＳ２０），第二の障害発生源絞込み処理に進む。エラーが検出されたトラップ発生点の直前のトラップ発生点でフルログが採取されている場合には，障害発生命令列が，間にトラップ発生点が含まれない２つのトラップ発生点間の命令列に絞り込めた状態であるので，第一の障害発生源絞込み処理ではこれ以上の障害発生命令列の絞込みはできない。なお，第二の障害発生源絞込み処理については，図９を参照して後述する。
【０１２５】
障害発生命令列内の最若番アドレスのトラップ発生点のログ種別を，フルログに変更する（ステップＳ２１）。障害発生命令列において，その両端となるトラップ発生点の間にハードトラップ発生点が含まれていれば，まだ障害発生命令列を絞り込むことができるので，間にあるハードトラップ発生点のうち最若番アドレスのハードトラップ発生点で採取するログの種別をフルログに変更する。例えば，図４に示すログ制御テーブル１５０において，障害発生命令列内の最若番アドレスのハードトラップ発生点のログ種別変更の情報をフルログにする。
【０１２６】
障害検出処理で実行されたランダム命令列を再度実行し，トラップ発生時にログを収集し，収集されたログ情報を期待値ログとして保持する（ステップＳ２２）。このとき，ソフトトラップ発生時と，フルログ採取に変更されたハードトラップ発生時にはフルログを採取し，それ以外のハードトラップ発生時には簡易ログを採取する。採取されたログ情報は，例えば図４に示すようなログ制御テーブル１５０に格納する。再度，同じランダム命令列を実行し，トラップ発生時にログを収集し，収集されたログ情報を結果値ログとして保持された期待値ログと比較する（ステップＳ２３）。
【０１２７】
期待値ログと結果値ログとの比較により，フルログ採取に変更されたハードトラップ発生点でエラーが検出されれば（ステップＳ２４），エラー情報を更新し（ステップＳ２５），第二の障害発生源絞込み処理に進む。フルログ採取に変更されたハードトラップ発生点は，障害発生命令列内の最若番アドレスのハードトラップ発生点であるので，ここでエラーが検出されれば，更新された障害発生命令列が，間にトラップ発生点が含まれない２つのトラップ発生点間の命令列に絞り込めた状態となり，第一の障害発生源絞込み処理ではこれ以上の障害発生命令列の絞込みはできない。この時点で更新された障害発生命令列は，障害発生命令列の上端となるトラップ発生点の命令から，フルログ採取に変更されたハードトラップ発生点の命令までとなる。
【０１２８】
期待値ログと結果値ログとの比較により，フルログ採取に変更されたハードトラップ発生点でエラーが検出されず（ステップＳ２４），障害発生命令列の最後のトラップ発生点でエラーが検出された場合には（ステップＳ２６），エラー情報を更新し（ステップＳ２７），ステップ２０の処理に戻る。この時点で更新された障害発生命令列は，フルログ採取に変更されたハードトラップ発生点の命令から，エラーが検出された障害発生命令列の最後のトラップ発生点の命令までとなる。
【０１２９】
期待値ログと結果値ログとの比較により，フルログ採取に変更されたハードトラップ発生点でも，障害発生命令列の最後のトラップ発生点でもエラーが検出されない場合には（ステップＳ２４，ステップＳ２６），直前のエラー情報を表示し（ステップＳ２８），処理を終了する。障害発生命令列の絞込みの過程で，２回のランダム命令列の実行間でのハードウェア内部に保持された状態の変化が検出されなくなってしまった場合には，その時点で最小範囲の障害発生命令列をエラー情報として出力する。
【０１３０】
図８に示す第一の障害発生源絞込み処理により，実行するランダム命令列を変えずに，障害発生命令列が，最小範囲として，間にトラップ発生点が含まれない２つのトラップ発生点間の命令列に絞り込まれる。
【０１３１】
図９は，本実施の形態による第二の障害発生源絞込み処理フローチャートである。アドレスフェッチトラップレジスタ２０に，障害発生命令列内の命令のアドレスを設定する（ステップＳ３０）。ここで設定されるアドレスは，障害発生命令列の最上位となるトラップ発生点の命令から所定の命令数進んだランダム命令のアドレスである。
【０１３２】
障害検出処理および第一の障害発生源絞込み処理で実行されたランダム命令列を再度実行し，トラップ発生時にログを収集し，収集されたログ情報を期待値ログとして保持する（ステップＳ３１）。このとき，ソフトトラップ発生時と，アドレスフェッチトラップレジスタ２０によるハードトラップ発生時にはフルログを採取し，それ以外のハードトラップ発生時には簡易ログを採取する。再度，同じランダム命令列を実行し，トラップ発生時にログを収集し，収集されたログ情報を結果値ログとして保持された期待値ログと比較する（ステップＳ３２）。
【０１３３】
期待値ログと結果値ログとの比較により，アドレスフェッチトラップレジスタ２０によるハードトラップ発生点でエラーが検出されれば（ステップＳ３３），エラー情報を更新し（ステップＳ３４），エラー情報を表示する（ステップＳ３５）。アドレスフェッチトラップレジスタ２０によるハードトラップ発生点は，障害発生命令列の最上位の命令から所定の命令数進んだランダム命令のアドレスであるので，ここでエラーが検出されれば，更新された障害発生命令列が所定の命令数の範囲内となるので，更新された障害発生命令列をエラー情報として出力する。更新された障害発生命令列は，直前の障害発生命令列の最上位の命令から，アドレスフェッチトラップレジスタ２０によるハードトラップ発生点の命令までとなる。
【０１３４】
期待値ログと結果値ログとの比較により，アドレスフェッチトラップレジスタ２０によるハードトラップ発生点でエラーが検出されず（ステップＳ３３），障害発生命令列の最後のトラップ発生点でエラーが検出された場合には（ステップＳ３６），エラー情報を更新する（ステップＳ３７）。この時点で更新された障害発生命令列は，アドレスフェッチトラップレジスタ２０によるハードトラップ発生点の命令から，エラーが検出された障害発生命令列の最後のトラップ発生点の命令までとなる。
【０１３５】
ステップＳ３７の処理で更新された障害発生命令列が所定の命令数の範囲内でなければ（ステップＳ３８），アドレスフェッチトラップレジスタ２０の設定アドレスを更新し（ステップＳ３９），ステップＳ３１の処理に戻る。ここでは，アドレスフェッチトラップレジスタ２０の設定アドレスは，直前に設定されたアドレスの命令から所定の命令数進んだランダム命令のアドレスに更新される。
【０１３６】
ステップＳ３７の処理で更新された障害発生命令列が所定の命令数の範囲内であれば（ステップＳ３８），エラー情報を表示する（ステップＳ４０）。ここでは，ステップＳ３７の処理で更新された障害発生命令列をエラー情報として出力する。
【０１３７】
期待値ログと結果値ログとの比較により，アドレスフェッチトラップレジスタ２０によるハードトラップ発生点でも，障害発生命令列の最後のトラップ発生点でもエラーが検出されない場合には（ステップＳ３３，ステップＳ３６），直前のエラー情報を表示し（ステップＳ４１），処理を終了する。障害発生命令列の絞込みの過程で，２回のランダム命令列の実行間でのハードウェア内部に保持された状態の変化が検出されなくなってしまった場合には，その時点で最小範囲の障害発生命令列をエラー情報として出力する。
【０１３８】
図９に示す第二の障害発生源絞込み処理により，実行するランダム命令列を変えずに，障害発生命令列が，最小範囲として，所定の命令数の範囲内に絞り込まれる。
【０１３９】
図１０は，本実施の形態によるランダム命令列試験の事例を説明する図である。ここでは，具体的なランダム命令列の例を用いて，本実施の形態によるランダム命令列試験を説明する。図１０において，（１）と（７）はトラップ命令によるソフトトラップ発生点であり，（２）〜（６）はハードトラップ発生点である。
【０１４０】
図１０に示すランダム命令列を実行したときに，（★）のランダム命令でストアされるレジスタ（％ｉ７）が，（ａ）のランダム命令で確定される前にストアされてしまい，データ化けとなったケースを想定する。ただし，ランダム命令列の実行１周目では正しく動作し，ランダム命令列の実行２周目で本現象が発生し，（７）のトラップ命令でエラーが検出されたものとする。
【０１４１】
まず，障害検出処理により（７）のトラップ命令でエラーが検出されたので，障害発生命令列の範囲は，エラーが検出された（７）のトラップ命令の直前のソフトトラップ発生点である（１）のトラップ命令から，エラーが検出された（７）のトラップ命令までの命令列となる。
【０１４２】
次に，障害発生命令列を間にトラップ発生点が含まれない２つのトラップ発生点間の命令列に絞り込むために，第一の障害発生源絞込み処理を行う。
【０１４３】
（２）のハードトラップ発生点で採取するログの種別を簡易ログからフルログに変更し，ランダム命令列を２周実施してログ情報を比較する。ログ情報比較の結果，（７）のソフトトラップ発生点でエラーが検出される。障害発生命令列の範囲は，（２）のランダム命令から（７）のトラップ命令までの命令列となる。
【０１４４】
（２）のハードトラップ発生点で採取するログの種別をフルログから簡易ログに戻し，（３）のハードトラップ発生点で採取するログの種別を簡易ログからフルログに変更し，ランダム命令列を２周実施してログ情報を比較する。ログ情報比較の結果，（７）のソフトトラップ発生点でエラーが検出される。障害発生命令列の範囲は，（３）のランダム命令から（７）のトラップ命令までの命令列となる。
【０１４５】
（３）のハードトラップ発生点で採取するログの種別をフルログから簡易ログに戻し，（４）のハードトラップ発生点で採取するログの種別を簡易ログからフルログに変更し，ランダム命令列を２周実施してログ情報を比較する。ログ情報比較の結果，（４）のハードトラップ発生点でエラーが検出される。障害発生命令列の範囲は，（３）のランダム命令から（４）のランダム命令までの命令列となる。
【０１４６】
この時点で，障害発生命令列の範囲が，間にトラップ発生点が含まれない（３）のハードトラップ発生点から（４）のハードトラップ発生点までの命令列に絞り込まれたので，第一の障害発生源絞込み処理を終了する。
【０１４７】
次に，障害発生命令列を所定の命令数の範囲内に絞り込むために，第二の障害発生源絞込み処理を行う。ここでは，所定の命令数が３であるものとする。
【０１４８】
アドレスフェッチトラップレジスタ２０に（３）のランダム命令から３命令進んだランダム命令のアドレスを設定し，ランダム命令列を２周実施してログ情報を比較する。ログ情報比較の結果，（４）のハードトラップ発生点でエラーが検出される。障害発生命令列の範囲は，（３）のランダム命令から３命令進んだランダム命令から（４）のランダム命令までの命令列となる。
【０１４９】
アドレスフェッチトラップレジスタ２０の設定アドレスを，直前のアドレスフェッチトラップレジスタ２０の設定アドレスのランダム命令からさらに３命令進んだランダム命令，すなわち（３）のランダム命令から６命令進んだランダム命令のアドレスに更新し，ランダム命令列を２周実施してログ情報を比較する。ログ情報比較の結果，アドレスフェッチトラップレジスタ２０の設定アドレスのハードトラップ発生点でエラーが検出される。障害発生命令列の範囲は，（３）のランダム命令から３命令進んだランダム命令から（３）のランダム命令から６命令進んだランダム命令までの命令列となる。
【０１５０】
この時点で，障害発生命令列の範囲が，所定の命令数すなわち３命令の範囲内に絞り込まれたので，第二の障害発生源絞込み処理を終了する。
【０１５１】
図１０に示す事例では，（３）のランダム命令から３命令進んだランダム命令から（３）のランダム命令から６命令進んだランダム命令までの障害発生命令列が，最終結果のエラー情報として出力される。
【０１５２】
以上説明したランダム命令列試験部１０による処理は，コンピュータとソフトウェアプログラムとによって実現することができ，そのプログラムをコンピュータ読み取り可能な記録媒体に記録することも，ネットワークを通して提供することも可能である。
【０１５３】
以上，本発明の実施の形態について説明したが，本発明は本実施の形態に限られるものではない。
【０１５９】
例えば，上述の本実施の形態では，簡易ログでカレントウインドウのレジスタのデータのみを採取しているが，制御レジスタやカレントウインドウ以外のウインドウのレジスタのデータも採取するようにしてもよい。ただし，フルログのようにメモリのデータも採取するとハードウェア状態が変わってしまう可能性が上がるので，メモリのデータの採取は行わない方がよい。
【０１６０】
また，例えば，上述の本実施の形態では，障害発生の検出や，障害発生命令列の絞込みを行うために，２回の試験命令列実行によって採取されたログ情報の比較を行っているが，２回以上の複数回の試験命令列実行によってログ情報の採取を行い，ログ情報の比較をするようにしてもよい。
【図面の簡単な説明】
【０１６１】
【図１】本実施の形態による被試験装置の構成例を示す図である。
【図２】本実施の形態によるランダム命令列生成の例を説明する図である。
【図３】本実施の形態による障害検出の例を説明する図である。
【図４】ログ制御テーブルの例を示す図である。
【図５】本実施の形態による第一の障害発生源絞込みの例を説明する図である。
【図６】本実施の形態による第二の障害発生源絞込みの例を説明する図である。
【図７】本実施の形態による障害検出処理フローチャートである。
【図８】本実施の形態による第一の障害発生源絞込み処理フローチャートである。
【図９】本実施の形態による第二の障害発生源絞込み処理フローチャートである。
【図１０】本実施の形態によるランダム命令列試験の事例を説明する図である。
【符号の説明】
【０１６２】
１  被試験装置
１０  ランダム命令列試験部
１１  ランダム命令列生成部
１２  障害検出部
１２０  ログ採取部
１２１  ログ比較部
１３  第一の障害発生源絞込み部
１３０  ログ種別変更部
１３１  ログ採取部
１３２  ログ比較部
１４  第二の障害発生源絞込み部
１４０  アドレスフェッチトラップレジスタ設定部
１４１  ログ採取部
１４２  ログ比較部
２０  アドレスフェッチトラップレジスタ
【図１】
0005181699.tif 000002
【図２】
0005181699.tif 000003
【図３】
0005181699.tif 000004
【図４】
0005181699.tif 000005
【図５】
0005181699.tif 000006
【図６】
0005181699.tif 000007
【図７】
0005181699.tif 000008
【図８】
0005181699.tif 000009
【図９】
0005181699.tif 000010
【図１０】
0005181699.tif 000011