(57)【特許請求の範囲】
【請求項１】
コンパイラが生成した実行命令列中における、所定命令に対する前後の少なくとも２つの命令の出現頻度を算出する出現頻度算出手段と、
前記実行命令列中における、前記所定命令のアクセス対象と前記前後の少なくとも２つの命令のアクセス対象との関連を判定するアクセス対象関連判定手段と、
前記命令の出現頻度と前記アクセス対象の関連とに基づいて、前記所定命令を含み前記アクセス対象の関連を維持した命令列を、前記所定命令をテストするテスト命令列として生成するテスト命令列生成手段と、
を備える情報処理装置。
【請求項２】
前記アクセス対象は、前記命令によりアクセスされるレジスタおよびメモリの少なくともいずれかを含む、請求項１に記載の情報処理装置。
【請求項３】
前記アクセス対象のメモリは、アクセス領域の少なくとも一部が重なる場合に関連性ありと判定する、請求項２に記載の情報処理装置。
【請求項４】
前記テスト命令列生成手段は、
前記命令の出現頻度に基づいて、テスト命令列に使用する命令を選択する命令選択手段と、
前記アクセス対象との関連に基づいて、前記所定命令と前記選択された命令とのアクセス対象を関連付けるアクセス対象関連付け手段と、
を有する、請求項１乃至３のいずれか１項に記載の情報処理装置。
【請求項５】
前記テスト命令列生成手段は、
前記所定命令に対する前後の少なくとも２つの命令の出現頻度と、前記所定命令のアクセス対象と前記所定命令の前後の命令のアクセス対象との関連と、に基づいて、前記所定命令および前記前後の少なくとも２つの命令の出現頻度順の命令列と、前記所定命令と前記命令列との間の前記アクセス対象の関連の有無と、を記憶する頻度別命令テーブルを生成する頻度別命令テーブル生成手段を、さらに備え、
前記頻度別命令テーブルを参照して前記テスト命令列を生成する、請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
生成された前記テスト命令列をプロセッサに実行させる実行指示手段と、
前記テスト命令列の前記プロセッサによる実行結果を取得する実行結果取得手段と、
をさらに備え、
前記テスト命令列生成手段は、前記実行結果を評価して、前記テスト命令列の生成に反映させる、請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
出現頻度算出手段が、コンパイラが生成した実行命令列中における、所定命令に対する前後の少なくとも２つの命令の出現頻度を算出する出現頻度算出ステップと、
アクセス対象関連判定手段が、前記実行命令列中における、前記所定命令のアクセス対象と前記前後の少なくとも２つの命令のアクセス対象との関連を判定するアクセス対象関連判定ステップと、
テスト命令列生成手段が、前記命令の出現頻度と前記アクセス対象の関連とに基づいて、前記所定命令を含み前記アクセス対象の関連を維持した命令列を、前記所定命令をテストするテスト命令列として生成するテスト命令列生成ステップと、
を含む情報処理装置の情報処理方法。
【請求項８】
コンパイラが生成した実行命令列中における、所定命令に対する前後の少なくとも２つの命令の出現頻度を算出する出現頻度算出ステップと、
前記実行命令列中における、前記所定命令のアクセス対象と前記前後の少なくとも２つの命令のアクセス対象との関連を判定するアクセス対象関連判定ステップと、
前記命令の出現頻度と前記アクセス対象の関連とに基づいて、前記所定命令を含み前記アクセス対象の関連を維持した命令列を、前記所定命令をテストするテスト命令列として生成するテスト命令列生成ステップと、
をコンピュータに実行させる情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法および情報処理プログラムに関する。
【背景技術】
【０００２】
近年、ＬＳＩ(Large Scale Integration)の高集積化に伴い、ＬＳＩの製造コストが高くなり、リードタイムも長くなってきている。このような状況下で、ＬＳＩの品質が悪いと、リワークによるコスト増や製造ＴＡＴ(Turn Around Time)の延びにより、計画通りの出荷が行えず、顧客に迷惑をかけすることになり、メーカとしての信頼も失ってしまう。このため、ＬＳＩの製造前に品質を上げることはますます重要になってきている。ＬＳＩの品質確保のためには、設計者が自らチェックすることも必要だが、第３者が確認することも重要になり、代表的な方法としてシミュレーションによる評価が上げられ、そこで使用されるテストプログラムの重要性が増してきている。
【０００３】
このため、各メーカは、従来から、ＬＳＩの製造前にはテストプログラム等を用いて、十分に品質を高めているが、それでもＬＳＩリワークが発生してしまうことも多々あるのが、現実である。これは、ＬＳＩリリース前にシミュレーションで使用するテストプログラムが、人手で作成した命令列や自動生成したランダム命令列となっているために、実際にお客様のところで実行される命令列とは異なることが要因の１つでもある。しかし、コンパイラが出力する命令列をテストプログラムとして使用するためには、システムコールの処理やメモリ容量の制限等から困難なものであった。
【０００４】
これらの課題を解決するために、特許文献１には、各マシン命令の出現頻度を命令出現頻度表に登録して、命令の出現頻度が反映された命令選択テーブルを作成し、この命令選択テーブルから乱数によりランダムに命令を選択してテスト命令列を生成する技術が開示されている。また、特許文献２には、ログ情報集計結果テーブルから命令重みテーブルと試験エリアアドレステーブルを作成し、命令重みテーブルおよび試験エリアアドレステーブルをもとに試験命令列テーブルの試験命令列を作成する技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特許第３０８９１２１号公報
【特許文献２】特開平１１−２６５２９８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記特許文献１に記載の技術では、命令の順番しか考慮されていない。例えば、ＬＳＩ開発において、命令列を実行する際に発生しやすい問題は、命令の順番だけでなく、レジスタやメモリアドレスの依存関係が原因となることが多いため、命令の順番を再現させるだけでは、不十分であった。一方、特許文献２は、試験エリアアドレステーブルを作成して、テスト命令列生成にメモリアドレスも参照するが、かかるメモリアドレスはあくまで故障発生箇所を示すアドレスであって、実行命令列におけるレジスタやメモリアドレスの依存関係を反映させるものではない。
【０００７】
本発明の目的は、上述の課題を解決する技術を提供することにある。
【課題を解決するための手段】
【０００８】
上記目的を達成するため、本発明に係る情報処理装置は、
コンパイラが生成した実行命令列中における、所定命令に対する前後の少なくとも２つの命令の出現頻度を算出する出現頻度算出手段と、
前記実行命令列中における、前記所定命令のアクセス対象と前記前後の少なくとも２つの命令のアクセス対象との関連を判定するアクセス対象関連判定手段と、
前記命令の出現頻度と前記アクセス対象の関連とに基づいて、前記所定命令を含み前記アクセス対象の関連を維持した命令列を、前記所定命令をテストするテスト命令列として生成するテスト命令列生成手段と、
を備える。
【０００９】
上記目的を達成するため、本発明に係る情報処理装置の情報処理方法は、
出現頻度算出手段が、コンパイラが生成した実行命令列中における、所定命令に対する前後の少なくとも２つの命令の出現頻度を算出する出現頻度算出ステップと、
アクセス対象関連判定手段が、前記実行命令列中における、前記所定命令のアクセス対象と前記前後の少なくとも２つの命令のアクセス対象との関連を判定するアクセス対象関連判定ステップと、
テスト命令列生成手段が、前記命令の出現頻度と前記アクセス対象の関連とに基づいて、前記所定命令を含み前記アクセス対象の関連を維持した命令列を、前記所定命令をテストするテスト命令列として生成するテスト命令列生成ステップと、
を含む。
【００１０】
上記目的を達成するため、本発明に係る情報処理プログラムは、
コンパイラが生成した実行命令列中における、所定命令に対する前後の少なくとも２つの命令の出現頻度を算出する出現頻度算出ステップと、
前記実行命令列中における、前記所定命令のアクセス対象と前記前後の少なくとも２つの命令のアクセス対象との関連を判定するアクセス対象関連判定ステップと、
前記命令の出現頻度と前記アクセス対象の関連とに基づいて、前記所定命令を含み前記アクセス対象の関連を維持した命令列を、前記所定命令をテストするテスト命令列として生成するテスト命令列生成ステップと、
をコンピュータに実行させる。
【発明の効果】
【００１１】
本発明によれば、コンパイラで生成した実行命令列の特徴を有するテスト命令列が生成でき、容易にＬＳＩなどの設計における製造前の品質確保をすることができる。
【図面の簡単な説明】
【００１２】
【図１】本発明の第１実施形態に係る情報処理装置の構成を示すブロック図である。
【図２】本発明の第２実施形態に係る情報処理装置を含むテスト命令列処理システムの構成を示すブロック図である。
【図３】本発明の第２実施形態に係る情報処理装置の機能構成を示すブロック図である。
【図４】本発明の第２実施形態に係る命令コードテーブル、命令出現頻度テーブル、レジスタ関連テーブルおよびメモリ領域関連テーブルの構成を示す図である。
【図５】本発明の第２実施形態に係る頻度別命令テーブルの構成を示す図である。
【図６】本発明の第２実施形態に係るテスト命令列テーブルの構成を示す図である。
【図７】本発明の第２実施形態に係る情報処理装置のハードウェア構成を示す図である。
【図８】本発明の第２実施形態に係る情報処理装置の処理手順を示すフローチャートである。
【図９Ａ】本発明の第２実施形態に係る実行命令列解析処理の手順を示すフローチャートである。
【図９Ｂ】本発明の第２実施形態に係る頻度別命令テーブル生成処理の手順を示すフローチャートである。
【図９Ｃ】本発明の第２実施形態に係るテスト命令列生成処理の手順を示すフローチャートである。
【図１０Ａ】本発明の第２実施形態に係る命令出現頻度テーブル、レジスタ関連テーブルおよびメモリ領域関連テーブルの元になる出現数例を示す図である。
【図１０Ｂ】本発明の第２実施形態に係る命令出現頻度テーブル、レジスタ関連テーブルおよびメモリ領域関連テーブルの出現頻度正規化例を示す図である。
【図１１】本発明の第２実施形態に係る出現頻度正規化例から生成された頻度別命令テーブルの生成例の構成を示すブロック図である。
【図１２】本発明の第２実施形態に係る頻度別命令テーブルの生成例から生成されたテスト命令列テーブルの生成例の構成を示す図である。
【図１３】本発明の第３実施形態に係る情報処理装置の機能構成を示すブロック図である。
【図１４】本発明の第３実施形態に係るテスト命令列学習データベースの構成を示す図である。
【図１５】本発明の第３実施形態に係る学習テーブルの構成を示す図である。
【図１６】本発明の第３実施形態に係る情報処理装置の処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下に、図面を参照して、本発明の実施の形態について例示的に詳しく説明する。ただし、以下の実施の形態に記載されている構成要素は単なる例示であり、本発明の技術範囲をそれらのみに限定する趣旨のものではない。
【００１４】
［第１実施形態］
本発明の第１実施形態としての情報処理装置１００について、図１を用いて説明する。情報処理装置１００は、プロセッサなどによる命令列の実行をテストする装置である。
【００１５】
図１に示すように、情報処理装置１００は、出現頻度算出部１０１と、アクセス対象関連判定部１０２と、テスト命令列生成部１０３と、を含む。出現頻度算出部１０１は、コンパイラが生成した実行命令列中における、所定命令１１１に対する前後の少なくとも２つの命令の出現頻度１１２を算出する。アクセス対象関連判定部１０２は、実行命令列中における、所定命令１１１のアクセス対象と前後の少なくとも２つの命令のアクセス対象との関連１２２を判定する。テスト命令列生成部１０３は、命令の出現頻度１１２と前記アクセス対象の関連１２２とに基づいて、所定命令１１１を含みアクセス対象の関連（１３２、１３３）を維持した命令列を、所定命令をテストするテスト命令列１３０として生成する。
【００１６】
本実施形態によれば、コンパイラで生成した実行命令列の特徴である命令の出現頻度やアクセス対象の関連を反映したテスト命令列が生成でき、容易にＬＳＩなどの設計における製造前の品質確保をすることができる。
【００１７】
［第２実施形態］
次に、本発明の第２実施形態に係る情報処理装置について説明する。本実施形態に係る情報処理装置は、命令の出現頻度と共に、命令によりアクセスされるレジスタおよびメモリの少なくともいずれかを含むアクセス対象の関連をテスト命令列の生成に反映させる。その内、アクセス対象のメモリにおいては、アクセス領域の少なくとも一部が重なる場合に関連性ありと判定する。そして、テスト命令列の生成においては、命令の出現頻度に基づいてテスト命令列に使用する命令を選択し、アクセス対象との関連に基づいて所定命令と選択された命令とのアクセス対象を関連付ける。また、テスト命令列の生成過程において、頻度別命令テーブルを生成する。頻度別命令テーブルには、所定命令に対する前後の少なくとも２つの命令の出現頻度と、所定命令のアクセス対象と前後の命令のアクセス対象との関連とに基づいて、所定命令および前後の少なくとも２つの命令の出現頻度順の命令列と、所定命令と命令列との間のアクセス対象の関連の有無と、が記憶される。そして、頻度別命令テーブルを参照してテスト命令列を生成する。
【００１８】
《テスト命令列処理システム》
図２は、本実施形態に係る情報処理装置２１０を含むテスト命令列処理システム２００の構成を示すブロック図である。なお、図２には、情報処理装置２１０がコンパイラによりソースコードから実行命令列を生成する場合を図示するが、コンパイラは外部装置で行なわれ、実行命令列群が情報処理装置２１０に入力される構成であってもよい。
【００１９】
情報処理装置２１０は、入力された種々のソースコード群から対応するコンパイラモジュール２１２により実行命令列群を生成する。そして、情報処理装置２１０は、テスト命令列生成部２１３において、実行命令列群を解析して、実行命令列の特徴を反映させたテスト命令列を生成する。なお、テスト命令列生成部２１３における実行命令列群の解析は、実行命令列の命令間の関連を表わす出現頻度と、命令間のアクセス対象の関連、すなわち、レジスタやメモリ領域の関連とを解析し、その解析結果を反映させたテスト命令列を生成する。
【００２０】
プロセッサモデル２２０は、基本的に、ＣＰＵ(Central Processing Unit)と、ＲＯＭ(Read Only Memory)やＲＡＭ(Random Access Memory)などの記憶媒体から構成されて、情報処理装置２１０から提供されたテスト命令列を実行して、実行結果を出力する。なお、プロセッサモデル２２０は、例えば、ＬＳＩ(Large Scale Integration)などの内部でチェックできない集積回路であって、実行結果は単に命令の実行内容に留まらず、発熱や雑音の発生などにも及ぶ。そのテストが実装時と同様の条件であるためには、本実施形態のようなコンパイラが生成する実行命令列の特徴をより反映したテスト命令列が要求される。
【００２１】
《情報処理装置の機能構成》
図３は、本実施形態に係る情報処理装置２１０の機能構成を示すブロック図である。なお、図３では、煩雑さをさけるため、実行命令列群は外部装置のコンパイラで生成され、情報処理装置２１０に入力される構成として説明する。
【００２２】
情報処理装置２１０は、出現頻度算出部３１１と、アクセス対象関連判定部３１２と、テスト命令列生成部２１３と、を備える。出現頻度算出部３１１は、命令出現頻度テーブル３１１ａを有し、実行命令群を取得して出現頻度を算出する。アクセス対象関連判定部３１２は、レジスタ関連判定部３２１とメモリ領域関連判定部３２２とを備える。レジスタ関連判定部３２１は、レジスタ関連テーブル３２１ａを有し、命令間でレジスタを共有する依存関係の度合いを判定する。メモリ領域関連判定部３２２は、メモリ領域関連テーブル３２２ａを有し、命令間でメモリ領域を共有する依存関係の度合いを判定する。
【００２３】
テスト命令列生成部２１３は、頻度別命令テーブル生成部３３１と、テスト命令列テーブル生成部３３２とを備える。頻度別命令テーブル生成部３３１は、頻度別命令テーブル３３１ａを有し、頻度別に（頻度順位に）命令と、レジスタやメモリ領域の共有との関係を示す頻度別の命令テーブルを生成する。テスト命令列テーブル生成部３３２は、テスト命令列テーブル３３２ａを有し、頻度別命令テーブル３３１ａを参照して、テスト命令列を生成する。なお、図示しないが、テスト命令列テーブル生成部３３２には、テスト命令列に使用する命令を選択する命令選択部と、アクセス対象との関連に基づいて、所定命令と選択された命令とのアクセス対象を関連付けるアクセス対象関連付け部と、を備える。
【００２４】
（解析テーブル）
図４は、本実施形態に係る命令コードテーブル４１０、命令出現頻度テーブル３１１ａ、レジスタ関連テーブル３２１ａおよびメモリ領域関連テーブル３２２ａの構成を示す図である。なお、図４においては、説明のしやすさを考慮して、命令の種別を表すオペコードは８つとし、ＯＰn(ｎ＝０〜７)で表すこととする。また、テスト対象命令の前後３命令までの情報を元にテスト命令列を作成している例を示す。しかしながら、前後の命令数はＬＳＩの論理に依存するため、そのＬＳＩに最適な命令数とする必要がある。また、命令出現頻度テーブル３１１ａ、レジスタ関連テーブル３２１ａおよびメモリ領域関連テーブル３２２ａは、解析の前段では出現回数をカウントするために使用され、解析の後段では各出現回数の総出現回数に対して正規化された割合である出現率を記憶するために使用される。
【００２５】
命令コードテーブル４１０は、テスト対象命令の命令コードを記憶しておくためのテーブルである。図中のＸ，Ｙ，Ｚ，Ｄはそれぞれ命令コードのフィールドを示しており、Ｘは更新レジスタ番号、Ｙ，Ｚは参照レジスタ、Ｄは即値を指定するためのフィールドである。例えば、メモリからデータをロードする命令であれば、Ｙ，Ｚで示されるレジスタの値とＤフィールドの即値を加算して生成されたメモリアドレスが示すメモリの領域から、データを取り出し、Ｘで示されるレジスタにそのデータを格納する。すなわち、メモリアドレス＝Ｒ（Ｙ）＋Ｒ（Ｚ）＋Ｍであるが、例えば、Ｒ（Ｙ）またはＲ（Ｚ）を“０”に設定してレジスタの一方のみを使用する場合もある。さらに、他の命令であれば、レジスタとメモリ領域との利用が異なる場合もある。なお、メモリアドレスにより示されるメモリ領域は、コンピュータアーキテクチャにより異なり、メモリアドレスを先頭に８バイト（あるいは８ワード）の場合、４バイト（４ワード）、２バイト（２ワード）、１バイト（１ワード）などもある。
【００２６】
命令出現頻度テーブル３１１ａは、テスト対象命令の前後３命令分の命令の出現頻度を表している。命令出現頻度テーブル３１１ａのＢ１は、テスト対象命令の直前の命令位置を表わし、Ｂ２はＢ１の直前の命令位置を表わし、Ｂ３はＢ２の直前の命令位置を表している。命令出現頻度テーブル３１１ａのＡ１は、テスト対象命令の直後の命令位置を表わし、Ａ２はＡ２の直後の命令位置を表わし、Ａ３はＡ２の直後の命令位置を表わしている。それぞれの枠内には、ＯＰn(ｎ＝０〜７)の出現頻度（％）が記憶される。例えば、Ｂ１のＯＰ0の欄に“４０”という数字が書かれていれば、これはテスト対象命令の直前に命令ＯＰ0が実行される確率が４０％であることを意味している。
【００２７】
レジスタ関連テーブル３２１ａは、テスト対象命令の前後３命令分のレジスタ依存関係の頻度を表している。Ｂ１，Ｂ２，Ｂ３，Ａ１，Ａ２，Ａ３は、命令出現頻度テーブル３１１ａと同じ内容を示している。それぞれの枠内に、ＯＰn(ｎ＝０〜７)のレジスタ依存の頻度（％）が記憶される。例えば、Ａ１のＯＰ3欄に２５という数字が書かれていれば、これはテスト対象命令とその直後の命令ＯＰ3のレジスタ依存関係が、２５％の割合で発生していることを示す。このレジスタの依存関係とは、テスト対象命令が更新するレジスタを後続の命令が参照すること、あるいは、テスト対象命令が参照するレジスタを先行する命令が更新することを意味する。
【００２８】
メモリ領域関連テーブル３２２ａは、テスト対象命令の前後３命令分のメモリアドレスの重複の頻度を記憶している。Ｂ１，Ｂ２，Ｂ３，Ａ１，Ａ２，Ａ３は、命令出現頻度テーブル３１１ａと同じ内容を示している。それぞれの枠内に、ＯＰn(ｎ＝０〜７)のメモリアドレスの重複の頻度（％）が記憶される。例えば、Ｂ３のＯＰ5の欄に18という数字が書かれていれば、これはテスト対象命令とその３命令前の命令ＯＰ5のアドレスが１８％の頻度で重複していることを表わしている。このアドレスの重複とは、テスト対象命令が参照あるいは更新するメモリ領域と、このテスト対象命令の前後の命令が参照あるいは更新するメモリ領域が一部でも重なっていることを示す。例えば、８バイトアクセスのコンピュータアーキテクチャであれば、テスト対象命令がメモリアドレスの0x00000000〜0x00000007を更新し、Ｂ３のＯＰ5がメモリアドレスの0x00000006〜0x0000000Dを参照する場合も、一部の領域が重なっているため、重複していると判断する。４バイト、あるいは、２バイトの場合も、一部の領域が重なっている場合に重複していると判断する。
【００２９】
なお、命令出現頻度テーブル３１１ａ、レジスタ関連テーブル３２１ａおよびメモリ領域関連テーブル３２２ａの頻度は、カウントした出現回数を総出現回数で割ったパーセントで表わすが、これに限定されない。また、出現回数をカウントするテーブルと、出現頻度を記憶するテーブルとを、別途に設けてもよい。
【００３０】
（頻度別命令テーブル）
図５は、本実施形態に係る頻度別命令テーブル３３１ａの構成を示す図である。この頻度別命令テーブル３３１ａについても、説明のしやすさを考慮して、命令の種別を表すオペコードは８つとし、ＯＰn(ｎ＝０〜７)で表し、解析範囲をテスト対象命令の前後３命令とする。
【００３１】
頻度別命令テーブル３３１ａは、命令ＯＰ0の頻度別命令テーブル５０１、命令ＯＰ1の頻度別命令テーブル５０２、…、命令ＯＰnの頻度別命令テーブル５０ｎを含む。
【００３２】
各命令の頻度別命令テーブルには、各命令を中心に、命令出現頻度テーブル３１１ａと同じ内容のＢ１，Ｂ２，Ｂ３，Ａ１，Ａ２，Ａ３が記憶される。テスト対象命令の前後３命令については、命令出現頻度テーブル３１１ａに基づいて、頻度１位から頻度３位までの命令が記憶される。なお、命令数は頻度１位から頻度３位までの３つに限定されない。各頻度の命令枠には、命令と、レジスタの依存関係を示す“Ｒ”と、メモリ領域の依存関係を示す“Ｍ”と、が記憶される。
【００３３】
なお、依存関係を示す“Ｒ”や“Ｍ”を記憶する条件としては、種々の条件が考えられる。例えば、Ｂ１，Ｂ２，Ｂ３，Ａ１，Ａ２，Ａ３の命令が決まったら、その中でテスト対象命令とレジスタの依存度が最も高い命令に“Ｒ”を設定し、テスト対象命令とメモリ領域の依存度が最も高い命令に“Ｍ”を設定してもよい。この場合、メモリ領域の依存度の比較に重複度を加味してもよい。あるいは、各命令の頻度別命令テーブル中の依存度の平均値を閾値として、その平均値より依存度が高い命令に“Ｒ”や“Ｍ”を記憶してもよい。あるいは、一律に依存度が所定パーセント（例えば、２０％）を越える場合に、“Ｒ”や“Ｍ”を記憶してもよい。
【００３４】
（テスト命令列テーブル）
図６は、本実施形態に係るテスト命令列テーブル３３２ａの構成を示す図である。このテスト命令列テーブル３３２ａについても、説明のしやすさを考慮して、命令の種別を表すオペコードは８つとし、ＯＰn(ｎ＝０〜７)で表し、解析範囲をテスト対象命令の前後３命令とする。
【００３５】
テスト命令列テーブル３３２ａには、テスト対象命令を中心とした７つの命令列が並べられる。図６においては、ＯＰi，ＯＰj，ＯＰk，ＯＰmをテスト対象命令として、頻度別命令テーブル３３１ａを参照し、前後３つの所定の頻度順位の命令を並べる。そして、命令間のレジスタやメモリ領域の依存関係からＲ（Ｘ），Ｒ（Ｙ），Ｒ（Ｚ），Ｄの値を、同じレジスタをアクセスし、同じ（重なりを含む）メモリ領域をアクセスするように書き込む。
【００３６】
なお、テスト対象命令に選択は、テスト対象となるコンピュータやプロセッサのアーキテクチャが有する全命令の中から、ランダムに選択してもよいし、命令をグループ化して、グループ毎の選択確率を上げるなどの重みを付けた選択をしてもよい。また、テスト対象命令が決まった場合の前後の命令列の選択は、頻度１位、頻度２位、頻度３位、…を選択する割合を順に重み付けして、選択してもよい。例えば、頻度１位は５０％、頻度２位は３０％。頻度３位は２０％などと設定して、この確率で選択する。あるいは、命令によって、命令グループによって、選択の重み付けを変えてもよい。
【００３７】
《情報処理装置のハードウェア構成》
図７は、本実施形態に係る情報処理装置２１０のハードウェア構成を示す図である。
【００３８】
図７で、ＣＰＵ(Central Processing Unit)７１０は演算制御用のプロセッサであり、プログラムを実行することで図３の情報処理装置２１０の機能構成部を実現する。ＲＯＭ(Read Only Memory)７２０は、初期データおよびプログラムなどの固定データおよびプログラムを記憶する。また、通信制御部７３０は、ネットワークを介して他の装置と通信する。なお、ＣＰＵ７１０は１つに限定されず、複数のＣＰＵであってもよい。また、通信制御部７３０は、ＣＰＵ７１０とは独立したＣＰＵを有して、ＲＡＭ(Random Access Memory)７４０の領域に送受信データを書き込みあるいは読み出しするのが望ましい。また、ＲＡＭ７４０とストレージ７５０との間でデータを転送するＤＭＡＣ(Direct Memory Access Controller)を設けるのが望ましい（図示なし）。さらに、入出力インタフェース７６０は、ＣＰＵ７１０とは独立したＣＰＵを有して、ＲＡＭ７４０の領域に入出力データを書き込みあるいは読み出しするのが望ましい。したがって、ＣＰＵ７１０は、ＲＡＭ７４０にデータが受信あるいは転送されたことを認識してデータを処理する。また、ＣＰＵ７１０は、処理結果をＲＡＭ７４０に準備し、後の送信あるいは転送は通信制御部７３０やＤＭＡＣ、あるいは入出力インタフェース７６０に任せる。
【００３９】
ＲＡＭ７４０は、ＣＰＵ７１０が一時記憶のワークエリアとして使用するランダムアクセスメモリである。ＲＡＭ７４０には、本実施形態の実現に必要なデータを記憶する領域が確保されている。ソースコード群７４１は、本情報処理装置２１０がコンパイルを行なう場合に取得したソースコード群である。実行命令列群７４２は、本情報処理装置２１０のコンパイラモジュール群７５９でソースコード群７４１をコンパイルして生成された、あるいは、外部装置でコンパイルされて入力された実行命令列群である。テスト対象命令７４３は、出現頻度を解析するためのテスト対象となる命令である。命令出現頻度テーブル３１１ａは、図４に示した命令の出現頻度を解析するテーブルである。レジスタ関連テーブル３２１ａは、図４に示した命令間のレジスタの依存関係を解析するテーブルである。メモリ領域関連テーブル３２２ａは、図４に示した命令間のメモリ領域の依存関係を解析するテーブルである。頻度別命令テーブル３３１ａは、図５に示した頻度順に前後命令と、そのレジスタやメモリ領域の依存関係を解析した、テスト命令列生成に直接使用するテーブルである。テスト命令列テーブル３３２ａは、頻度別命令テーブル３３１ａに基づいて生成されたテスト命令列のテーブルである。入出力データ７４４は、入出力インタフェース７６０を介して入出力デバイスにより入出力するデータである。送受信データ７４５は、通信制御部７３０を介して送受信するデータである。
【００４０】
ストレージ７５０には、データベースや各種のパラメータ、あるいは本実施形態の実現に必要な以下のデータまたはプログラムが記憶されている。関連命令選択閾値７５１は、関連がある命令として選択する基準となる閾値である。関連レジスタ判定閾値７５２は、レジスタに依存関係があると判定する基準となる閾値である。関連メモリ領域判定閾値７５３は、メモリ領域に依存関係があると判定する基準となる閾値である。テスト命令列生成アルゴリズム７５４は、本実施形態におけるテスト命令列を生成するためのアルゴリズムである。
【００４１】
ストレージ７５０には、以下のプログラムが格納される。情報処理装置制御プログラム７５５は、情報処理装置２１０の全体を制御するプログラムである。実行命令列解析モジュール７５６は、実行命令列群から命令の出現頻度、および、レジスタやメモリ領域の関連（依存関係）を解析するモジュールである。頻度別命令テーブル生成モジュール７５７は、実行命令列解析モジュール７５６が解析した結果の、命令出現頻度テーブル３１１ａ、レジスタ関連テーブル３２１ａ、および、メモリ領域関連テーブル３２２ａを参照して、頻度別命令テーブル３３１ａを生成するモジュールである。テスト命令列生成モジュール７５８は、頻度別命令テーブル３３１ａを参照してテスト命令列テーブル３３２ａを生成するモジュールである。また、コンパイラモジュール群７５９は、本情報処理装置がコンパイルを行なう場合のモジュール群である。
【００４２】
入出力インタフェース７６０は、入出力機器との入出力データをインタフェースする。入出力インタフェース７６０には、表示部５６１、操作部５６２、が接続される。また、入出力インタフェース７６０には、記憶媒体のＲＷ（リード／ライト）部が接続される。必要であれば、音声入出力部やＧＰＳ(Global Positioning System)位置判定部などが接続されてもよい。
【００４３】
なお、図７のＲＡＭ７４０やストレージ７５０には、情報処理装置２１０が有する汎用の機能や他の実現可能な機能に関連するプログラムやデータは図示されていない。
【００４４】
《情報処理装置の処理手順》
図８は、本実施形態に係る情報処理装置２１０の処理手順を示すフローチャートである。このフローチャートは、図７のＣＰＵ７１０がＲＡＭ７４０を使用して実行し、図３の機能構成部を実現する。
【００４５】
情報処理装置２１０は、ステップＳ８０１において、オプションとして、コンパイラ群によりソースコード群から実行命令列群を生成する。なお、情報処理装置２１０がコンパイルをしない場合は、外部装置から実行命令列群を取得する。情報処理装置２１０は、ステップＳ８０３において、実行命令列解析処理を実行する。そして、情報処理装置２１０は、ステップＳ８０５において、出現回数を集計した出現テーブルを出現率で正規化する。情報処理装置２１０は、ステップＳ８０７において、出現率で正規化された出現テーブルを参照して、頻度別命令テーブル生成処理を実行する。情報処理装置２１０は、ステップＳ８０９において、頻度別命令テーブルを参照して、テスト命令列生成処理を実行する。
【００４６】
（実行命令列解析処理）
図９Ａは、本実施形態に係る実行命令列解析処理（Ｓ８０３）の手順を示すフローチャートである。
【００４７】
情報処理装置２１０は、ステップＳ９１１において、コンパイラが出力したロードモジュールを読み込み、命令列の先頭を探す。情報処理装置２１０は、ステップＳ９１３において、命令列の先頭の１命令を読み込み、ステップ９１５において、その命令が現在のテスト対象命令であるかどうかを判断する。現在のテスト対象命令でない場合は、ステップＳ９１３に戻り、次の命令を読み込み、再度、テスト対象命令であるかどうかを確認する。テスト対象命令である場合は、情報処理装置２１０は、ステップＳ９１７にへ進み、テスト対象命令のＸ，Ｙ，Ｚ，Ｄフィールドを判断し、命令コードテーブル４１０に書き込む。
【００４８】
情報処理装置２１０は、ステップＳ９１９において、テスト対象命令の直前の命令を読み込み、オペコードを参照し、命令出現頻度テーブル３１１ａのＢ１行の対応する欄を“＋１”カウントする。続いて、Ｘフィールドを参照し、命令コードテーブル４１０のＲ（Ｙ），Ｒ（Ｚ）と比較して一致しているかを確認する。一致している場合は、レジスタ関連テーブル３２１ａのＢ１行の対応するオペコード欄を“＋１”カウントする。さらに、テスト対象命令がメモリアクセス命令で、かつ、直前の命令もメモリアクセス命令だった場合、それぞれＹ，Ｚ，Ｄフィールドからメモリアドレスを生成する。そして、アクセス領域が重複しているかどうかをチェックし、重複している場合は、メモリ領域関連テーブル３２２ａのＢ１行の対応する欄を“＋１”カウントする。
【００４９】
情報処理装置２１０は、ステップＳ９２１において、テスト対象命令の２つ前の命令を読み込み、オペコードを参照し、命令出現頻度テーブル３１１ａのＢ２行の対応する欄を“＋１”カウントする。続いて、Ｘフィールドを参照し、命令コードテーブル４１０のＲ（Ｙ），Ｒ（Ｚ）と比較して一致しているかを確認する。一致している場合は、レジスタ関連テーブル３２１ａのＢ２行の対応するオペコード欄を“＋１”カウントする。さらに、テスト対象命令がメモリアクセス命令で、かつ、２つ前の命令もメモリアクセス命令だった場合、それぞれＹ，Ｚ，Ｄフィールドからメモリアドレスを生成する。そして、アクセス領域が重複しているかどうかをチェックし、重複している場合は、メモリ領域関連テーブル３２２ａのＢ２行の対応する欄を“＋１”カウントする。
【００５０】
情報処理装置２１０は、ステップＳ９２３において、テスト対象命令の３つ前の命令を読み込み、オペコードを参照し、命令出現頻度テーブル３１１ａのＢ３行の対応する欄を“＋１”カウントする。続いて、Ｘフィールドを参照し、命令コードテーブル４１０のＲ（Ｙ），Ｒ（Ｚ）と比較して一致しているかを確認する。一致している場合は、レジスタ関連テーブル３２１ａのＢ３行の対応するオペコード欄を“＋１”カウントする。さらに、テスト対象命令がメモリアクセス命令で、かつ、２つ前の命令もメモリアクセス命令だった場合、それぞれＹ，Ｚ，Ｄフィールドからメモリアドレスを生成する。そして、アクセス領域が重複しているかどうかをチェックし、重複している場合は、メモリ領域関連テーブル３２２ａのＢ３行の対応する欄を“＋１”カウントする。
【００５１】
情報処理装置２１０は、ステップＳ９２５において、テスト対象命令の直後の命令を読み込み、オペコードを参照し、命令出現頻度テーブル３１１ａのＡ１行の対応する欄を“＋１”カウントする。続いて、Ｘフィールドを参照し、命令コードテーブル４１０のＲ（Ｙ），Ｒ（Ｚ）と比較して一致しているかを確認する。一致している場合は、レジスタ関連テーブル３２１ａのＡ１行の対応するオペコード欄を“＋１”カウントする。さらに、テスト対象命令がメモリアクセス命令で、かつ、２つ前の命令もメモリアクセス命令だった場合、それぞれＹ，Ｚ，Ｄフィールドからメモリアドレスを生成する。そして、アクセス領域が重複しているかどうかをチェックし、重複している場合は、メモリ領域関連テーブル３２２ａのＡ１行の対応する欄を“＋１”カウントする。
【００５２】
情報処理装置２１０は、ステップＳ９２７において、テスト対象命令の２つ後の命令を読み込み、オペコードを参照し、命令出現頻度テーブル３１１ａのＡ２行の対応する欄を“＋１”カウントする。続いて、Ｘフィールドを参照し、命令コードテーブル４１０のＲ（Ｙ），Ｒ（Ｚ）と比較して一致しているかを確認する。一致している場合は、レジスタ関連テーブル３２１ａのＡ２行の対応するオペコード欄を“＋１”カウントする。さらに、テスト対象命令がメモリアクセス命令で、かつ、２つ前の命令もメモリアクセス命令だった場合、それぞれＹ，Ｚ，Ｄフィールドからメモリアドレスを生成する。そして、アクセス領域が重複しているかどうかをチェックし、重複している場合は、メモリ領域関連テーブル３２２ａのＡ２行の対応する欄を“＋１”カウントする。
【００５３】
情報処理装置２１０は、ステップＳ９２９において、テスト対象命令の３つ後の命令を読み込み、オペコードを参照し、命令出現頻度テーブル３１１ａのＡ３行の対応する欄を“＋１”カウントする。続いて、Ｘフィールドを参照し、命令コードテーブル４１０のＲ（Ｙ），Ｒ（Ｚ）と比較して一致しているかを確認する。一致している場合は、レジスタ関連テーブル３２１ａのＡ３行の対応するオペコード欄を“＋１”カウントする。さらに、テスト対象命令がメモリアクセス命令で、かつ、２つ前の命令もメモリアクセス命令だった場合、それぞれＹ，Ｚ，Ｄフィールドからメモリアドレスを生成する。そして、アクセス領域が重複しているかどうかをチェックし、重複している場合は、メモリ領域関連テーブル３２２ａのＡ３行の対応する欄を“＋１”カウントする。
【００５４】
情報処理装置２１０は、ステップＳ９３１において、コンパイラ出力のロードモジュールの命令列の最後かどうかを判断し、最後でなければ、ステップＳ９１３に戻って、次の命令を読み込み、前述のステップＳ９１５〜Ｓ９２９の動作を行う。最後の命令だった場合は、情報処理装置２１０は、ステップＳ９３３においてｎ＝ｎ＋１を行い、ステップＳ９３５において、ｎ≦７の場合はステップＳ９１３に戻って、次の命令を読み込み、前述のステップＳ９１５〜Ｓ９２９の動作を行う。ｎ＝８の場合は、ここで一連の処理を終了する。
【００５５】
（頻度別命令テーブル生成処理）
図９Ｂは、本実施形態に係る頻度別命令テーブル生成処理（Ｓ８０７）の手順を示すフローチャートである。
【００５６】
情報処理装置２１０は、ステップＳ９４１において、出現率で正規化された命令出現頻度テーブル３１１ａを取得する。情報処理装置２１０は、ステップＳ９４３において、出現頻度順に所定数の命令を頻度別命令テーブル３３１ａに記憶する。本例では頻度１位〜頻度３位であれば、その数に限定はない。
【００５７】
情報処理装置２１０は、ステップＳ９４５において、頻度別命令テーブル３３１ａに記憶された命令から１つの命令を選択する。情報処理装置２１０は、ステップＳ９４７において、レジスタ関連テーブル３２１ａを参照して、テスト対象命令と選択命令間の使用レジスタに関連があるか否かを判定する。テスト対象命令と選択命令間の使用レジスタに関連がある場合、情報処理装置２１０は、ステップＳ９４９において、頻度別命令テーブルの選択命令に“Ｒ”を記入する。情報処理装置２１０は、ステップＳ９５１において、メモリ領域関連テーブル３２２ａを参照して、テスト対象命令と選択命令間のアクセスするメモリ領域に関連があるか否かを判定する。テスト対象命令と選択命令間のアクセスするメモリ領域に関連がある場合、情報処理装置２１０は、ステップＳ９５３において、頻度別命令テーブルの選択命令に“Ｍ”を記入する。なお、使用レジスタに関連がある、あるいは、メモリ領域に関連がある、との判定基準には、図５の頻度別命令テーブル３３１ａの説明で記載したように種々の基準があり、より効果的な基準が使用される。
【００５８】
情報処理装置２１０は、ステップＳ９５５において、頻度別命令テーブル３３１ａに記憶された全ての命令の処理が終了したか否かを判定する。全ての命令の処理が終了してなければ、情報処理装置２１０は、ステップＳ９４５に戻って、頻度別命令テーブル３３１ａに記憶された他の命令に対して処理を繰り返す。全ての命令の処理が終了すればステップＳ８０７の処理を終了する。
【００５９】
（テスト命令列生成処理）
図９Ｃは、本実施形態に係るテスト命令列生成処理（Ｓ８０９）の手順を示すフローチャートである。
【００６０】
情報処理装置２１０は、ステップＳ９６１において、テスト対象命令を選択する。情報処理装置２１０は、ステップＳ９６３において、テスト対象命令の頻度別命令テーブル３３１ａを読み出す（図５では、５０１〜５０ｎ）。情報処理装置２１０は、ステップＳ９６５において、設定された同じ頻度順位の前後命令列を選択して、テスト命令列テーブル３３２ａに記憶する。なお、ステップＳ９６１におけるテスト対象命令の選択は、ランダムに選択してもよいし、命令をグループ化して、グループ毎の選択確率を上げるなどの重みを付けた選択をしてもよい。また、ステップＳ９６５における頻度順位の選択は、頻度１位、頻度２位、頻度３位、…を選択する割合を順に重み付けして、選択してもよいし、命令によって、命令グループによって、選択の重み付けを変えてもよい。
【００６１】
情報処理装置２１０は、ステップＳ９６７において、テスト命令列テーブル３３２ａに記憶された命令から１つの命令を選択する。情報処理装置２１０は、ステップＳ９６９において、選択命令に“Ｒ”が記憶されているか否かを判定する。選択命令に“Ｒ”が記憶されている場合、情報処理装置２１０は、ステップＳ９７１において、テスト対象命令と選択命令間の対応するレジスタを関連付ける。情報処理装置２１０は、ステップＳ９７３において、選択命令に“Ｍ”が記憶されているか否かを判定する。選択命令に“Ｍ”が記憶されている場合、情報処理装置２１０は、ステップＳ９７５において、テスト対象命令と選択命令間の対応するメモリアドレスを関連付ける。
【００６２】
情報処理装置２１０は、ステップＳ９７７において、１つのテスト対象命令のテスト命令列の処理が終了したか否かを判定する。１つのテスト対象命令のテスト命令列の処理が終了してない場合、情報処理装置２１０は、ステップＳ９５７に戻り、テスト命令列の他の命令の処理を繰り返す。
【００６３】
１つのテスト対象命令のテスト命令列の処理が終了した場合、情報処理装置２１０は、ステップＳ９７９において、他のテスト対象命令があるか否かを判定する。他のテスト対象命令があれば、情報処理装置２１０は、ステップＳ９６１に戻り、他のテスト対象命令からテスト命令列を生成する処理を繰り返す。他のテスト対象命令がなければ、テスト命令列生成処理を終了する。
【００６４】
《テスト命令列の生成具体例》
以下、図１０Ａ〜図１２を参照して、具体的な例におけるテスト命令列の生成手順を詳細に説明する。なお、図１０Ａ〜図１２の例は一例であって、これに限定されない。
【００６５】
（出現数例）
図１０Ａは、本実施形態に係る命令出現頻度テーブル１０１１ａ、レジスタ関連テーブル１０２１ａおよびメモリ領域関連テーブル１０２２ａの元になる出現数例１０１１、１０２１および１０２２を示す図である。なお、命令出現頻度テーブル１０１１ａ、レジスタ関連テーブル１０２１ａおよびメモリ領域関連テーブル１０２２ａは、出現数例１０１１、１０２１および１０２２を記憶し、その後、算出した出現頻度を記憶可能である。
【００６６】
出現数例１０１１、１０２１および１０２２は、図９Ａの実行命令列解析処理に従って生成された、ＯＰ0をテスト対象命令とした場合の、命令出現頻度テーブル１０１１ａ、レジスタ関連テーブル１０２１ａおよびメモリ領域関連テーブル１０２２ａの各枠においてカウントされた出現回数の例である。
【００６７】
なお、図１０Ａには図示されていないが、他の命令（本例では、ＯＰ1〜ＯＰ7）をテスト対象命令とした出現回数もカウントされている。
【００６８】
（出現頻度正規化例）
図１０Ｂは、本実施形態に係る命令出現頻度テーブル１０１１ａ、レジスタ関連テーブル１０２１ａおよびメモリ領域関連テーブル１０２２ａの出現頻度正規化例を示す図である。なお、図１０Ｂの出現頻度は、各出現回数の総出現回数に対する四捨五入したパーセントで表わしているが、出現頻度の算出方法はこれに限定されない。
【００６９】
図１０Ａで、命令出現頻度テーブル１０１１ａ、レジスタ関連テーブル１０２１ａおよびメモリ領域関連テーブル１０２２ａに出現回数が記憶されるが、このままでは出現回数や依存回数、重複回数という数値であるため、出現頻度が明確に比較できない。図１０Ｂの出現頻度正規化例は、それぞれ、出現頻度（％）、依存割合（％）、重複割合（％）に正規化して数字の重みを明確にしたものである。例えば、命令出現頻度テーブル１０１１ａのＢ３行であれば、Ｂ３行の総和で各ＯＰ0〜ＯＰ7の値を割れば、総命令に対する割合が求められる。レジスタ関連テーブル１０２１ａおよびメモリ領域関連テーブル１０２２ａについては、総和を命令出現頻度テーブル１０１１ａで求めることで、総命令数に対する割合が求められる。
【００７０】
図１０Ａの出現数例１０１１、１０２１および１０２２を上述の方法で正規化したものが、図１０Ｂの命令出現頻度テーブル１０１１ａ、レジスタ関連テーブル１０２１ａおよびメモリ領域関連テーブル１０２２ａである。例えば、ＯＰ0の直前の命令として出現する頻度が一番高いのは、ＯＰ0の直前の命令として出現した全命令数の中で５６％を占めるＯＰ7になり、ＯＰ0の直後の命令でレジスタの依存度の高い命令は、２０％を占めるＯＰ5となる。
【００７１】
（頻度別命令テーブルの生成例）
図１１は、本実施形態に係る出現頻度正規化例から生成された頻度別命令テーブル１１３１ａの生成例の構成を示す図である。頻度別命令テーブル１１３１ａは、テスト命令列を組み立てるために必要な情報をまとめたテーブルであり、このテーブルの情報を基にテスト命令列生成部がテスト命令列を組み立てる。頻度別命令テーブル１１３１ａは、ＯＰ0がテスト対象命令の頻度別命令テーブル１１０１、ＯＰ1がテスト対象命令の頻度別命令テーブル１１０２、…、ＯＰ7がテスト対象命令の頻度別命令テーブル１１０８を有する。
【００７２】
具体的な頻度別命令テーブル１１３１ａの見方について説明する。例えば、ＯＰ0命令をテストするに当たり、最も頻度を高くするべきテスト命令列が頻度１位、２番目あるいは３番目に頻度を上げる命令列が頻度２位と頻度３位になる。頻度１位の命令列は、ＯＰ0の直前がＯＰ7、その前がＯＰ5、その前がＯＰ3となり、ＯＰ0の直後がＯＰ6、次がＯＰ4、次がＯＰ2の順番となる。ここでさらに、レジスタの依存関係とメモリアドレスの重複の有無とを判定して保持する。なお、本具体例においては、“Ｒ”や“Ｍ”の設定に、Ｂ１，Ｂ２，Ｂ３，Ａ１，Ａ２，Ａ３の命令が決まったら、その中でテスト対象命令とレジスタの依存度が１５％以上で最も高い命令に“Ｒ”を設定し、テスト対象命令とメモリ領域の依存度が１５％以上で最も高い命令に“Ｍ”を設定する方法を採用している。頻度１位で説明すると、レジスタの依存関係があるのは、ＯＰ0の直前のＯＰ7と、ＯＰ0の２つ後ろのＯＰ4命令となり、メモリアドレスに重複があるのは、ＯＰ0の２つ前のＯＰ5になる。なお、この例では、頻度１位から頻度３位までを記載したが、これを何位まで考慮してテスト命令列を作成するかはコンピュータのアーキテクチャや評価期間等に依存する。
【００７３】
（テスト命令列テーブルの生成例）
図１２は、本実施形態に係る頻度別命令テーブルの生成例から生成されたテスト命令列テーブル１２３２ａの生成例の構成を示す図である。なお、テスト命令列は、規則的な命令列やランダムな命令列があり、いろいろな生成法に上記テーブルを適用することでバグ摘出効果の高いテスト命令列を生成することができるが、ここでは、ランダムに命令列を生成する場合に頻度別命令テーブル１１３１ａを用いる方法について説明を行う。
【００７４】
テスト命令列を生成する場合のパラメータとして、一般的に命令数が入力として与えられる。これはテスト命令列の命令数をいくつにするかを決めるパラメータであるが、説明を簡潔にするために、ここでは３０命令とする。一般的には数百命令から数万命令以上の場合も考えられる。
【００７５】
次に、この命令数を元に、オペコードをランダムに抽出する。このオペコードの抽出方法には全くランダムに行う方法がある。また、メモリアクセス系の命令グループ、固定小数点演算の命令グループ、浮動小数点演算命令グループなどに分けて、これらのグループの重みを指定して、この重みが大きいほど、出現頻度を高くしたりする、規則を含む方法などがある。なお、ここでは全くランダムに抽出する方法で説明を行う。また、頻度何位を使用するかは、頻度別命令テーブル１１０１〜１１０８共通に、頻度１位は５０％、頻度２位は３０％。頻度３位は２０％などと設定して、この確率で選択するものとする。そして、本例では、図１１の頻度別命令テーブル１１０１〜１１０８の頻度１位、頻度２位、頻度３位において、ＯＰ0が抽出された場合に５０％の確率で頻度１位が選択され、ＯＰ1が抽出された場合に３０％の確率で頻度２位が選択され、ＯＰ7が抽出された場合に２０％の確率で頻度３位が選択されるものと仮定する。
【００７６】
１つ目の命令としてＯＰ0が抽出され、頻度別命令テーブル１１０１から頻度１位の命令列が番号１〜７まで選択される。オペコードは頻度別命令テーブル１１０１の命令列の通りに生成され、Ｒ（Ｘ），Ｒ（Ｙ），Ｒ（Ｚ）の依存関係から、番号３のＯＰ7のＲ（Ｘ）と番号４のＯＰ0のＲ（Ｙ）またはＲ（Ｚ）の番号とを一致させる。さらに、番号４のＯＰ0のＲ（Ｘ）またはＲ（Ｙ）と、番号６のＯＰ4のＲ（Ｘ）またはＲ（Ｙ）の番号を一致させる。また、メモリアドレスを重複させるために、番号４のＯＰ0のＲ（Ｙ），Ｒ（Ｚ）およびＤを、番号２のＯＰ5のＲ（Ｙ），Ｒ（Ｚ）およびＤと一致させる。他の命令のＲ（Ｘ），Ｒ（Ｙ），Ｒ（Ｚ），Ｄフィールドにはランダムな番号が設定される。その結果、テスト命令列１２０１が生成される。
【００７７】
２つめの命令としてＯＰ1が抽出された場合、頻度別命令テーブル１１０２から頻度２位の命令列が番号８〜１４まで、選択される。オペコードは頻度別命令テーブル１１０２の命令列の通りに生成され、Ｒ（Ｘ），Ｒ（Ｙ），Ｒ（Ｚ）の依存関係から、番号８のＯＰ0のＲ（Ｘ）と番号１１のＯＰ1のＲ（Ｙ）の番号を一致させ、さらに番号１１のＯＰ1のＲ（Ｘ）と番号１４のＯＰ5のＲ（Ｙ）の番号を一致させる。またメモリアドレスを重複させるために、番号１１のＯＰ1のＲ（Ｚ）およびＤを、番号１４のＯＰ5のＲ（Ｚ）およびＤと一致させる。他の命令のＲ（Ｘ），Ｒ（Ｙ），Ｒ（Ｚ），Ｄフィールドにはランダムな番号が設定される。その結果、テスト命令列１２０２が生成される。
【００７８】
３つめの命令としてＯＰ7が抽出された場合、頻度別命令テーブル１１０８から頻度３位の命令列が番号１５〜２１まで、選択される。オペコードは頻度別命令テーブル１１０８の命令列の通りに生成され、Ｒ（Ｘ），Ｒ（Ｙ），Ｒ（Ｚ）の依存関係から、番号１７のＯＰ1のＲ（Ｘ）と番号１８のＯＰ7のＲ（Ｙ）の番号を一致させる。他の命令のＲ（Ｘ），Ｒ（Ｙ），Ｒ（Ｚ），Ｄフィールドにはランダムな番号が設定される。その結果、テスト命令列１２０３が生成される。
【００７９】
４つめの命令として再びＯＰ0が抽出された場合、頻度別命令テーブル１１０１から頻度３位の命令列が番号２２〜２８まで、選択される。オペコードは頻度別命令テーブル１１０１からの命令列の通りに生成され、Ｒ（Ｘ），Ｒ（Ｙ），Ｒ（Ｚ）の依存関係から、番号２３のＯＰ6のＲ（Ｘ）と番号２５のＯＰ0のＲ（Ｙ）の番号を一致させる。他の命令のＲ（Ｘ），Ｒ（Ｙ），Ｒ（Ｚ），Ｄフィールドにはランダムな番号が設定される。その結果、テスト命令列１２０４が生成される。
【００８０】
なお、上記例では、煩雑さをさけるため、レジスタの依存関係や、メモリ領域の依存関係においてどのレジスタ間に依存関係があるか、あるいは、メモリ領域の依存関係がある場合の各レジスタの関係などは、省略した。実際には、どのレジスタが一致したか、あるいは、レジスタ間の依存関係の頻度を求めてその結果をどのレジスタを関連させるかに使用してもよい。また、メモリ領域の依存関係においてどのレジスタ間に依存関係があるかも考慮してよいが、本例では、Ｒ（Ｙ），Ｒ（Ｚ）に同じ値を設定することとした。
【００８１】
以上により、図１２に示すテスト命令列が生成される。本例で生成されたテスト命令列は、通常のランダム命令列とは異なり、コンパイラ出力のロードモジュールを解析した統計情報から生成されている。さらに、命令順やレジスタの依存性、メモリアドレスの重複は実際にＯＳ上で動作する実行命令列の傾向を反映しており、ＬＳＩをリリースする前の品質確保という意味では、非常に効果の高いテスト命令列となる。
【００８２】
本実施形態によれば、コンパイラで生成した実行命令列の特徴である命令の出現頻度やアクセス対象であるレジスタやメモリ領域の関連を反映したテスト命令列が生成でき、容易にＬＳＩなどの設計における製造前の品質確保をすることができる。
【００８３】
すなわち、コンパイラが出力した実行モジュールを解析するツールを用いて、テストのターゲットとなる命令に対する前後の命令のオペコード、レジスタの依存関係の有無、アドレスの重複の有無を考慮したテスト命令列が生成できる。そのため、ＬＳＩリリース前に、実ＪＯＢと同じ傾向を持ったテスト命令列で論理評価が行えるため、ＬＳＩの品質の向上ができ、ＬＳＩリワークやリワークに伴う開発日程の遅延を防ぐことが可能になる。
【００８４】
［第３実施形態］
次に、本発明の第３実施形態に係る情報処理装置について説明する。本実施形態に係る情報処理装置は、上記第２実施形態と比べると、テスト命令列の生成履歴を蓄積して次のテスト命令列の生成にために学習する点で異なる。その他の構成および動作は、第２実施形態と同様であるため、同じ構成および動作については同じ符号を付してその詳しい説明を省略する。
【００８５】
《情報処理装置の機能構成》
図１３は、本実施形態に係る情報処理装置１３１０の機能構成を示すブロック図である。なお、図１３において、図３と同様の機能構成部には同じ参照番号を付して、説明を省略する。
【００８６】
情報処理装置１３１０は、テスト命令列学習データベース１３１４と、テスト命令実行指示部１３１５と、テスト命令列実行結果取得部１３１６と、テスト命令列生成条件更新部１３１７と、を備える。
【００８７】
テスト命令列学習データベース１３１４は、テスト命令列生成部２１３により生成され、テスト対象プロセッサに実行指示されたテスト命令列と、テスト対象プロセッサから取得されたテスト命令列実行結果とを対応付けて蓄積する。テスト命令実行指示部１３１５は、テスト命令列生成部２１３が生成したテスト命令列をテスト対象プロセッサに実行指示する。テスト命令列実行結果取得部１３１６は、テスト対象プロセッサにおけるテスト命令列の実行結果を取得する。なお、テスト命令列の実行結果は、テスト対象プロセッサから直接取得しても、他のテスト実行評価装置などから取得してもよい。
【００８８】
テスト命令列生成条件更新部１３１７は、学習テーブル１３１７ａを有し、テスト命令列学習データベース１３１４に蓄積されたテスト命令列と実行結果とを参照して、テスト命令列生成部２１３がテスト命令列を生成するための条件を更新して、よりテスト対象プロセッサの品質向上を実現する。
【００８９】
（テスト命令列学習データベース）
図１４は、本実施形態に係るテスト命令列学習データベース１３１４の構成を示す図である。
【００９０】
テスト命令列学習データベース１３１４は、テスト命令列生成部２１３が生成したテスト命令列１４０１に対応付けて、その基となった頻度別命令テーブル１４０２、命令出現頻度テーブル１４０３、アクセス対象関連情報１４０４、テスト命令列実行結果１４０５、を記憶する。そして、これら情報に基づく、テスト命令列評価結果１４０６を記憶する。なお、アクセス対象関連情報１４０４には、レジスタ関連テーブルとメモリ領域関連テーブルとが含まれる。
【００９１】
（学習テーブル）
図１５は、本実施形態に係る学習テーブル１３１７ａの構成を示す図である。学習テーブル１３１７ａは、テスト命令列学習データベース１３１４に蓄積されたテスト命令列の履歴に基づいて、テスト命令列生成部２１３によるテスト命令列の生成条件を更新するために使用される。
【００９２】
学習テーブル１３１７ａは、テスト命令列生成条件１５０１に対応付けて、テスト命令列評価結果１５０２、そして、更新されるテスト命令列更新条件１５０３を記憶する。なお、テスト命令列生成条件１５０１には、関連命令選択閾値、関連レジスタ判定閾値、関連メモリ領域判定閾値、テスト命令列生成アルゴリズムなどが含まれる。
【００９３】
《情報処理装置の処理手順》
図１６は、本実施形態に係る情報処理装置１３１０の処理手順を示すフローチャートである。このフローチャートは、図７のＣＰＵ７１０がＲＡＭ７４０を使用して実行し、図１３の機能構成部を実現する。なお、図１６において、図８と同様のステップには同じステップ番号を付して、説明を省略する。
【００９４】
情報処理装置１３１０は、ステップＳ１６１１において、テスト命令列のテスト対象プロセッサでの実行を指示する。情報処理装置１３１０は、ステップＳ１６１３において、テスト命令列の実行結果を取得する。情報処理装置１３１０は、ステップＳ１６１５において、テスト命令列学習データベース１３１４に蓄積されたテスト命令列の履歴を参照して、実行結果を解析する。そして、情報処理装置１３１０は、ステップＳ１６１７において、学習テーブル１３１７ａを使用して、テスト命令列生成部２１３によるテスト命令列の生成条件を更新する。
【００９５】
本実施形態によれば、テスト命令列を生成するための条件を更新して、よりテスト対象プロセッサの品質向上を実現することができる。
【００９６】
［他の実施形態］
以上、実施形態を参照して本発明を説明したが、本発明は上記実施形態に限定されるものではない。本発明の構成や詳細には、本発明のスコープ内で当業者が理解し得る様々な変更をすることができる。また、それぞれの実施形態に含まれる別々の特徴を如何様に組み合わせたシステムまたは装置も、本発明の範疇に含まれる。
【００９７】
また、本発明は、複数の機器から構成されるシステムに適用されてもよいし、単体の装置に適用されてもよい。さらに、本発明は、実施形態の機能を実現する情報処理プログラムが、システムあるいは装置に直接あるいは遠隔から供給される場合にも適用可能である。したがって、本発明の機能をコンピュータで実現するために、コンピュータにインストールされるプログラム、あるいはそのプログラムを格納した媒体、そのプログラムをダウンロードさせるＷＷＷ(World Wide Web)サーバも、本発明の範疇に含まれる。特に、少なくとも、上述した実施形態に含まれる処理ステップをコンピュータに実行させるプログラムを格納した非一時的コンピュータ可読媒体（non-transitory computer readable medium）は本発明の範疇に含まれる。
【００９８】
［実施形態の他の表現］
上記の実施形態の一部または全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）
コンパイラが生成した実行命令列中における、所定命令に対する前後の少なくとも２つの命令の出現頻度を算出する出現頻度算出手段と、
前記実行命令列中における、前記所定命令のアクセス対象と前記前後の少なくとも２つの命令のアクセス対象との関連を判定するアクセス対象関連判定手段と、
前記命令の出現頻度と前記アクセス対象の関連とに基づいて、前記所定命令を含み前記アクセス対象の関連を維持した命令列を、前記所定命令をテストするテスト命令列として生成するテスト命令列生成手段と、
を備える情報処理装置。
（付記２）
前記アクセス対象は、前記命令によりアクセスされるレジスタおよびメモリの少なくともいずれかを含む、付記１に記載の情報処理装置。
（付記３）
前記アクセス対象のメモリは、アクセス領域の少なくとも一部が重なる場合に関連性ありと判定する、付記２に記載の情報処理装置。
（付記４）
前記テスト命令列生成手段は、
前記命令の出現頻度に基づいて、テスト命令列に使用する命令を選択する命令選択手段と、
前記アクセス対象との関連に基づいて、前記所定命令と前記選択された命令とのアクセス対象を関連付けるアクセス対象関連付け手段と、
を有する、付記１乃至３のいずれか１項に記載の情報処理装置。
（付記５）
前記テスト命令列生成手段は、
前記所定命令に対する前後の少なくとも２つの命令の出現頻度と、前記所定命令のアクセス対象と前記所定命令の前後の命令のアクセス対象との関連と、に基づいて、前記所定命令および前記前後の少なくとも２つの命令の出現頻度順の命令列と、前記所定命令と前記命令列との間の前記アクセス対象の関連の有無と、を記憶する頻度別命令テーブルを生成する頻度別命令テーブル生成手段を、さらに備え、
前記頻度別命令テーブルを参照して前記テスト命令列を生成する、付記１乃至４のいずれか１項に記載の情報処理装置。
（付記６）
生成された前記テスト命令列をプロセッサに実行させる実行指示手段と、
前記テスト命令列の前記プロセッサによる実行結果を取得する実行結果取得手段と、
をさらに備え、
前記テスト命令列生成手段は、前記実行結果を評価して、前記テスト命令列の生成に反映させる、付記１乃至５のいずれか１項に記載の情報処理装置。
（付記７）
コンパイラが生成した実行命令列中における、所定命令に対する前後の少なくとも２つの命令の出現頻度を算出する出現頻度算出ステップと、
前記実行命令列中における、前記所定命令のアクセス対象と前記前後の少なくとも２つの命令のアクセス対象との関連を判定するアクセス対象関連判定ステップと、
前記命令の出現頻度と前記アクセス対象の関連とに基づいて、前記所定命令を含み前記アクセス対象の関連を維持した命令列を、前記所定命令をテストするテスト命令列として生成するテスト命令列生成ステップと、
を含む情報処理方法。
（付記８）
コンパイラが生成した実行命令列中における、所定命令に対する前後の少なくとも２つの命令の出現頻度を算出する出現頻度算出ステップと、
前記実行命令列中における、前記所定命令のアクセス対象と前記前後の少なくとも２つの命令のアクセス対象との関連を判定するアクセス対象関連判定ステップと、
前記命令の出現頻度と前記アクセス対象の関連とに基づいて、前記所定命令を含み前記アクセス対象の関連を維持した命令列を、前記所定命令をテストするテスト命令列として生成するテスト命令列生成ステップと、
をコンピュータに実行させる情報処理プログラム。
【図１】
0006451989.tif 000002
【図２】
0006451989.tif 000003
【図３】
0006451989.tif 000004
【図４】
0006451989.tif 000005
【図５】
0006451989.tif 000006
【図６】
0006451989.tif 000007
【図７】
0006451989.tif 000008
【図８】
0006451989.tif 000009
【図９Ａ】
0006451989.tif 000010
【図９Ｂ】
0006451989.tif 000011
【図９Ｃ】
0006451989.tif 000012
【図１０Ａ】
0006451989.tif 000013
【図１０Ｂ】
0006451989.tif 000014
【図１１】
0006451989.tif 000015
【図１２】
0006451989.tif 000016
【図１３】
0006451989.tif 000017
【図１４】
0006451989.tif 000018
【図１５】
0006451989.tif 000019
【図１６】
0006451989.tif 000020