(57)【要約】  ソフトウェアプログラムのテストを高速化する。テスト対象であるソフトウェアプログラムが搭載されるマイクロコンピュータを擬似する仮想計算機２４０と、複数のテストシナリオの共通する部分をフェーズとして切り出すようにテストシナリオをフェーズに分割し、共通するフェーズに続く共通しないフェーズを共通するフェーズから枝分かれさせるように複数のテストシナリオをツリー化して記憶しておき、このツリー構造に従って、共通するフェーズを実行させた後に仮想計算機２４０の状態をスナップショットとして保存させるように第１のテストシナリオを仮想計算機２４０に実行させ、スナップショットにより共通するフェーズを実行した状態を再現させた後に共通しないフェーズを実行させるように第２のテストシナリオを仮想計算機２４０に実行させるテスト実行制御計算機１００とを有する。
2020166345.tif 000002
【特許請求の範囲】
【請求項１】
テスト対象であるソフトウェアプログラムが搭載されるマイクロコンピュータを擬似し、前記ソフトウェアプログラムを検証する仮想計算機と、
前記ソフトウェアプログラムを検証するための複数のテストシナリオを前記仮想計算機に実行させるテスト実行制御計算機とを有し、
前記テスト実行制御計算機は、前記複数のテストシナリオの互いに共通する部分をフェーズとして切り出すように前記テストシナリオをフェーズに分割し、共通するフェーズに続く互いに共通しないフェーズを前記共通するフェーズから枝分かれさせるように前記複数のテストシナリオをツリー化したシナリオ分割情報を記憶しておき、前記シナリオ分割情報のツリー構造に従って、前記共通するフェーズを実行させた後に前記仮想計算機の状態をスナップショットとして保存させるように第１のテストシナリオを前記仮想計算機に実行させ、前記スナップショットにより前記共通するフェーズを実行した状態を再現させた後に前記共通しないフェーズを実行させるように第２のテストシナリオを前記仮想計算機に実行させる、検証装置。
【請求項２】
前記テスト実行制御計算機は、変更された前記ソフトウェアプログラムの検証を行うとき、変更前ソフトウェアプログラムと変更後ソフトウェアプログラムとで値が一致するアクセス先アドレスを抽出して変更無しアドレス情報として記録し、前記第２のテストシナリオにおける前記共通するフェーズが、当該共通するフェーズにて前記変更前ソフトウェアプログラムを検証したテスト結果が良好であり、かつ、前記テストシナリオの先頭から当該共通するフェーズまでのアクセス先アドレスが前記変更無しアドレス情報に含まれているものであるとき、前記共通するフェーズの実行後の前記仮想計算機の状態を前記スナップショットにより再現させる、請求項１に記載の検証装置。
【請求項３】
前記テスト実行制御計算機は、前記テストシナリオの各フェーズについてのテスト結果が良好であり、前記シナリオ分割情報のツリー構造において、該フェーズに続くフェーズがあれば、該フェーズを前記仮想計算機に実行させた後の前記仮想計算機の状態をスナップショットとして保存するとともに、前記テストシナリオの先頭から該フェーズまでに前記仮想計算機がアクセスしたアクセス先アドレスを保存しておき、前記ソフトウェアプログラムが変更されたとき、該アクセス先アドレスを前記変更無しアドレス情報を生成するのに利用する、請求項２に記載の検証装置。
【請求項４】
前記テスト実行制御計算機は、前記スナップショットとして、前記仮想計算機のプロセッサの状態と、前記仮想計算機のメモリの状態と、を、前記仮想計算機に保存させる、請求項１に記載の検証装置。
【請求項５】
前記仮想計算機のプロセッサの状態は、前記プロセッサのレジスタに格納されているデータであり、
前記仮想計算機のメモリの状態は、前記メモリの全領域に格納されているデータである、
請求項４に記載の検証装置。
【請求項６】
前記マイクロコンピュータが、自動車に搭載される車載電子制御装置であり、
前記仮想計算機は、前記マイクロコンピュータを疑似するモデルと、前記マイクロコンピュータに対して前記自動車を疑似するシミュレータとを実行する、請求項１に記載の検証装置。
【請求項７】
テスト対象であるソフトウェアプログラムが搭載されるマイクロコンピュータを擬似する仮想計算機にて複数のテストシナリオを実行させることで前記ソフトウェアプログラムを検証する検証方法であって、
前記複数のテストシナリオを前記仮想計算機に実行させるテスト実行制御計算機が、前記複数のテストシナリオの互いに共通する部分をフェーズとして切り出すように前記テストシナリオをフェーズに分割し、共通するフェーズに続く互いに共通しないフェーズを前記共通するフェーズから枝分かれさせるように前記複数のテストシナリオをツリー化したシナリオ分割情報を記憶し、
前記テスト実行制御計算機が、前記シナリオ分割情報のツリー構造に従って、前記共通するフェーズを実行させた後に前記仮想計算機の状態をスナップショットとして保存させるように第１のテストシナリオを前記仮想計算機に実行させ、
前記スナップショットにより前記共通するフェーズを実行した状態を再現させた後に前記共通しないフェーズを実行させるように第２のテストシナリオを前記仮想計算機に実行させる、検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機を用いてソフトウェアを検証する技術に関し、特に、メカニズム、ハードウェアおよびソフトウェアで構成される組み込みシステムの開発に適した検証技術に関する。
【背景技術】
【０００２】
近年、自動車の車両の制御が高機能化し複雑化しており、それに伴い、１台の車両に搭載されるＥＣＵ（Electric Control Unit）の数が増加している。そして、それら複数のＥＣＵが相互に連動してシステムとして１台の車両の制御を行っている。このように車両を制御するシステムが複雑化しているため、ソフトウェアプログラムの一部の修正が設計者も意図していない範囲に影響し、不具合を生じさせることがある。そのため、ソフトウェアプログラムを修正したときには、システムとしての品質を保証するために、広範にわたる回帰テストを行うことが求められる。【０００３】
また、自動車の高い安全性および高い信頼性を確保するために、自動車の電子機能安全規格（ISO26262）、ＦＴＡ（故障の木解析）およびＦＭＥＡ（故障モード影響解析）などの知見あるいは手法を活用することが求められている。それらの活用は自動車の安全性および信頼性の向上につながるが、一方でテスト自体を増大させることにもなる。【０００４】
非特許文献１には、自動車を制御するシステムのソフトウェアプログラムを、仮想的なモデルおよびシミュレータを用いたクラウドコンピューティングによる仮想検証環境でテストすることが提案されている。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】宮崎義弘、「機能安全ISO26262と仮想ECU応用技術, p10, 次世代のソフト検証環境: V2Cloud」、［online］、2012年11月14日、[2019年1月11日検索]、インターネット<URL: http://www.edsfair.com/2012/special/pdf/eds2012_sp01_2.pdf >
【発明の概要】
【発明が解決しようとする課題】
【０００６】
非特許文献１に提案されているような仮想検証環境を用いることで、自動車を制御するソフトウェアプログラムを様々な条件でテストすることが可能となり、またそのテストを自動で実行することも容易になる。【０００７】
また、自動車の開発には短期化も求められている。そのため、試作車を作製することなく自動車を開発するといった自動車開発の試作レス化の動きが加速している。試作レスで自動車を開発する場合、ソフトウェアプログラムのテストには、実車が無い環境で、短期間で効率よく行い、かつ高い品質を確保することが求められる。【０００８】
しかし、仮想検証環境でのテストでは、実車の各部の機械および電子回路をそれぞれモデルおよびシミュレータで仮想的に模擬して行うことになるので、実行速度が低速になる。一般に仮想検証環境でのテストは、実車を使ったテストに比べると実行速度が1/100〜1/3000となる。【０００９】
また、近年では自動車に搭載される車載用マイコンは、動作周波数が上がり、マルチコア化および多機能化も進んでいる。それに伴い、仮想検証環境において車載用マイコンを模擬するマイコンモデルも複雑となり、シミュレーションの実行に要する処理負荷が増大している。【００１０】
これらに対して、非特許文献１に開示されているようなクラウドコンピューティングによる仮想検証環境では、複数の物理計算機を配備し、それらに並列でテストを実行させることでテスト全体を実行するのに要する時間を短縮することは可能である。【００１１】
しかしながら、クラウドコンピューティングによるシミュレーションで実車を使ったテストと同等の速度を得ようとすると、リソースとして多数の物理計算機を備えた大規模なクラウド環境の準備が必要となる。そして、その場合には、物理計算機に用いるツールについて物理計算機毎にそれぞれライセンスを取得する必要があり、コストも増大する。
このような問題点は、上述したような自動車開発に限らず、一般的なソフトウェアプログラムの開発においても同様に生じるものである。
本開示のひとつの目的は、ソフトウェアプログラムのテストを高速化する技術を提供することである。
【課題を解決するための手段】
【００１２】
本開示のひとつの態様による検証装置は、テスト対象であるソフトウェアプログラムが搭載されるマイクロコンピュータを擬似し、前記ソフトウェアプログラムを検証する仮想計算機と、前記ソフトウェアプログラムを検証するための複数のテストシナリオを前記仮想計算機に実行させるテスト実行制御計算機とを有し、前記テスト実行制御計算機は、前記複数のテストシナリオの互いに共通する部分をフェーズとして切り出すように前記テストシナリオをフェーズに分割し、共通するフェーズに続く互いに共通しないフェーズを前記共通するフェーズから枝分かれさせるように前記複数のテストシナリオをツリー化したシナリオ分割情報を記憶しておき、前記シナリオ分割情報のツリー構造に従って、前記共通するフェーズを実行させた後に前記仮想計算機の状態をスナップショットとして保存させるように第１のテストシナリオを前記仮想計算機に実行させ、前記スナップショットにより前記共通するフェーズを実行した状態を再現させた後に前記共通しないフェーズを実行させるように第２のテストシナリオを前記仮想計算機に実行させる。【００１３】
また、本開示のひとつの態様による検証方法は、テスト対象であるソフトウェアプログラムが搭載されるマイクロコンピュータを擬似する仮想計算機にて複数のテストシナリオを実行させることで前記ソフトウェアプログラムを検証する検証方法であって、前記複数のテストシナリオを前記仮想計算機に実行させるテスト実行制御計算機が、前記複数のテストシナリオの互いに共通する部分をフェーズとして切り出すように前記テストシナリオをフェーズに分割し、共通するフェーズに続く互いに共通しないフェーズを前記共通するフェーズから枝分かれさせるように前記複数のテストシナリオをツリー化したシナリオ分割情報を記憶し、前記テスト実行制御計算機が、前記シナリオ分割情報のツリー構造に従って、前記共通するフェーズを実行させた後に前記仮想計算機の状態をスナップショットとして保存させるように第１のテストシナリオを前記仮想計算機に実行させ、前記スナップショットにより前記共通するフェーズを実行した状態を再現させた後に前記共通しないフェーズを実行させるように第２のテストシナリオを前記仮想計算機に実行させる。
【発明の効果】
【００１４】
本開示のひとつの態様によれば、テスト全体の計算負荷を下げることで、テストの実行時間を短くすることが可能となる。
【図面の簡単な説明】
【００１５】
【図１】本実施形態の検証装置が適用されるシミュレーションシステムの一例を示す図である。
【図２】図１に示したシミュレータの構成を示す図である。
【図３】図１に示したミュレーションシステムにおけるテスト全体の処理を説明するためのフローチャートである。
【図４】図１に示した実行結果ＤＢの構成を示す図である。
【図５】図１に示したシミュレーションシステムにおけるテストシナリオの分割方法とツリー化を説明するための図である。
【図６】図１に示したテスト実行制御部の具体的な処理を説明するためのフローチャートである。
【図７】図６に示したスキップ判定の詳細な処理を説明するためのフローチャートである。
【図８】図６に示したテスト結果の判定とスナップショットの保存処理を説明するためのフローチャートである。
【図９】図１に示したシミュレーションシステムにおいて１つのフェーズを実行する際のテスト実行制御部とシミュレータと仮想化ソフトウェアとの間の通信動作を説明するためのシーケンス図である。
【発明を実施するための形態】
【００１６】
以下に、本開示の実施形態について図面を参照して説明する。
図１は、本実施形態の検証装置が適用されるシミュレーションシステムの一例を示す図である。
本形態のシミュレーションシステムは図１に示すように、仮想計算機管理計算機２００と、テスト実行制御計算機１００とを有して構成されている。
【００１７】
仮想計算機管理計算機２００は、仮想計算機２４０を配備した物理的な計算機である。
仮想計算機２４０は、ゲストＯＳ２５０を有し、このゲストＯＳ２５０配下でマイコンモデル２７０を含むシミュレータ２６０を実行する機能を具備することで、テスト対象であるソフトウェアプログラムが搭載されるマイクロコンピュータを擬似し、ソフトウェアプログラムを検証するものである。また、仮想計算機管理計算機２００は、ホストＯＳ２１０を有し、このホストＯＳ２１０の配下で仮想化ソフトウェア２２０を実行し、特定のタイミングで仮想計算機２４０のプロセッサとなるＣＰＵ（Central Processing Unit）状態と、仮想計算機２４０のメモリ状態と、仮想計算機２４０の記憶装置の状態とを含めた仮想計算機の状態をスナップショットとしてスナップショット履歴２３０に保存する機能と、スナップショット履歴２３０に記録された情報を用いて仮想計算機２４０をある特定の状態に戻す機能を有する。このように、仮想計算機２４０のＣＰＵ状態と、仮想計算機２４０のメモリ状態と、仮想計算機２４０の記憶装置の状態とを含めた仮想計算機の状態をスナップショットとしてスナップショット履歴２３０に保存する機能を有することにより、スナップショットによりマイクロコンピュータの状態を再現することができる。また、一例として、仮想計算機２４０のプロセッサの状態が、プロセッサのレジスタに格納されているデータであり、仮想計算機２４０のメモリの状態が、メモリの全領域に格納されているデータである。その場合であれば、プロセッサのレジスタに格納されているデータとメモリの全領域のデータとをスナップショットとして記録するので、マイクロコンピュータの状態を再現することができる。
【００１８】
テスト実行制御計算機１００は、ロードファイル比較処理部１１０と、テスト実行制御部１２０とを有している。ロードファイル比較処理部１１０は、テスト実行後の新ＲＯＭ（Read Only Memory）ロードファイル３１０と、テスト実行前の旧ＲＯＭロードファイル３２０とを比較し、ＲＯＭ値が一致したアドレスをＲＯＭ一致アドレス１３０のファイルに出力する。
【００１９】
ここで、旧ＲＯＭロードファイル３２０は、マイコンのソフトウェアプログラムが修正された場合の修正前のソフトウェアプログラムによるロードファイルである。新ＲＯＭロードファイル３１０は、マイコンのソフトウェアプログラムが修正された場合の修正後のソフトウェアプログラムによるロードファイルである。また、テスト実行後は、マイコンのソフトウェアプログラムが修正された場合の修正後のソフトウェアプログラムによるテストを実行した後のことである。そして、テスト実行前は、修正後のソフトウェアプログラムによるテストを実行する前、すなわち修正前のソフトウェアプログラムによるテストを実行した後のことである。
【００２０】
テスト実行制御部１２０は、ＲＯＭ一致アドレス１３０と、前回のテストの実行結果ＤＢ３４０とに基づいて、ソフトウェアプログラムを検証するための複数のテストシナリオを仮想計算機２４０に実行させ、そのシミュレーション結果を実行結果ＤＢ３４０に書き戻す。実行結果ＤＢ３４０に記録される情報には、各テストシナリオによるテスト結果がＯＫであったかＮＧであったかと、そのテストにおいてアクセスされたＲＯＭアドレスと、が含まれる。
【００２１】
ここで前回のテストというのは、マイコンのソフトウェアプログラムが修正された場合の修正後のソフトウェアプログラムでのテストを実行する前に行われたテストである。すなわち、修正前のソフトウェアプログラムでのテストである。アクセスされるＲＯＭアドレスがソフトウェアプログラムの修正の影響を受けずかつテスト結果がＯＫであったところまでは、修正後のソフトウェアプログラムでのテストシナリオの実行が省かれる。
図２は、図１に示したシミュレータ２６０の構成を示す図である。
【００２２】
図２に示したシミュレータ２６０はマイコンモデル２７０を含んでいる。マイコンモデル２７０は図２に示すように、仮想的なＣＰＵやＲＡＭ（Random Access Memory）、ＲＯＭ、各種ペリフェラルを搭載しており、実機で実行可能なＣＰＵのオブジェクトファイルをロードして実行できるものである。ペリフェラルはＣＰＵが利用する各種機器である。アクセスされたＲＯＭ２７１のアドレス（アクセス先アドレス）は、ＲＯＭアクセスモニタ２６２によって記録される。ＲＯＭアクセスモニタ２６２は、前回のテストによるＲＯＭアクセス情報Ａ２６１の入力があれば、そのＲＯＭアクセス情報Ａ２６１に、今回のテストによる新たなＲＯＭ２７１のアクセス先アドレスを加えて、ＲＯＭアクセス情報Ｂ２６３として記録する。
【００２３】
以下に、上記のように構成されたシミュレーションシステムにおける処理について説明する。
まず、図１に示したシミュレーションシステムにおけるテスト全体の処理について説明する。
【００２４】
図３は、図１に示したシミュレーションシステムにおけるテスト全体の処理を説明するためのフローチャートである。
【００２５】
図１に示したシミュレーションシステムにおいてテストを実施する場合は、まず、テストを実施する者が、テストを開始するにあたり（Ｆ０１０）、実行結果ＤＢ３４０にテストＤＢを作成する（Ｆ０２０）。
【００２６】
図４は、図１に示した実行結果ＤＢ３４０の構成を示す図である。
【００２７】
図１に示した実行結果ＤＢ３４０には、図１に示したシミュレーションシステムにおけるテストの実行順序と、各テストのシミュレーションに必要なファイルと、各テストの実行結果とが格納される。新ＲＯＭロードファイル３１０のテスト実行前は、実行結果ＤＢ３４０には、旧ＲＯＭロードファイル３２０を用いたテストの結果が格納されている。新ＲＯＭロードファイル３１０のテスト実行後は、実行結果ＤＢ３４０に、新ＲＯＭロードファイル３１０を用いたテストの結果が格納される。
【００２８】
図１に示した実行結果ＤＢ３４０には、図４に示すような実行結果ＤＢ管理テーブルＤ１００が設定される。実行結果ＤＢ管理テーブルＤ１００は、テスト名Ｄ１１０と、テストシナリオＤ１２０と、テスト結果の期待値の格納先Ｄ１３０と、期待値とテスト結果との比較であるテスト結果Ｄ１３０と、テスト実行後のスナップショットの扱いを示すスナップショット情報Ｄ１５０と、テストを実行した際に格納されるＲＯＭアクセス情報格納先Ｄ１６０とを含んでいる。実行結果ＤＢ管理テーブルＤ１００は、テストが開始される前に予め作成されている。テスト開始時においては、テーブルの各項目はデータが入っていない状態となっている。
【００２９】
上記のようなテストＤＢを作成した後、テストを実行し（Ｆ０３０）、図４に示したようにテストの結果をテストＤＢに入力していくことでテスト結果ＤＢ１３０を更新する（Ｆ０３０）。
【００３０】
その後、全てのテストが完了したかどうかを判断し（Ｆ０４０）、テストが完了していない場合は、ソフトウェアプログラムに不具合があると考えられるので、不具合を修正する作業を行い（Ｆ０５０）、Ｆ０３０に戻ってテストをやり直す。また、全てのテストが完了した場合は、テストを終了する（Ｆ０６０）。
【００３１】
ここで、図１に示したシミュレーションシステムは、テストに係るテストシナリオを分割してツリー化しておき、そのツリーに従ってテストを実行する。以下に、テストシナリオのツリー化の方法について説明する。
図５は、図１に示したシミュレーションシステムにおけるテストシナリオの分割方法とツリー化を説明するための図である。
【００３２】
テスト実行制御部１２０は、図５に示すように、図１に示したシミュレーションシステムにおける検証で実行する複数のシナリオ１〜５をそれぞれ複数のフェーズＡ〜Ｃに分割してシナリオ分割票Ｓ１００を作成する。このシナリオ分割票Ｓ１００は、複数のシナリオ１〜５はそれぞれ元々１本のシナリオで構成されているところ、複数のシナリオ１〜５の互いに共通する部分をフェーズとして切り出すようにして行う。
【００３３】
テスト実行制御部１２０はその後、図５に示すように、共通するフェーズに続く共通しないフェーズを共通するフェーズから枝分かれさせるように複数のシナリオ１〜５をツリー化したシナリオ分割情報となるシナリオ分割ツリーＳ２００を作成する。テスト実行制御部１２０は、このツリーに従ってテストの実行順序を決めることになる。
【００３４】
例えば、図５の例において、シナリオ分割表Ｓ１００のシナリオ１〜３に着目すると、シナリオ１〜３は、それぞれにフェーズＡ，Ｂ，Ｃの３つに分けられている。シナリオ分割表Ｓ１００には、それぞれのフェーズＡ，Ｂ，Ｃのテストシナリオが矢印で示されている。３つのシナリオ１〜３においてフェーズＡとフェーズＢは共通であり、フェーズＣは３つのシナリオ１〜３で互いに異なる。この構成に応じて、テスト実行制御部１２０は、テストシナリオの実施順序を決めるツリーを作成する。本例の実行順序では、まず、フェーズＡのＰＴ．Ａ１とＰフェーズＢのＰＴ．Ｂ１をそれぞれ１回のみ実施する。そして、シナリオ１については更にフェーズＣのＰＴ．Ｃ１を実施する。シナリオ２についてはフェーズＢまでは実施を省き、フェーズＣのＰＴ．Ｃ２を実施する。シナリオ３についてはフェーズＢまでは実施を省き、フェーズＣのＰＴ．Ｃ３を実施する。
【００３５】
その際、テスト実行制御部１２０は、テストシナリオについての各フェーズのテスト終了時に期待値チェックを行う。期待値チェックとは、テストを実行した結果として得られた出力値と、予め想定されている期待値とを比較し、テストがＯＫであったかＮＧであったか判断する処理である。その後、当該フェーズに後続フェーズがある場合は、当該フェーズにおける仮想計算機２４０の状態をスナップショットとしてスナップショット履歴２３０に保存しておく。そして、異なるテストシナリオを仮想計算機２４０にて実行する際、共通するフェーズについては、スナップショット履歴２３０に保存されたスナップショットにより仮想計算機２４０に共通するフェーズを実行させた状態を再現させ、その後、それに続く共通しないフェーズを仮想計算機２４０に実行させる。なお、テスト実行制御部１２０は、各シナリオの実行順序の決め方の１つとして、シナリオ分割ツリーＳ２００をツリーとみなし、深さ優先探索の検索順にスケジューリングする。
【００３６】
このように、複数のテストシナリオに共通するフェーズを繰り返し実行するのではなく、スナップショットで、共通するフェーズを実行した後の仮想計算機の状態を再現することで、共通するフェーズの実行を省略するように、複数のテストシナリオを仮想計算機に実行させるので、ソフトウェアプログラムのテストを高速化することができる。
【００３７】
次に、図１に示したテスト実行制御部１２０の具体的な処理について説明する。
図６は、図１に示したテスト実行制御部１２０の具体的な処理を説明するためのフローチャートである。
テスト実行制御部１２０は、処理開始後（Ｆ１００）、まず、テストをスキップ（省略）するかどうかを判定する（Ｆ１１０）。
【００３８】
図７は、図６に示したスキップ判定の詳細な処理を説明するためのフローチャートである。
スキップ判定においては、テスト実行制御部１２０はまず、テストスキップのラベルを０にクリアする（Ｆ１１１）。
次に、例えば、変更されたソフトウェアプログラムの検証を行う場合、過去にそのソフトウェアプログラムについてテストを行ったかどうかの実績を確認し（Ｆ１１２）、テストの実績がある場合は、旧ＲＯＭロードファイル３２０を参照し、その前回のテスト結果が良好であったかどうかを判断する（Ｆ１１３）。ここで、テスト実行制御計算機１００のロードファイル比較処理部１１０は、新ＲＯＭロードファイル３１０および旧ＲＯＭロードファイル３２０を参照し、変更前のソフトウェアプログラムと変更後のソフトウェアプログラムとで値が一致するアクセス先アドレスを抽出して変更無しアドレス情報としてＲＯＭ一致アドレス１３０のファイルに記録しておく。
【００３９】
前回のテスト結果が良好であった場合は、テスト実行制御部１２０は、ＲＯＭ一致アドレス１３０を参照し、今回のテストに係るシナリオの先頭から共通するフェーズまでのアクセス先アドレスが、変更無しアドレス情報に含まれているかどうかを判断する（Ｆ１１４）。
【００４０】
そして、テストの実績がない場合、前回のテストの結果が良好ではない場合、あるいは、今回のテストに係るシナリオの先頭から共通するフェーズまでのアクセス先アドレスが、変更無しアドレス情報に含まれていない場合、テスト実行制御部１２０は、テストスキップのラベルを０のままとする（Ｆ１１５）。これにより、当該テストはスキップされずに実施されることになる。
【００４１】
一方、Ｆ１１４にて、今回のテストに係るシナリオの先頭から共通するフェーズまでのアクセス先アドレスが、変更無しアドレス情報に含まれている場合、テスト実行制御部１２０は、テストスキップのラベルを１とする（Ｆ１１６）。これにより当該テストはスキップされることとなる。
【００４２】
図６に戻り、テストスキップのラベルが１ではない場合は（Ｆ１２０）、テスト実行制御部１２０は、そのフェーズの前段フェーズがあるかどうかを判断する（Ｆ１３０）。前段フェーズがある場合、テスト実行制御部１２０は、前段フェーズのスナップショットをスナップショット履歴２３０からロードする旨の指示を出す（Ｆ１３１）。これにより、共通するフェーズの実行後の仮想計算機２４０の状態をスナップショットにより再現させることができる。
【００４３】
テスト実行制御部１２０は、Ｆ１３０にて前段フェーズが無いとき、あるいは、Ｆ１３１にてロード指示を行った後、次にテストの実行を指示し（Ｆ１４０）、テストが完了するのを待つ（Ｆ１４２）。テストが完了すると、テスト実行制御部１２０は、テスト結果の判定と仮想計算機２４０のスナップショットのスナップショット履歴２３０への保存と、テスト結果ＤＢ１３０の更新を行う（Ｆ１５０）。
【００４４】
図８は、図６に示したテスト結果の判定とスナップショットの保存とＤＢ更新の処理を説明するためのフローチャートである。
【００４５】
テスト実行制御部１２０は、テスト結果の判定において（Ｆ１５１）、テストシナリオのフェーズについてのテスト結果が良好である場合（Ｆ１５２）、図３に示したシナリオ分割ツリーＳ２００を参照してそのフェーズに続く後続フェーズがあるかどうかを判断する（Ｆ１５３）。後続フェーズがある場合は、テスト実行制御部１２０は、そのフェーズを仮想計算機２４０に実行させた後の仮想計算機２４０の状態をスナップショットとしてスナップショット履歴２３０に保存するとともに（Ｆ１５４）、テストシナリオの先頭から該フェーズまでに仮想計算機２４０がアクセスしたアクセス先アドレスとテスト結果（Ｆ１４０）にOKであることを保存することで実行結果ＤＢ３４０を更新する（Ｆ１５５）。そして、ソフトウェアプログラムが変更されたとき、保存されたアクセス先アドレスを変更無しアドレス情報を生成するのに利用することになる。テスト結果が良好でない場合（Ｆ１５２）、そのフェーズに続く後続フェーズがない場合（Ｆ１５３）、テスト実行制御部１２０は、仮想計算機２４０の状態をスナップショットとしてスナップショット履歴２３０に保存する処理を行わず、テスト結果（Ｆ１４０）にNGであることを保存することで実行結果ＤＢ３４０を更新する（Ｆ１５５）。
【００４６】
図６に戻り、その後、テスト実行制御部１２０は、全てのテストが完了したかどうかを判断し（Ｆ１６０，Ｆ１７０）、未実行のテストが残っている場合は、対象テストを更新し（Ｆ１８０）、Ｆ１１０の処理に戻りテストを継続し、処理を終了する（Ｆ１９０）。
【００４７】
このように、ソフトウェアプログラムが変更されたときには、変更前のテスト結果が良好でありかつ変更前と変更後でアクセス先アドレスの値が共通する場合に、第２のテストシナリオにおける、第１のテストシナリオと共通するフェーズのテストの実行を省略するので、ソフトウェアプログラムの変更で影響する部分については再テストを実行し、影響しない部分については処理を省略するということが可能となる。
【００４８】
また、テストシナリオの各フェーズについてテスト結果が良好であり、後続のフェーズがあるフェーズを実行させた後の仮想計算機の状態をスナップショットとして保存するとともに、テストシナリオの先頭からそのフェーズまでに仮想計算機がアクセスしたアクセス先アドレスを保存しておくので、ソフトウェアプログラムが変更されたとき、そのアクセス先アドレスを利用して変更無しアドレス情報を容易に生成することができる。
【００４９】
以下に、図１に示したシミュレーションシステムにおけるテスト実行制御部１２０とシミュレータ２６０と仮想化ソフトウェア２２０との間の通信動作について説明する。
【００５０】
図９は、図１に示したシミュレーションシステムにおいて１つのフェーズを実行する際のテスト実行制御部１２０とシミュレータ２６０と仮想化ソフトウェア２２０との間の通信動作を説明するためのシーケンス図である。
【００５１】
上述したテスト実行する際、テストシナリオの先頭フェーズでない場合は、テスト実行制御部１２０から仮想化ソフトウェア２２０に対して、スナップショットロード指示と、ロードするスナップショットを識別するスナップショットＩＤを発行する（Ｆ２０１）。
【００５２】
これを受けた仮想化ソフトウェア２２０は、スナップショット履歴２３０からスナップショットＩＤによって識別されるスナップショットをロードし、スナップショットのロードが完了すると、テスト実行制御部１２０に対してスナップショットロード完了報告を行う（Ｆ２０２）。なお、テストシナリオの先頭フェーズであれば、Ｆ２０１，Ｆ２０２は行われない。
【００５３】
次にテスト実行制御部１２０は、シミュレータ２６０に対して、シミュレーション開始指示と、テストシナリオと、ＲＯＭのロードファイルと、センサの入力情報やトレース情報等のその他シミュレーションに必要な付属ファイルとを発行する（Ｆ２０３）。
【００５４】
シミュレータ２６０は、テスト実行制御部１２０から発行された情報を用いてシミュレーションを実行し、シミュレーションが完了すると、テスト実行制御部１２０に対して、シミュレーション完了報告と、シミュレーション結果であるテスト実行結果とＲＯＭアクセス情報とを報告する（Ｆ２０４）。
【００５５】
テスト実行制御部１２０は、シミュレータ２６０から報告されたテスト結果を判定し、テスト結果が期待通りの動作であれば、仮想化ソフトウェア２２０に対し、スナップショットセーブ指示と、スナップショットを識別するためのスナップショットＩＤを指示する（Ｆ２０５）。
【００５６】
仮想化ソフトウェア２２０は、テスト実行制御部１２０からの指示に従って、テスト結果をスナップショットとしてスナップショット履歴２３０に保存し、保存が完了したところで、テスト実行制御部１２０に対してスナップショットセーブ完了を報告する（Ｆ２０６）。
【００５７】
図１に示したシミュレーションシステムにおいては、テスト実行制御計算機１００および仮想計算機管理計算機２００を上述したように連動させることで、シミュレーション途中結果の再利用を可能とし、計算機の負荷を下げ、シミュレーション全体の実行時間を短縮する。
【００５８】
なお、本形態においては、テスト実行制御計算機１００と仮想計算機管理計算機２００は別の計算機としているが、計算機のリソースを減らす場合は、テスト実行制御計算機１００で行う処理を仮想計計算機管理計算機２００のホストＯＳ配下で行ってもよい。
【００５９】
また、上述したシミュレーションシステムは、自動車に搭載される車載電子制御装置の各種機能を検証するものに適用することが考えられる。その場合、仮想計算機２４０が車載電子制御装置を擬似するモデルと、車載電子制御装置に対して自動車を疑似するシミュレータとを実行することになる。また、そのような検証においては、テストシナリオは、「障害処理」を検証するためのものや、「正常時の各機能」を検証するためのものが考えられる。
【００６０】
以下に、テストにおいて不具合があり、ソフトウェアプログラムに不具合に対処する修正を行った後、再テストを実施する場合の動作例について説明する。
【００６１】
テスト実行制御部１２０は、図３に示したテストフローに従い、Ｆ０２０におけるテストデータベースの作成の後、Ｆ０３０におけるテスト実行とテストＤＢの更新処理においてＤＢ管理テーブルに従って順にテストを実施する。その際、例えば、図４に示したＮＯ９のテスト結果がＮＧとなった場合、テスト実行制御部１２０は、処理フローに従い、後続のテストを実行せずに、テストＤＢを更新する。この後、図３に示したフローにおける不具合修正Ｆ０５０にて、不具合を修正して再テストを実施する。
【００６２】
再テストの実施に際し、ロードファイル比較処理部１１０が、不具合修正前の旧ＲＯＭロードファイル３２０と不具合修正後の新ＲＯＭロードファイル３１０とについてそれら２つのロードファイルにおけるＲＯＭ値が互いに同じであるアドレスを抽出する。この後、テスト実行制御部１２０の処理フローに従って処理する。
【００６３】
各テストの実行において、図７に示したＦ１１４における判断が行われる。新ＲＯＭにおけるアクセス先がＲＯＭ一致アドレス１３０に含まれていれば、新ＲＯＭで実行するアドレスのＲＯＭ値が、旧ＲＯＭで実行したアドレスのＲＯＭ値と同じであり、ソフトウェアの処理は同一ということになる。その場合、当該テストのテスト結果は前回と同じとなるので、当該テストはスキップされる。
【００６４】
ここで、図４に示したテストＮＯ９のテストがＮＧとなり、その不具合を解消する修正によるＲＯＭの変更範囲が、フェーズＢのＰＴ．Ｂ２テストで実行されるとする。その場合、ＲＯＭの修正がＰＴ．Ｂ２テストの後続のフェーズにも影響する。したがって、図４におけるＮＯ６，７，９，１０が再テストとなる。ＮＯ１〜ＮＯ５およびＮＯ８は、実行するＲＯＭのアドレスおよびそのアドレスのＲＯＭ値が同じであれば、それらのテストはスキップされる。これにより、実行するテストを絞り込むことができ、全体のテスト時間短縮することができる。
【００６５】
上述した実施形態は、本開示の説明のための例示であり、本開示の範囲をそれらの実施形態にのみ限定する趣旨ではない。当業者は、発明の範囲を逸脱することなしに、他の様々な態様で実施することができる。
【符号の説明】
【００６６】
１００：テスト実行制御計算機、１１０：ロードファイル比較処理部、１２０：テスト実行制御部、１３０：ＲＯＭ一致アドレス、２００：仮想計算機管理計算機、２１０：ホストＯＳ、２２０：仮想化ソフトウェア、２３０：スナップショット履歴、２４０：仮想計算機、２５０：ゲストＯＳ、２６０：シミュレータ、２６１，２６３：ＲＯＭアクセス情報、２６２：ＲＯＭアクセスモニタ、２７０：マイコンモデル、２７１：ＲＯＭモデル、２７２：バス、３１０，３２０：ＲＯＭのロードファイル、３４０：実行結果ＤＢ
【図１】
2020166345.tif 000003
【図２】
2020166345.tif 000004
【図３】
2020166345.tif 000005
【図４】
2020166345.tif 000006
【図５】
2020166345.tif 000007
【図６】
2020166345.tif 000008
【図７】
2020166345.tif 000009
【図８】
2020166345.tif 000010
【図９】
2020166345.tif 000011
【国際調査報告】
2020166345.tif 000012
2020166345.tif 000013
2020166345.tif 000014
2020166345.tif 000015