(57)【要約】【課題】テスト対象プログラム内のモジュールテストを行うために、テスト専用のスタブプログラムを組込むのだが、複数のモジュールテストを実行するために、テストするモジュール毎にコンパイルしデバッガにロードを繰返すためテスト工数がかかる。【解決手段】テスト対象プログラムをデバッガにロードした状態で、モジュールテストに合わせてスタブプログラムをダイナミックにパッチ設定することで、デバッガにロードした状態で複数のモジュールテストが可能となるため、テスト工数が削減できる。また、テスト対象プログラムにスタブプログラムの記述が不要になり、プログラムが見易くなる。更に、自動化することで、プログラム品質が均一化し、テスト工数の削減も図れる。【選択図】図１
2008135008.tif 000002
【特許請求の範囲】
【請求項１】
機器組込みマイコンシステム（以下マイコンシステムと称する）において、デバッガでインサーキットエミュレータ（以下ＩＣＥを称する）またはマイコン命令シミュレータを制御して、テスト対象プログラムをテストする方法であって、
テスト対象プログラムをテストするためプログラムにパッチをあてるプログラム命令を定義するパッチコード定義工程と、
前記パッチコード定義工程にて定義したプログラム命令からパッチを当てるプログラムコードを生成し、テスト対象プログラムの指定したアドレスにパッチを当てる指示を行うパッチ設定工程と、
前記パッチ設定工程で生成したパッチ命令コードと前記パッチ設定工程により指定されたパッチを当てるプログラムアドレスとにより、テスト対象プログラムにパッチを当てるプログラムコードを生成するコード読書き工程と、
テスト対象プログラムをテストするテストケースの作成や設定を行うために、前記パッチコード定義工程と前記パッチ設定工程を操作するテスト操作工程と、
を含む前記パッチを当てたテスト対象プログラムを実行してテストを行うプログラムモジュール検証方式。
【請求項２】
前記パッチ設定工程によりテスト対象プログラムにパッチを当てる前に、パッチを当てる領域のコードを退避するパッチ退避工程をさらに含み、
前記テスト操作工程により前記パッチ退避工程の操作を行うことを特徴とする請求項１に記載のプログラムモジュール検証方式。
【請求項３】
前記パッチ退避工程にてテスト対象プログラムにパッチを当てる前に、退避したプログラムコードを前記パッチ設定工程でパッチを当てる前のプログラムコードに戻すパッチ解除工程をさらに含み、
前記テスト操作工程により前記パッチ解除工程の操作を行うことを特徴とする請求項２に記載のプログラムモジュール検証方式。
【請求項４】
テスト対象プログラムに予めパッチを入れるための領域に無効コードなどのプログラムコードを実装し、前記無効コードをテスト対象プログラムから検索し、無効コードのアドレスを検出するパッチ検出工程をさらに含み、
前記テスト操作工程により前記パッチ検出工程の操作を行うことを特徴とする請求項１に記載のプログラムモジュール検証方式。
【請求項５】
先にロードしたテスト対象プログラムに加えて、テスト対象プログラムをデバッガにロードした後にモジュールテストに必要なドライバプログラムコードやスタブプログラムコードを登録したデータベースであるドライバテーブルやスタブテーブルをロードするスタブロード工程をさらに含み、
前記テスト操作工程により前記スタブロード工程の操作を行うことを特徴とする請求項１に記載のプログラムモジュール検証方式。
【請求項６】
前記スタブテーブルに、複数のモジュールテストに対応した複数のドライバプログラムコードやスタブプログラムを登録することを特徴とする請求項５に記載のプログラムモジュール検証方式。
【請求項７】
テストを自動で連続実行するためにテストシナリオを登録したテストケースの作成や設定を自動で行う自動テスト工程をさらに含み、
前記自動テスト工程により前記テスト操作工程の操作を行うことを特徴とする請求項１に記載のプログラムモジュール検証方式。
【請求項８】
前記テストケースには、テスト対象プログラム内の複数のモジュールテストを自動で連
続実行するために複数のテストデータを登録し、
前記自動テスト工程により複数のモジュールテストを自動で連続実行することを特徴とする請求項７に記載のプログラムモジュール検証方式。
【請求項９】
前記自動テスト工程によりテストケースを連続実行した実行結果をデバッガから読込むリモートデバッガ工程と、
前記リモートデバッガ工程で読込んだデータを集計し、集計したデータを実行ログに記録する結果集計工程と、
をさらに含むことを特徴とする請求項７に記載のプログラムモジュール検証方式。
【請求項１０】
前記結果集計工程により集計した実行結果データと、比較基準となる期待値とを比較して判定し、判定結果を判定ログに記録する結果判定工程をさらに含むことを特徴とする請求項９に記載のプログラムモジュール検証方式。
【請求項１１】
前記結果判定工程は、前記結果集計工程の実行結果データと対比する前記期待値が無ければ、当該実行結果データを期待値に記録することを特徴とする請求項１０に記載のプログラムモジュール検証方式。
【請求項１２】
前記テスト操作工程により指定したデバッガに前記コード読書き工程により作成したプログラムコードの書込みなどのデバッガを制御するコマンドを転送するマイコンを選択するマイコン選択工程をさらに含むことを特徴とする請求項１に記載のプログラムモジュール検証方式。
【請求項１３】
マイコンシステムと通信するためのセット制御工程をさらに含み、
前記テスト操作工程により前記セット制御工程の操作を行うことを特徴とする請求項１に記載のプログラムモジュール検証方式。
【請求項１４】
複数のマイコンシステムに対して、選択して通信するためのセット選択工程をさらに含み、
前記テスト操作工程により前記セット選択工程の操作を行うことを特徴とする請求項１３に記載のプログラムモジュール検証方式。
【請求項１５】
前記テストケースによりテストを実行する手順を記述したテストシナリオにファイル名
を記述することで、テストシナリオにてテストケースファイルを階層化することを特徴と
する請求項７に記載のプログラムモジュール検証方式。
【請求項１６】
前記テスト操作工程からマイコンシステムに接続したデバッガを制御するリモートデバッガ工程と、
前記リモートデバッガ工程からマイコンシステムを制御するコマンドを発行した後の応答を受信するコールバック工程をさらに含み、
前記テスト操作工程にて前記コールバック工程でマイコンシステムから受理するデータを表示することを特徴とする請求項１に記載のプログラムモジュール検証方式。
【請求項１７】
前記リモートデバッガ工程にて、前記マイコンシステムにコマンド発行し、マイコンシステムからコマンド実行完了と同じ期待値の設定を行う完了判定設定工程と、
前記マイコンシステムにコマンド発行した後にコマンド実行完了時の応答を受ける前記コールバック工程で受理したデータと、前記完了判定設定工程で設定したデータを比較判定する完了判定工程をさらに含み、
前記マイコンシステムに連続でコマンドを発行するときに、前記完了判定工程から前記リモートデバッガ工程にコマンド実行完了を通知し、待機中の前記マイコンシステムにコマンド発行を許可することで、連続コマンド発行時の間隔を最短時間で行うことを特徴とする請求項１６に記載のプログラムモジュール検証方式。
【請求項１８】
前記完了判定工程で複数の前記マイコンシステムから複数のコマンド完了条件を組みわせて検知するときに、複数の期待値をＡＮＤやＯＲを使った判定条件に一致したときに、前記マイコンシステムを制御する次のコマンド発行許可ができる前記完了判定工程であることを特徴とする請求項１７に記載のプログラムモジュール検証方式。
【請求項１９】
前記完了判定工程で判定する期待値を前記テスト操作工程から前記完了判定設定工程に設定できることで、
前記リモートデバッガ工程でコマンドを発行する毎の前記完了判定設定工程を不要としたことを特徴とする請求項１７に記載のプログラムモジュール検証方式。
【請求項２０】
前記自動テスト工程から前記テスト操作工程を操作してテストケースを連続実行するときに、複数の前記テストケースを一度に呼出して、前記リモートデバッガ工程でスクリプトを連続実行するエージェント工程をさらに含むことで、
前記自動テスト工程や前記テスト操作工程からテストケースの都度読み出しを不要としたことを特徴とする請求項９に記載のプログラムモジュール検証方式。
【請求項２１】
前記パッチ検出工程で検索する無効コードがテスト対象プログラムに含むかを検出するパッチ検索変更工程をさらに含むことを特徴とする請求項４に記載のプログラムモジュール検証方式。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイコンシステムにおいてデバッガにＩＣＥまたは、マイコン命令シミュレータを接続した構成で、テスト対象プログラムを結合した状態でモジュールテストを行うときに、テスト対象プログラムをデバッガにロードした状態で、テストするモジュールに合わせてダイナミックにドライバプログラムやスタブプログラムのパッチを当ててテストする方式に関する。
【背景技術】
【０００２】
テスト対象プログラムを結合した状態でのモジュールテストは、プログラム品質を保証するために、モジュールを実行する直前で、入力パラメータを設定してモジュールを実行したポイントで、出力結果を確認する操作を入力パラメータに様々なデータを設定して繰返しテストすることで、モジュールテストの網羅率を向上させる必要がある。さらに、モジュールは１つではなく、多数存在するため、モジュールの数だけテストを行うため、テスト項目数が膨大になる。
【０００３】
従来のモジュールテストは、図５に示すテスト対象プログラムを例にとると、テスト対象プログラムＳ１０内のモジュールＡをテストするには、モジュールＡの直前にテストするためのドライバプログラムおよびモジュールＡが呼出すスタブプログラムを実装してコンパイルし、デバッガにロードしてテストができる環境を作る。
【０００４】
モジュールＡのテストは、モジュールＡを実行する直前でドライバプログラムの実行や、ブレーク設定にてＲＡＭ変更するなど、様々な入力パラメータを設定してモジュールＡおよびモジュールＡが呼出すスタブプログラムを実行し、モジュールＡの実行が完了するポイントで、出力データを確認する作業を繰返して実施する。更に、複数のモジュールテストを行う場合は、先にテストしたモジュールＡのドライバプログラムおよびスタブプログラムを外し、次にテストするモジュールのドライバプログラムおよびスタブプログラムを実装し、コンパイルしてデバッガにロードしてテストすることになる。
【０００５】
すなわち、モジュールのテスト網羅率を向上するために様々なパラメータを設定してテストを繰返し行う必要がある。また、複数のモジュールがあれば、モジュールの数だけテストする必要があるため、手作業で実施するには、膨大なテスト工数が必要になる。また、テスト対象プログラムにモジュールテストするためのドライバプログラムおよびスタブプログラムを記述するためのプログラムソースが見づらくなる。
【０００６】
また、モジュールテストには、数行の簡単な関数モジュールテストから複数のオペレーティングシステム（以下ＯＳと称する）を組込んだシステム結合した状態で、入力パラメータを設定するＯＳと出力結果を確認する出力ポイントのＯＳが違うような規模の大きなモジュールテストまである。簡単な関数モジュールのテストでれば、手作業でも比較的容易に時間をかければモジュールテストが可能だが、例えばマルチＯＳを搭載したシステムで、ＯＳ１の入力データをＯＳ２で受けた出力を確認するような大規模なモジュールテストとなると、２つのデバッガを使って連携したテストを行う可能性もあり、マルチＯＳでの手作業テストは困難となる。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
従来のテスト対象プログラムを結合した状態のモジュールテスト方法では、テスト対象プログラム内に多くのテストが必要なモジュールがある場合に、テストするモジュールの
数だけモジュールテストを行うためのドライバプログラムやおよびスタブプログラムおよびモジュールテスト毎にドライバプログラムおよびスタブプログラムをコンパイルするためのコンパイルオブジェクトの記述が必要になる。テスト対象プログラム内のモジュールテストの数が増えると、それにともなってドライバプログラムやスタブプログラムやコンパイルオプションが増えることになり、テスト対象プログラムのプログラムコーディングやデバッグのときに、テスト対象プログラムが見づらくなり、プログラム生産性が低下する。
【０００８】
また、テスト対象プログラム以内に複数のテストを行うモジュールがある場合は、モジュール毎にテストに合わせたコンパイルオプションを設定してコンパイルし、デバッガにロードしてテスト行う必要があり、テストを行うモジュールが多ければ、「コンパイルオプション設定」→「コンパイル」→「デバッガにロード」→「デバッグ」の繰返し作業が必要となり作業効率が悪くなる。
【課題を解決するための手段】
【０００９】
第１の発明のプログラムモジュール検証方式は、機器組込みマイコンシステム（以下マイコンシステムと称する）において、デバッガでインサーキットエミュレータ（以下ＩＣＥを称する）またはマイコン命令シミュレータを制御して、テスト対象プログラムをテストする方法であって、
テスト対象プログラムをテストするためプログラムにパッチをあてるプログラム命令を定義するパッチコード定義工程と、
前記パッチコード定義工程にて定義したプログラム命令からパッチを当てるプログラムコードを生成し、テスト対象プログラムの指定したアドレスにパッチを当てる指示を行うパッチ設定工程と、
前記パッチ設定工程で生成したパッチ命令コードと前記パッチ設定工程により指定されたパッチを当てるプログラムアドレスとにより、テスト対象プログラムにパッチを当てるプログラムコードを生成するコード読書き工程と、
テスト対象プログラムをテストするテストケースの作成や設定を行うために、前記パッチコード定義工程と前記パッチ設定工程を操作するテスト操作工程と、
を含む前記パッチを当てたテスト対象プログラムを実行してテストを行うものである。
【００１０】
第１の発明のプログラムモジュール検証方式によると、ダイナミックパッチをテスト対象プログラムに上書き設定することで、パッチを当てるコードやパッチアドレスをツールが処理するため作業効率が向上する。
【００１１】
第２の発明のプログラムモジュール検証方式は、前記パッチ設定工程によりテスト対象プログラムにパッチを当てる前に、パッチを当てる領域のコードを退避するパッチ退避工程をさらに含み、
前記テスト操作工程により前記パッチ退避工程の操作を行うことを特徴とする。
【００１２】
第２の発明のプログラムモジュール検証方式によると、テスト対象プログラムのロジックを壊さないように、プログラムを退避してパッチを当てることで、パッチを当てる領域のコードを退避したテスト対象プログラムを実行できるため、テスト対象以外のプログラムの実行ができ、システム結合した状態でモジュールテストが可能となる。
【００１３】
第３の発明のプログラムモジュール検証方式は、前記パッチ退避工程にてテスト対象プログラムにパッチを当てる前に、退避したプログラムコードを前記パッチ設定工程でパッチを当てる前のプログラムコードに戻すパッチ解除工程をさらに含み、
前記テスト操作工程により前記パッチ解除工程の操作を行うことを特徴とする。
【００１４】
第３の発明のプログラムモジュール検証方式によると、退避したパッチプログラムを元
に戻すことが可能となり、同じシステム状態で引き続き別のモジュールテストができる。
【００１５】
第４の発明のプログラムモジュール検証方式は、テスト対象プログラムに予めパッチを入れるための領域に無効コードなどのプログラムコードを実装し、前記無効コードをテスト対象プログラムから検索し、無効コードのアドレスを検出するパッチ検出工程をさらに含み、
前記テスト操作工程により前記パッチ検出工程の操作を行うことを特徴とする。
【００１６】
第４の発明のプログラムモジュール検証方式によると、テスト対象プログラムに予めパッチを入れる場所にＮＯＰコードを入れて、パッチ命令を上書きしてもテスト対象プログラムが壊されず退避が簡単になり、簡単にツールを作成でき、さらにＮＯＰ場所を検索することで飛び先のアドレス検出ができる。
【００１７】
第５の発明のプログラムモジュール検証方式は、先にロードしたテスト対象プログラムに加えて、テスト対象プログラムをデバッガにロードした後にモジュールテストに必要なドライバプログラムコードおよびスタブプログラムコードを登録したデータベースであるドライバテーブルおよびスタブテーブルをロードするスタブロード工程をさらに含み、
前記テスト操作工程により前記スタブロード工程の操作を行うことを特徴とする。
【００１８】
第５の発明のプログラムモジュール検証方式によると、テスト対象プログラムに予めドライバプログラムやスタブプログラムを実装しなくても、デバッグ時にドライバプログラムやスタブプログラムをロードした後、前記第１の発明から第４の発明によるパッチ処理にて、テスト対象プログラムとドライバプログラムおよびスタブプログラムを関数呼び出し命令やジャンプ命令などで接続してテストすることで、テスト対象プログラムの改造が少なくなり、さらにデバッグ用プログラム領域を必要最小限に抑えることができる。
【００１９】
第６の発明のプログラムモジュール検証方式は、前記スタブテーブルに、複数のモジュールテストに対応した複数のドライバプログラムやスタブプログラムを登録することを特徴とする。
【００２０】
第６の発明のプログラムモジュール検証方式によると、複数のモジュールテストに対応して複数のドライバプログラムやスタブプログラムを設定できる。
【００２１】
第７の発明のプログラムモジュール検証方式は、テストを自動で連続実行するためにテストシナリオを登録したテストケースの作成や設定を自動で行う自動テスト工程をさらに含み、
前記自動テスト工程により前記テスト操作工程の操作を行うことを特徴とする。
【００２２】
第７の発明のプログラムモジュール検証方式によると、テストの自動実行によりテストを連続実行することができ、自動実行することでテスト工数の削減およびテスト品質が均一化する。
【００２３】
第８の発明のプログラムモジュール検証方式は、前記テストケースには、テスト対象プログラム内の複数のモジュールテストを自動で連続実行するために複数のテストデータを登録し、
前記自動テスト工程により複数のモジュールテストを自動で連続実行することを特徴とする。
【００２４】
第８の発明のプログラムモジュール検証方式によると、複数のモジュールテストを連続実行することができる。
【００２５】
第９の発明のプログラムモジュール検証方式は、前記自動テスト工程によりテストケースを連続実行した実行結果をデバッガから読込むリモートデバッガ工程と、
前記リモートデバッガ工程で読込んだデータを集計し、集計したデータを実行ログに記録する結果集計工程とをさらに含むことを特徴とする。
【００２６】
第９の発明のプログラムモジュール検証方式によると、テストを実行した結果を読込み、実行結果を効率よく集計することができる。
【００２７】
第１０の発明のプログラムモジュール検証方式は、前記結果集計工程により集計した実行結果データと、比較基準となる期待値とを比較して判定し、判定結果を判定ログに記録する結果判定工程をさらに含むことを特徴とする。
【００２８】
第１０の発明のプログラムモジュール検証方式によると、テストを実行した結果と期待値を比較し判定することができ、テスト工数を削減できる。
【００２９】
第１１の発明のプログラムモジュール検証方式は、前記結果判定工程は、前記結果集計工程の実行結果データと対比する前記期待値が無ければ、当該実行結果データを期待値に記録することを特徴とする。
【００３０】
第１１の発明のプログラムモジュール検証方式によると、テストを実行した結果と比較する期待値が無ければ、期待値を生成することができ、テスト工数を削減できる。
【００３１】
第１２の発明のプログラムモジュール検証方式は、前記テスト操作工程により指定したデバッガに前記コード読書き工程により作成したプログラムコードの書込みなどのデバッガを制御するコマンドを転送するマイコンを選択するマイコン選択工程をさらに含むことを特徴とする。
【００３２】
第１２の発明のプログラムモジュール検証方式によると、複数マイコンシステムを接続し連携してテストを行うことができる。
【００３３】
第１３の発明のプログラムモジュール検証方式は、マイコンシステムと通信するためのセット制御工程をさらに含み、
前記テスト操作工程により前記セット制御工程の操作を行うことを特徴とする。
【００３４】
第１３の発明のプログラムモジュール検証方式によると、マイコンシステムをＵＡＲＴ通信で制御できる。
【００３５】
第１４の発明のプログラムモジュール検証方式は、複数のマイコンシステムに対して、選択して通信するためのセット選択工程をさらに含み、
前記テスト操作工程により前記セット選択工程の操作を行うことを特徴とする。
【００３６】
第１４の発明のプログラムモジュール検証方式によると、複数のマイコンシステムをＵＡＲＴ通信で制御できる。
【００３７】
第１５の発明のプログラムモジュール検証方式は、前記テストケースによりテストを実
行する手順を記述したテストシナリオにファイル名を記述することで、テストシナリオに
てテストケースファイルを階層化することを特徴とする。
【００３８】
第１５の発明のプログラムモジュール検証方式によると、テストシナリオを階層化でき
る。
【００３９】
第１６の発明のプログラムモジュール検証方式は、２つまたは複数のマイコンシステム間や、２つまたは複数のタスク間や、２つまたは複数のモジュール間のデータ転送を行う通信モジュールテストを効率よく行うために、通信データを受信する側からコールバック通知を行い、テスト操作にてコールバック通知を表示できることを特徴とする。
【００４０】
第１６発明のプログラムモジュール検証方式によると、通信データを受信するテスト対象プログラムを制御するために各デバッガに発行したコマンドの完了を確認するために、ポーリングで各デバッガに確認していたが、コールバック通知ができることで、ポーリング処理が不要で、コマンド完了の確認を行う応答速度が向上する。
【００４１】
第１７の発明のプログラムモジュール検証方式は、２つまたは複数のマイコンシステム間や、２つまたは複数のタスク間や、２つまたは複数のモジュール間の通信テストを連続で複数のコマンドを実行する時に、データを受信するモジュール側から各種イベント発生時にコールバッグする通知から受信処理完了した通知から完了判定を行う条件設定をコマンド発行する毎に行い、処理完了判定した場合は、待機している次のコマンドを発行することを特徴とする。
【００４２】
第１７発明のプログラムモジュール検証方式によると、複数のテストを連続して行うときに、コマンドの連続発行を効率よく行うことができる。
【００４３】
第１８の発明のプログラムモジュール検証方式は、通信テストを連続で複数実行する時に、データを受信する側から各種イベント発生時にコールバッグする通知をＡＮＤやＯＲを使って複数組み合わせた条件で完了判定を行い、処理完了の条件と一致した場合は、待機している次のコマンドを発行することを特徴とする。
【００４４】
第１８発明のプログラムモジュール検証方式によると、２つまたは複数のマイコンシステム間や、２つまたは複数のタスク間や、２つまたは複数のモジュール間の複数の通信が組み合わさったテストを連続して行う複雑なテストの場合でも、コマンドの連続発行を効率よく行うことができる。
【００４５】
第１９の発明のプログラムモジュール検証方式は、モジュール間の通信テストを行うときに、データを受信するモジュール側から各種イベント発生時にコールバッグする通知から受信処理完了した通知から完了判定するための条件設定を通信テストコマンド発行する前に、テスト操作部から予め行うことで、コマンド発行時に都度行う完了判定の条件設定を不要にすることを特徴とする。
【００４６】
第１９発明のプログラムモジュール検証方式によると、完了判定するための条件を予め設定することで、実行するコマンドを簡単化や、リモートデバッガでのコマンド実効処理の高速化ができる。
【００４７】
第２０の発明のプログラムモジュール検証方式は、２つまたは複数のマイコンシステム間や、２つまたは複数のタスク間や、２つまたは複数のモジュール間の通信モジュールテストを高速に行う場合に、Excelに記述し複数のテストケースを一気に読込み、エージェントに渡して連続実行することを特徴とする。
【００４８】
第２０発明のプログラムモジュール検証方式によると、テストケースを複数行まとめて、エージェントに渡して、連続実行することで、テストケースを都度読込むことが不要となり高速動作を行うことができる。
【００４９】
第２１の発明のプログラムモジュール検証方式は、テスト対象プログラムに予めパッチを入れる場所にＮＯＰコードを入れて、パッチ命令を上書きしてもテスト対象プログラムが壊されず退避が簡単になり、簡単にツールを作成できるが、テスト対象プログラム自体に検索する無効コードと同じパターンがある可能性がある。そこで、テスト対象プログラムにパッチを入れるための無効コードを入れないテスト対象プログラムをデバッガにロードして、全テスト対象プログラムコードに無効コードと同じコードがあるか確認し、無効コードと同じコードがあれば、警告表示を行うことを特徴とする。
【００５０】
第２１発明のプログラムモジュール検証方式によると、テスト対象プログラムを壊すことが無くなり、意図した無効コード領域にパッチを当てることが可能となり、正確なテストが可能になる。
【００５１】
具体的には図５に示す通り、テスト対象プログラムＳ１０のモジュールＡＳ４０をテストするためのドライバプログラムおよびスタブプログラムを、モジュールＡＳ４０を実行する直前に組込み、モジュールＡＳ４０を繰返し実行するために、モジュールＡＳ４０の出口で繰返し実行するジャンプ命令を組込む。この場合に、テスト対象プログラムのオブジェクトをデバッガにロードした後、自動でＣＡＬＬｐａｔｃｈＡＳ３０のアドレスにドライバＡＳ９１の関数を呼び出すコール命令や、ＪＭＰｐａｔｃｈＢＳ５０のアドレスにモジュールＡＳ４０を繰返し実行するジャンプ命令のパッチプログラムコードを上書きすることで、モジュールＣＳ８０のテストができるため、ドライバプログラムおよびスタブプログラムの記述がなくなりテスト対象プログラムが見やすくなる（第１の発明）。
【００５２】
しかし、ドライバプログラムおよびスタブプログラムをテスト対象プログラムに上書きすると、連続して次のモジュールテストを行う場合は、オブジェクトの再ロードが必要となり時間がかかるため、テスト対象プログラムにパッチを当てる領域を退避させて、パッチプログラムコードをテスト対象プログラムに上書きし、テスト完了後にパッチを元に戻すことで、モジュールの再ロードが不要となりテスト効率が向上する(第２の発明)。さらに、テスト対象プログラムが上書きにより壊されず退避しているため、テスト対象プログラムを結合して実行できる状態でモジュールテストができるため、マイコンシステム動作の各状態におけるモジュールテストが可能となる。例えばＤＶＤプレーヤシステムのモジュールＡのテストを、システム状態がＰＬＡＹ状態に限定したテストが可能となる。また、退避したパッチを元に戻した後、モジュールＢをモジュールＡと同じＰＬＡＹ状態で連続してテストできるため、ドライバプログラムおよびスタブプログラムでＰＬＡＹ状態を作成するより、テスト対象プログラムを実行してＰＬＡＹ状態を作成するため、テスト精度を向上できる(第２，３の発明)。
【００５３】
しかし、テスト対象プログラムを退避させて、パッチを当てる方法は、退避するプログラム内に条件分岐やスタックを操作する命令があると、退避する処理が難しくなるため、図１に示す通り、テスト対象プログラムに予め分岐命令や関数呼び出し命令コードのパッチを当てるために必要な領域にＮＯＰ命令などの無効コードを記述する。モジュールテストに必要なスタブプログラムはテスト対象プログラムを一緒にコンパイルしデバッガにロードした後、モジュールテストするときに、テスト対象プログラムからドライバプログラムおよびスタブプログラムを実行する分岐命令や関数呼び出し命令コードを無効コードの領域にパッチを当てることで、パッチ処理が簡単になる(第４の発明)。
【００５４】
しかし、パッチを当てる無効コードと同じコードがテスト対象プログラム内にあると、テスト対象プログラムからドライバプログラムおよびスタブプログラムを実行する分岐命令や関数呼び出し命令コードを間違ってテスト対象プログラムにパッチを当てる可能性がある。そこで、パッチを当てる無効コードを入れないテスト対象プログラムをデバッガにロードして、パッチを当てる無効コードと同じコードがあるか全テスト対象プログラムコードを確認する。パッチを当てる無効コードと同じコードがテスト対象プログラムにある場合は、警告表示を行うことで、テスト対象プログラム自体にパッチを当てて、意図しないテストを行うことが回避できる（第２１の発明）。
【００５５】
しかし、モジュールテストの数だけ、ドライバプログラムおよびスタブプログラムをテスト対象プログラムに加えるとプログラムサイズが大きくなり、デバッガにロードできずテストできなくなるため、テスト対象プログラムだけデバッガにロードした後、ドライバプログラムおよびスタブプログラムは、テストするモジュールに合わせて、必要なドライバプログラムおよびスタブプログラムコードをデバッガにロードすることで、少ないプログラムコードサイズでモジュールテストができる(第５，６の発明)。
【００５６】
テスト対象プログラムからドライバプログラムおよびスタブプログラムを切り離すことで、テスト対象プログラムは見易くなるとともに、モジュールテストを効率よくできることで、プログラムテスト効率が向上する。
【００５７】
さらに、手動操作で行っていたパッチプログラムの書換えなどの操作のテストケースを作成し、自動実行することで誰が実行しても操作が統一されるため、ソフト品質が均一化される(第７，８の発明)。また、自動実行した結果と期待値との比較を行い、判定結果をＥｘｃｅｌファイルなどに保存することで、テスト成績書を自動生成できるため作業効率が向上する(第９，１０，１１の発明)。
【００５８】
さらに、図１に示す通り、複数のデバッガ経由でマイコンシステムを接続し、必要に応
じて、マイコンシステムと直接ＵＡＲＴやＥｔｈｅｒ、ＵＳＢなどで通信制御することで、例えばＤＶＤプレーヤでシステム状態をＰＬＡＹなどの特定に状態に移行して、モジュールテストが可能になることで、マイコンシステム間の差異やバラツキなど、手動では困難なテストができる(第１２，１３，１４の発明)。
【００５９】
さらに、図８に示す通り、マイコンシステム２とマイコンシステム３間で通信において、マイコンシステム２側のモジュールテストを行うときに、テストコマンドをテスト操作からリモートデバッガ経由でデバッガにマイコンシステム３に送信するテストデータを書き込み後に実行することで、マイコンシステム２からマイコンシステム３にデータが転送されるが、マイコンシステム３が受信処理を完了した時点で、デバッガＢから受信処理完了のコールバックを受理することで、マイコンシステム３の受理状況をテスト操作にて表示できる(第１６の発明)。
【００６０】
さらに、図８に示す通り、マイコンシステム２やマイコンシステム３からリセット時やマイコン実行時、ブレーク停止時などのイベントが発生したときにコールバックに受理するが、マイコンシステム３が受信処理を完了しことを判断するために、コールバックで受理したデータを完了判定に渡し完了有無の判定を行い、完了を判定した時は、リモートデバッガに通知することで、リモートデバッガから連続でテストコマンドを発行するときに、最初のテストコマンドを発行後、次の待機中のテストコマンドの発行タイミングを最小限の時間で発行できる。なお、完了有無の判定を行うための期待値は、テストコマンド発行する毎に、完了判定設定に設定する(第１７の発明)。
【００６１】
さらに、通信テストを行うときに、マイコンシステム２からマイコンシステム３にデータ転送後、マイコンシステム３が受信処理を完了したことをコールバック通知する。さらに、マイコンシステム３は、処理した結果のデータをマイコンシステム２に返信し、マイコンシステム２が受理したとことをコールバック通知する。この複数のコールバックが期待通りの順序で発行されている確認するための複数の判定条件の設定ができる(第１８の発明)。
【００６２】
さらに、図８に示す通り、リモートデバッガから連続でテストコマンドを発行するときに、テストコマンドの完了を判定するための期待値を同じにすることで、予めテスト操作から完了判定設定を行うことで、完了有無の判定を行うための期待値をテストコマンド発行する毎に設定が不要になり、動作を高速化できる(第１９の発明)。
【００６３】
さらに、図８に示す通り、自動テストを行うときにテスト操作が都度、テストケースを自動テストから読込むのではなく、一度に複数のテストケースを読込みエージェントで一時的に保存する一括スクリプト実行にメモリし、テストコマンドをリモートデバッガ経由でデバッガやデバッガＢに発行することで、都度テストケースの読み出しが不要になり高速動作が可能になる(第２０の発明)。
【発明の効果】
【００６４】
本発明に係るプログラムモジュール検証方式によると、モジュールテストをテストに応じてドライバプログラムおよびスタブプログラムをコンパイルしデバッガにロードする操作を繰返すことなく、テスト対象プロラムとモジュールテストに必要なドライバプログラムおよびスタブプログラムを必要に応じてデバッガにロードした状態で、テストケースに応じてダイナミックにテストすることが可能となり、モジュールテストのテスト工数の短縮が可能となる。更に従来の様にモジュールテスト毎にテスト対象プログラムのオブジェクトのロードが不要なため、複数のモジュールテストを例えばＤＶＤプレーヤであれば、再生状態など、同じプログラム状態でのテストができるため、テスト精度が向上する。
【発明を実施するための最良の形態】
【００６５】
最初に、以下の実施形態で用いる用語を説明する。
【００６６】
マイコンシステムとは、機器組込みマイコンを搭載したセットである。
【００６７】
ＩＣＥとは、マイコンシステムに搭載したマイコンをエミュレートするインサーキットエミュレータである。
【００６８】
仮想マイコンとは、マイコンシステムに搭載したマイコンと同等の動作を行うマイコンシミュレータである。
【００６９】
デバッグセットとは、マイコンシステムで動作するプログラムをデバッグするための評価ボードやＩＣＥなどを含めたセットである。
【００７０】
テスト対象プログラムとは、テスト対象となるマイコンシステムに組込まれた全プログラムである。
【００７１】
オブジェクトとは、テスト対象プログラムをコンパイラやアセンブラ、リンカーなどを使って生成するマイコン上で動作するオブジェクトコードである。
【００７２】
モジュールとは、テスト対象プログラムの中でテストを行うための関数モジュールや機能モジュールである。
【００７３】
デバッガとは、テスト対象プログラムを実行するためのマイコンやＩＣＥのプログラムの実行開始／停止や、ＲＡＭ／レジスタの読書き、ブレーク設定などの制御を行う。構成例として、テスト対象プログラムの実行するためのＩＣＥの制御や、テスト対象プログラムにテスト対象プログラムを制御するモニタプログラムを組込み、ＵＡＲＴ／Ｅｔｈｅｒなどの通信を経由してモニタプログラムにコマンドを転送することで、テスト対象プログラムの制御を行う。
【００７４】
ドライバプログラムとは、テスト対象プログラムがモジュールの場合、モジュールを実行できるようにするテスト専用のプログラムである。
【００７５】
スタブプログラムとは、モジュールテストを行うときに、テスト対象プログラムとなるモジュールが呼出すサブルーチンなどのプログラムの代わりにモジュールテストを行うために代用するテスト専用のプログラムである。テスト対象プログラムをテストするために、ドライバプログラムとスタブプログラムを利用することで、モジュールの入口で入力変数などのパラメータを変更して、モジュールを実行し、モジュールの出口で実行結果を判断する動作を繰返して、テスト効率やテスト網羅性をあげることができる。
【００７６】
パッチとは、デバッガにロードしたテスト対象プログラムのオブジェクトのプログラム命令コードを、直接別のプログラム命令コードに書き換えることである。書き換えることで、テスト対象プログラムの動作は、書き換えられたプログラム命令を実行することになる。
【００７７】
パッチマークとは、テスト対象プログラム内にパッチを当てる場所に予めプログラム実行には影響しない無効命令コードを実装することである。例えば、無効命令コードとして、ＮＯＰ命令を５個入れると５バイトのパッチ領域を確保できる。
【００７８】
２段ジャンプとは、パッチプログラムを当てるときに、パッチを当てるアドレスにある命令コードをプログラム空き領域に退避したとき、退避したプログラム内に分岐命令がある場合に、分岐命令やコール命令ではジャンプするアドレス先まで届かないことがある。そこで、分岐命令から近くのプログラム空き領域にジャンプして、そこからロングジャンプ命令で本来ジャンプすべきアドレスにジャンプすることである。
【００７９】
ＡｃｔｉｖｅＸとは、Ｉｎｔｅｒｎｅｔ対応のＯＬＥドキュメントオブジェクトであるＡｃｔｉｖｅＸドキュメントや、Ｉｎｔｅｒｎｅｔアクセス機能を持ったクライアントアプリケーションを開発するためのＡＰＩである。
【００８０】
ＯＬＥとは、Ｏｂｊｅｃｔ  Ｌｉｎｋｉｎｇ  ａｎｄ  Ｅｍｂｅｄｄｉｎｇの略で、アプリケーションが別のアプリケーションの機能を呼出して自分自身の機能のように利用したりできる。後述の実施形態では、ＨＴＡからＭｉｃｒｏｓｏｆｔ社のＥｘｃｅｌアプリケーションを利用する例を説明する。
【００８１】
（第一の実施形態）
本発明の第一の実施形態のプログラムモジュール検証方式について図１ないし図７、図１２を参照しながら説明する。
【００８２】
図１はモジュール検証システムのブロック図、図２は複数のテストケースを記述したファイル画像、図３はテストシーケンスのフローチャート、図４はテストスクリプト、図５はテスト対象プログラムのフローチャート、図６は自動検証の操作パネル画像、図７はテスト操作の操作パネル画像、図１２はリモートデバッガからデバッガ制御する変換コマンド一覧である。
【００８３】
（システム構成）
本実施形態にかかるモジュール検証システムは、図１に示すように、自動検証１１、パッチ制御８０、デバッガ２００，２３０、マイコンシステム２，３からなる。
【００８４】
ｉ）  実行し結果を記録し、判断を行う自動検証１１としては、テストケース１０、テストスクリプト１２、実行ログ２０、判定ログ３０、期待値４０、自動テスト５０、結果集計６０、結果判定７０からなる。
【００８５】
テストケース１０は、複数モジュールテスト項目と、複数のモジュールテストを連続で自動実行する手順を蓄積したデータをＥｘｃｅｌファイルなどに保存する。
【００８６】
テストスクリプト１２は、テストケース１０内の個々のテストを行う手順を記述したシナリオファイル名に対応した実際のテストシナリオファイル名である。
【００８７】
自動テスト５０は、Ｅｘｃｅｌファイルで作成されたテストケース１０をＡｃｔｉｖｅＸで接続してテストケース１０を読書き可能にして、テストケース１０のテストスクリプトを順次読込んで連続で自動実行する。
【００８８】
結果集計６０は、自動実行した結果データを集計し、結果判定７０が接続されていると集計した結果データを結果判定７０に渡す。
【００８９】
実行ログ２０は、結果集計６０で集計した結果データをＡｃｔｉｖｅＸで接続したＥｘｃｅｌファイルに記録する。
【００９０】
期待値４０は、テストケース１０に従って自動テストで実行した結果を判定するための基準データである。
【００９１】
判定ログ３０は、結果集計６０から受けた実行結果データと期待値４０を比較して判定した結果を記録する。
【００９２】
ii）  テストケース１０のテストスクリプトを自動テスト５０で実行したパッチ設定やRAM読書き、マイコン実行／停止などのコマンドをデバッガに指示するパッチ制御８０と
しては、テスト操作９０、パッチコード定義１００、パッチ設定１１０、パッチ退避１２０、パッチ解除１３０、パッチ検出１４０、パッチ検索変更１４２、リモートデバッガ１５０、コード読書き１６０、スタブロード１７０、スタブテーブル１８０、マイコン選択１９０、セット制御２９０、セット選択３００からなる。
【００９３】
テスト操作９０は、自動テスト５０から受けたコマンドを解析して、パッチに関するコマンド以外のRAM読書き、マイコン実行／停止などは、図１２に示すリモートデバッガ１５０でデバッガを制御できるコマンドに変換して、マイコン選択１９０経由でコマンド引数で指定されたデバッガにコマンドを発行し、パッチ設定に関するコマンドの場合は、パッチ処理するためにパッチコード定義１００やパッチ設定１１０やパッチ退避１２０やパッチ解除１３０やパッチ検出１４０やパッチ検索変更１４２やリモートデバッガ１５０やスタブロード１７０やセット制御２９０の各パッチ処理の実行を指示する。
【００９４】
パッチコード定義１００は、テスト操作９０からパッチを当てる無効命令コードや、パッチマークを検出するプログラムコードサイズなどの環境設定を行う。
【００９５】
パッチ設定１１０は、テスト操作９０からテスト対象プログラムにパッチを当てるコール命令やジャンプ命令のなどの命令コードやパッチアドレスや飛び先アドレスやパッチを当てるパッチマークの場所などの指定により、パッチを当てるジャンプ命令や関数コール命令などのコードを生成する。
【００９６】
パッチ退避１２０は、テスト操作９０からパッチを当てるアドレス領域の命令コードの退避と、退避する命令に分岐命令がある場合は、退避後に退避プログラムが正常に動作するように２段ジャンプなどの分岐命令コードを生成する。
【００９７】
パッチ解除１３０は、テスト操作９０からパッチを元に戻す指示を受けると、パッチ退避１２０でパッチを当てる前に退避したプログラムコードを読込んで元に戻す。
【００９８】
パッチ検出１４０は、テスト操作９０からデバッガに読込んだテスト対象プログラムのパッチマークのアドレスを検出するために、検索を開始するアドレスと、検索するコードの長さ、検索する命令コード、検索開始するアドレスから何番目のパッチマークを検索するかのインデックスを元にパッチマークを検出する。
【００９９】
パッチ検索変更１４２は、テスト対象プログラムのテストを開始する前に、パッチを入れるための無効コードを入れていないテスト対象プログラムをテスト操作９０からリモートデバッガ１５０からデバッガ２００にロードした後、パッチ検索変更１４２で、パッチを入れるための無効コードと同じコードがあるか全テスト対象プログラムを検索し、無効コードと同じコードがある場合は、テスト操作９０で警告表示をする。無効コードと同じコードがテスト対象プログラムに無ければモジュールテスト可能となる。
【０１００】
コード読書き１６０は、パッチ設定１１０やパッチ退避１２０などで生成した命令コードをデバッガにロードしたテスト対象プログラムからパッチを当てるために書換えと、パッチ検出１４０にてテスト対象プログラムコードからパッチマークを検出するために、デ
バッガにロードされているテスト対象プログラムコードを読み書きする。
【０１０１】
マイコン選択１９０は、コード読書き１６０から指示を受けたデバッガのオブジェクトの命令コードの読書き及び、パッチに関するコマンド以外のＲＡＭ読書き、マイコン実行／停止などをテスト操作９０から受けたコマンドでデバッガを制御するために、ＡｃｔｉｖｅＸでデバッガと接続する。
【０１０２】
リモートデバッガ１５０は、図１２に示すテストコマンドをデバッガ制御できるコマンドに変換する機能を有する。動作は、自動テスト５０でテストスクリプトを実行して、テスト操作９０に受けたテストコマンドが、結果データを読込むコマンドであれば、テスト対象のデバッガを制御してＩＣＥからＲＡＭデータを読み込む。また、デバッガにテスト対象プログラムのロードや、マイコンリセット、マイコン実行、ブレーク設定などデバッガをリモートコントロールできる。
【０１０３】
スタブテーブル１８０は、デバッガにロードしたテスト対象プログラムのオブジェクトのモジュールテストを行うために、追加するドライバプログラムおよびスタブプログラムオブジェクトをモジュールテストの数だけ格納する。
【０１０４】
スタブロード１７０は、モジュールテスト実行時に、テスト操作９０で指定されたドライバプログラムおよびスタブプログラムのオブジェクトをスタブテーブル１８０から読込み、コード読書き１６０にドライバプログラムおよびスタブプログラムのオブジェクトを渡す。
【０１０５】
セット制御２９０は、テスト操作９０からマイコンシステムを制御するコマンドデータを生成する。
【０１０６】
セット選択３００は、モジュールテストを行う際に、ＵＡＲＴやＥｔｈｅｒなどの通信を使って、マイコンシステムをモジュールテストする状態に移行させるために、テスト操作９０から制御するマイコンシステム番号と通信方法と通信データをセット制御２９０に渡して、選択したマイコンシステムに指定した通信方法とデータで、マイコンシステムを制御する。
【０１０７】
iii）  デバッガ２００は、マイコン選択１９０からの指示されたパッチセットやＲＡ
Ｍ読書きのなどのコマンドをデバッガに渡し制御するために、ＡｃｔｉｖｅＸで接続されている。
iv）  テスト対象プログラムを実行するマイコンシステム２としては、ＩＣＥ２１０、テスト対象プログラム２２０からなる。
【０１０８】
ＩＣＥ２１０は、マイコンをエミュレートする。
【０１０９】
テスト対象プログラム２２０は、テストするモジュールを実行するために、ＩＣＥ２１０で動作する。
【０１１０】
ｖ）  デバッガＢ２３０は、マイコン選択１９０からの指示されたパッチセットやＲＡＭ読書きのなどのコマンドをデバッガに渡し制御するために、ＡｃｔｉｖｅＸで接続されている。
vi）  テスト対象プログラムを実行するマイコンシステム３としては、ＩＣＥ−Ｂ２４０、テスト対象プログラムＢ２５０からなる。
【０１１１】
ＩＣＥ−Ｂ２４０は、マイコンをエミュレートする。
【０１１２】
テスト対象プログラムＢ２５０は、テストするモジュールを実行するために、ＩＣＥ−
Ｂ２４０で動作する。
【０１１３】
（テストシーケンス）
本実施形態にかかるモジュール自動検証方式は、先ずテスト対象プログラムにパッチを当てることが可能か確認するため、パッチを当てるための無効コードを入れていないテスト対象プログラムをテスト操作９０からリモートデバッガ１５０経由でデバッガにロードした後、テスト操作９０からパッチ検索変更１４２からデバッガにロードしたテスト対象プログラムにパッチを入れた無効コードと同じコードがないか全テスト対象プログラムのコードを検索する。無効コードと同じコードがあれば、テスト操作９０にて警告表示する。無効コードと同じコードがなければ、モジュールのテストが可能となり、パッチを入れるための無効コードが入ったテスト対象プログラムをテスト操作９０からリモートデバッガ１５０経由でデバッガにロードする。
【０１１４】
図１に示すテストケース１０の書式の一例として、複数のモジュールテストを連続して実行するために、図２に示すように、複数のテストケース（モジュールテストＡのテストケース１０−１、モジュールテストＢのテストケース１０−２、モジュールテストＣのテストケース１０−３、モジュールテストＤのテストケース１０−４）をＥｘｃｅｌファイルに記述している。なお、Ｅｘｃｅｌファイルに記述したテストケースは、複数のモジュールテストを行うときに、共通のテストシナリオを実行する場合がある。そこで、Ｅｘｃｅｌファイルに記述したテストケースをテストスクリプト１２のファイルに保存し、Ｅｘｃｅｌファイルには、テストスクリプト１２のファイル名を記述することで、Ｅｘｃｅｌファイルに同じテストシナリオを記述する必要がなくなる。
【０１１５】
テストケース１０のＥｘｃｅｌファイルに設定したテストシーケンスとして、例えば、図５に示すテスト対象プログラム２２０において、ＣＡＬＬｐａｔｃｈＡＳ３０のアドレスにドライバＡＳ９１へ関数呼び出しする命令およびＪＭＰｐａｔｃｈＢＳ５０のアドレスにＣＡＬＬｐａｔｃｈＡＳ３０にジャンプするパッチを当ててテストするシーケンスについて説明する。
【０１１６】
（テスト環境設定Ｓ２００）
テストシーケンスは、図３に示す通り、テスト環境設定Ｓ２００で、テストケース１０のＥｘｃｅｌファイルを自動テスト５０からＡｃｔｉｖｅＸを使って開き、図４に示す通りのテスト環境を設定するテストスクリプトをテストケース１０のＥｘｃｅｌから読込み、自動テスト５０で実行し、各コマンドをテスト操作９０に転送する。
【０１１７】
自動検証１１の操作例として、図６に示す通り、「ＣＰＵ  Ｓｅｌｅｃｔ」１１−１でマイコンシステムを制御するデバッガを選択し、「ファイル選択」１１−２でテストケース１０のＥｘｃｅｌファイルを読込み、「シート選択」１１−３でＥｘｃｅｌファイル内のテストするシートを選択し、「モジュール」１１−４で複数のモジュールテストを表示したリストからテストするモジュールを選択した後、「開始」ボタン１１−５で自動テストを開始する。
【０１１８】
自動検証を開始すると、テスト操作９０で実行するコマンド、すなわちテスト対象プログラムからパッチを当てる無効コードの検索条件を変更するコマンド例として、
ｃｐｕＳＴＡＴＵＳ（１，３，”ｐａｔｃｈＲｅｐｌａｃｅ＝”００００００００”）；
の場合は、テスト操作９０でコマンドを解析して、パッチを当てるテスト対象プログラムからパッチマークを検索する命令コードとして、”００００００００”をパッチコード定義１００にて変更する。
【０１１９】
また、テスト対象プログラムに実装した無効命令コードであるパッチマークを指定したシンボル名から検索するバイト数の長さを指定するコマンド例として、
ｃｐｕＳＴＡＴＵＳ（1，３，”ｐａｔｃｈＳｅｒｃｈ＝”０ｘ２００”）；
の場合は、テスト操作９０でコマンド解析してパッチマークを検索する最大バイト数を０ｘ２００バイトに変更する。
【０１２０】
テスト環境設定するテスト操作９０の手動操作例として、図７の９０−１，９０−２に示す通り、「ＣＰＵ  Ｓｅｌｅｃｔ」でマイコンシステムを制御するデバッガを選択した後、「ＳｔａｔｕｓＳｅｔ」の「Ｓｅｎｄ」で設定するコマンドを記述し、「ＳｔａｔｕｓＳｅｔ」ボタンをクリックすることで、選択したデバッガにテスト環境を設定する。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０１２１】
（システム状態設定Ｓ２０５）
テスト対象プログラムを結合した状態でモジュールテストする場合に、モジュールをテストする状態にマイコンシステムを移行させるために、デバッガを介さずマイコンシステムを直接制御するＵＡＲＴやＥｔｈｅｒなどの通信を使ってテストできる状態に移行する。例えばＤＶＤプレーヤでＰＬＡＹにした状態でモジュールテストを行う場合、テストケース１０にＰＬＡＹ状態にする記述したテストスクリプトを自動テスト５０が読込み、テスト操作９０でコマンド解析して、マイコンシステムをＵＡＲＴ通信で直接制御するコマンドであれば、ＵＡＲＴ制御コマンドとＵＡＲＴ通信するマイコンシステム番号をセット制御２９０に渡す。セット制御２９０は、制御するマイコンシステムの番号に合わせてセット選択３００からマイコンシステムとして例えば、マイコンシステム２のセットをモジュールテストする状態になるように制御するコマンド例として、
ｔｐｕｔ（１，”ｐｌａｙｍｏｄｅ”）；
の場合は、１番のマイコンシステムにＵＡＲＴ通信で”ｐｌａｙｍｏｄｅ”文字列を送信することになる。
【０１２２】
また、マイコンシステムにＵＡＲＴ通信でコマンドを送信した後、返信データにて状態を確認するコマンド例として、
ｔｗａｉｔ（１，”ｅｎｄ”，６０００）；
の場合は、１番のマイコンシステムからＵＡＲＴ受信データとして６０００ミリ秒以内に”ｅｎｄ”文字を受けるまで待つが、６０００ミリ秒以上経過するとタイムオーバーとして異常処理を行う。
【０１２３】
システム状態を設定するテスト操作９０の手動操作例として、図７の９０−３に示す通り、「Ｆｕｎｃｔｉｏｎ」でマイコンシステムにＵＡＲＴ通信経由で制御するコマンドを記述し、「Ｆｕｎｃｔｉｏｎ」ボタンをクリックすることで、選択したマイコンシステムにＵＡＲＴ通信経由で制御する。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０１２４】
（パッチ設定Ｓ２１０）
モジュールテストする状態に移行した後、モジュールテストができるようにドライバプログラムおよびスタブプログラムを実行するためのパッチの設定を行う。パッチの書込みアドレス指定方法には、直接指定するアドレス値と、間接にパッチアドレスを取得する２通りの方法がある。
【０１２５】
ＣＡＬＬｐａｔｃｈＡＳ３０のアドレスにドライバＡＳ９１へ関数呼び出しする命令を入れるパッチのコマンド例では、直接アドレス指定する方法は、
ｃｐｕＰＡＴＣＨＳＥＴ（１，”ｍａｉｎ”＋２０，”ＤｒｖＡ”，”ＤＣＡＬＬ”）；
となり、テスト操作９０でコマンドを解析して、パッチ設定１１０にパッチを設定する（１，”ｍａｉｎ”＋２０，”ＤｒｖＡ”，”ＤＣＡＬＬ”）のパラメータを渡す。第４引数の”ＤＣＡＬＬ”より、第２引数の”ｍａｉｎ”＋２０アドレスに、”ＤｒｖＡ”の関数呼び出しするパッチを書込む。
【０１２６】
間接的にパッチアドレスを取得する方法は、
ｃｐｕＰＡＴＣＨＳＥＴ（１，”ｍａｉｎ”，”ＤｒｖＡ”，”ＣＡＬＬ”，Ａ）；
となり、テスト操作９０でコマンドを解析して、パッチ設定１１０にパッチを設定する（１，”ｍａｉｎ”，”ＤｒｖＡ”，”ＣＡＬＬ”，Ａ）のパラメータを渡す。このパラメータの動作は、第２引数の”ｍａｉｎ”アドレスから第５引数のＡ番目のパッチマークのアドレスに、第３引数の”ＤｒｖＡ”関数を呼び出す命令をパッチ設定することになる。この動作を行うために、”ｍａｉｎ”アドレスより、パッチコード定義１００に設定したパッチマークの命令コードと同じコードをテスト対象プログラムから検出するために、コード読書き１６０から第１引数で指定したデバッガ２００のテスト対象プログラムの”ｍａｉｎ”アドレスを先頭にパッチマークを検出するために、パッチコード定義１００で設定したサイズの命令コードをデバッガ２００から読込み、読込んだコードからパッチ設定１１０でパッチマークをサーチする。サーチにあたり、第５引数のＡ番目のパッチマークを検出するまでサーチを行い、Ａ番目のパッチマークのアドレスを検出する。
【０１２７】
パッチを書込むアドレスを検出すると、そのアドレスをパッチ設定１１０からパッチ退避１２０に退避番号を付けて退避し、”ＤｒｖＡ”関数を呼び出す”ＣＡＬＬ”命令コードを生成し、パッチアドレスとパッチ命令コードとパッチを当てるデバッガ番号をコード読書き１６０へ渡す。
【０１２８】
コード読書き１６０は、パッチ設定１１０から受けたテスト対象プログラムの命令コードを書き換えるパッチアドレスとパッチ命令コードをマイコン選択１９０に渡す。
【０１２９】
マイコン選択１９０は、ＡｃｔｉｖｅＸで接続したデバッガ２００からＩＣＥ２１０で動作するテスト対象プログラム２２０の命令コードに書き換える。
【０１３０】
次に、ＪＭＰｐａｔｃｈＢＳ５０のアドレスにＣＡＬＬｐａｔｃｈＡＳ３０にジャンプする命令を入れるパッチを設定するために、パッチの書込みアドレス指定方法は、直接指定するアドレス値と、間接にパッチアドレスを取得する２通りの方法がある。
【０１３１】
ＪＭＰｐａｔｃｈＢＳ５０のアドレスにＣＡＬＬｐａｔｃｈＡＳ３０のアドレスにジャンプする命令を入れるパッチのコマンド例では、直接アドレス指定する方法は、
ｃｐｕＰＡＴＣＨＳＥＴ（１，”ｍａｉｎ”＋３０，”ＣＡＬＬｐａｔｃｈＡ”，”ＤＪＭＰ”）；
により、テスト操作９０でコマンドを解析して、パッチ設定１１０にパッチを設定する（１，”ｍａｉｎ”＋３０，”ＣＡＬＬｐａｔｃｈＡ”，”ＤＪＭＰ”）のパラメータを渡す。第４引数の”ＤＪＭＰ”より、第２引数の”ｍａｉｎ”＋３０アドレスに、ＣＡＬＬｐａｔｃｈＡＳ３０へジャンプするパッチを書込む。
【０１３２】
間接的にパッチアドレスを取得する方法は、
ｃｐｕＰＡＴＣＨＳＥＴ（１，”ｍａｉｎ”，”ＣＡＬＬｐａｔｃｈＡ”，”ＪＭＰ”，Ａ）；
により、テスト操作９０でコマンドを解析して、パッチ設定１１０にパッチを設定する（１，”ｍａｉｎ”，”ＣＡＬＬｐａｔｃｈＡ”，”ＪＭＰ”，Ａ）のパラメータを渡す。このパラメータの動作は、第２引数の”ｍａｉｎ”アドレスから第５引数のＡ番目のパッチマークのアドレスに、第３引数の”ＣＡＬＬｐａｔｃｈＡ”アドレスにジャンプする命令をパッチ設定することになる。
【０１３３】
この動作を行うために、”ｍａｉｎ”アドレスより、パッチコード定義１００に設定したパッチマークの命令コードと同じコードをテスト対象プログラムから検出するために、コード読書き１６０から第１引数で指定したデバッガ２００のテスト対象プログラムの”ｍａｉｎ”アドレスを先頭にパッチマークを検出するために、パッチコード定義１００で設定したサイズの命令コードをデバッガ２００から読込み、読込んだコードからパッチ設定１１０でパッチマークをサーチする。サーチにあたり、第５引数のＡ番目のパッチマークを検出するまでサーチを行い、Ａ番目のパッチマークのアドレスを検出する。
【０１３４】
パッチを書込むアドレスを検出すると、そのアドレスをパッチ設定１１０からパッチ退
避１２０に退避番号を付けて退避し、”ＣＡＬＬｐａｔｃｈＡ”アドレスにジャンプする”ＪＭＰ”命令コードを生成し、パッチアドレスとパッチ命令コードとパッチを当てるデバッガ番号をコード読書き１６０へ渡す。
【０１３５】
コード読書き１６０は、パッチ設定１１０から受けたテスト対象プログラムの命令コードを書き換えるパッチアドレスとパッチ命令コードをマイコン選択１９０に渡す。
【０１３６】
マイコン選択１９０は、ＡｃｔｉｖｅＸで接続したデバッガ２００からＩＣＥ２１０で動作するテスト対象プログラム２２０の命令コードに書き換える。
【０１３７】
以上により、図５に示す通り、初期設定Ｓ２０を実行後に、モジュールＡＳ４０をテストするためのドライバプログラムであるＤｒｖＡ関数を呼び出し、モジュールＡＳ４０を実行後に、繰返しモジュールＡＳ４０を実行するためにＣＡＬＬｐａｔｃｈＡＳ３０にジャンプすることで、モジュールＡＳ４０のテストができるプログラムにダイナミックに変更したとなる。
【０１３８】
また、テスト対象プログラムに予めドライバプログラムを組み込んでデバッガにロードするときに、プログラムコードサイズが大き過ぎて、全てのドライバプログラムがデバッガに入りきらない場合に、例えば、予めモジュールＡのテストに必要なドライバプログラムＡＳ１００のオブジェクトおよび、シンボル情報をスタブテーブル１８０に登録しておき、モジュールＡＳ４０のテストを実行するときに、ドライバプログラムＡＳ１００のオブジェクトをデバッガにロードする。
【０１３９】
ドライバプログラムＡＳ１００のオブジェクトをデバッガにロードする動作として、テストケース１０に記述してテストスクリプトを自動テスト５０が読込み、テスト操作９０が受けたスタブロードコマンド例として、
ｃｐｕＳＴＵＢＳＥＴ（１，”ＤｒｖＡ”）；
を受けた場合は、スタブロード１７０にパラメータ（１，”ＤｒｖＡ”）を渡し、スタブテーブル１８０に定義したＤｒｖＡオブジェクトと、そのシンボル情報を読込み、コード読書き１６０にプログラム空き領域に設定する指示で渡す。コード読書き１６０は、テスト対象プログラムコードの空き領域にドライバプログラムを書込み、マイコン選択１９０から指定したデバッガとして例えばデバッガ２００にドライバプログラムおよびシンボル情報をロードすることで、ドライバプログラムを予めテスト対象プログラムに書込む場合と同じ状態にできる。
【０１４０】
パッチ設定するテスト操作９０の手動操作例として、図７の９０−４に示す通り、「ＰａｔｃｈＳｅｔ」でパッチを当てる無効命令コードを検索開始するアドレスまたはシンボル名を記述し、無効コードを記述した無効命令コードのアドレスに、Ｃａｌｌ／Ｂｒのチェックボックスに設定し、「から」にＣａｌｌ／Ｂｒのチェックボックスで指定した命令でジャンプ先のアドレスに飛ぶ命令コードのパッチを書込んだ後、「ＰａｔｃｈＳｅｔ」ボタンをクリックすることで、選択したマイコンシステムのデバッガを制御する。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０１４１】
（モジュール入口ブレーク設定Ｓ２２０）
ＤｒｖＡＳ９０を実行する前に、モジュールＡの入力パラメータを設定するために、ブレーク設定を行うために、図４に示す通りのテストスクリプトで、
ｃｐｕＢＲＥＡＫＳＥＴ（１，”ＣＡＬＬｐａｔｃｈＡ”）；
をテスト操作９０でコマンド解析し、パッチ設定以外のコマンドであれば、図１２に示すリモートデバッガ１５０でデバッガを制御できるコマンドに変換して、マイコン選択１９０を通して、コマンドの第一引数より１番のデバッガ２００にＣＡＬＬｐａｔｃｈＡアドレスでブレーク設定を指示する。
【０１４２】
ブレーク設定するテスト操作９０の手動操作例として、図７の９０−５に示す通り、「ＢｒｅａｋＳｅｔ」の「ａｄｄｒｅｓ」でブレークポイントを設定するアドレスまたはシンボル名を記述し、「ＢｒｅａｋＳｅｔ」ボタンをクリックすることで、選択したマイコンシステムのデバッガを制御する。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０１４３】
（入口ブレーク停止操作Ｓ２３０）
ブレーク設定後、モジュールＡＳ４０の入口で、ブレーク停止させるために、デバッガを制御するスクリプトをテストケース１０から自動テスト５０で読出したテストスクリプトを実行する。実行するテストスクリプト例として、マイコンをリセットして実行開始し、リモコンなどから受信したデータからキーコードを格納するＲＡＭに直接キーコードデータを書込むなどで、ブレーク停止させる。
【０１４４】
マイコンをリセットして実行開始キーコード書込むテストスクリプト例として、
ｃｐｕＲＥＳＥＴ（１）；
ｃｐｕＧＯ（１）；
ｃｐｕＰＵＴ（１，”ｋｅｙｃｏｄｅ”，１，０ｘ１ｅ）；
を記述すれば、自動テスト５０でテストスクリプト１２を実行し、コマンドをテスト操作９０に渡して、コマンド解析した結果、全てのコマンドがパッチ設定以外のコマンドのため、図１２に示すリモートデバッガ１５０でデバッガを制御できるコマンドに変換して、マイコン選択１９０を通して、コマンドの第一引数より１番のデバッガ２００にマイコンリセットし、マイコン実行し、ｋｅｙｃｏｄｅ変数に１バイトデータの０ｘ１ｅを書込む指示を行う。
【０１４５】
ブレーク停止操作を行うためにデバッガの実行制御を行うテスト操作９０の手動操作例として、図７の９０−６に示す通り、「ＲＥＳＥＴ」ボタンをクリックすることで、マイコンをリセットできる。また、「ＧＯ」コマンドでマイコンの実行を開始する。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０１４６】
（入力パラメータ設定Ｓ２５０）
モジュールＡＳ４０の入口でブレーク停止した後、モジュールＡをテストするための入力パラメータを設定したテストケース１０からテストスクリプトを自動テスト５０が読込む。テストスクリプトに記述したモジュールＡＳ４０の実行を制御する自動変数やグローバル変数などをテスト操作９０でコマンド解析し、パッチ以外のコマンドなので、リモートデバッガ１５０からマイコン選択１９０で指定したデバッガのテスト対象プログラムのＲＡＭデータに書込む。
【０１４７】
入力パラメータの設定として、関数の引数や構造体のポインタのデータを設定するテストスクリプト例として、
ｃｐｕＶＡＬＥＸＥＣ（１，”ｐａｒａｍ１＝０ｘ１２３”）；
ｃｐｕＶＡＬＥＸＥＣ（１，”ｐｔｒ−＞ｄａｔａ＝０ｘａ２”）；
を記述すれば、自動テスト５０でテストスクリプトを実行し、コマンドをテスト操作９０に渡す。テスト操作９０にてコマンド解析した結果、全てのコマンドがパッチ設定以外のコマンドのため、リモートデバッガ１５０からマイコン選択１９０を通して、コマンドの第一引数より１番のデバッガ２００にｐａｒａｍ１変数に０ｘ１２３を書込み、ｐｔｒ−＞ｄａｔａ構造体のポインタに０ｘａ２データを書込む指示を行う。
【０１４８】
ブレーク停止後、入力パラメータを設定するためのテスト操作９０の手動操作例として、図７の９０−７に示す通り、「ＶａｌＣｍｄ」ボタンで自動変数の書き込みや、「ＲＡＭ−ＲＷ」ボタンでグローバル変数の書き込みができる。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０１４９】
（モジュール出口ブレーク設定Ｓ２６０）
モジュールＡＳ４０をテストするための入力パラメータのデータ書き込みを完了すると、モジュールＡＳ４０を実行完了する出口にブレーク設定を行うために、図４に示す通りのテストスクリプト例として、
ｃｐｕＢＲＥＡＫＳＥＴ（１，”ＪＭＰｐａｔｃｈＢ”）；
を記述すれば、自動テスト５０でテストスクリプトを実行し、コマンドをテスト操作９０に渡す。テスト操作９０にてコマンド解析した結果、全てのコマンドがパッチ設定以外のコマンドのため、リモートデバッガ１５０からマイコン選択１９０を通して、コマンドの第一引数より１番のデバッガ２００にＪＭＰｐａｔｃｈＢアドレスにブレーク設定を指示する。
【０１５０】
ブレーク設定するテスト操作９０の手動操作例として、図７の９０−５に示す通り、「ＢｒｅａｋＳｅｔ」の「ａｄｄｒｅｓ」でブレークポイントを設定するアドレスまたはシンボル名を記述し、「ＢｒｅａｋＳｅｔ」ボタンをクリックすることで、選択したマイコンシステムのデバッガを制御する。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０１５１】
（出口ブレーク停止操作Ｓ２７０）
ブレーク設定後、モジュールＡＳ４０を実行してブレーク停止させるために、デバッガを制御するスクリプトをテストケース１０から自動テスト５０で読出してテストスクリプトを実行する。実行するテストスクリプト例として、
ｃｐｕＰＵＴ（１，”Ｅｖｅｎｔ”，１，０ｘ３ａ）；
を記述すれば、自動テスト５０でテストスクリプトを実行し、コマンドをテスト操作９０に渡す。テスト操作９０にてコマンド解析した結果、全てのコマンドがパッチ設定以外のコマンドのため、リモートデバッガ１５０からマイコン選択１９０を通して、コマンドの第一引数より１番のデバッガ２００にＥｖｅｎｔ変数の１バイトの０ｘ３ａデータを書込む指示を行う。
【０１５２】
ブレーク停止操作を行うためにデバッガの実行制御を行うテスト操作９０の手動操作例として、図７の９０−６に示す通り、「ＲＥＳＥＴ」ボタンをクリックすることで、マイコンをリセットできる。また、「ＧＯ」コマンドでマイコンの実行を開始する。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０１５３】
（実行結果データ読込みＳ２９０、実行結果判定Ｓ３００）
ブレーク停止後、テストケース１０から自動テスト５０で読出したテストスクリプトを実行する。実行するテスト結果をデバッガから読込むテストスクリプト例として、
ｒｄＢｕｆ＝ｃｐｕＧＥＴ（”ｓｅｇ７＿ｂｕｆ”，４，０）；
ｒｄＣａｌ＝ｃｐｕＶＡＬＥＸＥＣ（１，”ｉＣａｌ”）；
を記述すれば、自動テスト５０でテストスクリプトを実行し、コマンドをテスト操作９０に渡す。テスト操作９０にてコマンド解析した結果、全てのコマンドがパッチ設定以外のコマンドのため、リモートデバッガ１５０からマイコン選択１９０を通して、コマンドの第一引数より１番のデバッガ２００にグローバルのｓｅｇ７＿ｂｕｆ変数とローカルのｉＣａｌ変数を読み出すコマンドを発行する。ＩＣＥ２１０からｓｅｇ７＿ｂｕｆ変数とＣａｌ変数のデータを読み出し、デバッガ２００からリモートデバッガ１５０にて読込み、テスト操作９０を経由して、結果集計６０に実行した結果のＲＡＭデータを渡す。結果集計６０は、実行結果として実行ログ２０に記録する。また、期待値４０で自動比較するためのデータが設定されている場合は、結果判定７０が期待値４０よりテスト項目に対応したデータを読込み判定する。判定した結果は、結果判定７０により判定ログ３０に書込む。
【０１５４】
また、テスト項目に対応した期待値４０が設定されて無ければ、実行結果を期待値４０に書込み、次回のテストを行うときの期待値データとすることができる。
【０１５５】
ブレーク停止後、出力パラメータ設定するためのテスト操作９０の手動操作例として、図７の９０−７に示す通り、「ＶａｌＣｍｄ」ボタンで自動変数の読み込みや、「ＲＡＭ−ＲＷ」ボタンでグローバル変数の読み込みができる。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０１５６】
（テスト項目完了Ｓ３１０）
モジュールＡＳ４０の複数のテスト項目を実行する場合に繰返し実行するかの判定を行う。終了判定は、テストケース１０のテスト項目に終了記号を設定することで、自動テスト５０がテスト項目を読込んだ時点で、テスト完了か判断する。また、自動テストの操作で中断操作をした場合にも完了となる。
【０１５７】
（パッチ設定解除Ｓ３２０）
モジュールＡＳ４０のテストを完了すると、プログラム動作を元に戻すため、テストケース１０から自動テストで読込んだテストスクリプトを実行し、パッチやブレークポイント設定の解除を行う。
【０１５８】
パッチ設定を解除するテストスクリプトの例として、ｃｐｕＰＡＴＣＨＣＬＲ（１，０）でパッチ設定した全てを元に戻すコマンドは、テスト操作９０でコマンド解析した後、コマンドのパラメータ（１，０）をパッチ解除１３０に渡す。パッチ解除１３０は、パラメータの第二引数の番号に応じて、全てのパッチ設定または特定のパッチ設定の命令コード領域を元に戻す動作を行う。パッチ設定を元に戻すために、パッチ退避１２０から退避した番号に対応したパッチアドレスと命令コードを読込み、パッチ解除１３０からコード読書き１６０に、元に戻すアドレスと命令コードを渡す。コード読書き１６０は、書き換えるデバッガ番号と、書き換えるアドレスと命令コードをマイコン選択１９０に渡す。マイコン選択１９０は、指定したデバッガとして例えば、デバッガ２００に接続したＩＣＥ２１０のテスト対象プログラムの命令コードを書き換える。
【０１５９】
ブレークポイントの解除や、ＲＡＭデータを元に戻すコマンドは、テスト操作９０からマイコン選択１９０を通して、指定したデバッガを制御することで元に戻す。
【０１６０】
パッチ設定解除の操作を行うためのテスト操作９０の手動操作例として、図７の９０−８に示す通り、パッチ設定時の戻り値であるパッチ設定番号を使って、「ＰａｔｃｈＣｌｒ」の「ＣｌｒＮｏ」にパッチ番号を記述し、「ＰａｔｃｈＣｌｒ」ボタンをクリックすることで、パッチ前の状態に戻せる。また、ブレーク解除の操作は、図７の９０−９に示す通り、ブレーク設定時の戻り値のブレーク設定番号を「ＢｒｅａｋＣｌｒ」の「Ｎｏ」に設定し、「ＢｒｅａｋＣｌｒ」ボタンをクリックすることで、ブレークポイントを解除できる。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０１６１】
（モジュールテスト完了Ｓ３３０）
テストケース１０に図２に示す通り、複数モジュールのテストケース１０−１〜１０−４を定義した場合に、モジュールテストを繰返し実行するかの判断を行う。テストケースを自動テスト５０が読込んだ結果、モジュールテストの終了マークが無く、自動テスト５０の操作によりテスト中断操作がされなければ、モジュールテストを繰返し実施する。モジュールテストの終了マークを検出したときにテスト完了となる。
【０１６２】
（第二の実施形態）
本発明の第二の実施形態のプログラムモジュール検証方式について図２，６，７，１２、図８ないし図１１を参照しながら説明する。
【０１６３】
図８はマイコンシステム２とマイコンシステム３間の通信をテストするためのモジュール検証システムのブロック図、図９はテストシーケンスのフローチャート、図１０はテストスクリプト、図１１は２つマイコンシステム間の通信テストを行うテスト対象プログラムのフローチャートである。
【０１６４】
（システム構成）
本実施形態にかかるモジュール検証システムは、図８に示すように、自動検証１１、パッチ制御８０、デバッガ２００，２３０、マイコンシステム２，３からなる。
【０１６５】
ｉ）  実行し結果を記録し、判断を行う自動検証１１としては、テストケース１０、テストスクリプト１２、実行ログ２０、判定ログ３０、期待値４０、自動テスト５０、結果集計６０、結果判定７０からなる。
【０１６６】
テストケース１０は、複数モジュールテスト項目と、複数のモジュールテストを連続で自動実行する手順を蓄積したデータをＥｘｃｅｌファイルなどに保存する。
【０１６７】
テストスクリプト１２は、テストケース１０内の個々のテストを行う手順を記述したシナリオファイル名に対応した実際のテストシナリオファイル名である。
【０１６８】
自動テスト５０は、Ｅｘｃｅｌファイルで作成されたテストケース１０をＡｃｔｉｖｅＸで接続してテストケース１０を読書き可能にして、テストケース１０のテストスクリプトを順次読込んで連続で自動実行する。
【０１６９】
結果集計６０は、自動実行した結果データを集計し、結果判定７０が接続されていると集計した結果データを結果判定７０に渡す。
【０１７０】
実行ログ２０は、結果集計６０で集計した結果データをＡｃｔｉｖｅＸで接続したＥｘｃｅｌファイルに記録する。
【０１７１】
期待値４０は、テストケース１０に従って自動テストで実行した結果を判定するための基準データである。
【０１７２】
判定ログ３０は、結果集計６０から受けた実行結果データと期待値４０を比較して判定した結果を記録する。
【０１７３】
ii）  テストケース１０のテストスクリプトを自動テスト５０で実行したパッチ設定やRAM読書き、マイコン実行／停止などのコマンドをデバッガに指示するパッチ制御８０と
しては、テスト操作９０、パッチコード定義１００、パッチ設定１１０、パッチ退避１２０、パッチ解除１３０、パッチ検出１４０、リモートデバッガ１５０、コールバック１５２、完了判定設定１５３、完了判定１５４、エージェント１５６、一括スクリプト実行１５８、コード読書き１６０、マイコン選択１９０からなる。
【０１７４】
テスト操作９０は、自動テスト５０から受けたコマンドを解析して、パッチに関するコマンド以外のRAM読書き、マイコン実行／停止などは、図１２に示すリモートデバッガ１５０でデバッガを制御できるコマンドに変換して、マイコン選択１９０経由でコマンド引数で指定されたデバッガにコマンドを発行し、パッチ設定に関するコマンドの場合は、パッチ処理するためにパッチコード定義１００やパッチ設定１１０やパッチ退避１２０やパッチ解除１３０やパッチ検出１４０やリモートデバッガ１５０の各パッチ処理の実行を指示する。
【０１７５】
パッチコード定義１００は、テスト操作９０からパッチを当てる無効命令コードや、パッチマークを検出するプログラムコードサイズなどの環境設定を行う。
【０１７６】
パッチ設定１１０は、テスト操作９０からテスト対象プログラムにパッチを当てるコール命令やジャンプ命令のなどの命令コードやパッチアドレスや飛び先アドレスやパッチを当てるパッチマークの場所などの指定により、パッチを当てるジャンプ命令や関数コール命令などのコードを生成する。
【０１７７】
パッチ退避１２０は、テスト操作９０からパッチを当てるアドレス領域の命令コードの退避と、退避する命令に分岐命令がある場合は、退避後に退避プログラムが正常に動作するように２段ジャンプなどの分岐命令コードを生成する。
【０１７８】
パッチ解除１３０は、テスト操作９０からパッチを元に戻す指示を受けると、パッチ退避１２０でパッチを当てる前に退避したプログラムコードを読込んで元に戻す。
【０１７９】
パッチ検出１４０は、テスト操作９０からデバッガに読込んだテスト対象プログラムのパッチマークのアドレスを検出するために、検索を開始するアドレスと、検索するコードの長さ、検索する命令コード、検索開始するアドレスから何番目のパッチマークを検索するかのインデックスを元にパッチマークを検出する。
【０１８０】
コード読書き１６０は、パッチ設定１１０やパッチ退避１２０などで生成した命令コードをデバッガにロードしたテスト対象プログラムからパッチを当てるために書換えと、パッチ検出１４０にてテスト対象プログラムコードからパッチマークを検出するために、デ
バッガにロードされているテスト対象プログラムコードを読み書きする。
【０１８１】
マイコン選択１９０は、コード読書き１６０から指示を受けたデバッガのオブジェクトの命令コードの読書き及び、パッチに関するコマンド以外のＲＡＭ読書き、マイコン実行／停止などをテスト操作９０から受けたコマンドでデバッガを制御するために、ＡｃｔｉｖｅＸでデバッガと接続する。
【０１８２】
リモートデバッガ１５０は、自動テスト５０でテストスクリプトを実行して、テスト操作９０に受けたコマンドが、結果データを読込むコマンドであれば、テスト対象のデバッガを制御してＩＣＥからＲＡＭデータを読み込む。また、デバッガにテスト対象プログラムのロードや、マイコンリセット、マイコン実行、ブレーク設定などデバッガをリモートコントロールできる。
【０１８３】
コールバック１５２は、各デバッガがリセットやマイコン実行やブレーク停止などが発生したときに、デバッガ２００またはデバッガＢ２３０からコールバック１５２にメッセージを通知する。コールバッグ１５２で受理したメッセージは、テスト操作９０に転送して表示する。また、完了判定１５４に送りリモートデバッガ１５０から発行したコマンド完了の判定を行う。
【０１８４】
完了判定設定１５３は、各デバッガにてイベントが発生した場合に、コールバック１５２に返信する。コールバック１５２で受理したデータは完了判定１５４に転送され完了判定設定１５３で設定した期待値と比較し、一致する有無の判定に使う。また、テスト操作９０から直接、完了判定設定１５３に設定できる。
【０１８５】
完了判定１５４は、各デバッガにてイベントが発生した場合に、コールバック１５２に返信する。コールバック１５２で受理したデータは完了判定１５４に転送され完了判定設定１５３で設定した期待値と比較し、一致する有無の判定に使う。一致した場合は、リモートデバッガ１５０に対して、次のテストコマンドを発行可能になったことを通知する。リモートデバッガ１５０は、テストコマンドの発行待機を解除して、各デバッガにコマンド発行可能となる。
【０１８６】
エージェント１５６は、自動テスト５０が読込むテストケース１０から複数のテストを読込みテスト操作９０からエージェント１５６渡す。エージェント１５６は、一括スクリプト実行１５８のメモリを一時的に保存して、自動テスト５０を解さずエージェント１５６からリモートデバッガ１５０に順次テストコマンドを転送して連続実行できる。
【０１８７】
iii）  デバッガ２００は、マイコン選択１９０からの指示されたパッチセットやＲＡ
Ｍ読書きのなどのコマンドをデバッガに渡し制御するために、ＡｃｔｉｖｅＸで接続されている。また、デバッガでブレーク停止などが発生した場合は、コールバック１５２にイベントを通知する。
【０１８８】
iv）  テスト対象プログラムを実行するマイコンシステム２としては、ＩＣＥ２１０、テスト対象プログラム２２５からなり、マイコンシステム３とＵＡＲＴで接続し通信できる。
【０１８９】
ＩＣＥ２１０は、マイコンをエミュレートする。
【０１９０】
テスト対象プログラム２２５は、テストするモジュールを実行するために、ＩＣＥ２１０で動作する。
【０１９１】
ｖ）  デバッガＢ２３０は、マイコン選択１９０からの指示されたパッチセットやＲＡＭ読書きのなどのコマンドをデバッガに渡し制御するために、ＡｃｔｉｖｅＸで接続されている。また、デバッガでブレーク停止などが発生した場合は、コールバック１５２にイベントを通知する。
【０１９２】
vi）  テスト対象プログラムＢ２５５を実行するマイコンシステム３としては、ＩＣＥ−Ｂ２４０、テスト対象プログラムＢ２５５からなり、マイコンシステム２とＵＡＲＴで接続し通信できる。
【０１９３】
ＩＣＥ−Ｂ２４０は、マイコンをエミュレートする。
【０１９４】
テスト対象プログラムＢ２５５は、テストするモジュールを実行するために、ＩＣＥ−
Ｂ２４０で動作する。
【０１９５】
（テストシーケンス）
本実施形態にかかるモジュール自動検証方式は、２つまたは複数のマイコンシステム間や、２つまたは複数のタスク間や、２つまたは複数のモジュール間のデータ転送を行う場合に、それぞれにおいて通信を行うための送信側と受信側のテスト対象プログラムをテストすることを目的としている。
【０１９６】
図８に示すテストケース１０の書式の一例として、複数のモジュールテストを連続して実行するために、図２に示すように、複数のテストケース（モジュールテストＡのテストケース１０−１、モジュールテストＢのテストケース１０−２、モジュールテストＣのテストケース１０−３、モジュールテストＤのテストケース１０−４）をＥｘｃｅｌファイルに記述している。なお、Ｅｘｃｅｌファイルに記述したテストケースは、複数のモジュールテストを行うときに、共通のテストシナリオを実行する場合がある。そこで、Ｅｘｃｅｌファイルに記述したテストケースをテストスクリプト１２のファイルに保存し、Ｅｘｃｅｌファイルには、テストスクリプト１２のファイル名を記述することで、Ｅｘｃｅｌファイルに同じテストシナリオを記述する必要がなくなる。
【０１９７】
テストケース１０のＥｘｃｅｌファイルに設定したテストシーケンスとして、例えば、２つのマイコン間の通信モジュールのテストを行うために、図１１に示すテスト対象プログラム２２５において、ＣＡＬＬｐａｔｃｈＡＳ３２のアドレスにドライバＡＳ９３へ関数呼び出しする命令およびＪＭＰｐａｔｃｈＤＳ７６のアドレスにＣＡＬＬｐａｔｃｈＡＳ３２にジャンプするパッチを当てて、テスト対象プロラム２２５からデータを送信してテスト対象プログラムＢ２５５が受信したデータが正常に処理されるかのテストするシーケンスについて説明する。
【０１９８】
（テスト環境設定Ｓ２０２）
テストシーケンスは、図９に示す通り、テスト環境設定Ｓ２０２で、テストケース１０のＥｘｃｅｌファイルを自動テスト５０からＡｃｔｉｖｅＸを使って開き、図１０に示す通りのテスト環境を設定するテストスクリプトをテストケース１０のＥｘｃｅｌから読込み、自動テスト５０で実行し、各コマンドをテスト操作９０に転送する。
【０１９９】
自動検証１１の操作例として、図６に示す通り、「ＣＰＵ  Ｓｅｌｅｃｔ」１１−１でマイコンシステムを制御するデバッガを選択し、「ファイル選択」１１−２でテストケース１０のＥｘｃｅｌファイルを読込み、「シート選択」１１−３でＥｘｃｅｌファイル内のテストするシートを選択し、「モジュール」１１−４で複数のモジュールテストを表示したリストからテストするモジュールを選択した後、「開始」ボタン１１−５で自動テストを開始する。
【０２００】
自動検証を開始すると、テスト操作９０で実行するコマンド、すなわちテスト対象プログラム２２５からパッチを当てる無効コードの検索条件を変更するコマンド例として、
ｄｃｐｕＳＴＡＴＵＳ（２，３，”ｐａｔｃｈＲｅｐｌａｃｅ＝”００００００００”）；
の場合は、テスト操作９０でコマンドを解析して、第１引数でマイコンシステム２を選択し、第２引数でテスト環境の設定モードを指定し、第３引数で、パッチを当てるテスト対象プログラム２２５からパッチマークを検索する命令コードとして、”００００００００”をパッチコード定義１００にて変更する。
【０２０１】
また、テスト対象プログラム２２５に実装した無効命令コードであるパッチマークを指定したシンボル名から検索するバイト数の長さを指定するコマンド例として、
ｄｃｐｕＳＴＡＴＵＳ（２，３，”ｐａｔｃｈＳｅｒｃｈ＝”０ｘ２００”）；
の場合は、第１引数でマイコンシステム２を選択し、第２引数でテスト環境の設定モードを指定し、第３引数で、テスト操作９０でコマンド解析してパッチマークを検索する最大バイト数を０ｘ２００バイトに変更する。
【０２０２】
テスト環境設定するテスト操作９０の手動操作例として、図７の９０−１，９０−２に示す通り、「ＣＰＵ  Ｓｅｌｅｃｔ」でマイコンシステムを制御するデバッガを選択した後、「ＳｔａｔｕｓＳｅｔ」の「Ｓｅｎｄ」で設定するコマンドを記述し、「ＳｔａｔｕｓＳｅｔ」ボタンをクリックすることで、選択したデバッガにテスト環境を設定する。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０２０３】
（パッチ設定Ｓ２１２）
モジュールテストする状態に移行した後、モジュールテストができるようにドライバプログラムおよびスタブプログラムを実行するためのパッチの設定を行う。パッチの書込みアドレス指定方法には、直接指定するアドレス値と、間接にパッチアドレスを取得する２通りの方法がある。
【０２０４】
ＣＡＬＬｐａｔｃｈＡＳ３２のアドレスにドライバＡＳ９３へ関数呼び出しする命令を入れるパッチのコマンド例では、直接アドレス指定する方法は、
ｄｃｐｕＰＡＴＣＨＳＥＴ（２，”ｍａｉｎ”，”ＤｒｖＡ”，”ＤＣＡＬＬ”）；
となり、テスト操作９０でコマンドを解析して、パッチ設定１１０にパッチを設定する（２，”ｍａｉｎ”，”ＳｔｕｂＡ”，”ＤＣＡＬＬ”）のパラメータを渡す。第１引数の２より、マイコンシステム２に対してコマンドを発行する。第４引数の”ＤＣＡＬＬ”より、第２引数の”ｍａｉｎ”アドレスに、”ＤｒｖＡ”へ関数呼び出しするパッチを書込む。
【０２０５】
間接的にパッチアドレスを取得する方法は、
ｄｃｐｕＰＡＴＣＨＧＥＴ（２，”ｍａｉｎ”，”ＤｒｖＡ”，”ＣＡＬＬ”，Ａ）；
となり、テスト操作９０でコマンドを解析して、パッチ設定１１０にパッチを設定する（２，”ｍａｉｎ”，”ＤｒｖＡ”，”ＣＡＬＬ”，Ａ）のパラメータを渡す。このパラメータの動作は、第１引数でマイコンシステム２を選択し、第２引数の”ｍａｉｎ”アドレスから第５引数のＡ番目のパッチマークのアドレスに、第３引数の”ＤｒｖＡ”関数を呼び出す命令をパッチ設定することになる。この動作を行うために、”ｍａｉｎ”アドレスより、パッチコード定義１００に設定したパッチマークの命令コードと同じコードをテスト対象プログラム２２５から検出するために、コード読書き１６０から第１引数で指定したデバッガ２００のテスト対象プログラム２２５の”ｍａｉｎ”アドレスを先頭にパッチマークを検出するために、パッチコード定義１００で設定したサイズの命令コードをテスト対象プログラム２２５から読込み、読込んだコードからパッチ設定１１０でパッチマークをサーチする。サーチにあたり、第５引数のＡ番目のパッチマークを検出するまでサーチを行い、Ａ番目のパッチマークのアドレスを検出する。
【０２０６】
パッチを書込むアドレスを検出すると、そのアドレスをパッチ設定１１０からパッチ退避１２０に退避番号を付けて退避し、”ＤｒｖＡ”関数を呼び出す”ＣＡＬＬ”命令コードを生成し、パッチアドレスとパッチ命令コードとパッチを当てるデバッガ番号をコード読書き１６０へ渡す。
【０２０７】
コード読書き１６０は、パッチ設定１１０から受けたテスト対象プログラム２２５の命令コードを書き換えるパッチアドレスとパッチ命令コードをマイコン選択１９０に渡す。
【０２０８】
マイコン選択１９０は、ＡｃｔｉｖｅＸで接続したデバッガ２００からＩＣＥ２１０で動作するテスト対象プログラム２２５の命令コードに書き換える。
【０２０９】
次に、ＪＭＰｐａｔｃｈＤＳ７６のアドレスにＣＡＬＬｐａｔｃｈＡＳ３２にジャンプする命令を入れるパッチを設定するために、パッチの書込みアドレス指定方法は、直接指定するアドレス値と、間接にパッチアドレスを取得する２通りの方法がある。
【０２１０】
ＪＭＰｐａｔｃｈＤＳ７６のアドレスにＣＡＬＬｐａｔｃｈＡＳ３２のアドレスにジャンプする命令を入れるパッチのコマンド例では、直接アドレス指定する方法は、
ｄｃｐｕＰＡＴＣＨＳＥＴ（２，”ｍａｉｎ，”ＣＡＬＬｐａｔｃｈＡ”，”ＤＪＭＰ”）；
により、テスト操作９０でコマンドを解析して、パッチ設定１１０にパッチを設定する（２，”ｍａｉｎ”，”ＣＡＬＬｐａｔｃｈＡ”，”ＤＪＭＰ”）のパラメータを渡す。第１引数でマイコンシステム２を選択し、第４引数の”ＤＪＭＰ”より、第２引数の”ｍａｉｎ”アドレスに、ＣＡＬＬｐａｔｃｈＡＳ３２へジャンプするパッチを書込む。
【０２１１】
間接的にパッチアドレスを取得する方法は、
ｄｃｐｕＰＡＴＣＨＳＥＴ（２，”ｍａｉｎ”，”ＣＡＬＬｐａｔｃｈＡ”，”ＪＭＰ”，Ａ）；により、テスト操作９０でコマンドを解析して、パッチ設定１１０にパッチを設定する（２，”ｍａｉｎ”，”ＣＡＬＬｐａｔｃｈＡ”，”ＪＭＰ”，Ａ）のパラメータを渡す。このパラメータの動作は、第１引数でマイコンシステム２を選択し、第２引数の”ｍａｉｎ”アドレスから第５引数のＡ番目のパッチマークのアドレスに、第３引数の”ＣＡＬＬｐａｔｃｈＡ”アドレスにジャンプする命令をパッチ設定することになる。
【０２１２】
この動作を行うために、”ｍａｉｎ”アドレスより、パッチコード定義１００に設定したパッチマークの命令コードと同じコードをテスト対象プログラム２２５から検出するために、コード読書き１６０から第１引数で指定したデバッガ２００のテスト対象プログラム２２５の”ｍａｉｎ”アドレスを先頭にパッチマークを検出するために、パッチコード定義１００で設定したサイズの命令コードをデバッガ２００から読込み、読込んだコードからパッチ設定１１０でパッチマークをサーチする。サーチにあたり、第５引数のＡ番目のパッチマークを検出するまでサーチを行い、Ａ番目のパッチマークのアドレスを検出する。
【０２１３】
パッチを書込むアドレスを検出すると、そのアドレスをパッチ設定１１０からパッチ退
避１２０に退避番号を付けて退避し、”ＣＡＬＬｐａｔｃｈＡ”アドレスにジャンプする”ＪＭＰ”命令コードを生成し、パッチアドレスとパッチ命令コードとパッチを当てるデバッガ番号をコード読書き１６０へ渡す。
【０２１４】
コード読書き１６０は、パッチ設定１１０から受けたテスト対象プログラム２２５の命令コードを書き換えるパッチアドレスとパッチ命令コードをマイコン選択１９０に渡す。
【０２１５】
マイコン選択１９０は、ＡｃｔｉｖｅＸで接続したデバッガ２００からＩＣＥ２１０で動作するテスト対象プログラム２２５の命令コードに書き換える。
【０２１６】
以上により、図１１に示す通り、初期設定ＡＳ２２を実行後に、送信準備ＡＳ４２、送受信ＡＳ６２、受信処理ＡＳ８２のテストするためのドライバプログラムであるＤｒｖＡ関数を呼び出し、送信準備ＡＳ４２、送受信ＡＳ６２、受信処理Ｓ８２を実行後に、繰返し実行するためにＣＡＬＬｐａｔｃｈＡＳ３２にジャンプすることで、送信準備ＡＳ４２、送受信ＡＳ６２、受信処理Ｓ８２の各モジュール結合したテストができるテスト対象プログラム２２５に変更したとなる。
【０２１７】
パッチ設定するテスト操作９０の手動操作例として、図７の９０−４に示す通り、「ＰａｔｃｈＳｅｔ」でパッチを当てる無効命令コードを検索開始するアドレスまたはシンボル名を記述し、無効コードを記述した無効命令コードのアドレスに、Ｃａｌｌ／Ｂｒのチェックボックスに設定し、「から」にＣａｌｌ／Ｂｒのチェックボックスで指定した命令でジャンプ先のアドレスに飛ぶ命令コードのパッチを書込んだ後、「ＰａｔｃｈＳｅｔ」ボタンをクリックすることで、選択したマイコンシステムのデバッガを制御する。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０２１８】
（マイコンシステム２のモジュール入口ブレーク設定Ｓ２２２）
ＤｒｖＡＳ９４を実行する前に、テスト対象プログラム２２５の入力パラメータを設定するために、ＣＡＬＬｐａｔｃｈＡを実行する直前でブレーク停止させるため、ブレーク設定を行うために、図１０に示す通りのテストスクリプトで、
ｄｃｐｕＢＲＥＡＫＳＥＴ（２，”ＣＡＬＬｐａｔｃｈＡ”）；
をテスト操作９０でコマンド解析し、パッチ設定以外のコマンドであれば、リモートデバッガ１５０からマイコン選択１９０を通して、コマンドの第１引数によりデバッガ２００を選択し、ＣＡＬＬｐａｔｃｈＡＨアドレスでブレーク設定指示をする。
【０２１９】
リモートデバッガ１５０からデバッガ２００にブレーク設定するときに、合わせてブレーク停止判定を行うために、完了判定設定にブレーク停止時に、デバッガ２００からコールバック１５２に通知されるデータと同じ値を設定する。
【０２２０】
具体的には、リモートデバッガ１５０からデバッガ２００にブレーク設定するときに、合わせてブレーク停止判定を行うために完了判定設定１５３に、ブレーク停止時に、デバッガ２００からコールバック１５２に通知されるデータと同じデータを設定する。例えば、ブレーク停止した場合にコールバッグ１５２に通知データは２５を設定する。通知データの２桁目の２がデバッガ２００からの通知となり、１桁目の５がブレーク停止したことを示す。また、リモートデバッガ１５０が発行した後のデバッガからコールバッグ１５２に通知し、完了判定１５４でリモートデバッガ１５０が発行したコマンドの完了したデータを予めテスト操作９０から完了判定設定１５３に設定するテストスクリプトコマンドとして、例えば、
ｄｃｐｕＣＢＷＡＩＴ（２５，３０００）；
がある。第１引数で、デバッガ２００からのブレーク停止の通知の期待値で、第２引数が３０００ミリ秒以内に通知が来なければタイムアウト時間になる。
【０２２１】
ブレーク設定するテスト操作９０の手動操作例として、図７の９０−１でデバッガ２００を選択し、９０−５に示す通り、「ＢｒｅａｋＳｅｔ」の「ａｄｄｒｅｓ」でブレークポイントを設定するアドレスまたはシンボル名を記述し、「ＢｒｅａｋＳｅｔ」ボタンをクリックすることで、選択したマイコンシステムのデバッガを制御する。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０２２２】
（入口ブレーク停止操作Ｓ２３２）
ブレーク設定後、送信準備ＡＳ４２の入口で、ブレーク停止させるために、デバッガを制御するスクリプトをテストケース１０から自動テスト５０で読出したテストスクリプトを実行する。実行するテストスクリプト例として、マイコンをリセットして実行開始し、リモコンなどから受信したデータからキーコードを格納するＲＡＭに直接キーコードデータを書込むなどで、ブレーク停止させる。
【０２２３】
ブレーク停止時にデバッガ２００からブレーク停止したことをコールバック１５２に通知し、テスト操作９０でブレーク停止を表示する。また、完了判定１５４にブレーク停止した通知データを送る。完了判定１５４は、リモートデバッガ１５０がブレーク設定コマンドを発行時に完了判定設定１５３に設定したブレーク停止の期待値の通知データと同じか判定する。同じであれば、リモートデバッガ１５０が、次のデバッガ２００または、デバッガＢ２３０を制御するＲＡＭ読書きなどのコマンド待ちを解除し、各デバッガを制御することができる。
【０２２４】
マイコンをリセットして実行開始キーコード書込むテストスクリプト例として、
ｄｃｐｕＲＥＳＥＴ（２）；
ｄｃｐｕＧＯ（２）；
ｄＰＵＴ（２，”ｋｅｙｃｏｄｅ”，１，０ｘ１ｅ）；
を記述すれば、自動テスト５０でテストスクリプト１２を実行し、コマンドをテスト操作９０に渡して、コマンド解析した結果、全てのコマンドがパッチ設定以外のコマンドのため、リモートデバッガ１５０からマイコン選択１９０を通して、コマンドの第１引数よりデバッガ２００にマイコンリセットし、マイコン実行し、ｋｅｙｃｏｄｅ変数に１バイトデータの０ｘ１ｅを書込む指示を行う。
【０２２５】
ブレーク停止操作を行うためにデバッガの実行制御を行うテスト操作９０の手動操作例として、図７の９０−１でデバッガ２００を選択し、９０−６に示す通り、「ＲＥＳＥＴ」ボタンをクリックすることで、マイコンをリセットできる。また、「ＧＯ」コマンドでマイコンの実行を開始する。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０２２６】
（入力パラメータ設定Ｓ２５２）
送信準備ＡＳ４２の入口でブレーク停止した後、テスト対象プログラム２２５の通信テストするための入力パラメータを設定したテストケース１０からテストスクリプトを自動テスト５０が読込む。テストスクリプトに記述した送信準備ＡＳ４２の実行を制御する自動変数やグローバル変数などをテスト操作９０でコマンド解析し、パッチ以外のコマンドなので、リモートデバッガ１５０からマイコン選択１９０で指定したデバッガのテスト対象プログラム２２５のＲＡＭデータに書込む。
【０２２７】
入力パラメータの設定として、関数の引数や構造体のポインタのデータを設定するテストスクリプト例として、
ｄｃｐｕＶＡＬＥＸＥＣ（２，”ｐａｒａｍ１＝０ｘ１２３”）；
ｄｃｐｕＶＡＬＥＸＥＣ（２，”ｐｔｒ−＞ｄａｔａ＝０ｘａ２”）；
を記述すれば、自動テスト５０でテストスクリプトを実行し、コマンドをテスト操作９０に渡す。テスト操作９０にてコマンド解析した結果、全てのコマンドがパッチ設定以外のコマンドのため、リモートデバッガ１５０からマイコン選択１９０を通して、コマンドの第１引数よりデバッガ２００にｐａｒａｍ１変数に０ｘ１２３を書込み、ｐｔｒ−＞ｄａｔａ構造体のポインタに０ｘａ２データを書込む指示を行う。
【０２２８】
ブレーク停止後、入力パラメータを設定するためのテスト操作９０の手動操作例として、図７の９０−７に示す通り、「ＶａｌＣｍｄ」ボタンで自動変数の書き込みや、「ＲＡＭ−ＲＷ」ボタンでグローバル変数の書き込みができる。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０２２９】
（マイコンシステム３のモジュール出口ブレーク設定Ｓ２６２）
送信準備ＡＳ４２をテストするための入力パラメータのデータ書き込みを完了すると、送信準備ＡＳ４２を実行し、送受信ＡＳ６２でテスト対象システムＢ２５５にデータを送信した後、テスト対象プログラムＢ２５５の送受信ＢＳ６４で受け取ったデータを受信処理ＢＳ８４で実行完了する出口にブレーク設定を行うために、図１０に示す通りのテストスクリプト例として、
ｄｃｐｕＢＲＥＡＫＳＥＴ（３，”ＪＭＰｐａｔｃｈＨ”）；
を記述すれば、自動テスト５０でテストスクリプトを実行し、コマンドをテスト操作９０に渡す。テスト操作９０にてコマンド解析した結果、全てのコマンドがパッチ設定以外のコマンドのため、リモートデバッガ１５０からマイコン選択１９０を通して、コマンドの第１引数よりデバッガＢ２３０のＪＭＰｐａｔｃｈＨアドレスにブレーク設定を指示する。
【０２３０】
リモートデバッガ１５０からデバッガＢ２３０にブレーク設定するときに、合わせてブレーク停止判定を行うために完了判定設定１５３に、ブレーク停止時に、デバッガＢ２３０からコールバック１５２に通知されるデータと同じデータを設定する。例えば、ブレーク停止した場合にコールバッグ１５２に通知データは３５を設定する。通知データの２桁目の３がデバッガＢ２３０からの通知となり、１桁目の５がブレーク停止したことを示す。また、リモートデバッガ１５０が発行した後のデバッガからコールバッグ１５２に通知し、完了判定１５４でリモートデバッガ１５０が発行したコマンドの完了したデータを予めテスト操作９０から完了判定設定１５３に設定するテストスクリプトコマンドとして、例えば、
ｉＲｅｔ＝ｄｃｐｕＣＢＷＡＩＴ（３５，３０００）；
がある。第１引数で、デバッガＢ２３０からのブレーク停止の通知の期待値で、第２引数が３０００ミリ秒以内に通知が来なければタイムアウト時間になる。
【０２３１】
ブレーク設定するテスト操作９０の手動操作例として、図７の９０−１でデバッガＢ２３０を選択し、９０−５に示す通り、「ＢｒｅａｋＳｅｔ」の「ａｄｄｒｅｓ」でブレークポイントを設定するアドレスまたはシンボル名を記述し、「ＢｒｅａｋＳｅｔ」ボタンをクリックすることで、選択したマイコンシステムのデバッガを制御する。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０２３２】
（出口ブレーク停止操作Ｓ２７２）
出口ブレーク停止させるために、デバッガ２００およびデバッガＢ２３０を制御するスクリプトをテストケース１０から自動テスト５０で読出してテストスクリプトを実行する。
出口ブレーク停止させるために実行するテストスクリプト例として、
ｄｃｐｕＰＵＴ（２，”Ｅｖｅｎｔ”，１，０ｘ３ａ）；
ｄｃｐｕＧＯ（３）；
ｄｃｐｕＧＯ（２）；
を記述すれば、自動テスト５０でテストスクリプトを実行し、コマンドをテスト操作９０に渡す。テスト操作９０にてコマンド解析した結果、全てのコマンドがパッチ設定以外のコマンドのため、リモートデバッガ１５０からマイコン選択１９０を通して、コマンドの第１引数よりデバッガ２００にＥｖｅｎｔ変数に１バイトの０ｘ３ａデータを書込む指示を行う。続いて、ｄｃｐｕＧＯ（３）で、デバッガＢ２３０を実行しテスト対象プログラムＢ２５５を先に実行して、テスト対象プログラム２２５から送受信ＡＳ６２から送信データを受ける実行状態にする。続いて、ｄｃｐｕＧＯ（２）で、デバッガ２００を実行しテスト対象プログラム２２５を実行して、テスト対象プログラムＢ２５５に送受信ＡＳ６２からデータ転送する。テスト対象プログラムＢ２５５は、送受信ＢＳ６４で受信したデータを受信処理ＢＳ８４で処理完了するとブレーク停止する。
【０２３３】
ブレーク停止時にデバッガＢ２３０からブレーク停止した事をコールバック１５２に通知し、テスト操作９０でブレーク停止を表示する。また、完了判定１５４にブレーク停止した通知データを送る。完了判定１５４は、リモートデバッガ１５０がブレーク設定コマンドを発行時に完了判定設定１５３に設定したブレーク停止の期待値の通知データと同じか判定する。同じであれば、リモートデバッガ１５０が、次のデバッガ２００または、デバッガＢ２３０を制御するＲＡＭ読書きなどのコマンド待ちを解除し、各デバッガを制御することができる。
【０２３４】
ブレーク停止操作を行うためにデバッガの実行制御を行うテスト操作９０の手動操作例として、図７の９０−１でデバッガ２００を選択し、９０−６に示す通り、「ＲＡＭ−ＲＷ」ボタンをクリックすることで”Ｅｖｅｎｔ”変数のＲＡＭに０ｘ３ａを書き込み、９０−１でデバッガＢ２３０を選択し、「ＧＯ」コマンドでデバッガＢ２３０の実行を開始する。続いて、９０−１でデバッガ２００を選択し、「ＧＯ」コマンドでデバッガ２００の実行を開始する。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０２３５】
（実行結果データ読込みＳ２９２、実行結果判定Ｓ３０２）
ブレーク停止後、テストケース１０から自動テスト５０で読出したテストスクリプトを実行する。実行するテスト結果をデバッガから読込むテストスクリプト例として、
ｒｄＢｕｆ＝ｄｃｐｕＧＥＴ（３，”ｓｅｇ７＿ｂｕｆ”，４，０）；
ｒｄＣａｌ＝ｄｃｐｕＶＡＬＥＸＥＣ（３，”ｉＣａｌ”）；
を記述すれば、自動テスト５０でテストスクリプトを実行し、コマンドをテスト操作９０に渡す。テスト操作９０にてコマンド解析した結果、全てのコマンドがパッチ設定以外のコマンドのため、リモートデバッガ１５０からマイコン選択１９０を通して、コマンドの第１引数よりデバッガＢ２３０からグローバルのｓｅｇ７＿ｂｕｆ変数とローカルのｉＣａｌ変数を読み出すコマンドを発行する。ＩＣＥ−Ｂ２４０からｓｅｇ７＿ｂｕｆ変数とＣａｌ変数のデータを読み出し、デバッガＢ２３０からリモートデバッガ１５０にて読込み、テスト操作９０を経由して、結果集計６０に実行した結果のＲＡＭデータを渡す。結果集計６０は、実行結果として実行ログ２０に記録する。また、期待値４０で自動比較するためのデータが設定されている場合は、結果判定７０が期待値４０よりテスト項目に対応したデータを読込み判定する。判定した結果は、結果判定７０により判定ログ３０に書込む。
【０２３６】
また、テスト項目に対応した期待値４０が設定されて無ければ、実行結果を期待値４０に書込み、次回のテストを行うときの期待値データとすることができる。
【０２３７】
ブレーク停止後、出力パラメータ設定するためのテスト操作９０の手動操作例として、図７の９０−７に示す通り、「ＶａｌＣｍｄ」ボタンで自動変数の読み込みや、「ＲＡＭ−ＲＷ」ボタンでグローバル変数の読み込みができる。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０２３８】
（テスト項目完了Ｓ３１２）
送信準備ＡＳ４２の複数のテスト項目を実行する場合に繰返し実行するかの判定を行う。終了判定は、テストケース１０のテスト項目に終了記号を設定することで、自動テスト５０がテスト項目を読込んだ時点で、テスト完了か判断する。また、自動テストの操作で中断操作をした場合にも完了となる。
【０２３９】
（パッチ設定解除Ｓ３２２）
特定のモードにおいて、送信準備ＡＳ４２のテストを完了すると、プログラム動作を元に戻すため、テストケース１０から自動テストで読込んだテストスクリプトを実行し、パッチやブレークポイント設定の解除を行う。
【０２４０】
パッチ設定を解除するテストスクリプトの例として、ｃｐｕＰＡＴＣＨＣＬＲ（１，０）でパッチ設定した全てを元に戻すコマンドは、テスト操作９０でコマンド解析した後、コマンドのパラメータ（１，０）をパッチ解除１３０に渡す。パッチ解除１３０は、パラメータの第二引数の番号に応じて、全てのパッチ設定または特定のパッチ設定の命令コード領域を元に戻す動作を行う。パッチ設定を元に戻すために、パッチ退避１２０から退避した番号に対応したパッチアドレスと命令コードを読込み、パッチ解除１３０からコード読書き１６０に、元に戻すアドレスと命令コードを渡す。コード読書き１６０は、書き換えるデバッガ番号と、書き換えるアドレスと命令コードをマイコン選択１９０に渡す。マイコン選択１９０は、指定したデバッガとして例えば、デバッガ２００に接続したＩＣＥ２１０のテスト対象プログラム２２５の命令コードを書き換える。
【０２４１】
ブレークポイントの解除や、ＲＡＭデータを元に戻すコマンドは、テスト操作９０からマイコン選択１９０を通して、指定したデバッガを制御することで元に戻す。
【０２４２】
パッチ設定解除の操作を行うためのテスト操作９０の手動操作例として、図７の９０−８に示す通り、パッチ設定時の戻り値であるパッチ設定番号を使って、「ＰａｔｃｈＣｌｒ」の「ＣｌｒＮｏ」にパッチ番号を記述し、「ＰａｔｃｈＣｌｒ」ボタンをクリックすることで、パッチ前の状態に戻せる。また、ブレーク解除の操作は、図７の９０−９に示す通り、ブレーク設定時の戻り値のブレーク設定番号を「ＢｒｅａｋＣｌｒ」の「Ｎｏ」に設定し、「ＢｒｅａｋＣｌｒ」ボタンをクリックすることで、ブレークポイントを解除できる。なお、自動テスト５０から指示を受けると、手動操作と同じ動作を自動で行う。
【０２４３】
なお、図９に示す、パッチ設定Ｓ２１２やマイコンシステム２モジュール入口ブレーク設定Ｓ２２２や入口ブレーク停止操作Ｓ２３２などで実行する複数のテストスクリプトを一括して実行するために、エージェント１５６に渡して一時的に一括スクリプト実行１５８のメモリに置き、エージェント１５６からリモートデバッガ１５０に順次スクリプトを渡すことで、テスト操作９０を介さず一気に実行できる。複数のテストスクリプトを一括して実行する例として、
ｆｕｎｃＥｖｅｎｔ（）
｛
ｄｃｐｕＰＵＴ（２，”Ｅｖｅｎｔ”，１，０ｘ３ａ）；
ｄｃｐｕＧＯ（３）；
ｄｃｐｕＧＯ（２）；
ｉＲｅｔ＝ｄｃｐｕＣＢＷＡＩＴ（３５，３０００）；
ｉｆ（−１＝＝ｉＲｅｔ）
ｒｅｔｕｒｎ（”ＯＫ”）；
ｅｌｓｅ
ｒｅｔｕｒｎ（”ＮＧ”）；
｝
テストスクリプトである、ｄｃｐｕＰＵＴ（２，”Ｅｖｅｎｔ”，１，０ｘ３ａ）やｄｃｐｕＧＯ（３）などの複数のテストスクリプトのコマンドをｆｕｎｃＥｖｅｎｔ（）関数で囲み、ｆｕｎｃＥｖｅｎｔ（）関数自体を、エージェント１５６に渡して自動テスト５０やテスト操作９０を介さずに、ｄｃｐｕＰＵＴ（２，”Ｅｖｅｎｔ”，１，０ｘ３ａ）やｄｃｐｕＧＯ（３）などの複数のテストスクリプトのコマンドをリモートデバッガ１５０に順次渡して連続実行できる。また、連続実行を完了したときに、正常にテストスクリプトを実行できたいのか判断するために、ｆｕｎｃＥｖｅｎｔ（）関数の戻り値をｒｅｔｕｒｎ（）で設定できる。ｆｕｎｃＥｖｅｎｔ（）関数の戻り値は、テスト操作９０に返信され、テスト操作９０がエージェント１５６でテストスクリプトを正常に実行したのか確認できる。
【産業上の利用可能性】
【０２４４】
本発明は、テスト対象プログラム内の複数のモジュールテストを行う際に、テスト対象プログラムをデバッガにロードした状態で、個々のモジュールテストに合わせて、ダイナミックにドライバプログラムおよびスタブプログラムのパッチを当てて、テストできるため、システムテストにおいて、テスト対象プログラム動作を停止させることなく、各システム状態に合わせて、テスト対象プログラムに強制的に異常検知するなどのパッチを当てたシステムテストが簡単にでき、テスト網羅性が向上したプログラムモジュール検証方式に有用である。
【図面の簡単な説明】
【０２４５】
【図１】本発明の実施形態におけるモジュール検証システムのブロック図
【図２】本発明の実施形態における複数のテストケースを記述したファイル画像
【図３】本発明の実施形態におけるテストシーケンスのフローチャート
【図４】本発明の実施形態におけるテストスクリプト
【図５】本発明の実施形態におけるテスト対象プログラムのフローチャート
【図６】本発明の実施形態における自動検証の操作パネル画像
【図７】本発明の実施形態におけるテスト操作の操作パネル画像
【図８】本発明の実施形態における複数マイコンシステム間の通信をテストするためのモジュール検証システムのブロック図
【図９】本発明の実施形態における複数のマイコン間の通信テストシーケンスのフローチャート
【図１０】本発明の実施形態における複数のマイコン間でテストするスクリプト
【図１１】本発明の実施形態における複数マイコン間の通信テスト行うテスト対象プログラムのフローチャート
【図１２】本発明の実施形態におけるリモートデバッガからデバッガ制御する変換コマンド一覧
【符号の説明】
【０２４６】
２，３  マイコンシステム
１０  テストケース
１１  自動検証
１２  テストスクリプト
２０  実行ログ
３０  判定ログ
４０  期待値
５０  自動テスト
６０  結果集計
７０  結果判定
８０  パッチ制御
９０  テスト操作
１００  パッチコード定義
１１０  パッチ設定
１２０  パッチ退避
１３０  パッチ解除
１４０  パッチ検出
１５０  リモートデバッガ
１６０  コード読書き
１７０  スタブロード
１８０  スタブテーブル
１９０  マイコン選択
２００，２３０  デバッガ
２１０，２４０  ＩＣＥ
２２０，２２５，２５０，２５５  テスト対象プログラム
２９０  セット制御
３００  セット選択
【図１】
2008135008.tif 000003
【図２】
2008135008.tif 000004
【図３】
2008135008.tif 000005
【図４】
2008135008.tif 000006
【図５】
2008135008.tif 000007
【図６】
2008135008.tif 000008
【図７】
2008135008.tif 000009
【図８】
2008135008.tif 000010
【図９】
2008135008.tif 000011
【図１０】
2008135008.tif 000012
【図１１】
2008135008.tif 000013
【図１２】
2008135008.tif 000014