(57)【要約】      （修正有）【課題】再現が難しい不具合の検証を再現することを可能とする検証システム、検証装置、及び、車両制御装置を提供する。【解決手段】検証システムは、検証装置と検証対象（ＥＣＵ）によって構成される。検証装置はセンサや車両の動作をシミュレーションし、計算結果をＥＣＵに送信し、ＥＣＵは受け取った計算結果を元に動作することで、動作の検証を実施する。検証装置は、所定のテスト条件に基づいて制御プログラムへのテスト指示を生成する生成指示部３０６と、テスト指示に従ってプログラム実行部３０４がテスト対象となる制御プログラムを実行した実行結果を取得する結果取得部３０５と、を備える。テスト指示には、制御プログラムの実行タイミングが含まれ、生成指示部のタイミング調整部３０２は、所定のテスト条件に基づいて設定される比較値と比較して実行結果が異常でないと判断される場合には、実行タイミングを変更した新たなテスト指示を生成する。【選択図】図３
2017049627.tif 000002
【特許請求の範囲】
【請求項１】
制御プログラムの実行タイミングに起因する不具合を検証する検証システムであって、
所定のテスト条件に基づいて前記制御プログラムへのテスト指示を生成する指示生成部と、
前記テスト指示に従って前記制御プログラムが実行した実行結果を取得する結果取得部と、を備え、
前記テスト指示には、前記制御プログラムの実行タイミングが含まれ、
前記指示生成部は、前記所定のテスト条件に基づいて設定される比較値と比較して前記実行結果が異常でないと判断される場合には、前記実行タイミングを変更した新たなテスト指示を生成する検証システム。
【請求項２】
請求項１に記載の検証システムにおいて、
前記指示生成部は、前記実行結果に基づく新たな実行タイミングを設定する実行タイミング設定動作を繰り返し実行可能に構成され、
前記実行タイミング設定動作の繰り返し回数が多くなる程、最初の実行タイミングとの差が大きくなるように前記新たな実行タイミングを設定する検証システム。
【請求項３】
請求項１に記載の検証システムにおいて、
前記所定のテスト条件には、予め基準として設定される基準実行タイミングが含まれ、
前記指示生成部は、前記基準実行タイミングに基づいて異なる複数の実行タイミングを設定する検証システム。
【請求項４】
請求項１に記載の検証システムにおいて、
前記指示生成部は、前記新たなテスト指示を生成する際、前記実行結果をもたらした実行タイミングに基づいて新たな実行タイミングを設定する検証システム。
【請求項５】
請求項１に記載の検証システムを備え、
前記制御プログラムが実装される車両制御装置と接続可能に構成される検証装置。
【請求項６】
請求項１に記載の検証システムと、前記制御プログラムとが実装され、
前記所定のテスト条件を出力する検証装置と接続可能に構成される車両制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、検証システム、検証装置、及び、車両制御装置に関する。
【背景技術】
【０００２】
コントローラの検証技術としては、特許文献１では機種毎の仕様に応じた検証パターンを補正する技術が開示されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１４−５２３５８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来の機能検証方法では、特定タイミングに依存する不具合の確認が困難であった。例えば、速度などの外界の情報をセンシング中に機能を実行するスイッチなどが押されることで、センシング途中の意味の取れない値を使用してしまい不具合に繋がる。これらの特定のタイミングでのみ発生する事象は再現が困難であるため、機能検証時に確認することができないか、又は長い時間をかける必要があった。
【０００５】
本発明は、このような従来の課題を解決するための技術であり、再現が難しい不具合の検証を再現することを可能とする検証システム、検証装置、及び、車両制御装置を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明は、制御プログラムの実行タイミングに起因する不具合を検証する検証システムであって、所定のテスト条件に基づいて前記制御プログラムへのテスト指示を生成する指示生成部と、前記テスト指示に従って前記制御プログラムが実行した実行結果を取得する結果取得部と、を備え、前記テスト指示には、前記制御プログラムの実行タイミングが含まれ、前記指示生成部は、前記所定のテスト条件に基づいて設定される比較値と比較して前記実行結果が異常でないと判断される場合には、前記実行タイミングを変更した新たなテスト指示を生成する。
【発明の効果】
【０００７】
本発明によれば、このような従来の課題を解決するための技術であり、再現が難しい不具合の検証を再現することが可能となる。
【図面の簡単な説明】
【０００８】
【図１】実施例１の検証システムの構成を示す図。
【図２】検証対象となるＥＣＵの内部構造を示す図。
【図３】検証システムの機能構造を示す図。
【図４】検証対象となるプログラムの例。
【図５】テストシナリオのデータテーブル例。
【図６】テスト指示のデータテーブル例。
【図７】結果取得指示のデータテーブル例。
【図８】実行結果のデータテーブル例。
【図９】タイミング調整のフローチャート。
【図１０】実施例２における一定間隔のタイミング調整のフローチャート。
【図１１】実施例３におけるタイミング複製の例。
【図１２】タイミング複製時の間隔説明例。
【図１３】実施例４におけるタイミング複製処理のフローチャート。
【図１４】実施例５において、ＥＣＵにタイミング調整部を設ける構成を示す図。
【図１５】ＥＣＵにタイミング調整部を設けた構成の動作例。
【図１６】実施例６におけるデータテーブル例。
【発明を実施するための形態】
【０００９】
以下、本発明の実施形態に係る検証システムについて、図面を用いて説明する。
【実施例１】
【００１０】
図１に本実施例の構成を示す。本実施例の検証システムは、制御プログラムの実行タイミングに起因する不具合を検証する検証システムであって、所定のテスト条件に基づいて制御プログラムへのテスト指示を生成する指示生成部３０６と、テスト指示に従って制御プログラムが実行した実行結果を取得する結果取得部３０５と、を備え、テスト指示には、制御プログラムの実行タイミングが含まれ、指示生成部３０６は、所定のテスト条件に基づいて設定される比較値と比較して実行結果が異常でないと判断される場合には、実行タイミングを変更した新たなテスト指示を生成する。
【００１１】
本実施例では、検証システムは、検証装置１と検証対象によって構成される。本実施例における検証対象となるＥＣＵ（Electronic Control Unit）２は、仮想の検証環境(例えばHILS（Hardware-In-the-Loop Simulation）環境をサーバー上で再現した環境)上で動作する仮想的に再現されたＥＣＵ(仮想ＥＣＵ)であるが、実際のＥＣＵ(実ＥＣＵ)を対象としても良い。
検証装置１はセンサや車両の動作をシミュレーションし、計算結果をＥＣＵに送信し、ＥＣＵは受け取った計算結果を元に動作することで、動作の検証を実施する。検証装置１はＥＣＵ２の動作情報を受信し、解析することで検証結果を判定できる。
【００１２】
ＥＣＵ２は図２に示すように、データを受信、あるいはデータを送信するための通信装置２０１と、制御プログラムが格納された記憶装置であるＲＯＭ（Read Only Memory）２０２と、このＲＯＭ２０２に格納された制御プログラムを実行する演算回路であるＣＰＵ（Central Processing Unit）２０３と、ソフトウェアの状態を記憶する記憶装置となるＲＡＭ（Random Access Memory）２０４と、センサからの値を取得し制御対象のアクチュエータへと制御信号を出力する入出力装置２０５が備えられている。
【００１３】
図３は、検証装置１及びＥＣＵ２のＲＯＭ上に実装されるソフトウェアの構造を示す。検証装置１には、検証者によって所定のテスト条件が入力される。本実施例では、テスト条件をテストシナリオと呼ぶ。テストシナリオは、不具合が発生するであろうことを想定して検証者が作成したものであり、詳細は後述する。
【００１４】
テストシナリオ解釈部３０１は、テストシナリオの内容を解釈する機能を有し、テストシナリオを基にしてテストシナリオを制御プログラムで再現するためのテスト指示（検証指示）と結果取得指示を作成し出力する。検証指示には、制御プログラムの処理タイミングが含まれ、結果取得指示には、制御プログラムが処理した処理結果を取得する結果取得タイミングが含まれる。
【００１５】
そして、タイミング調整部３０２は、前記テスト指示と前記結果取得指示を取得し、後記するタイミング調整を行い処理タイミングと結果取得タイミングを変更し出力する。
【００１６】
テスト指示部３０３は、テスト指示を取得しプログラム実行部に出力する。
【００１７】
結果取得部３０５は、結果取得指示に含まれる結果取得タイミングをプログラム実行部３０４に入力する。
【００１８】
プログラム実行部３０４は、テスト対象となる制御プログラムを実行する機能を持つ。プログラム実行部３０４は、前記テスト指示を取得しテスト指示に記載された処理を実行する。また、プログラム実行部３０４は、前記結果取得部３０５より結果取得指示を取得し、結果取得指示で指示されたタイミングでデータを取得し、テスト実行結果を生成する。
【００１９】
そして、結果取得部３０５は、前記テスト実行結果を取得し、前記結果取得指示に記載されている期待値と、前記テスト実行結果の実行値を比較し、不具合が再現されたかを確認する。
【００２０】
不具合の発生が確認されなかった場合、結果取得部３０５は前記実行結果と前記テスト入力又は前記調整後テスト入力の期待値との差分を計算し差分情報を生成する。タイミング調整部３０２は、前記差分情報を取得し、前回の調整後テスト入力を補正し、新たな調整後テスト入力を作成し、再度テストを実行する。
【００２１】
図３の構成を用いることで、テストシナリオを入力することでテストが実行され、テスト実行結果を元に不具合が再現されるまでテストを繰り返すことで、確実に不具合を発生させる。
【００２２】
次に、この検証システムで扱う各データの例を示す。
【００２３】
図４に不具合が起きた場合のプログラム実行例を示す。テスト対象となる制御プログラムには少なくとも不具合の原因箇所である関数Ｘ４０２が実装されており、関数Ｘ４０２を実行するための呼び出し関数４０１が実装される。関数Ｘ４０２は変数Ａを使用する処理Ａ４０２−１と処理Ｂ４０２−２を実行する。そして関数Ｘは変数Ａの値を元に計算される変数Ｚを実行結果として出力する。そして割込みＹ４０３は変数Ａの値を書き換える処理を持つ関数である。不具合例では、割込みＹ４０３は関数Ｘ４０２の処理Ａ４０２−１と処理Ｂ４０２−２の間で呼び出され、本来同じ値で計算しなければならない２つの処理に不整合が発生する。この計算結果を元に変数Ｚが計算されることで、不具合発生に繋がる。ここで関数内の連続する２つの処理の間隔は非常に短く、処理の間に確実に割り込み関数を実行することは非常に困難である。
【００２４】
図５にテストシナリオ解釈部３０１が取得するテストシナリオの例を示す。本テストシナリオ５０１には、動作の実行順序、動作の内容、動作対象、動作終了後の期待値と動作の命令タイミングや、判定対象かの情報が記載されている。
【００２５】
動作の実行順序は、順番や絶対時間や関数などの処理を基点とした相対時間を用いて表される。動作の内容とは、処理の開始や、終了や、データの初期化や、データ取得によるログの獲得などの制御プログラムの動作内容を指定するものである。
【００２６】
動作対象とは、変数や、関数や、関数内の処理や、関数を実行させるタスクなどの単位や、メモリ番地や、ＣＰＵのコア番号などを指定ものである。
【００２７】
期待値には、初期化の場合は変数の初期値を指定でき、そのほかの処理の起動時間や終了時間やデータの値を指定でき、また、複数の値や値の範囲を指定できる。期待値は初期化の場合を除き、検証の判定時に実行結果と比較するために用いる。命令タイミングは、動作が実施されるタイミングやイベントを指定する。命令タイミングとしては、例えば絶対時間や、ある動作を基点とした相対時間や数字による順番のなどが指定される。判定対象とは、実行結果取得時に検証結果が正常か正常でないかを判定する際に用いられるものであることを表す。その他、制御プログラムの動作の指定に対する情報をテストシナリオに記載してもよい。本テストシナリオを記載することで、検証者は所望の検証内容を定義できる。
【００２８】
図６にテストシナリオ解釈部及びタイミング調整部が作成するテスト指示６０１を示す。テスト指示６０１には、検証に必要な動作と、動作を実行する命令タイミングと、動作の対象が記載される。動作には、初期化や、処理の実行や終了や、中断、再開や、センサ入力値の設定などの、ソフトウェアの動作を指定する。動作を実施するタイミングには、制御プログラムの実行開始からの絶対時間や、基点となる動作からの相対時間を指定することができる。本テスト指示６０１を生成することで、検証装置２はプログラム実行部３０４に対して所望する検証動作を指示できる。
【００２９】
図７にテストシナリオ解釈部及びタイミング調整部が作成する結果取得指示７０１を示す。結果取得指示７０１には、データ取得などの動作と、動作を実行する命令タイミングと、動作の対象と、対象の期待値と、対象が判定対象かの情報が記載される。
【００３０】
命令タイミングは、動作を実施するタイミングとして、制御プログラムの実行開始からの絶対時間や、基点となる動作からの相対時間を指定する。対象には、関数や関数を動作させるタスクなどの起動終了時刻などや、変数やメモリ番地などの値を保存している先を記載できる。期待値には、対象に応じた値が記載され、起動終了時刻に対しては時間情報や基点となる処理からの相対時間が記載され、変数やメモリ番地などでは記録されているであろう値が記載される。判定対象とは、実行結果取得時に検証結果が正常か正常でないかを判定する際に用いられるものであることを表す。このように結果取得タイミングを生成することで、検証装置２はプログラム実行部３０４に対して所望する検証結果を指定することができる。
【００３１】
結果取得指示７０１をテストシナリオ５０１の例から作成する方法を説明する。動作項目から、データ取得やそのほかの状態収集の動作を選択する。そして、実施条件を命令タイミングへと変換する。また、データ取得以外の動作の内、関数やタスクや割り込みなどの処理単位の開始、終了時刻のデータを取得する、結果取得タイミングデータを生成する。処理単位の開始、終了時刻を取得することで、後のタイミング調整が可能となる。
【００３２】
図８に結果取得指示７０１とテスト指示６０１に基づいてプログラム実行部３０４から取得された実行結果８０１を示す。実行結果８０１には、実行タイミングと、動作の対象と、実行値が記載される。動作の実行タイミングには、動作の対象が実行された絶対時間又は基点となる動作からの相対時間など、時間や順序を特定する情報が記載される。対象には、変数や、関数や、関数の終了時刻や開始時刻や、メモリ番地や、タスク（制御プログラムの実行単位）などが記載される。実行値には、対象に応じた値が記載され、数値や時間情報や真理値などが記載される。本実行結果を取得することで、本検証装置は制御プログラムの検証結果を判定できる。
ここで、本実施例では、仮想ＥＣＵを用いているため、プログラム実行部３０４から得られる実行値として、関数Ｘ開始後２０μｓｅｃ、３０μｓｅｃ、４０μｓｅｃといった具体的なタイミングの結果値を得ることができるが、実際のＥＣＵを検証対象として用いた場合にはこのような具体的なタイミングの結果値を得ることはできない。
【００３３】
次に、テストシナリオ５０１の例からテスト指示６０１とデータ取得指示７０１を作成する方法を説明する。
【００３４】
まず、テストシナリオ解釈部３０１は、動作のうちデータ取得以外の動作を選択する。そして、テスト指示に選択されていない動作を結果取得指示として選択する。次に、結果取得指示は、テスト指示の動作の対象が関数や割り込みやタスクなどの実行単位の場合、その開始時間と終了時間を取得する項目を生成する。
【００３５】
また、命令タイミングや期待値に記載された、動作の基点となる処理が関数や割り込みやタスクなどの実行単位の場合、その開始と終了時間を生成する。また、生成された項目の開始時刻の期待値は、テストシナリオ５０１に記載された命令タイミングを用いて記載する。例えば、割込みＹの期待値は、テストシナリオ５０１に記載された命令タイミングを使用することで、命令タイミングどおりに動いたかを確かめることができる。
【００３６】
また、関数Ｘの開始時刻はテストシナリオで指定されていないため、未記載となる。終了時刻は、関数毎に任意の時間を設定する、又はランダムに指定することもできる。あらかじめ関数の動作を推測し、検証者が任意の時間を設定することで、より正確な実行結果が得られ、不具合の再現が素早く行える。また、ランダムに設定する場合でも、本発明は後記のタイミング調整により、不具合の再現が行うことができ、検証者は事前の準備を軽減することができる。
【００３７】
次に、タイミング調整部３０２が行うタイミング調整に関して説明する。図９にタイミング調整のフローチャートを示す。ステップ９０１で処理が開始される。ステップ９０２では、結果取得指示７０１に記載された判定対象である対象の期待値と実行結果８０１の対象の実行値を比較する。ステップ９０３で制御プログラムが不具合を起こしていたかを判定する。実行値と期待値が一致するとき制御プログラムは正常に動作していると判定され、不具合が発見されないため、次にステップ９０６を実行する。
【００３８】
一方、ステップ９０３において、実行値と期待値が一致しないとき、不具合が発生したと判定し、ステップ９０４を実行する。ステップ９０４では、不具合内容を解析できるように実行結果を出力しステップ９０５で終了する。
【００３９】
ステップ９０６では、処理の開始時刻から終了時刻までの実行時間を調整する。結果取得指示７０１では、割込みＹ開始時刻から終了時刻まで５μＳＥＣかかることを期待していたが、実際に実行したとき、実行時間は１０μＳＥＣ必要になっていた。そこで、テストシナリオ解釈部３０１で生成する関数の終了時刻の設定値を１０μＳＥＣに修正する。実行結果８０１を用いることで、実際の実行時間を使用しより確かな検証が可能になる。
【００４０】
ステップ９０７では、処理の開始時刻を調整する。実行結果８０１では割込みＹの開始時刻は１２０μＳＥＣとなっているが、結果取得指示７０１では割込みＹの開始時刻の期待値は１０μＳＥＣとなりずれが生じている。このようなずれは、事前のタイミング計算の見積もり時に簡易化した検証外の制御プログラムや実機の動作情報のずれや、割り込みなどの場合は割り込みを起こすトリガ情報をＯＮにしてから、実際に割り込みが発生するまでのタイムラグなどから起こりうる。
【００４１】
そこで、タイミング調整部３０２は、開始時刻の実行値と期待値を合わせるためテスト指示６０１の命令タイミングを調整する。テスト指示６０１では割込みＹは関数Ｘ開始後１０μＳＥＣ後に開始するように指示しているが、実際には２０μＳＥＣ後に開始されている。そこで、命令タイミングを調整し、関数Ｘ開始直後に割込みを動作させる命令タイミングへと修正する。ステップ９０８で処理を終了する。
【００４２】
タイミング調整部は新たなテスト指示タイミングと結果取得タイミングを用いて再度検証を行う。
【００４３】
本実施例により、検証者はテストシナリオを設計し、検証装置に入力することで、タイミング調整部により、必ず想定どおりのテストシナリオを実行できる。即ち、検証シナリオを実行結果から補正し、再検証を繰り返し行うことで、想定する不具合を確実に実現し、不具合発生時の状況を特定することができる。また、もし実現できない場合には想定する不具合が発生しないことを確認若しくは証明できる。
【実施例２】
【００４４】
次に、実施例１のステップ９０７におけるタイミング調整手段に関する第２の実施例を示す。第１の実施例との違いは、タイミング調整の方法にあり、より効率的に不具合を再現することができる。本実施例では、指示生成部は、実行結果に基づく新たな実行タイミングを設定する実行タイミング設定動作を繰り返し実行可能に構成され、実行タイミング設定動作の繰り返し回数が多くなる程、最初の実行タイミングとの差が大きくなるように新たな実行タイミングを設定する。具体的には、不具合が発生しなかった際に、一定間隔ごとに処理の実行タイミングをずらすことで不具合を再現する。
【００４５】
図１０に本実施例におけるタイミング調整方法を示す。本処理はステップ９０７で行われる。ステップ１００１で本処理を開始する。ステップ１００２では、タイミング調整回数が偶数回か整数回かを確認している。これは、後段のステップで補正値の正負を切り替えることで、基点となるタイミング前後のタイミングを指定できるようにするためである。次にステップ１００３では、処理の開始時刻を補正する値であるタイミング補正値に、補正単位分の値を加える。
【００４６】
ここでタイミング補正値は、分や時間などの時間情報や、数値情報など、実行タイミングを調整可能な値を用いる。また、補正単位とは、タイミングをずらすための最小の幅であり、分や時間などの時間情報や、数値情報など、実行タイミングを調整可能な値を用いる。タイミング補正値を加えることで、一定間隔で幅を切り替えることができる。
【００４７】
ステップ１００４ではタイミング補正値の符号を正にすることで、未来方向へのタイミングを指定できる。ステップ１００５ではタイミング補正値の符号を負にすることで、過去方向のタイミングを指定する。ステップ１００６でテスト指示６０１の実行タイミングにタイミング補正値を加算する。本補正処理は、任意の回数もしくは任意の時間経過後処理をやめ、判定結果として不具合が再現されなかったと出力する。
【００４８】
本実施例を用いることで、事前の計算と実際の処理のずれにより、不具合を起こす処理タイミングの指定が困難な検証において、タイミングをずらすことで補正が可能になるため、検証者はずれの補正を行うことなく、不具合の再現が可能になる。
【実施例３】
【００４９】
次に、タイミング調整部３０２が生成するテスト指示６０１の調整方法に関する第２の実施例を示す。本実施例の検証システムでは、所定のテスト条件には、予め基準として設定される基準実行タイミングが含まれ、指示生成部３０６は、基準実行タイミングに基づいて異なる複数の実行タイミングを設定する。具体的には、本実施例では、テストシナリオで指定する処理である割込みＹを複数回実行するようにすることで、不具合の再現を行う。
【００５０】
図１１に本実施例の複製例を示す。割込みＹ１１０１は図４の割込みＹ４０３と同様の関数であり、そのタイミングチャートを示す。また、関数Ｘ１１０３は、図４の関数Ｘ４０２であり、そのタイミングチャートを示す。図４で示すように、割り込みＹ１１０１は処理Ａ４０２−１と４０２−３の間に実施されなければならない。しかし、図１１のように、実際の割り込み１１０２は上手く処理Ａと処理Ｂの間に収まるとは限らない。そこで、割込みＹ１１０１を複製の割り込み１１０２−１として複数回行うことで処理Ａと処理Ｂの間に割り込みを発生させる。
【００５１】
また、本実施例の検証システムでは、指示生成部３０６は、新たなテスト指示を生成する際、実行結果をもたらした実行タイミングに基づいて新たな実行タイミングを設定する。図１２を用いて、命令タイミングの指示方法を説明する。まず、複製間隔１２０１を設定する。本間隔は検証者の任意の間隔を指定する。次に、複製する本数又は、検証間隔１２０２を設定する。本数を指定する場合は、指定した命令タイミングを中心として前後に等間隔の本数を配置する。検証間隔１２０２を指定した場合は検証間隔１２０２内に収まるだけの複製割り込み１１０２−１を生成する。
【００５２】
本実施例により、複数のタイミングを一度に試行するため、より少ない再検証回数で不具合の再現が可能になる。
【実施例４】
【００５３】
次に、複製タイミング指定時における、ステップ９０７におけるタイミング調整手段に関する第４の実施例を示す。第３の実施例との違いは、タイミング調整と複製を同時に行える点である。
【００５４】
第二の実施例において、タイミング調整部は補正単位を加えることで、タイミングをずらして行くことができる。図１３にタイミング調整部３０２における本実施例の処理を示す。ＳＴＥＰ１３０１で処理を開始する。ＳＴＥＰ１３０２において、実施例２のタイミング補正を行うこの時、補正単位を検証間隔１２０２とする。ＳＴＥＰ１３０３において命令タイミングの複製を行う。ＳＴＥＰ１３０４において、タイミング調整部３０２以降の検証を行う。ＳＴＥＰ１３０５において、判定結果がすべて正常値の場合再検証と判定する。ＳＴＥＰ１３０７において、複製タイミングを破棄し、再度ＳＴＥＰ１３０２を実施する。ＳＴＥＰ１３０６で検証を終了する。
【００５５】
本実施例により、複製タイミングを重複させることなく、タイミング調整とタイミング複製が行い、高速かつ確実に不具合の再現を行う。
【実施例５】
【００５６】
次に、第５の実施例を示す。第１の実施例との違いは、タイミング調整部と結果取得部がＥＣＵ２に配置される点である。この実施例では、ＥＣＵ２として、実ＥＣＵを対象としており、ＥＣＵ２には、検証システムと、制御プログラムとが実装され、所定のテスト条件を出力する検証装置と接続可能に構成される。
【００５７】
図１４に本実施例の構成を示す。検証装置１はテストシナリオ解釈部３０１を有する。ＥＣＵ２はプログラム実行部３０４と結果取得部３０５とタイミング調整部３０２とテスト指示部３０３とを有する。テスト指示部３０３は、テストシナリオ解釈部３０１からテスト指示を受け取り、プログラム実行部へ指令する。タイミング調整部３０２は結果取得部３０５が取得した実行結果に基づいてタイミングを調整し、テスト指示部３０３は、再度プログラム実行部３０４へテスト指示を入力する。
【００５８】
図１５に本構成時の動作を示す。検証装置１はＥＣＵ２に対してテスト実施要求を出力する。テスト指示要求はテスト指示６０１を含み、さらにプログラム実行部３０４内の制御プログラム（ＯＳ）に対してテストを実施する要求情報を出力する。テスト実施要求はタイミング調整部３０２と制御プログラム（ＯＳ）３０４−１に出力される。
【００５９】
制御プログラム（ＯＳ）３０４−１は、アクチュエータを制御する制御プログラムなどが実行される制御プログラム（タスク）の起動終了処理を管理する機能を持つ。制御プログラム（ＯＳ）３０４−１はテスト実施要求を受けると制御プログラムの動作をテストモードへと移行する。テストモードには、例えば、「指定された割り込み関数以外を起動させない」、「センサ入力の値を制限する」、「起動させるタスクを指定する」、「変数の状態を一時退避させる」など、検証に関連するデータや処理のみを起動させる機能が実行される。
【００６０】
テストモード遷移後、制御プログラム（ＯＳ）３０４−１は、制御プログラム（タスク）３０４−２を起動させる。制御プログラム（タスク）３０４−２は、テスト実施要求に含まれる変数や定数などの状態を用いて初期化を行う。初期化後タスクに登録されている各関数を実行する。制御プログラム（タスク）３０４−２実行中、制御プログラム（ＯＳ）はテスト実施要求時従って割り込みＹを実行する。
【００６１】
制御プログラム（タスク）３０４−２終了後、制御プログラム（タスク）３０４−２の変数情報を制御プログラム（ＯＳ）３０４−１はデータ取得部３０５に通知する。データ取得部３０５は、タイミング調整部から受け取ったテスト実施要求内の変数の期待値を用いて、制御プログラム３０４より受け取った結果を判定する。
【００６２】
判定結果が再検証を要求する時、つまり本発明の課題においては結果と期待値が全て一致し不具合を再現できなかった場合に、データ取得部３０５はタイミング調整部３０２に再テスト要求を出力する。
【００６３】
タイミング調整部３０２は実施例１から４までに記載のタイミング調整を行うことで、テストシナリオを修正する。タイミング調整部３０２はテストシナリオ修正後制御プログラム３０４−１に対してテスト実施要求を出力する。
【００６４】
本実施例の構成を採ることで、不具合の恐れがある動作に関するテスト指示を入力することで検証装置なしに確認できる。従って、大きな装置がなくとも検証を容易に行うことができる。
【実施例６】
【００６５】
次に、各データ構成に関する第６の実施例を示す。第１の実施例と異なる点は、結果取得タイミング及び実行結果に命令タイミング及び実行タイミング情報がない点である。
【００６６】
図１６に本実施例で用いるデータ構成を示す。図１６（ａ）は本実施例におけるテスト指示１６０１である。テスト指示１６０１には実行対象と実行タイミングが記載されており、実行対象はタスクや割り込みなどのオペレーティングシステムが動作可能な単位で指定される。
【００６７】
図１６（ｂ）は、初期化設定テーブル１６０２である。初期化設定テーブル１６０２には変数やメモリ番地などの値が格納される初期化対象と、その初期値が指定できる。初期化設定テーブル１６０２は、テスト指示１６０１に含まれても良い。
【００６８】
図１６の（ｃ）は、結果取得指示１６０３を表す。この結果取得指示１６０３は取得対象と期待値が記載される。取得対象は、変数名やメモリ番地など値を格納することができるものを記載する。期待値は、数値や変数型に応じた数値を指定し、単一の値だけでなく、範囲を指定しても良い。
【００６９】
結果取得部３０５は、本結果取得指示１６０３に記載されている期待値と実行値の数値情報を比較することで実行結果を判定し、タイミング調整部３０２は実施例２から４を用いてタイミング調整を行う。
【００７０】
本実施例は実施例１の結果取得指示７０１やテスト実行結果８０１と同じ情報を用いているが、結果取得指示のタイミング指定がない点が異なる。これは、システムによっては関数などの詳細な実行時間を記録する処理の負荷のために、検証対象となる制御プログラムが想定する動作をしない場合がある。例えば、仮想ＥＣＵではなく、実ＥＣＵを検証対象とした場合などである。このような場合にも、本実施例を用いることで、詳細な実行時間を記録できない制御プログラムにおいても、不具合を再現することが可能になる。
【符号の説明】
【００７１】
１  検証装置
２  ＥＣＵ
２０１  通信装置
２０２  ＲＯＭ
２０３  ＣＰＵ
２０４  ＲＡＭ
２０５  入出力装置
３０１  テストシナリオ解釈部
３０２  タイミング調整部
３０３  テスト指示部
３０４  プログラム実行部
３０５  結果取得部
４０１  呼び出し関数
４０２  関数Ｘ
４０２−１  関数Ｘの処理Ａ
４０２−２  関数Ｘの処理Ｂ
４０３  割込みＹ
５０１  テストシナリオ
６０１  テスト指示タイミング
７０１  結果取得タイミング
８０１  実行結果
９０１  タイミング調整処理開始
９０２  判定対象比較処理
９０３  判定結果確認
９０４  判定結果出力処理
９０５  処理終了
９０６  実行時間調整処理
９０７  開始時刻調整処理
９０８  処理終了
１００１  タイミング調整処理開始
１００２  タイミング調整回数確認
１００３  タイミング補正値加算処理
１００４  タイミング補正値符号変更処理
１００５  タイミング補正値符号変更処理
１００６  命令タイミング補正処理
１００７  処理終了
１１０１  割込みＹタイムチャート
１１０２  割込みＹ割込みタイミング
１１０２−１  割込みＹ複製タイミング
１１０３  関数Ｘタイムチャート
１２０１  複製間隔
１２０２  検証間隔
１３０１  処理開始
１３０２  タイミング補正処理
１３０４  タイミング複製処理
１３０５  検証処理
１３０５  検証結果判定
１３０６  処理終了
１３０７  複製タイミング破棄
１６０１  テスト指示タイミング
１６０２  初期化テーブル
１６０３  結果取得テーブル
【図１】
2017049627.tif 000003
【図２】
2017049627.tif 000004
【図３】
2017049627.tif 000005
【図４】
2017049627.tif 000006
【図５】
2017049627.tif 000007
【図６】
2017049627.tif 000008
【図７】
2017049627.tif 000009
【図８】
2017049627.tif 000010
【図９】
2017049627.tif 000011
【図１０】
2017049627.tif 000012
【図１１】
2017049627.tif 000013
【図１２】
2017049627.tif 000014
【図１３】
2017049627.tif 000015
【図１４】
2017049627.tif 000016
【図１５】
2017049627.tif 000017
【図１６】
2017049627.tif 000018