(57)【要約】【課題】テストコード生成にあたり、ハードウエアを参照する関数についても人手による負担を大幅に軽減させることができるテストコード自動生成装置およびコンピュータをそのテストコード生成装置として動作させるテストコード生成プログラムを提供する。【解決手段】テストコード生成プログラムがハードウエアレジスタを参照する関数であると判定した場合には、コンパイル時に、ハードウエア参照をエミュレーション関数に置き換えてそのハードウエア非参照関数であるテスト関数を自動的に生成する。【選択図】        図６
2011008534.tif 000002
【特許請求の範囲】
【請求項１】
ソフトウエアで実行される関数をテストするテストコードを生成するテストコード生成装置であって、
テスト対象関数と該テスト対象関数実行前後の状態を表わすテスト仕様の指定を受けるテスト仕様受付部と、
前記テスト仕様受付部で指定を受けたテスト対象関数を該テスト仕様受付部で指定を受けたテスト仕様に従ってテストするためのテストコードを生成するテストコード生成部とを有し、
前記テスト仕様受付部が、サブルーチンを含むいずれかの処理過程においてハードウエアの状態を参照し該ハードウエアの参照時の状態に応じた処理を実行するハードウエア参照関数が前記テスト対象関数として指定されるにあたり、該ハードウエア参照関数の実行前後の状態を表わすテスト仕様の指定に加え該ハードウエアの状態の指定を受け付けるものであり、さらに、該ハードウエアの実際の状態に因らず該ハードウエアが指定した状態にあるものと仮定して該ハードウエア参照関数を実行するエミュレーションの指定があったときは該エミュレーションの指定を受け付けるものであって、
前記テストコード生成部が、前記テスト仕様受付部により前記エミュレーションの指定が受け付けられたことを受けて、前記ハードウエア参照関数を、前記ハードウエアが指定した状態にあるときに該ハードウエア参照関数により実行される処理と同一の処理を該ハードウエアを参照せずに実行するハードウエア非参照関数に置き換え、該ハードウエア非参照関数を前記テスト仕様に従ってテストするためのテストコードを生成するものであることを特徴とするテストコード生成装置。
【請求項２】
前記ハードウエア参照関数が、サブルーチンを含むいずれか処理過程においてハードウエアレジスタの値を参照する関数であることを特徴とする請求項１記載のテストコード生成装置。
【請求項３】
コンピュータ内で実行され、該コンピュータを、ソフトウエアで実行される関数をテストするテストコードを生成するテストコード生成装置として動作させるテストコード生成プログラムであって、
テスト対象関数と該テスト対象関数実行前後の状態を表わすテスト仕様の指定を受けるテスト仕様受付部と、
前記テスト仕様受付部で指定を受けたテスト対象関数を該テスト仕様受付部で指定を受けたテスト仕様に従ってテストするためのテストコードを生成するテストコード生成部とを有し、
前記テスト仕様受付部が、サブルーチンを含むいずれかの処理過程においてハードウエアの状態を参照し該ハードウエアの参照時の状態に応じた処理を実行するハードウエア参照関数が前記テスト対象関数として指定されるにあたり、該ハードウエア参照関数の実行前後の状態を表わすテスト仕様の指定に加え該ハードウエアの状態の指定を受け付けるものであり、さらに、該ハードウエアの実際の状態に因らず該ハードウエアが指定した状態にあるものと仮定して該ハードウエア参照関数を実行するエミュレーションの指定があったときは該エミュレーションの指定を受け付けるものであって、
前記テストコード生成部が、前記テスト仕様受付部により前記エミュレーションの指定が受け付けられたことを受けて、前記ハードウエア参照関数を、前記ハードウエアが指定した状態にあるときに該ハードウエア参照関数により実行される処理と同一の処理を該ハードウエアを参照せずに実行するハードウエア非参照関数に置き換え、該ハードウエア非参照関数を前記テスト仕様に従ってテストするためのテストコードを生成するものであるテストコード生成装置として動作させることを特徴とするテストコード生成プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、機器に組み込まれたソフトウエアを構成する関数（以下、関数と呼ぶ）のテストコードを自動的に生成するテストコード生成装置およびコンピュータをそのテストコード生成装置として動作させるテストコード生成プログラムに関する。
【背景技術】
【０００２】
家電製品や携帯電話機などのあらゆる電子機器にプログラム実行により演算や制御を行なう機能が搭載され、様々な演算処理や制御が行なわれるようになってきている。
【０００３】
近年では、様々な電子機器での演算処理機能が更に高度化し、このため、従来であれば計算機のメモリ内に組み入れられていた演算用の関数が、様々な電子機器にも組み込まれるようになってきている。
【０００４】
こうして家電製品や携帯電話機などに演算用の関数が組み込まれ、いままでは実現し得なかった新たな機能を家電製品や携帯電話機に付与することが可能となってきている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平１０−２０７７２７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、携帯電話機等の機器に組み込まれた状態の関数の中には、内部のハードウエアを参照して処理を実行する関数（ハードウエア参照関数）が存在する。この関数が参照するハードウエアの内容はこの関数の処理とは別の処理又はハードウエア上で書き換えられる。特許文献１には、関数のテストコードを生成するテストコード生成装置が提示されており、この技術を使うと自動的にテストコードが生成されてプログラマの作業量は軽減されるが、ハードウエア参照関数についてテストコードを生成することはできない。このため、その関数の一部をハードウエアを参照しないように書き換えるなどの人手による処理が相変わらず必要であり、人手による負荷を大幅に軽減するには至っていない。
【０００７】
本発明は上記問題点を解決し、関数のテストコード生成にあたり、ハードウエアを参照する関数についても人手による書き換え等の負担を大幅に軽減させることができるテストコード自動生成装置およびコンピュータをそのテストコード生成装置として動作させるテストコード生成プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成する本発明のテストコード生成装置は、ソフトウエアで実行される関数をテストするテストコードを生成するテストコード生成装置であって、
テスト対象関数とそのテスト対象関数実行前後の状態を表わすテスト仕様の指定を受けるテスト仕様受付部と、
上記テスト仕様受付部で指定を受けたテスト対象関数をそのテスト仕様受付部で指定を受けたテスト仕様に従ってテストするためのテストコードを生成するテストコード生成部とを有し、
上記テスト仕様受付部が、サブルーチンを含むいずれかの処理過程においてハードウエアの状態を参照しそのハードウエアの参照時の状態に応じた処理を実行するハードウエア参照関数が上記テスト対象関数として指定されるにあたり、そのハードウエア参照関数の実行前後の状態を表わすテスト仕様の指定に加えそのハードウエアの状態の指定を受け付けるものであり、さらに、そのハードウエアの実際の状態に因らずそのハードウエアが指定した状態にあるものと仮定してそのハードウエア参照関数を実行するエミュレーションの指定があったときはそのエミュレーションの指定を受け付けるものであって、
上記テストコード生成部が、上記テスト仕様受付部により上記エミュレーションの指定が受け付けられたことを受けて、上記ハードウエア参照関数を、上記ハードウエアが指定した状態にあるときにそのハードウエア参照関数により実行される処理と同一の処理をそのハードウエアを参照せずに実行するハードウエア非参照関数に置き換え、そのハードウエア非参照関数を上記テスト仕様に従ってテストするためのテストコードを生成するものであることを特徴とする。
【０００９】
上記本発明のテストコード生成装置によれば、上記テスト仕様受付部で指定を受けたテスト対象関数についてそのテスト仕様受付部で指定を受けたテスト仕様にしたがったテストコードが自動的に生成される。このときにそのテスト対象関数がハードウエア参照関数であった場合には、上記テスト仕様受付部が上記テスト仕様中のエミュレーションの指定を受け付けたことを受けて、上記テストコード生成部が、上記テスト対象関数を上記ハードウエア非参照関数に置き換えた上で上記テスト仕様にしたがったテストコードを自動的に生成する。
【００１０】
つまり、プログラマは、上記テスト対象関数とそのテスト対象関数実行前後の状態を表わすテスト仕様とを記述してこのテストコード自動生成装置に入力するという簡単な作業を行なうことで、後は何もしなくてもそのテスト対象関数であるハードウエア参照関数のテストコードが、このテストコード生成装置によって自動的に生成される。
【００１１】
ここで、上記ハードウエア参照関数が、サブルーチンを含むいずれか処理過程においてハードウエアレジスタの値を参照する関数であっても良い。
【００１２】
上記目的を達成する本発明のテストコード生成プログラムは、
コンピュータ内で実行され、そのコンピュータを、ソフトウエアで実行される関数をテストするテストコードを生成するテストコード生成装置として動作させるテストコード生成プログラムであって、
テスト対象関数とそのテスト対象関数実行前後の状態を表わすテスト仕様の指定を受けるテスト仕様受付部と、
上記テスト仕様受付部で指定を受けたテスト対象関数を該テスト仕様受付部で指定を受けたテスト仕様に従ってテストするためのテストコードを生成するテストコード生成部とを有し、
上記テスト仕様受付部が、サブルーチンを含むいずれかの処理過程においてハードウエアの状態を参照しそのハードウエアの参照時の状態に応じた処理を実行するハードウエア参照関数が上記テスト対象関数として指定されるにあたり、そのハードウエア参照関数の実行前後の状態を表わすテスト仕様の指定に加えそのハードウエアの状態の指定を受け付けるものであり、さらに、そのハードウエアの実際の状態に因らずそのハードウエアが指定した状態にあるものと仮定してそのハードウエア参照関数を実行するエミュレーションの指定があったときはそのエミュレーションの指定を受け付けるものであって、
上記テストコード生成部が、上記テスト仕様受付部により上記エミュレーションの指定が受け付けられたことを受けて、上記ハードウエア参照関数を、上記ハードウエアが指定した状態にあるときにそのハードウエア参照関数により実行される処理と同一の処理をそのハードウエアを参照せずに実行するハードウエア非参照関数に置き換え、そのハードウエア非参照関数を上記テスト仕様に従ってテストするためのテストコードを生成するものであるテストコード生成装置として動作させることを特徴とする。
【００１３】
上記本発明のテストコード生成プログラムをコンピュータに組み込めば、そのコンピュータを上記本発明のテストコード生成装置として動作させることができる。
【発明の効果】
【００１４】
以上説明した様に、関数のテストコード生成にあたり、ハードウエアを参照する関数についても人手による書き換え等の負担を大幅に軽減させることができるテストコード自動生成装置およびコンピュータをそのテストコード生成装置として動作させるテストコード生成プログラムが実現する。
【図面の簡単な説明】
【００１５】
【図１】本発明の一実施形態であるテストコード生成プログラムが組み込まれたパーソナルコンピュータ（以降ＰＣという）１を示す図である。
【図２】テスト仕様の基本構成を説明する図である。
【図３】テストコード生成プログラムがテストコードを自動的に生成する際の手順を示すフローチャートである。
【図４】ステップＳ３０５の詳細を示すフローチャートである。
【図５】ＴｅｓｔＡｌｌ関数を示す図である。
【図６】ハードウエアレジスタＩＮＴ＿ＲＥＧを参照する記述がある関数のテストを実施する場合のテスト仕様を説明する図である。
【図７】テストコード生成プログラムが、ハードウエア参照関数をハードウエア非参照関数に置き換えた後のハードウエア非参照関数を説明する図である。
【図８】出力されたテスト関数を説明する図である。
【図９】第２実施形態を説明する図である。
【図１０】第２実施形態を説明する図である。
【図１１】第２実施形態を説明する図である。
【図１２】第２実施形態を説明する図である。
【発明を実施するための形態】
【００１６】
以下図面を参照して本発明の実施の形態を説明する。
【００１７】
図１は、本発明の一実施形態であるテストコード生成プログラムがＰＣ本体１０内のハードディスクに記録されたパーソナルコンピュータ（以降ＰＣという）１を示す図である。
【００１８】
図１の例では、プログラマが、ＰＣ１のディスプレイ装置１１とキーボード１２とを使ってテスト対象関数とそのテスト対象関数実行前後の状態を表わすテスト仕様を記述してＰＣ本体１０内のハードディスクに記録されているテストコード生成プログラムを使ってそのテスト仕様を入力すると、このＰＣによって機器に組み込まれた状態の関数のテストコードが自動的に生成される。
【００１９】
本実施形態においては、ＰＣ１とＰＣ本体１０のハードディスクに記録されているテストコード生成プログラムとが、本発明にいうテストコード生成装置の一例を構成する。なお、コンパイラは、テスト対象関数及びその関数をテストするテストコードを機械語に翻訳する機能を有する。
【００２０】
前述した様に、従来においては、プログラマがテストコードを書き換える等の作業が必要であったが、本実施形態では、プログラマが、テスト対象関数とテスト対象関数実行前後の状態を表わすテスト仕様をＰＣ１から入力すれば、ＰＣ本体内部のテストコード生成プログラムによって自動的にハードウエア参照関数を含む関数のテストコードが生成される。
【００２１】
図２は、プログラマが記述するテスト仕様の基本構成を説明する図である。
【００２２】
図２には、テスト対象関数と、そのテスト対象関数実行前後の状態を表わすテスト仕様が記述されている。
【００２３】
プログラマが、この図２の内容をキーボード１２から打ち込み、さらにテストコード生成プログラムの実行を意味するコマンドを打ち込むと、ＰＣ本体１０内のハードディスクに記録されているテストコード生成プログラムによってその関数のテストコードが自動的に生成される。
【００２４】
図２の内容を説明する。
【００２５】
図２の最上段に記述されているのがテスト対象関数の関数名であり、その関数には演算用の入力パラメータが引数として記述されている。その関数名が示す関数本体の内容は図２の下方の｛｝で括られている部分に記述されている。例えばメインプログラムからこの関数を呼び出すときには、括弧内の入力パラメータに具体的な値が記述されその入力パラメータである値が関数に入力されて演算された結果が回答としてメインプログラムに返される。
【００２６】
そして、その｛｝で括られている関数本体の前段に宣言文として記述されているのが、テスト対象関数実行前後の状態を表わすテスト仕様である。この図２は、プログラマがテストコードの代わりに記述する部分であり、このテスト仕様を記述すると、図１のＰＣ内でテストコードが自動的に生成される。
【００２７】
まず、最初の♯ｐｒａｇｍａ  ＴＥＳＴ＿ＣＡＳＥ  テスト番号１という記述は、最上段の関数名で指定されているテスト対象関数について、テストコード生成プログラムに対してＴＥＳＴ＿ＣＡＳＥテスト番号１のテストコードの生成を指示するものであり、次の♯ｐｒａｇｍａ  ＴＥＳＴ＿ＣＡＳＥ  テスト番号２という記述は、テストコード生成プログラムに対してそのＴＥＳＴ＿ＣＡＳＥテスト番号２のテストコードの生成を指示するものである。
【００２８】
この例のテスト仕様は、テストコード生成プログラムに対して一つのテスト対象関数についてテスト番号１とテスト番号２という２つのテストコードの生成を指示している。図２のテスト仕様にはそれぞれのテスト番号についてテスト対象関数実行前後の状態を表わすテスト仕様が記述されている。図中の‘ＰＲＥＣＯＮＤ’がテスト対象関数実行前の状態を表わすテスト仕様であり、‘ＰＯＳＴＣＯＮＤ’がテスト対象関数実行後の状態を表わすテスト仕様である。
【００２９】
上記のテストコード生成プログラムは、♯ｐｒａｇｍａで指定されたテスト仕様を受けるテスト仕様受付部と、そのテスト仕様受付部で指定を受けたテスト対象関数を上記テスト仕様受付部で受けたテスト仕様にしたがってテストするためのテストコードを生成するテストコード生成部とを有しており、テスト対象関数を入力すると、上記テスト対象関数について上記テスト番号１と上記テスト番号２という２つのテスト仕様にしたがったテストコードをあわせて生成する。なお、この例ではハードウエアの２つのテストケースを記述したテスト仕様が示されているが、以降に説明するように３つ以上のテスト仕様が記述されていても良い。また、この図２の例では、一つの関数を記述した例が示されているが、関数は２つ以上であっても良い。
【００３０】
ここで、図３〜図５を参照して、本発明にいうテストコード生成プログラムが図２のテスト仕様を受けてどのようなテストコードを生成するかを説明する。
【００３１】
図３は、テストコード生成プログラムがテストコードを自動的に生成する際の手順を示すフローチャートであり、図４は、ステップＳ３０５の詳細を示すフローチャートである。
【００３２】
まず、ステップ３０１で、このフローの処理で関数のテストコードを自動的に生成する際にそのテストコードを登録するＴｅｓｔＡｌｌ関数という関数を定義して生成する。その次のステップ３０２で図２のソースファイルの中に関数があるかどうかをサーチし、ステップＳ３０３でサーチした関数の中に未処理の関数があるか否かを判定する。このステップＳ３０３で未処理の関数があると判定した場合にはＹ側に進んでステップＳ３０４でステップＳ３０２でサーチした関数について図２のテスト対象関数とテスト仕様の記述があるかどうかを判定する。このステップＳ３０４で図２のテスト対象関数とテスト仕様の記述があると判定すると、次のステップＳ３０５でテスト仕様にしたがってテスト対象関数のテストコードを生成する。ステップＳ３０６へ進んで、そのテストコードをステップＳ３０１で定義したＴｅｓｔＡｌｌ関数に登録してステップＳ３０２に戻ってステップＳ３０２からステップＳ３０６までの処理を繰り返す。
【００３３】
ステップＳ３０２からステップＳ３０６までの処理を繰り返してステップＳ３０３で未処理の関数が無いと判定するとステップＳ３０７へ進んで機器に搭載されるメインプログラムの起動時の処理にステップＳ３０６で生成したＴｅｓｔＡｌｌ関数を追加してこのフローの処理を終了する。
【００３４】
この例では、ステップＳ３０２〜Ｓ３０４が本発明にいうテスト仕様受付部の一例を構成し、ステップＳ３０５とステップＳ３０６の処理が本発明にいうテストコード生成部の一例を構成する。
【００３５】
なお、ステップＳ３０２でサーチした関数であってもテスト仕様のない場合にはステップＳ３０４でＮ側に進んでステップＳ３０２に戻ってステップＳ３０２からステップＳ３０６の処理を繰り返し、ステップＳ３０３未処理の関数がないと判定するとステップＳ３０７へ進んでステップＳ３０７の処理で起動時の処理にステップＳ３０６で生成したＴｅｓｔＡｌｌ関数を追加してこのフローの処理を終了する。
【００３６】
ここで、テストコードの生成処理の詳細を図４を参照して説明する。
【００３７】
ステップＳ３０５１で、まずテスト対象関数の入力パラメータに、テスト対象関数のテスト番号であるｔｅｓｔ＿ｃａｓｅ（図２に示したテストコード生成プログラムに対する♯ｐｒａｇｍａのところに記載されているテスト番号）を追加する。次のステップＳ３０５２で、テスト関数を生成する準備として、図２の関数の実行前後の仕様に応じて、関数実行前の状態（ＰＲＥＣＯＮＤ）を実現する処理と、関数実行後の状態（ＰＯＳＴＣＯＮＤ）を期待した値と比較する処理を挿入する。
【００３８】
次のステップＳ３０５３で図２のテスト仕様の中にエミュレーション処理の指定（後述するがエミュレーション処理はテスト仕様の中のＥＭＵという記述で指定される）があるかどうかを判定する。このステップＳ３０５３でエミュレーション処理の指定がないと判定すると、このフローの処理を終了する。
【００３９】
このステップＳ３０５３でエミューレーション処理の指定があると判定すると、Ｙ側へ進んでステップＳ３０５４の処理を実行する。ステップＳ３０５４でテスト対象関数に下位関数があるかどうかをチェックし、下位関数があった場合にはその下位関数も含めて関数の処理の中にハードウエアを参照する部分があるか否かを判定する。
【００４０】
次のステップＳ３０５５で、エミュレーションすべき指定、つまりハードウエアを参照する部分があるか否かによって処理を分岐する。つまり、関数を構成する上位関数と下位関数のどちらにもハードウエアを参照する部分がない場合はＮ側へ進んでこのフローの処理を終了し、ハードウエアを参照する部分がある場合はＹ側へ進んでステップＳ３０５６でエミュレーション処理の指定に基づきハードウエア非参照関数を生成する。
【００４１】
ステップＳ３０５７でそのハードウエア非参照関数に入力パラメータを追加して図２のテスト番号ごとのテストを実施できるようにする。ステップＳ３０５８では、ハードウエア参照関数を非参照関数に置き換える。また下位関数でハードウエア参照をしている場合は、下位関数に入力パラメータとしてテスト番号ｔｅｓｔ＿ｃａｓｅを追加する。
【００４２】
こうして図３のステップＳ３０５の処理でハードウエア非参照関数とテストコードが生成されステップＳ３０６でＴｅｓｔＡｌｌ関数に登録され、ステップＳ３０７でＴｅｓｔＡｌｌ関数がメインプログラムの起動時の処理部分に追加される。
【００４３】
図５は、ＴｅｓｔＡｌｌ関数を示す図である。この例では、３つのテストコードｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０ｘ０００７（）と、ｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０ｘ０００８（）と、ｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０ｘ０００９（）とが自動的に生成された例が示されている。
【００４４】
こうしてＴｅｓｔＡｌｌ関数がメインプログラムの起動処理に加えられた後、メインプログラムを実行すると、図５の３つのテストコードが次々に実行されてＰＣ１の表示画面上に関数のテスト結果がそれぞれ表示される。
【００４５】
ここからは、図５のＴｅｓｔＡｌｌ関数の各テストコードの内容を説明していく。
【００４６】
図６は、ハードウエアレジスタＩＮＴ＿ＲＥＧを参照する記述がある関数ｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ）のテストを実施する場合のテスト仕様を説明する図である。この図６の部分はプログラマが記述する。
【００４７】
このプログラマにより記述されたソースファイル中にハードウエアレジスタを参照する記述（ＥＭＵ）があると、テストコード生成プログラムは図４のステップＳ３０５８の処理でハードウエア非参照関数への置き換えを行なって、そのハードウエア非参照関数とテスト仕様の中のテスト番号であるｔｅｓｔ＿ｃａｓｅとの対応付けを実施する。このことについては図７のところで詳細に説明する。
【００４８】
まず、図６を参照してプログラマが記述するテスト仕様およびテスト対象関数を説明する。
【００４９】
図６には、図２と同様の図が示されており、テスト対象関数としてはｐａｒａｍ＿Ａとｐａｒａｍ＿Ｂとを加算又は減算する関数ｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ）が示されている。この関数の内容は下方の｛｝で括られているところに記述されている。この関数のｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂは入力パラメータであり、メインプログラム中に上記関数が記述され、そのパラメータに（３，４）が入力されると、メインプログラムは７を受け取ることになる。
【００５０】
ここで、関数ｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ）の内容を示す、下方の中括弧｛｝で括られている関数本体の部分の内容を簡単に説明しておく。
【００５１】
先頭のｉｎｔ  ｒｅｔは整数宣言であり、ｒｅｔという変数は整数値をとるということを宣言している。以降のｉｆ文の中には、ハードウエアレジスタであるＩＮＴ＿ＲＥＧ内の整数値が１であるか、又は０であるか、又は０より小さいかあるいは１より大きいかに応じて、この関数を呼び出して演算を行なわせるメインプログラムに対してどのような値を返すかが記述されている。
【００５２】
ｉｆ文中の一番上のＩＮＴ＿ＲＥＧ＜０｜｜ＩＮＴ＿ＲＥＧ＞１は、ＩＮＴ＿ＲＥＧというハードウエアレジスタの内容が０よりも小さいか、あるいは１よりも大きいときには、異常値であってエラーであることを示すＦＡＬＳＥをメインプログラムに返すということを示す記述である。
【００５３】
次のｉｆ文中のＩＮＴ＿ＲＥＧ＝１は、ＩＮＴ＿ＲＥＧというハードウエアレジスタの内容が１であるときには、ｐａｒａｍ＿Ａとｐｒａｍ＿Ｂとを加算してその加算結果をメインプログラムに返すということを示す記述である。
【００５４】
最後のｅｌｓｅ文中のＩＮＴ＿ＲＥＧというハードレジスタの内容が、それ以前のｉｆ文中以外の値つまり０であったときには、ｐａｒａｍ＿Ａとｐｒａｍ＿Ｂとを減算してその減算結果をメインプログラムに返すということを示す記述である。
【００５５】
この関数のテストコードを生成するにあたって、テスト対象関数の前段に、そのテスト対象関数の実行前後のテスト仕様が、この関数本体の前段に♯ｐｒａｇｍａという宣言文で記述されている。
【００５６】
ここからは♯ｐｒａｇｍａで宣言されているテスト仕様を説明する。
【００５７】
この例では、テスト対象関数である加算・減算処理を実施する関数ｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ）について３つのテストが指定されており、それぞれのテスト番号がテスト０ｘ０００７、テスト０ｘ０００８、テスト０ｘ０００９で示されている。なお０ｘ・・・・は１６進表記である。
【００５８】
最初のテスト番号０ｘ０００７のテスト仕様が、加算関数をテストするテスト仕様であり、実行前の処理を実現する処理としてｐａｒａｍ＿Ａを４、ｐａｒａｍ＿Ｂを３としてテスト対象関数ｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ）にそれらが入力されると、テスト対象関数の演算結果の正しい結果としては７が返されるということが記述されている。
【００５９】
次のテスト番号０ｘ０００８のテスト仕様が、減算関数をテストするテスト仕様であり、実行前の処理を実現する処理としてｐａｒａｍ＿Ａを１０、ｐａｒａｍ＿Ｂを１としてテスト対象関数ｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ）にそれらが入力されるとテスト対象関数の演算結果の正しい結果としては９が返されるということが記述されている。
【００６０】
最後のテスト番号０ｘ０００９のテスト仕様が、エラーが正しく検出されるかどうかをテストするテスト仕様であり、実行前の処理を実現するｐａｒａｍ＿Ａを３、ｐａｒａｍ＿Ｂを０としてそれらがテスト対象関数ｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ）に入力されると、テスト対象関数の演算結果の正しい結果としてはエラーを示すＦＡＬＳＥが返されるということが記述されている。
【００６１】
ここで、この例のテスト対象関数は前述した様にハードウエアレジスタであるＩＮＴ＿ＲＥＧを参照して関数の処理を実行するので、図６のテスト仕様の中にはそのハードウエアレジスタを参照せずに済むようにハードウエアの状態の指定が付け加えられている。それが、前述のエミュレーションの頭文字であるＥＭＵ：ＩＮＴ＿ＲＥＧである。
【００６２】
この例の関数ｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ）は、加算演算を実行するときに機器内部のハードウエアレジスタが機器内部の別のハードウエアの処理により１に書き換えられた後加算処理を実行し、減算を実行するときには機器内部の別のハードウエアの処理により０に書き換えられた後減算処理を実行し、ハードウエアレジスタが別のハードウエアの処理により１，０以外の値に書き換えられタ後、エラー処理を実行する。
【００６３】
このため本実施形態ではハードウエアを参照したのと同じ状況を再現してハードウエアを参照せずにテストを行なうことができる様に工夫している。
【００６４】
それがエミュレーション（ＥＭＵ）の指定であり、本実施形態のテストコード生成プログラムは、テスト仕様の中にエミュレーションの指定（ＥＭＵ）があった場合は、図４のフローの処理手順にしたがって、テスト仕様受付部がそのエミュレーションの指定を受け付けて、テストコード生成部がそのエミュレーションの指定を受けてハードウエア参照関数をハードウエア非参照関数に置き換えて、そのハードウエア非参照関数に入力パラメータｔｅｓｔ＿ｃａｓｅを追加してその入力パラメータにテスト仕様中のテスト番号を対応させる。
【００６５】
図７は、テストコード生成プログラムが、ハードウエア参照関数であるｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ）をｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ，ｔｅｓｔ＿ｃａｓｅ）というハードウエア非参照関数に置き換えた後の状態を説明する図である。
【００６６】
図７にはハードウエアレジスタであるＩＮＴ＿ＲＥＧがハードウエアの動作を模擬するエミュレーション関数ＲｅａｄＩＮＴ＿ＲＥＧに置き換えられ、そのＲｅａｄＩＮＴ＿ＲＥＧというエミュレーション関数がテスト対象関数に組み込まれている。
【００６７】
具体的に説明すると、テストコード生成プログラムは、まずテスト対象関数がハードウエアレジスタであるＩＮＴ＿ＲＥＧを参照する関数であると判定した場合には、そのハードウエアレジスタであるＩＮＴ＿ＲＥＧを参照せずにハードウエア参照関数と同一の処理を実行することをできるようにするために、そのＩＮＴ＿ＲＥＧをエミュレーション関数であるＲｅａｄＩＮＴ＿ＲＥＧに置き換える。
【００６８】
図７の下方のエミュレーション関数ＲｅａｄＩＮＴ＿ＲＥＧ（ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）は、テスト仕様の♯ｐｒａｇｍａ中のｔｅｓｔ＿ｃａｓｅで示されるテスト番号０ｘ０００７，０ｘ０００８，０ｘ０００９が入力値となり、それぞれのテスト番号に応じてハードレジスタの値を模擬した値を図７の上部のハードウエア非参照関数に返す役目を担う。
【００６９】
つまり、図７のハードウエア非参照関数であるｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ，ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）は、図６の♯ｐｒａｇｍａのところに記述されているｔｅｓｔ＿ｃａｓｅ  ０ｘ０００７のテストを実施するときにはＲｅａｄＩＮＴ＿ＲＥＧ（ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）というエミュレーション関数によって返されるＩＮＴ＿ＲＥＧの模擬値に応じて加算関数のテストを実行し、同様にｔｅｓｔ＿ｃａｓｅ  ０ｘ０００８のテストを実施するときにはＲｅａｄＩＮＴ＿ＲＥＧ（ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）というエミュレーション関数によって返されるＩＮＴ＿ＲＥＧの模擬値に応じて減算関数のテストを実行する。さらに、同様にｔｅｓｔ＿ｃａｓｅ  ０ｘ０００９のテストを実施するときにはＲｅａｄＩＮＴ＿ＲＥＧ（ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）というエミュレーション関数によって返されるＩＮＴ＿ＲＥＧの模擬値に応じてエラー処理のテストを実行する。
【００７０】
このようにハードウエア参照関数をハードウエア非参照関数に置き換えることにより、ハードウエアを参照せずにハードウエア参照関数と同一の処理を実行するテストコードを生成することができる。このときには、テスト番号が入力パラメータとされＥＭＵで指定されたハードウエアの内容に対応したテストコードが自動的に生成される。なお、図７には、ｔｅｓｔ＿ｃａｓｅとして０が指定されているときにはテストを実施しないという処理が追加されている。
【００７１】
図８は、テストコード生成プログラムが生成した３つのテスト関数をそれぞれ説明する図である。
【００７２】
図８には、図５に示した３つのテスト関数がそれぞれ示されている。
【００７３】
まず図８の一番上のｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０００７のテスト関数を説明する。
【００７４】
最上段のｖｏｉｄ  ｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０００７（ｖｏｉｄ）は、テスト関数名である。起動時に図８に示すテスト関数が実行されると、中括弧{}内の内容のテストが実行される。
【００７５】
中括弧内の一番上のｉｎｔ  ｒｅｔは、ｒｅｔが整数値であることを宣言している。次のｒｅｔ＝ｆｕｎｃ＿ａｄｄ＿ｓｕｂ（４，３，０ｘ０００７）は、入力パラメータである４，３，０ｘ０００７を図７のハードウエア非参照関数ｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ，ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）に渡して演算を実行させてその演算結果をｒｅｔに書き込みなさいという記述である。
【００７６】
次のｉｆ文中の！＝はノットイコールであり、ハードウエア非参照関数に演算させた結果が７以外であったときには、図１のＰＣのディスプレイ上にエラーである旨の表示をしなさいという記述である。
【００７７】
したがって、起動時にこのｆｕｎｃ＿ａｄｄ＿ｓｕｂ０００７の処理が実行されると、加算関数に関する処理のテストが実行される。この例では４と３が入力されて演算結果として関数から７以外の値が返されると図１のＰＣのディスプレイ上にエラーが表示される。
【００７８】
次に図８の中段のｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０００８のテスト関数を説明する。
【００７９】
上記と同様に、一番上のｉｎｔ  ｒｅｔは、上記と同様に、ｒｅｔが整数値であることを宣言している。次のｒｅｔ＝ｆｕｎｃ＿ａｄｄ＿ｓｕｂ（１０，１，０ｘ０００８）は、入力パラメータである１０，１，０ｘ０００８を図７のハードウエア非参照関数ｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ，ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）に渡して演算を実行させその演算結果をｒｅｔに書き込みなさいという記述である。
【００８０】
次のｉｆ文中の！＝はノットイコールであり、ハードウエア非参照関数である図７のｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ，ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）に演算させた結果が９以外のときには、ディスプレイ上にエラーを表示しなさいという記述である。
【００８１】
したがって、起動時にこのｆｕｎｃ＿ａｄｄ＿ｓｕｂ０００８の処理が実行されると、減算関数に関する処理のテストが実行される。この例では、１０、１が関数に入力され関数から９以外の値が返されたときには図１のＰＣのディスプレイ上にエラーが表示される。
【００８２】
次に図８の最後のｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０００９のテスト関数を説明する。
【００８３】
上記と同様に、一番上のｉｎｔ  ｒｅｔは、ｒｅｔが整数値であることを宣言している。次のｒｅｔ＝ｆｕｎｃ＿ａｄｄ＿ｓｕｂ（３，０，０ｘ０００９）は、入力パラメータである３，０，０ｘ０００９をハードウエア非参照関数である図７のｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ，ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）に渡して演算を実行させその演算結果をｒｅｔに書き込みなさいという記述である。
【００８４】
次のｉｆ文中の！＝はノットイコールであり、ハードウエア非参照関数に演算させた結果がＦＡＬＳＥ以外のときには、ディスプレイ上にエラーを表示しなさいという記述である。
【００８５】
したがって、起動時にこのｆｕｎｃ＿ａｄｄ＿ｓｕｂ０００９の処理が実行されると、エラー処理に関するテストが実行される。この例では、３、０が関数に入力され関数からＦＡＬＳＥ以外の値が返されたときには図１のＰＣのディスプレイ上にエラーが表示される。
【００８６】
以上説明した様に、テストコード生成にあたり、ハードウエアを参照する関数についても人手による負担を大幅に軽減させることができるテストコード自動生成装置およびコンピュータをそのテストコード生成装置として動作させるテストコード生成プログラムが実現する。
【００８７】
図９から図１２は第２実施形態を説明する図である。
【００８８】
図９は、図５と同様のＴｅｓｔＡｌｌ関数を示す図である。
【００８９】
この例では、ｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０ｘ０００ａ（）と、ｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０ｘ０００ｂ（）と、ｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０ｘ０００ｃ（）というテスト関数が自動的に生成された例が示されている。
【００９０】
この図９の例では、図５に示す各テストコードのテスト番号０００７から０００９がテスト番号０００ａから０００ｃに変更されている。
【００９１】
図１０〜図１２を参照して、図９内のｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０ｘ０００ａ（）と、ｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０ｘ０００ｂ（）と、ｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０ｘ０００ｃ（）というテスト関数がどのようなものであるかを説明する。
【００９２】
図１０は、関数が下位関数を持ちその下位関数がハードウエアレジスタの影響を受ける場合の例を示す図である。図１１はハードウエア非参照関数を説明する図であり、図１２はテスト関数を説明する図である。
【００９３】
図１０には、関数本体の前段に、図６と同様にテスト対象関数とそのテスト対象関数実行前後の状態を表わすテスト仕様が記述されている。この図１０のテスト仕様は、図６のテスト仕様と同じ記述である。
【００９４】
ただし、図１０には、異なる関数が記述されており、この関数は、図１０の中央で中括弧｛｝に括られている上位関数と図１０の下方で中括弧｛｝に括られている下位関数とで構成されている。上位関数は、Ｃｈｅｃｋ＿ＩＮＴ＿ＲＥＧ（ｖｏｉｄ）という下位関数がハードウエアを参照して処理を実行した後でその下位関数からの指示を受けて処理を実行する。
【００９５】
まず、ハードウエア参照を行う下位関数を説明する。
【００９６】
図１０中のＣｈｅｃｋ＿ＩＮＴ＿ＲＥＧ（ｖｏｉｄ）という下位関数は、ハードウエアレジスタの内容をチェックするという関数であって、ハードウエアレジスタであるＩＮＴ＿ＲＥＧが１のときにはＤＯ＿ＡＤＤという加算関数を上位関数に返し、ＩＮＴ＿ＲＥＧが０のときにはＤＯ＿ＳＵＢという減算関数を上位関数に返し、ＩＮＴ＿ＲＥＧがそれ以外の値のときにはＦＡＬＳＥという結果を上位関数に返す関数である。
【００９７】
このため、上位関数は、下位関数であるＣｈｅｃｋ＿ＩＮＴ＿ＲＥＧ（ｖｏｉｄ）という関数からの戻り値がＤＯ＿ＡＤＤであったときにはｒｅｔ＝ｐａｒａｍ＿Ａ＋ｐａｒａｍ＿Ｂという加算処理を実行して図９のＴｅｓｔＡｌｌ関数内のｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０００ａに加算結果を返し、下方のＣｈｅｃｋ＿ＩＮＴ＿ＲＥＧ（ｖｏｉｄ）という関数からの戻り値がＤＯ＿ＳＵＢであったときには減算処理を実行して減算結果を図９のＴｅｓｔＡｌｌ関数内のｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０００ｂに返し、下方のＣｈｅｃｋ＿ＩＮＴ＿ＲＥＧ（ｖｏｉｄ）という関数からの戻り値がＦＡＬＳＥであったときには図９のＴｅｓｔＡｌｌ関数内のｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０００ｃにＦＡＬＳＥという結果を返すことになる。
【００９８】
この図１０の例にように下位関数がハードウエアレジスタの影響を受けて、上位関数に加算処理や減算処理やエラー処理を指示する場合には、ハードウエア参照関数をハードウエア非参照関数に置き換える際にテストコード生成プログラムが図６の処理とは異なる作業を実施する。
【００９９】
図１１は、図１０の関数のハードウエア非参照関数を説明する図である。
【０１００】
図１０の下位関数中でＩＮＴ＿ＲＥＧの参照がエミュレーション関数ＲｅａｄＩＮＴ＿ＲＥＧ（ｔｅｓｔ＿ｃａｓｅ）に置き換えられている。
【０１０１】
この例では、下位関数であるＣｈｅｃｋ＿ＩＮＴ＿ＲＥＧ（ｖｏｉｄ）の中にハードウエア参照関数が存在するので、その中のＩＮＴ＿ＲＥＧへの参照をエミュレーション関数ＲｅａｄＩＮＴ＿ＲＥＧ（ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）に置き換えて、そのエミューレーション関数の入力パラメータを図１０に示すテスト仕様内のテスト番号（０ｘ０００ａ、０ｘ０００ｂ、０ｘ０００ｃ）に対応させて適切な模擬値を返すことにより、実際にハードウエアレジスタを参照させずに済むようにしている。
【０１０２】
図１１の例のエミュレーション関数ＲｅａｄＩＮＴ＿ＲＥＧ（ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）は、テスト仕様中のテスト番号が入力パラメータになっていて、テスト番号０ｘ０００ａが指定されると‘１’を上位関数であるＣｈｅｃｋ＿ＩＮＴ＿ＲＥＧ（ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）に返し、テスト番号０ｘ０００ｂが指定されると、‘０’を上位関数であるＣｈｅｃｋ＿ＩＮＴ＿ＲＥＧ（ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）に返し、テスト番号として上記の０ｘ０００ａ、０ｘ０００ｂ以外のテスト番号例えば０ｘ０００ｃが指定されると、‘２’を上位関数であるＣｈｅｃｋ＿ＩＮＴ＿ＲＥＧ（ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）に返す。
【０１０３】
そしてエミュレーション関数の上位関数であるＣｈｅｃｋ＿ＩＮＴ＿ＲＥＧ（ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）は、エミュレーション関数から戻り値１を受け取った場合には、さらにその上位の関数（図１１の一番上に記述されている部分）にＤＯ＿ＡＤＤを返して加算を指示する。
【０１０４】
またＣｈｅｃｋ＿ＩＮＴ＿ＲＥＧ（ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）は、エミュレーション関数から戻り値０を受け取った場合には、さらにその上位の関数（図１１の一番上に記述されている部分）にＤＯ＿ＳＵＢを返して減算を指示する。
【０１０５】
さらに、Ｃｈｅｃｋ＿ＩＮＴ＿ＲＥＧ（ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）は、エミュレーション関数から戻り値２を受け取った場合には、さらにその上位の関数にＦＡＬＳＥを返して処理に失敗したことを指示する。
【０１０６】
図１２は、図９で示した３つのテスト関数である。
【０１０７】
この図１２は、図８と同様の図であり、図９のＴｅｓｔ  Ａｌｌ（ｖｏｉｄ）によって呼び出されるテスト関数の内容を示す図である。
【０１０８】
まず図１２の一番上のｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０００ａのテスト関数を説明する。
【０１０９】
最上段のｖｏｉｄ  ｆｕｎｃ＿ａｄｄ＿０００ａ（ｖｏｉｄ）は、テスト関数名である。起動時に図９に示すＴｅｓｔ  Ａｌｌ（ｖｏｉｄ）が実行されると、中括弧｛｝内の内容のテストが実行される。
【０１１０】
中括弧内の一番上のｉｎｔ  ｒｅｔは、ｒｅｔが整数値であることを宣言している。次のｒｅｔ＝ｆｕｎｃ＿ａｄｄ＿ｓｕｂ（４，３，０ｘ０００ａ）は、入力パラメータである４，３，０ｘ０００ａを図１１のハードウエア非参照関数ｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ，ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）に渡して演算を実行させてその演算結果をｒｅｔに書き込みなさいという記述である。
【０１１１】
次のｉｆ文中の！＝はノットイコールであり、ハードウエア非参照関数に演算させた結果が７以外であったときには、図１のＰＣのディスプレイ上にエラーである旨の表示をしなさいという記述である。
【０１１２】
したがって、起動時にこのｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０００ａの処理が実行されると、加算関数に関する処理のテストがハードウエアを参照することなく実行される。この例では４と３が入力されて演算結果として関数から７以外の値が返されると図１のＰＣのディスプレイ上にエラーが表示される。
【０１１３】
次に図１２の中段のｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０００ｂのテストコードを説明する。
【０１１４】
上記と同様に、一番上のｉｎｔ  ｒｅｔは、上記と同様に、ｒｅｔが整数値であることを宣言している。次のｒｅｔ＝ｆｕｎｃ＿ａｄｄ＿ｓｕｂ（１０，１，０ｘ０００ｂ）は、入力パラメータである１０，１，０ｘ０００ｂを図１１のハードウエア非参照関数ｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ，ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）に渡して演算を実行させその演算結果をｒｅｔに書き込みなさいという記述である。
【０１１５】
次のｉｆ文中の！＝はノットイコールであり、ハードウエア非参照関数である図１１のｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ，ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）に演算させた結果が９以外のときには、ディスプレイ上にエラーを表示しなさいという記述である。
【０１１６】
したがって、起動時にこのｆｕｎｃ＿ａｄｄ＿ｓｕｂ０００ｂの処理が実行されると、減算関数に関する処理のテストがハードウエアを参照することなく実行される。この例では、１０、１が関数に入力され関数から９以外の値が返されたときには図１のＰＣのディスプレイ上にエラーが表示される。
【０１１７】
次に図１２の最後のｆｕｎｃ＿ａｄｄ＿ｓｕｂ＿０００ｃのテストコードを説明する。
【０１１８】
上記と同様に、一番上のｉｎｔ  ｒｅｔは、ｒｅｔが整数値であることを宣言している。次のｒｅｔ＝ｆｕｎｃ＿ａｄｄ＿ｓｕｂ（３，０，０ｘ０００ｃ）は、入力パラメータである３，０，０ｘ０００ｃをハードウエア非参照関数である図１１のｆｕｎｃ＿ａｄｄ＿ｓｕｂ（ｉｎｔ  ｐａｒａｍ＿Ａ，ｉｎｔ  ｐａｒａｍ＿Ｂ，ｉｎｔ  ｔｅｓｔ＿ｃａｓｅ）に渡して演算を実行させその演算結果をｒｅｔに書き込みなさいという記述である。
【０１１９】
次のｉｆ文中の！＝はノットイコールであり、ハードウエア非参照関数に演算させた結果がＦＡＬＳＥ以外のときには、ディスプレイ上にエラーを表示しなさいという記述である。
【０１２０】
したがって、起動時にこのｆｕｎｃ＿ａｄｄ＿ｓｕｂ０００ｃの処理が実行されると、エラー処理に関するテストがハードウエアを参照することなく実行される。この例では、３、０が関数に入力され関数からＦＡＬＳＥ以外の値が返されたときには図１のＰＣのディスプレイ上にエラーが表示される。
【０１２１】
このようにすると、関数の中の下位関数がハードウエアレジスタを参照することがあっても、ハードウエアレジスタを参照せずに関数のテストを実施することができる。
【０１２２】
以上説明した様に、テストコード生成にあたり、ハードウエアを参照する関数についても人手による負担を大幅に軽減させることができるテストコード自動生成装置およびコンピュータをそのテストコード生成装置として動作させるテストコード生成プログラムが実現する。
【符号の説明】
【０１２３】
１    パーソナルコンピュータ
１１    キーボード
１２    ディスプレイ
２    機器
【図１】
2011008534.tif 000003
【図２】
2011008534.tif 000004
【図３】
2011008534.tif 000005
【図４】
2011008534.tif 000006
【図５】
2011008534.tif 000007
【図６】
2011008534.tif 000008
【図７】
2011008534.tif 000009
【図８】
2011008534.tif 000010
【図９】
2011008534.tif 000011
【図１０】
2011008534.tif 000012
【図１１】
2011008534.tif 000013
【図１２】
2011008534.tif 000014