(57)【要約】【課題】  コンパイラのバグを能率的に、かつ精度よく検出する。【解決手段】  複数のコンパイラによって生成された、互いに異なる動作環境で動作する複数のマシン語プログラム５，７に対して、同一の入力値を与え、これらの出力値である出力データａ，ｂを比較することによって、コンパイラのバグを間接的に検出する。２種類のコンパイラにおいてそれぞれ同じ箇所に全く同様のバグが存在する可能性は極めて低いため、出力結果の不一致の存在により、いずれか一方のコンパイラにおけるバグの存在を推定できる。【選択図】  図２
2005141406.tif 000002
【特許請求の範囲】
【請求項１】
応用ソフトプログラムを複数のコンパイラでそれぞれ変換して生成された、互いに異なる動作環境で動作するマシン語プログラムのそれぞれに対し、同一の入力値を与える手段と、
前記各マシン語プログラムからの出力値を相互に比較する手段と、
比較結果を出力する手段と、を備えたコンパイラ検査システム。
【請求項２】
請求項１に記載のコンパイラ検査システムであって、
前記複数のコンパイラのうち少なくとも一のコンパイラに信頼度情報を設定する手段を更に備え、
前記比較結果を出力する手段は、前記各マシン語プログラムからの出力値に不一致があった場合に、前記複数のコンパイラのうち信頼度が相対的に低いコンパイラにバグが存在する旨を出力することを特徴とするコンパイラ検査システム。
【請求項３】
請求項２に記載のコンパイラ検査システムであって、
前記信頼度情報を設定する手段は、ネイティブコンパイラに相対的に高い信頼度を設定し、クロスコンパイラに相対的に低い信頼度を設定することを特徴とするコンパイラ検査システム。
【請求項４】
請求項１ないし３のいずれかに記載のコンパイラ検査システムであって、
多数の前記入力値を保持する手段を更に備えたことを特徴とするコンパイラ検査システム。
【請求項５】
応用ソフトプログラムを複数のコンパイラでそれぞれ変換して生成された、互いに異なる動作環境で動作するマシン語プログラムのそれぞれに対し、同一の入力値を与えるステップと、
前記各マシン語プログラムからの出力値を相互に比較するステップと、
比較結果を出力するステップと、
をコンピュータに実行させるコンパイラ検査プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイラが正しく動作するかを検査するためのコンパイラ検査システムおよび同プログラムに関する。
【背景技術】
【０００２】
Ｃ言語などの高級言語によるソースコードを変換（コンパイル）して、マシン語の実行ソフトウェアを生成するためのコンパイラのうち、開発環境と共通の環境（汎用ＯＳなど）で実行される実行ソフトウェアを生成するものは、ネイティブコンパイラまたはセルフコンパイラと称されている。これに対し、家電製品や自動車などに用いられるＣＰＵを実行環境とする実行ソフトウェア（いわゆる組み込みプログラム）を、Ｃ言語などの高級言語によるソースコードから汎用ＯＳ上で生成する場合のように、開発環境と異なる環境で実行される実行ソフトウェアを生成するコンパイラは、クロスコンパイラ（組み込みプログラムの場合には、組み込み用コンパイラ）と称され、各種のものが利用されている。
【０００３】
ところでコンパイラでは、高級言語によるソースコードから、マシン語の実行プログラムと１対１で対応するアセンブラコードを一旦生成し、このアセンブラコードからマシン語の実行プログラムを生成する場合があるが、そのうち高級言語によるソースコードからアセンブラコードへの変換の際に、最適化処理が行われることが多い。しかし、この最適化処理を行う部分は特に複雑であるため、コンパイラに存在するバグはこの最適化処理の部分に比較的多いことが経験的に知られている。
【０００４】
他方、クロスコンパイラとりわけ組み込み用コンパイラは、その用途が組み込み機器の開発に限定されるため、ネイティブコンパイラに比べ世の中での使用頻度は圧倒的に低い。このため、組み込み用コンパイラには未修正のバグが、ネイティブコンパイラに比べて多く残されていると経験的に考えられる。
【０００５】
そこで、組み込み機器の信頼性確保のためには、高級言語についてのデバッグツールで個々の変数の変化をステップ的に追うか、あるいはマシン語プログラムと１対１で対応するアセンブラコードに誤りがないかを検証するなど、人手による直接的な確認を行う必要があった。
【０００６】
また、既存のコンパイラ検査ツール(Ｃ言語等の特殊な構文を集めたテストプログラム）を使用する方法もあるが、これはそれらの構文についてのコンパイルが保証されるだけであって、実際に自分の作成したソースコードから生成されるアセンブラコードに対する保証としては不十分であり、コンパイラ検査ツールに含まれていない現実の特殊な条件下で初めて不具合を生じさせるようなバグは発見できない。
【０００７】
そこで、より精度よく検査するために、ユーザが作成した高級言語のソースコードと、それに対するテストパターン（入力値とそれに対する理想の出力値）を用いて検査する方法も考えられる。しかしながら、個々の入力値に対する理想の出力値を予め手動で設定しておく必要があり、その設定作業がきわめて煩雑である。
【０００８】
また、特許文献１では、同一環境で実行される新旧バージョンのコンパイラを比較するための手段として、新旧のコンパイラからそれぞれ生成されるアセンブラコードの文字列同士を比較し、相違点を差異情報として抽出するシステムを開示している。
【０００９】
【特許文献１】特開平１０−２９３６８３号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
しかし、アセンブラにも様々な言語が存在するため、文字列の単純な比較が成立する場面は限られる。また同系列の言語（例えばバージョンの異なる複数のコンパイラによって生成したもの）によるアセンブラコード同士を比較する場合にも、同一の演算処理を実現するためには多様なソースコードやアセンブラコードが存在し得るため、アセンブラコードの文字列同士を比較するのでは、差異情報として抽出される相違点が無用に多くなるおそれがある。他方、演算結果が正しいのであればアセンブラコード同士が一致しなくても不都合はない。
【００１１】
そこで本発明の目的は、コンパイラのバグを能率的に、かつ精度よく検出できるような手段を提供することにある。
【課題を解決するための手段】
【００１２】
第１の本発明は、応用ソフトプログラムを複数のコンパイラでそれぞれ変換して生成された、互いに異なる動作環境で動作するマシン語プログラムのそれぞれに対し、同一の入力値を与える手段と、前記各マシン語プログラムからの出力値を相互に比較する手段と、比較結果を出力する手段と、を備えたコンパイラ検査システムである。
【００１３】
第１の本発明では、複数のコンパイラによって生成された、互いに異なる動作環境で動作する複数のマシン語プログラムに対して、同一の入力値を与え、これらの出力値を比較することによって、間接的にバグを検出する。２種類のコンパイラにおいて、それぞれ同じ箇所に全く同様のバグが存在する可能性は極めて低いため、出力結果の不一致の存在により、いずれか一方のコンパイラにおけるバグの存在を推定できる。
【００１４】
また第１の本発明では、一方のコンパイラによって生成される出力値を、他方のコンパイラに対するテストパターンとして利用するので、個々の入力値に対する理想の出力値を手動で設定する必要がなく、検査を能率化・省力化できる。さらに、特許文献１のようにアセンブラコードの文字列が不一致の場合を全て抽出する構成とは異なり、演算結果が不一致の場合だけを抽出するので、アセンブラコードが不一致であっても正しい演算を行えるものを抽出対象から除外でき、コンパイラのバグを精度よく適切に検出できる。
【００１５】
第２の本発明は、請求項１に記載のコンパイラ検査システムであって、前記複数のコンパイラのうち少なくとも一のコンパイラに信頼度情報を設定する手段を更に備え、前記比較結果を出力する手段は、前記各マシン語プログラムからの出力値に不一致があった場合に、前記複数のコンパイラのうち信頼度が相対的に低いコンパイラにバグが存在する旨を出力することを特徴とするコンパイラ検査システムである。
【００１６】
第２の本発明では、各マシン語プログラムからの出力値に不一致があった場合に、予め設定されている信頼度が相対的に低いコンパイラにバグが存在する旨を出力するので、バグの存在するコンパイラを迅速に特定できる。
【００１７】
第３の本発明は、請求項２に記載のコンパイラ検査システムであって、前記信頼度情報を設定する手段は、ネイティブコンパイラに相対的に高い信頼度を設定し、クロスコンパイラに相対的に低い信頼度を設定することを特徴とするコンパイラ検査システムである。
【００１８】
クロスコンパイラはその用途が限定されるため、ネイティブコンパイラに比べ世の中での使用頻度は圧倒的に低く、未修正のバグがネイティブコンパイラに比べて多く残されているのが一般的である。したがって、第３の本発明のようにネイティブコンパイラに相対的に高い信頼度を設定し、クロスコンパイラに相対的に低い信頼度を設定することとするのが好適である。
【００１９】
第４の本発明は、請求項１ないし３のいずれかに記載のコンパイラ検査システムであって、多数の前記入力値を保持する手段を更に備えたことを特徴とするコンパイラ検査システムである。
【００２０】
第４の本発明では、多数の入力値を保持する手段を更に備えたので、入力作業を一層効率化できる。
【００２１】
第５の本発明は、応用ソフトプログラムを複数のコンパイラでそれぞれ変換して生成された、互いに異なる動作環境で動作するマシン語プログラムのそれぞれに対し、同一の入力値を与えるステップと、前記各マシン語プログラムからの出力値を相互に比較するステップと、比較結果を出力するステップと、をコンピュータに実行させるコンパイラ検査プログラムである。第５の本発明では、第１の本発明と同様の効果を得ることができる。
【発明を実施するための最良の形態】
【００２２】
本発明の実施形態につき以下に詳細に説明する。なお、本実施形態における全てのコンピュータプログラムは、周知のパーソナルコンピュータシステム（各種演算を行うためのＣＰＵと、キーボード・マウス・リムーバブルディスク装置等の入力装置と、メモリ装置やハードディスク装置等の記憶装置と、ディスプレイ装置・プリンタ装置等の出力装置等とを含んで構成されたもの）にインストールされているか、あるいは該コンピュータシステム上で生成される。
【００２３】
図１は、本実施形態において検査の対象となる組み込み用コンパイラ２，ＵＮＩＸ（Ｒ）用コンパイラ３およびそれらの入出力関係を示すブロック図である。なお、本実施形態ではオペレーティングシステムとしてＵＮＩＸ（Ｒ）を用いる例について説明するが、オペレーティングシステムとしてはこれに限られず、ＵＮＩＸ（Ｒ）に類するオペレーティングシステムであれば本発明の適用を妨げるものではない。
【００２４】
組み込み用コンパイラ２は、開発環境をＵＮＩＸ（Ｒ）とし、実行環境を組み込みＣＰＵとするクロスコンパイラであり、Ｃ言語で作成されたＣソースコード１をコンパイルして、組み込みＣＰＵ用マシン語プログラム５、および中間ファイルとしての組み込みＣＰＵ用アセンブラ４を生成する。
【００２５】
ＵＮＩＸ（Ｒ）用コンパイラ３は、開発環境・実行環境をいずれも汎用ＯＳであるＵＮＩＸ（Ｒ）とするネイティブコンパイラであり、Ｃ言語で作成されたＣソースコード１をコンパイルして、ＵＮＩＸ（Ｒ）用マシン語プログラム７、および中間ファイルとしてのＵＮＩＸ（Ｒ）用アセンブラ６を生成する。これらマシン語プログラム５，７は、最終的には互いに異なる動作環境で動作することになるが、その作成はいずれもＵＮＩＸ（Ｒ）を開発環境として行われる。
【００２６】
Ｃソースコード１からアセンブラ４，６への変換においては、コンパイラ２，３による最適化が適宜行われるため、この変換の前後におけるプログラムコードは１対１で対応しないことになる。他方、アセンブラ４，６はマシン語プログラム５，７とそれぞれ１対１で対応している。
【００２７】
図２において、本実施形態のコンパイラ検査システムは、入力データ生成部１１および出力データ比較部１３を備えている。入力データ生成部１１は、組み込みＣＰＵ用マシン語プログラム５およびＵＮＩＸ（Ｒ）用マシン語プログラム７に対する共通の入力データを生成する。出力データ比較部１３は、マシン語プログラム５，７からの出力データａ，ｂを比較し、比較結果１４を出力する。
【００２８】
本実施形態では、共通の入力データを、ＵＮＩＸ（Ｒ）用マシン語プログラム７と組み込みＣＰＵ用マシン語プログラム５との両者に入力するが、後者はＵＮＩＸ（Ｒ）上では直接実行できないため、後者に対しては組み込みＣＰＵシミュレータ１２を介した入出力を行う。ここで用いられる組み込みＣＰＵシミュレータ１２は、組み込みＣＰＵが提供する動作環境をＵＮＩＸ（Ｒ）ＯＳ上で仮想的に構築するソフトウェアであって、これを通じて組み込みＣＰＵ用の実行ソフトウェアを実行することで、ＵＮＩＸ（Ｒ）上からの入力に対する仮想的な組み込みシステムからの出力を得るようにしたものである。
【００２９】
図３はユーザが作成したＣ言語による応用ソフトプログラムのソースコード１の一例を示す。この応用ソフトプログラムをコンパイルして得られた実行プログラムとしての組み込みＣＰＵ用マシン語プログラム５が、最終的には車載の組み込みＣＰＵにインストールされることになる。この応用ソフトプログラムは、例えばＶＳＣ（Vehicle Stability Control；車両安定性制御システム）に係るものであって、前後輪左右別の車輪速度、車体速度、ヨーレート、操舵角などの入力変数値が入力されると、これに応じて所定の演算を行い、前後輪左右別のブレーキアクチュエータのソレノイドバルブのデューティ比などの出力変数値を出力するように構成されているものとする。
【００３０】
この応用ソフトプログラムの入力変数のそれぞれについて、その値の変動範囲が予め定められている（例えば車輪速度・車体速度については０〜６５５３５、ヨーレート・操舵角については−３２７６８〜３２７６７）。これらの入力変数を用いて、図４に示されるような入力変数テーブル２０が予め作成され、システムの記憶装置に記憶されている。この入力変数テーブル２０は、後述するバグ検出ルーチンで使用されるテーブル形式のデータファイルであり、入力変数のそれぞれの値を、各変動範囲の全域にわたって個別に所定数ずつインクリメントさせて入力変数の全ての組合せを作成し、これを検査パターン１，同２，・・・同ｎの形式で格納したものである。なお本実施形態における入力変数はいずれもglobal変数として宣言されており、後述するバグ検出処理のルーチンで各種の外部関数から任意に参照可能にされている。
【００３１】
他方、図３のＣソースコード１をコンパイラ２，３でそれぞれコンパイルしてアセンブラ４，６およびマシン語プログラム５，７を得る一連の過程において、一方のコンパイラにバグが存在し、その処理結果が互いに一致しなくなる場合がある。例えばＣソースコード１をコンパイラ２，３でコンパイルした結果、ＵＮＩＸ（Ｒ）用コンパイラ３によって図５のようなＵＮＩＸ（Ｒ）用アセンブラ６が生成され、組み込み用コンパイラ２によって図６のような組み込みＣＰＵ用アセンブラ４が生成されるような場合である（なお、アセンブラ４，６は互いに異なる文法で記述されるが、図５および図６の例では理解の容易のために両者を組み込みＣＰＵ用アセンブラの文法で表記している）。この例では、Ｃソースコード１において符号Ａ０で示した行が、ＵＮＩＸ（Ｒ）用アセンブラ６では図５のように正しく「lbu」（１バイトをロード）、「sb」（１バイトをストア）と変換されるのに対し、組み込みＣＰＵ用アセンブラ４では図６のように、組み込み用コンパイラ２に存在するバグの影響により、ソースコード１の同じ行が「lhu」（２バイトをロード）、「sh」（２バイトをストア）と、誤った内容に変換されてしまう。その結果、組み込みＣＰＵ用マシン語プログラム５の実行時には、ハードウェア的に許可されていない奇数アドレスに対する２バイト（ハーフワード）のアクセスが試行されて、アドレスエラー例外が生じることになる。
【００３２】
以上のとおり構成された本実施形態におけるバグ検出処理について、以下に説明する。このバグ検出処理は、予めコンパイラ２，３によってマシン語プログラム５，７が生成されている状態において行われる。
【００３３】
図７において、まず、マシン語プログラム５，７への入力値が決定される（Ｓ１０１）。この入力値の決定は、上述した入力変数テーブル２０から検査パターンを順次読み出すことにより行われる。
【００３４】
所定の検査終了条件（ここでは、入力変数テーブル２０の全ての検査パターンの処理終了）が満たされている場合には、ステップＳ１０２で肯定され、本ルーチンを終了する。ここでは該条件が満たされていないので、ステップＳ１０３に移行する。
【００３５】
ステップＳ１０３では、組み込みＣＰＵシミュレータ１２上のマシン語プログラム５、およびＵＮＩＸ（Ｒ）用マシン語プログラム７に対し、読み出された検査パターンによる共通の入力変数値の入力が行われる（Ｓ１０３）。これによってマシン語プログラム５，７が個別に実行され、出力データａ，ｂ（図２参照）が得られる。
【００３６】
マシン語プログラム５，７の両者からの出力データａ，ｂが得られたことを条件に（Ｓ１０４）、これらの出力データａ，ｂの値が互いに等しいか否かが判定される（Ｓ１０５）。両出力データａ，ｂが互いに等しい場合には、処理はステップＳ１０１に戻り、次の検査パターンにより入力データが設定される。
【００３７】
以上の処理は、入力変数テーブル２０に格納されている全ての検査パターンについての処理が終了するまで（Ｓ１０２）繰り返し実行される。
【００３８】
ステップＳ１０５において、出力データａ，ｂに不一致があった場合には、「不一致あり」の旨の出力が行われ（Ｓ１０６）、処理はエラーとして異常終了する。
【００３９】
図８ないし図１０は、以上のバグ検出処理の結果を示す出力画面の例を示す。図８はＵＮＩＸ（Ｒ）用マシン語プログラム７についての実行結果を示すネイティブ側出力画面３１、図９は組み込みＣＰＵ用マシン語プログラム５についての組み込みＣＰＵシミュレータ１２の実行結果を示すクロス側出力画面３２であり、いずれもバグが発見されずに処理が終了した場合のものを示している。なお、処理の実行にあたって、上述した入力変数テーブル２０に格納されている入力変数以外の変数（例えば、車両始動からの走行時間を示すカウンタ値）の初期値が、初期値ファイルＢ１（p000n_cross.rst）および初期値ファイルＢ２（p000n_simio+099996ms_002.rst）から読み込まれ、マシン語プログラム５，７の実行に伴って更新され、処理がストップした際における最終値が最終値ファイルＣ１（p000n_sfun+93294ms.rst：ネイティブ側）および最終値ファイルＣ２（p000n_simio+93294ms.rst：クロス側）に格納される。またＵＮＩＸ（Ｒ）用マシン語プログラム７については更に、これら変数の最終値の１回前の値が前回値ファイルＣ１１（p000n_sfun+93288ms.rst）に格納される。コンパイラ２，３のいずれかにバグがあった場合には、最終値ファイルＣ１と同Ｃ２の内容に差分が生じることになる。また、前回値ファイルＣ１１の内容は、後に別途の処理によりバグを再現する際に利用することができる。図９の例では、バグ不存在の旨の正常終了メッセージＤが表示されている。
【００４０】
他方、図１０は組み込みＣＰＵ用マシン語プログラム５についての組み込みＣＰＵシミュレータ１２の実行結果を示すクロス側出力画面３２であって、バグが発見された場合のものを示している。図示のとおり、バグが存在した場合には、「不一致あり」の旨の出力として、それが何番目に入力されたデータについて生じたのかを示す序数情報を含んだエラーメッセージＥが表示される。ユーザはこのエラーメッセージＥに従って、組み込み用コンパイラ３において関連するソースコードを点検し、必要に応じてバグの修正を行う。また、このような点検によっても組み込み用コンパイラ３におけるバグが確認できない場合には、次にＵＮＩＸ（Ｒ）用コンパイラ２を点検し、必要に応じてバグの修正を行う。
【００４１】
以上のとおり、本実施形態では、複数のコンパイラ２，３によって生成された、互いに異なる動作環境で動作する複数のマシン語プログラム５，７に対して、同一の入力値を与え、これらの出力値を比較することによって、間接的にバグを検出する。２種類のコンパイラ２，３において、それぞれ同じ箇所に全く同様のバグが存在する可能性は極めて低いため、出力結果の不一致の存在により、いずれか一方のコンパイラ２，３におけるバグの存在を推定できる。
【００４２】
また本実施形態では、一方のコンパイラによって生成される出力値を、他方のコンパイラに対するテストパターンとして利用するので、個々の入力値に対する理想の出力値を手動で設定する必要がなく、検査を能率化・省力化できる。さらに、特許文献１のようにアセンブラコードの文字列が不一致の場合を全て抽出する構成とは異なり、演算結果が不一致の場合だけを抽出するので、アセンブラコードが不一致であっても正しい演算を行えるものを抽出対象から除外でき、コンパイラのバグを精度よく適切に検出できる。
【００４３】
また本実施形態では、多数の入力値を保持する手段としての入力変数テーブル２０を備えたので、入力作業を一層効率化できる。
【００４４】
なお、上記実施形態では、組み込み用コンパイラ３の信頼性が、ＵＮＩＸ（Ｒ）用コンパイラ３に比べて低いとの前提に基づいてシステムを構成した。具体的には、マシン語プログラム５，７からの出力が互いに一致しない場合に、クロス側出力画面３２のみにエラーメッセージＥを表示し、また前回値ファイルＣ１１もクロス側（組み込み用コンパイラ側）についてのみ作成する、というように、クロス側にのみ所定の出力を行うこととした。しかしながら、例えばシステムの入力画面などで「信頼度」のダイアログボックスを設けてユーザが予め数字を記入し（ＵＮＩＸ（Ｒ）用コンパイラなら「５」、組み込み用コンパイラなら「３」など）、この値をシステムが読み取って優劣を判定する、あるいは「信頼性：大」のチェックボックスを設けてこれに対するユーザのチェック入力の有無をシステムが読み取る、というように、予め処理対象となる複数のコンパイラの信頼性情報（あるいは、複数のコンパイラ間における信頼度の順位や、複数のコンパイラのうち相対的に信頼性の高いものの指示入力）を入力する手段を更に設け、ユーザによる当該入力に従ってシステムが信頼性の優劣を判定し、実行結果に相違があった場合に信頼性の相対的に低い側のコンパイラについて上記所定の出力を行う、あるいは信頼性の相対的に低い側のコンパイラについてバグ有りと自動的に判定するようにシステムを構成してもよい。
【００４５】
また、一般にクロスコンパイラはその用途が限定されるため、ネイティブコンパイラに比べ世の中での使用頻度は圧倒的に低く、未修正のバグがネイティブコンパイラに比べて多く残されているのが一般的である。したがって、システムの入力画面において、検査対象となる各コンパイラがネイティブコンパイラであるかクロスコンパイラであるかを指示入力する手段を設け、この指示入力に応じて、システムがネイティブコンパイラに相対的に高い信頼度を設定し、クロスコンパイラに相対的に低い信頼度を設定するようにシステムを構成してもよい。
【００４６】
また、上記実施形態では、マシン語プログラム５，７からの出力が互いに一致しない場合に、その旨のエラーメッセージＥを文字表示によってリアルタイムに表示することとしたが、本発明における不一致の旨の出力は例えばログファイルへの追記など、任意の他の形式をとることができる。
【００４７】
また、上記実施形態では予め入力変数テーブル２０を作成しておき、バグ検出処理の実行時に該テーブルから入力データを順次読み出すことで入力値を設定する構成としたが、このような構成に代えて、入力変数のそれぞれを個別に、その変動範囲の全域にわたってインクリメントまたはデクリメントすることで、入力変数の検査パターンをバグ検出処理の際にリアルタイムに生成する構成としてもよい。
【００４８】
また、本発明における応用ソフトプログラムは、ユーザが作成しうるプログラムであればよく、例えばＣ＋＋、ＦＯＲＴＲＡＮ等の他の各種の高級言語で作成したプログラムが含まれる。
【００４９】
さらに、上記実施形態では、組み込み用コンパイラ２とネイティブコンパイラであるＵＮＩＸ（Ｒ）用コンパイラ３とを検査対象としたが、本発明による検査の対象はこのような組合せに限られない。すなわち本発明では、図１１のように２つの組み込みＣＰＵシミュレータ１２，４２を利用して２種類の組み込み用コンパイラを検査対象としたり、図１２のように２種類のＵＮＩＸ（Ｒ）用マシン語Ａ（４３），同Ｂ（４４）を生成するための２種類のＵＮＩＸ（Ｒ）用コンパイラを検査対象としてもよい。また本発明では、同一環境で実行される新旧バージョンのコンパイラを比較してもよい。
【００５０】
また、上記実施形態では主としてスタンドアロンの端末上で本発明に係るシステムを実現する例について説明したが、本発明に係るシステムは通信回線を経由した複数の端末上で実現してもよい。例えば図１３のように、入力データ生成部および出力データ比較部１３をＵＮＩＸ（Ｒ）端末５１に実装すると共に、該端末とは別個に設けられたＷｉｎｄｏｗｓ（Ｒ）端末５２にＷｉｎｄｏｗｓ（Ｒ）用マシン語プログラム５５をインストールし、両端末５１，５２間の入力データおよび出力データａの伝送を通信回線５３を経由して実行するようにシステムを構成してもよい。この場合には、両端末５１，５２間の通信に例えばSocket等のＴＣＰ／ＩＰに基づくネットワーク用ＡＰＩを共通のインターフェイスとして利用することにより、ＣＰＵシミュレータのようなシミュレータなしに異環境におけるマシン語プログラムを実行できるという利点がある。また、図１３の例の変形として、両端末５１，５２間の通信の一方のみを通信回線５３を経由して行う構成としたり、あるいは通信回線５３を経由せずに両端末５１，５２間のデータの受け渡しをフレキシブルディスク・ＣＤ−ＲＯＭ・半導体メモリカードなどのリムーバブル記憶媒体を利用して行うことも可能である。さらに、上記実施形態では２種類のコンパイラを検査する構成について説明したが、本発明に係るシステムは３種類以上のコンパイラを同時に検査するように構成することも可能であり、このような構成も本発明の範疇に属するものである。
【００５１】
また、本実施形態における各種処理を実行するためのコンピュータプログラムは、これを上記各ステップをコンピュータに実行させるためのパッケージソフトウェアとして構成し、記憶媒体に格納した形で、あるいはオンラインによって取引することができ、これにより本発明に所期の効果を得ることができる。
【図面の簡単な説明】
【００５２】
【図１】本発明の実施形態において検査の対象となる組み込み用コンパイラ、ＵＮＩＸ（Ｒ）用コンパイラおよびそれらの入出力関係を示すブロック図である。
【図２】本発明の実施形態のコンパイラ検査システムの概略を示すブロック図である。
【図３】ユーザが作成したＣ言語による応用ソフトプログラムのソースコードの一例を示す図である。
【図４】入力変数テーブルの一例を示す図である。
【図５】ＵＮＩＸ（Ｒ）用アセンブラのプログラムコードであって、バグを含まないものの一例を示す図である。
【図６】組み込みＣＰＵ用アセンブラのプログラムコードであって、バグを含むものの一例を示す図である。
【図７】実施形態におけるバグ検出処理を示すフロー図である。
【図８】ＵＮＩＸ（Ｒ）用マシン語プログラムについての実行結果としてのネイティブ側出力画面を示す図である。
【図９】組み込みＣＰＵ用マシン語プログラムについての組み込みＣＰＵシミュレータの実行結果としてのクロス側出力画面である。
【図１０】クロス側出力画面であってバグが発見された場合のものを示す図である。
【図１１】本発明実施形態の変形例を示すブロック図である。
【図１２】本発明実施形態の変形例を示すブロック図である。
【図１３】本発明実施形態の変形例を示すブロック図である。
【符号の説明】
【００５３】
１            Ｃソースコード
２            組み込み用コンパイラ
３            ＵＮＩＸ（Ｒ）用コンパイラ
５            組み込みＣＰＵ用マシン語プログラム
７            ＵＮＩＸ（Ｒ）用マシン語プログラム
１１            入力データ生成部
１２            組み込みＣＰＵシミュレータ
１３            出力データ比較部
２０            入力変数テーブル
【図１】
2005141406.tif 000003
【図２】
2005141406.tif 000004
【図３】
2005141406.tif 000005
【図４】
2005141406.tif 000006
【図５】
2005141406.tif 000007
【図６】
2005141406.tif 000008
【図７】
2005141406.tif 000009
【図８】
2005141406.tif 000010
【図９】
2005141406.tif 000011
【図１０】
2005141406.tif 000012
【図１１】
2005141406.tif 000013
【図１２】
2005141406.tif 000014
【図１３】
2005141406.tif 000015