(57)【特許請求の範囲】
【請求項１】
コンピュータが行う処理の記述を有する記述物の検証を行う検証装置（１）であって、
複数の異なる装置に設けられた各々の前記コンピュータに同一の処理を行わせるよう構成された複数の前記記述物の各々を、同一記述物とし、
複数の前記同一記述物の各々における同一の処理の前記記述を、同一記述とし、
前記同一記述物の前記同一記述に従って処理を行う複数の前記装置の前記コンピュータで生じた互いに相違する動作のうち、これらの装置の相違に起因してこれらの同一記述が相違することにより生じたものを、処理系異常とし、
前記処理系異常が生じる可能性のある前記記述を、問題記述とし、
前記問題記述に従い処理を行う前記コンピュータが前記処理系異常を起こす可能性のある該処理の入力値を、異常入力値とし、
前記検証装置は、
前記記述物から、予め定められた前記問題記述を抽出する抽出部（Ｓ２００，Ｓ３１５）と、
前記抽出部により抽出された前記問題記述に対応して予め定められた前記異常入力値を入力値とした状態で、該問題記述に従い前記コンピュータが処理を行った時の出力値を算出する問題記述算出部（Ｓ２１０，Ｓ３２５）と、
前記問題記述算出部により算出された出力値に基づき前記処理系異常を検出し、前記処理系異常が検出された場合には、前記問題記述を処理系異常記述とする検出部（Ｓ２１０，Ｓ２１５，Ｓ３２５，Ｓ３３０）と、
を備える検証装置。
【請求項２】
請求項１に記載の検証装置であって、
前記抽出部により前記記述物から抽出された前記問題記述を、該記述物における他の前記記述とは異なる態様で表示する問題表示部（Ｓ２３０，Ｓ３５５）を
さらに備える検証装置。
【請求項３】
請求項１又は請求項２に記載の検証装置であって、
前記抽出部は、前記記述物から前記問題記述である可能性のある前記記述を特定し、該記述が示す処理と、該記述物の前記同一記述物における該記述の前記同一記述が示す処理とが一致しない場合には、特定した前記記述を前記問題記述として抽出する
検証装置。
【請求項４】
請求項１から請求項３のうちのいずれか１項に記載の検証装置であって、
前記問題記述により生じる可能性のある前記処理系異常を抑制できる、該問題記述と同一の処理の前記記述を、抑制記述とし、
前記処理系異常記述である前記問題記述、又は、該問題記述の前記同一記述を、該問題記述に対応して予め定められた前記抑制記述に置き換える置換部（Ｓ２２０，Ｓ３３５）を
さらに備える検証装置。
【請求項５】
請求項４に記載の検証装置であって、
前記置換部により置き換えがなされた前記記述物における前記抑制記述を、該記述物における他の前記記述とは異なる態様で表示する抑制表示部（Ｓ２３０，Ｓ３５５）を
さらに備える検証装置。
【請求項６】
請求項４又は請求項５に記載の検証装置であって、
前記同一記述物の前記同一記述に従って処理を行う複数の前記装置の前記コンピュータで生じた互いに相違する動作のうち、前記処理系異常ではない動作を、その他異常とし、前記その他異常を発生させる前記記述を、その他異常記述とし、
前記置換部による置き換えがなされた前記抑制記述を含む前記同一記述物における、該抑制記述が示す処理をその一部として含む処理の前記記述を、対象記述とし、
前記記述物における前記対象記述に従い処理を行う前記コンピュータの出力値と、該記述物の前記同一記述物における該対象記述の前記同一記述に従い処理を行う前記コンピュータの出力値とを算出する対象記述算出部（Ｓ３００）と、
前記対象記述算出部により算出された出力値に基づき、前記対象記述における前記抑制記述以外の部分が前記その他異常記述であるか否かを判定する判定部（Ｓ３０５〜Ｓ３３０，Ｓ３４５，Ｓ３５０）と、
をさらに備える検証装置。
【請求項７】
請求項６に記載の検証装置であって、
前記対象記述における前記判定部により前記その他異常記述であると判定された部分を、該対象記述を含む前記記述物における該部分以外の他の前記記述とは異なる態様で表示する異常表示部（Ｓ３５５）を、
さらに備える検証装置。
【請求項８】
コンピュータが行う処理の記述を有する記述物の検証を行う検証プログラムであって、
複数の異なる装置に設けられた各々の前記コンピュータに同一の処理を行わせるよう構成された複数の前記記述物の各々を、同一記述物とし、
複数の前記同一記述物の各々における同一の処理の前記記述を、同一記述とし、
前記同一記述物の前記同一記述に従って処理を行う複数の前記装置の前記コンピュータで生じた互いに相違する動作のうち、これらの装置の相違に起因してこれらの同一記述が相違することにより生じたものを、処理系異常とし、
前記処理系異常が生じる可能性のある前記記述を、問題記述とし、
前記問題記述に従い処理を行う前記コンピュータが前記処理系異常を起こす可能性のある該処理の入力値を、異常入力値とし、
前記検証プログラムは、
前記記述物から、予め定められた前記問題記述を抽出する抽出部（Ｓ２００，Ｓ３１５）と、
前記抽出部により抽出された前記問題記述に対応して予め定められた前記異常入力値を入力値とした状態で、該問題記述に従い前記コンピュータが処理を行った時の出力値を算出する問題記述算出部（Ｓ２１０，Ｓ３２５）と、
前記問題記述算出部により算出された出力値に基づき前記処理系異常を検出し、前記処理系異常が検出された場合には、前記問題記述を処理系異常記述とする検出部（Ｓ２１０，Ｓ２１５，Ｓ３２５，Ｓ３３０）として
コンピュータを動作させる検証プログラム。
【請求項９】
コンピュータが行う処理の記述を有する記述物の検証方法であって、
複数の異なる装置に設けられた各々の前記コンピュータに同一の処理を行わせるよう構成された複数の前記記述物の各々を、同一記述物とし、
複数の前記同一記述物の各々における同一の処理の前記記述を、同一記述とし、
前記同一記述物の前記同一記述に従って処理を行う複数の前記装置の前記コンピュータで生じた互いに相違する動作のうち、これらの装置の相違に起因してこれらの同一記述が相違することにより生じたものを、処理系異常とし、
前記処理系異常が生じる可能性のある前記記述を、問題記述とし、
前記問題記述に従い処理を行う前記コンピュータが前記処理系異常を起こす可能性のある該処理の入力値を、異常入力値とし、
前記検証方法は、
前記記述物から、予め定められた前記問題記述を抽出する抽出手順（Ｓ２００，Ｓ３１５）と、
前記抽出部により抽出された前記問題記述に対応して予め定められた前記異常入力値を入力値とした状態で、該問題記述に従い前記コンピュータが処理を行った時の出力値を算出する問題記述算出手順（Ｓ２１０，Ｓ３２５）と、
前記問題記述算出部により算出された出力値に基づき前記処理系異常を検出し、前記処理系異常が検出された場合には、前記問題記述を処理系異常記述とする検出手順（Ｓ２１０，Ｓ２１５，Ｓ３２５，Ｓ３３０）と、
を備える検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、コンピュータが行う処理の記述物の検証を行う技術に関する。
【背景技術】
【０００２】
車両のＥＣＵ等といった組み込みシステム向けのソフト開発等において、モデルベース開発が用いられる場合がある。モデルベース開発では、ソースコードよりも可読性の高いモデルによりコンピュータの処理が記述される。そして、モデルからソースコードが自動生成される。また、モデルベース開発では、シミュレーションによりモデルの検証が行われる。特許文献１には、このようなモデルの検証方法が記載されている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００５−２０２９２５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
モデルベース開発においては、モデルにより記述された処理と、モデルから自動生成されたソースコード（以後、生成コードと記載）に従ったコンピュータの動作とが一致するかどうかを検証する必要がある。ここで、モデルと生成コードとには、同一の処理が記述されている。しかし、組み込みシステムを制御するマイクロコントローラは、一般的に、ＰＣを制御するＣＰＵに比べ性能が劣る。この性能差等に起因して、生成コードが示す処理の記述と、モデルのシミュレーションを行うＰＣの動作とに相違が生じる場合がある。
【０００５】
このような相違の原因となる記述を特定するには、モデルや生成コードといった記述物における記述を解析する必要があり、作業負担が大きかった。
本開示は、記述物の検証を行う際の作業負担の軽減を目的とする。
【課題を解決するための手段】
【０００６】
本開示の検証装置（１）は、コンピュータが行う処理の記述を有する記述物の検証を行う。ここで、複数の異なる装置に設けられた各々のコンピュータに同一の処理を行わせるよう構成された複数の記述物の各々を、同一記述物とする。また、複数の同一記述物の各々における同一の処理の記述を、同一記述とする。また、同一記述物の同一記述に従って処理を行う複数の装置のコンピュータで生じた互いに相違する動作のうち、これらの装置の相違に起因してこれらの同一記述が相違することにより生じたものを、処理系異常とする。また、処理系異常が生じる可能性のある記述を、問題記述とする。また、問題記述に従い処理を行うコンピュータが処理系異常を起こす可能性のある該処理の入力値を、異常入力値とする。
【０００７】
検証装置は、抽出部（Ｓ２００，Ｓ３１５）と、問題記述算出部（Ｓ２１０，Ｓ３２５）と、問題記述算出部（Ｓ２１０，Ｓ３２５）とを備える。抽出部は、記述物から予め定められた問題記述を抽出する。また、問題記述算出部は、抽出部により抽出された問題記述に対応して予め定められた異常入力値を入力値とした状態で、該問題記述に従いコンピュータが処理を行った時の出力値を算出する。また、検出部は、問題記述算出部により算出された出力値に基づき処理系異常を検出し、処理系異常が検出された場合には、問題記述を処理系異常記述とする。
【０００８】
このような構成によれば、記述物から問題記述が抽出された後、該問題記述が示す処理の出力値が算出される。そして、該出力値に基づき、該問題記述で実際に処理系異常が起こることが判明した場合には、該問題記述が処理系異常記述として検出される。このため、ユーザが記述物の記述を解析しなくても、確実に、記述物から処理系異常記述を検出することが可能となる。したがって、記述物の検証を行う際の作業負担を軽減できる。
【０００９】
なお、上述した検証装置としてコンピュータを動作させる検証プログラムにより、記述物の検証を行っても良い。また、検証装置により実行される処理に相当する検証方法により、記述物の検証を行っても良い。このような場合でも、同様の効果が得られる。
【００１０】
また、この欄及び特許請求の範囲に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本開示の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００１１】
【図１】本実施形態のＰＣの構成を示すブロック図である。
【図２】ＤＴＣブロックの説明図である。
【図３】ＤＴＣブロックの構成を示すモデルの説明図である。
【図４】ＤＴＣ抑制モデルの説明図である。
【図５】乗除算モデルの説明図である。
【図６】抑制記述の置き換えがなされた乗除算モデルの説明図である。
【図７】飽和加算命令によりＩＮＴ３２型の２つの変数の加減算を行うソースコードの説明図である。
【図８】汎用的な加算命令によりＩＮＴ３２型の２つの変数の加減算を行うソースコードの説明図である。
【図９】抑制記述の置き換えがなされたソースコードの説明図である。
【図１０】第１の検証処理のフローチャートである。
【図１１】第２の検証処理のフローチャートである。
【図１２】第２の検証処理の検証対象の一例である検査対象モデルの説明図である。
【図１３】第２の検証処理にて１回目の抑制記述の置き換えがなされた検査対象モデルの説明図である。
【図１４】第２の検証処理にて２回目の抑制記述の置き換えがなされた検査対象モデルの説明図である。
【発明を実施するための形態】
【００１２】
以下、図面を参照しながら、本開示の実施形態を説明する。
［１．構成］
図１に示すように、本実施形態のＰＣ１は、ディスプレイ１０，ＨＤＤ２０，制御部３０，ＲＯＭ４０，ＲＡＭ５０，入力装置６０等を備える。
【００１３】
ディスプレイ１０は、制御部３０等にて生成された画像を表示する。
入力装置６０は、キーボード及びマウス等から構成され、ユーザから受け付けた操作に応じた信号を制御部３０に出力する。
【００１４】
ＲＡＭ５０は、読み出し及び書き込みが可能な揮発性メモリであり、ＲＯＭ４０は、読み出し専用の不揮発性メモリであり、ＨＤＤ２０は、読み出し及び書き込み可能な不揮発性メモリである。ＲＯＭ４０及びＨＤＤ２０には、制御部３０が実行するプログラム等が予め記憶されている。
【００１５】
ＲＡＭ５０は、制御部３０が実行するプログラムを一時的に保存するための記憶領域や、該プログラムに用いられるデータを一時的に保存するための記憶領域等として用いられる。
【００１６】
制御部３０は、ＣＰＵ等を有する。制御部３０は、ＨＤＤ２０及びＲＯＭ４０に保存されているプログラムを実行する。具体的には、制御部３０は、ＨＤＤ２０に保存されているＯＳや、ＯＳ上で動作するアプリケーション等をＲＡＭ５０にロードし、これらを実行する。プログラムの実行中、制御部３０は、必要に応じて入力装置６０から信号の入力を受け付けたり、ディスプレイ１０に画像を表示したり、ＲＡＭ５０及びＨＤＤ２０へのデータの読み出しや書き込みを行ったりする。なお、制御部３０は、複数のＣＰＵを有していても良い。
【００１７】
また、ＰＣ１には、検証プログラムがインストールされている。検証プログラムは、モデル又はソースコードの検証を行うプログラムであり、ＯＳ上で動作するアプリケーションの１つである。検証プログラムは、ＨＤＤ２０に保存される。制御部３０が検証プログラムを実行することで、ＰＣ１は、モデル又はソースコードの検証装置として動作する。つまり、ＨＤＤ２０及びＲＡＭ５０が、検証プログラムを格納した非遷移的実体的記録媒体に該当する。また、制御部３０がこの検証プログラムを実行することで、検証プログラムに対応する方法が実行される。
【００１８】
なお、検証プログラムの機能を、ハードウェアを用いて実現してもよい。つまり、検証プログラムに従い動作する制御部３０により行われる処理を、多数の論理回路を含むデジタル回路又はアナログ回路、或いは、これらの組合せによって実現してもよい。
【００１９】
ここで、上述したモデルとは、モデル言語仕様に基づいて作成されるプログラムの一表現形態である。つまり、モデルは、ソースコードと同様、コンピュータの処理を記述したものである。しかし、モデルは、ソースコードに比べ処理の記述が簡易であり、人による可読性が高い。そして、モデルに基づき、該モデルと同一の処理を記述したソースコードが自動生成される。なお、モデルの一例として、Ｓｉｍｕｌｉｎｋによって作成されるＳｉｍｕｌｉｎｋモデルを挙げることができる。Ｓｉｍｕｌｉｎｋモデルを、Ｍａｔｌａｂ上で動作するＲｅａｌ  Ｔｉｍｅ  Ｗｏｒｋｓｈｏｐに入力することにより、該モデルに対応するソースコードが生成される。なお、Ｓｉｍｕｌｉｎｋ、Ｍａｔｌａｂ、及び、Ｒｅａｌ  Ｔｉｍｅ  Ｗｏｒｋｓｈｏｐは、登録商標である。
【００２０】
モデルは、ブロックと結線との組み合わせにより処理を記述したものである。ブロックは、特定の処理を示す機能単位である。一方、結線は、ブロック間のデータの入出力、及び、各ブロックが示す処理が行われる順序を示す。結線は、ブロックの間に配される。なお、結線はブロックに繋がっていても良い。また、結線は矢印として構成されており、矢印の向きによりデータが出力される向きが示される。つまり、ブロックは、結線を挟んで他のブロックと連なった状態で配される。そして、結線により、当該結線を挟むブロック同士のデータの入出力等が示される。
【００２１】
なお、検証装置は、車載装置等といった電子装置を制御する組み込みシステムに用いられるモデル及びソースコードの検証を行うことが考えられる。しかし、これに限定されることは無く、検証装置は、ＰＣ等の電子装置等、あらゆる用途のモデル及びソースコードの検証を行うことが考えられる。
【００２２】
［２．動作の概要について］
検証装置は、モデル又はソースコードの検証を行う。以後、例えばモデルやソースコード等のように、コンピュータによる処理を記述したものを、記述物と記載する。なお、検証装置は、モデル及びソースコード以外の記述物の検証を行っても良い。また、検証装置は、記述物のシミュレーションを実行する。すなわち、検証装置は、記述物により記述された全部又は一部の処理を実行し、出力値を得る。この時、該処理の入力値は、ユーザにより設定されても良いし、予め設定されていても良い。
【００２３】
検証装置は、組み込みシステムを含む様々な装置に用いられるモデル及びソースコードのシミュレーションを行う。モデルのシミュレーション（以後、モデルシミュレーションとも記載）を行う際、検証装置であるＰＣ１の制御部３０は、モデルにより記述された処理を把握し、該処理を行う。具体的には、制御部３０は、モデルからソースコードを生成し、該ソースコードに従い処理を行う。モデルシミュレーションは、ＰＣ１に応じた態様で行われる。特に、制御部３０等の高性能化、高機能化に伴い、モデルシミュレーションは高い精度で行われるケースが多い。
【００２４】
これに対し、ソースコードのシミュレーション（以後、コードシミュレーションとも記載）は、該ソースコードが用いられる装置に搭載されたコンピュータ等の動作を再現した状態で行われる。換言すれば、コードシミュレーションは、ＰＣ１に応じた態様ではなく、該ソースコードが用いられる装置に応じた態様で行われる。特に、組み込みシステムに用いられるコンピュータであるマイクロコントローラは、ＰＣ１のＣＰＵと比べて性能等が劣るケースが多い。このため、コードシミュレーションは、モデルシミュレーションに比べ、低い精度で行われるケースが多い。
【００２５】
このため、本来同一であるべきモデルのシミュレーションの結果と、該モデルに基づき生成されたソースコードのシミュレーションの結果とは、相違する可能性がある。より詳しくは、これらのシミュレーションで得られる出力値は、相違する可能性がある。
【００２６】
さらに、同一のモデルから、同一機能を有する異なる装置に用いられる複数のソースコードが生成される場合が想定される。これらの装置は、例えば、搭載されるコンピュータや、コンピュータの周辺部位等の構成が相違している。このため、本来同一であるべきこれらのソースコードのシミュレーションの結果もまた、相違する可能性がある。
【００２７】
以後、記述物が用いられる装置や、該装置におけるコンピュータや、コンピュータの周辺部位等を、処理系とも記載する。モデルの処理系は、該モデルが示す処理のシミュレーションを行うＰＣ等となる。また、モデルから生成されたソースコードの処理系は、該ソースコードが用いられる装置等となる。
【００２８】
また、モデルと、該モデルに基づき生成されたソースコードとは、同一の処理を示す記述物である。また、同一のモデルから生成された異なる装置に用いられる複数のソースコードも、同様である。これらの記述物には、各処理系のコンピュータにより行われる同一の処理が記述されている。以後、これらの記述物を、同一記述物と記載する。
【００２９】
そして、複数の同一記述物の各々における各記述は、対応関係を有している。各同一記述物における対応関係を有する記述は、同一の処理を示す。また、これらの同一記述物では、対応関係を有する各記述が示す処理は、同じ条件が充足された際に実行されるように記述されている。以後、複数の同一記述物におけるこのような対応関係を有する記述を、同一記述と記載する。
【００３０】
具体例を挙げると、Ａブロックを含むモデルと、該モデルに基づき生成されたソースコードとにおいては、該ソースコードにおけるＡブロックに相当する処理の記述は、Ａブロックの同一記述に相当する。また、Ａブロックを含むモデルに基づき生成された複数のソースコードにおいては、これらのソースコードにおけるＡブロックに相当する処理の記述は、同一記述となる。
【００３１】
また、複数の同一記述物における同一記述が示す処理を行う各コンピュータは、通常、同一の動作を行う。しかし、例えば、これらの処理の入力値が特定の値である場合等に、これらの動作が相違する場合がある。換言すれば、これらの処理の出力値が一致しないか、又は、これらの処理の差分が許容範囲内でない場合がある。以後、同一の入力値により行われた複数の処理の出力値が一致する場合、又は、これらの出力値の差が許容範囲内である場合を、正常出力と記載し、そうでない場合を、異常出力と記載する。また、同一記述が示す処理を行う複数のコンピュータにおける相違する動作を（換言すれば、これらの処理で異常出力が生じることを）、異常相違動作と記載する。
【００３２】
そして、上述したように、同一記述物が用いられる各処理系は、相違点を有している。このため、これらの同一記述物における各同一記述は、該相違点に起因して、相違した部分を有する場合がある。そして、該相違した部分に起因して、これらの同一記述に従い処理を行う各処理系のコンピュータに異常相違動作が起こる場合がある。以後、このような異常相違動作を、処理系異常と記載する。また、処理系異常を起こす可能性のある記述を、問題記述と記載する。また、同一記述が示す処理にて処理系異常が起こる該処理の入力値を、異常入力値と記載する。また、処理系異常が起こったことを示す該処理の出力値を、異常出力値と記載する。
【００３３】
一方、処理系の相違に起因すること無く異常相違動作が生じる場合がある。具体例を挙げると、複数の同一記述のいずれかに誤りがあり、これらの同一記述が示す処理のアルゴリズムが異なる場合等には、異常相違動作が生じる可能性がある。以後、処理系異常ではない異常相違動作を、その他異常と記載する。また、その他異常を発生させる記述を、その他異常記述と記載する。
【００３４】
検証装置は、同一記述物の中から予め定められた問題記述を抽出する。また、該問題記述が示す処理に異常入力値を設定した状態で、該処理のシミュレーションが行われる。さらに、該シミュレーションの出力値に基づき、処理系異常が起こっているか否かが判定される。そして、抽出された問題記述のうち、実際に処理系異常を起こす問題記述が、処理系異常記述として特定される。
【００３５】
ここで、問題記述と同一の処理の記述を記述したものであって、該問題記述により生じる可能性のある処理系異常を抑制できる記述を、抑制記述と記載する。同一記述物から処理系異常記述が見つかった場合、検証装置は、該同一記述物における処理系異常記述、又は、他の同一記述物における処理系異常記述の同一記述を、該処理系異常記述に相当する問題記述に対応して予め定められた抑制記述に置き換える。
【００３６】
［３．処理系異常の具体例］
（１）ＤＴＣブロックの処理系異常
まず、変数のデータ型を変換する際に生じる処理系異常の具体例について説明する。図２に示すＤＴＣブロック１００は、Ａブロック１１０から入力された固定小数点数の変数を浮動小数点数の変数に変換し、Ｂブロック１１１に出力する。なお、ＤＴＣブロック１００は、モデルの作成を行うための開発ツールにより、ライブラリとして提供されても良い。
【００３７】
固定小数点数及び浮動小数点数とは、変数のデータ型の種類である。固定小数点数は、小数点が置かれる桁を固定した状態で小数の値を表す。固定小数点数の変数は、該変数に対応して予め勾配が定められており、該変数に保存されたデータが示す整数値と勾配との乗算により得られた小数の値が表される。一方、浮動小数点数は、指数表現により小数の値を表す。浮動小数点数は、固定長の仮数部及び指数部と、符号部とを有する。ここで、仮数部の値をｘ、指数部の値をｙとする。また、予め定められた数（例えば１０）をｙ乗した値を、Ｙとする。浮動小数点数の変数は、ｘとＹとを乗算して得られた小数に、符号部が示す符号を付した値を表す。さらに、浮動小数点数は、複数の形式を有する。各形式は、データ長が異なっている。データ長の大きい形式ほど、仮数部及び指数部が長くなり、より高い精度で小数を表すことができる。具体的には、浮動小数点数の形式として、例えば、データ長が４バイトである単精度や、データ長が８バイトである倍精度等が設けられている。
【００３８】
図３に示すように、ＤＴＣブロック１００は、ブロック１０１〜１０３を有する。ブロック１０１は、Ａブロック１１０から入力された固定小数点数の変数（以後、入力変数と記載）に保存されているデータを、整数型の変数として一時的に保存する。なお、整数型とは、整数を表すデータ型である。また、ブロック１０２は、入力変数の勾配を特定し、勾配の値を、浮動小数点数の変数に一時的に保存する。そして、ブロック１０３は、ブロック１０１における整数型の変数が示す整数と勾配とを乗算する。これにより、入力変数を浮動小数点数に変換した出力変数が生成される。該出力変数は、Ｂブロック１１１に出力される。
【００３９】
ここで、ブロック１０２で勾配が保存される浮動小数点数の変数の形式についての記述は、処理系によって異なる場合がある。具体的には、モデルシミュレーションの為に生成されたソースコードでは、該形式は倍精度となるケースが多い。これに対し、マイクロコントローラを備える組み込みシステム等である処理系に用いられるソースコードでは、該形式は単精度となるケースが多い。
【００４０】
そして、異なる形式の浮動小数点数の変数を用いて表した場合に、これらの変数が表す値が完全に一致しない小数（以後、特異数）が存在する。一例として、１６．３８４という小数を倍精度の変数に保存した場合、該変数は１６．３８４を示す。しかし、１６．３８４を単精度の変数に保存した場合、該変数は１６．３８４０００８を示す。勾配が１６．３８４等の特異数である場合、ブロック１０２で浮動小数点数の変数に保存された勾配の値が、処理系によって異なる可能性がある。その結果、処理系によって、ＤＴＣブロック１００の出力変数の値が相違する。
【００４１】
つまり、ＤＴＣブロック１００、及び、ＤＴＣブロック１００に基づき生成されたソースコードは、問題記述に相当する。このため、これらの記述は、問題記述として検証装置により抽出される可能性がある。また、該問題記述が示す処理は、固定小数点数である入力変数の勾配を入力値の１つとしているが、勾配が特異数である場合には、該処理にて処理系異常が生じる可能性がある。つまり、特異数である勾配が異常入力値となる。
【００４２】
このため、特異数である勾配を異常入力値として設定した状態で、一方の同一記述物における上記問題記述が示す処理と、他方の同一記述物における該問題記述の同一記述を示す処理のシミュレーションが行われる。これらのシミュレーションで得られた出力値が一致しない場合には、該問題記述により処理系異常が生じていることになる。このため、該問題記述は、処理系異常記述とみなされる。
【００４３】
なお、上記問題記述に対応して、該問題記述が示す処理のシミュレーションで処理系異常が起こったとみなすことができる出力値を、異常出力値として予め定めておいても良い。具体例を挙げると、ブロック１０２において、勾配が保存される浮動小数点数の変数の形式を単精度とする仕様の場合、該浮動小数点数の変数の形式が倍精度等である場合に得られる出力値を、異常出力値として定めても良い。そして、該シミュレーションにより得られた出力値が異常出力値である場合には、処理系異常が生じているとみなしても良い。
【００４４】
図４のＤＴＣ抑制モデル１２０は、ＤＴＣブロック１００の抑制記述である。なお、ＤＴＣ抑制モデル１２０に基づき生成されたソースコードは、ＤＴＣブロック１００に基づき生成されたソースコードの抑制記述となる。ＤＴＣ抑制モデル１２０は、Ｃブロック１２１と、Ｄブロック１２２と、乗算ブロック１２３とを有する。Ｃブロック１２１は、入力変数に保存されているデータを、整数型の変数として乗算ブロック１２３に出力する。Ｄブロック１２２は、入力変数の勾配を、浮動小数点数の変数として乗算ブロック１２３に出力する。また、乗算ブロック１２３は、入力された２つの変数の乗算を行い、得られた値をＢブロック１１１に出力する。乗算ブロック１２３は、入力される変数のデータ型を指定する機能を有する。このため、乗算ブロック１２３に入力される勾配が保存される浮動小数点数の変数の形式は、固定される。したがって、上述した処理系異常を抑制できる。
【００４５】
ＤＴＣブロック１００が処理系異常記述とみなされた場合、ＤＴＣブロック１００はＤＴＣ抑制モデル１２０に置き換えられる。また、ＤＴＣブロック１００に基づき生成されたソースコードが処理系異常記述とみなされた場合、該ソースコードは、ＤＴＣ抑制モデル１２０に基づき生成されたソースコードに置き換えられる。
【００４６】
（２）浮動小数点数の変数の演算時における処理系異常
複数の浮動小数点数の変数の乗算及び除算の少なくとも一方を含む演算を行う場合にも、処理系異常が起こる可能性がある。このような演算の具体例として、図５に示す乗除算モデル１３０により示される乗除算が考えられる。Ａ〜Ｃブロック１３１〜１３３は、それぞれ、乗除算ブロック１３４に対し、単精度の浮動小数点数の変数であるａ，ｂ，ｃを出力する。そして、乗除算ブロック１３４は、ａ×ｂ／ｃという乗除算を行い、得られた値をＤブロック１３５に出力する。
【００４７】
しかし、処理系によっては、乗除算モデル１３０から生成されたソースコードは、ｂ及びｃの双方又は一方の値が、倍精度の浮動小数点数の変数に保存される記述となる場合がある。換言すれば、該ソースコードは、ｂ及びｃの双方又は一方の形式が、倍精度に変換される記述となる場合がある。つまり、該ソースコードに記述された乗除算におけるｂ及びｃの形式のパターンとして、以下の（Ａ）〜（Ｄ）の４つが想定される。なお、ｓｉｎｇｌｅとは単精度を、ｄｏｕｂｌｅとは倍精度を意味する。
【００４８】
（Ａ）ａ×（ｓｉｎｇｌｅ）ｂ／（ｓｉｎｇｌｅ）ｃ
（Ｂ）ａ×（ｄｏｕｂｌｅ）ｂ／（ｓｉｎｇｌｅ）ｃ
（Ｃ）ａ×（ｓｉｎｇｌｅ）ｂ／（ｄｏｕｂｌｅ）ｃ
（Ｄ）ａ×（ｄｏｕｂｌｅ）ｂ／（ｄｏｕｂｌｅ）ｃ
そして、ｂ，ｃの値が上述した特異数である場合には、（Ａ）〜（Ｄ）の各パターンでの乗除算の出力値が相違する。一例として、ａが３２７６７であり、ｂ，ｃが特異数である８．１９２である場合、（Ａ）〜（Ｄ）の各パターンでの乗除算で得られる値は、以下のようになる。
【００４９】
（Ａ）３２７６７
（Ｂ）３２７６６．９９６
（Ｃ）３２７６７．００２
（Ｄ）３２７６６．９９８
つまり、乗除算ブロック１３４、又は、乗除算ブロック１３４に基づき生成されたソースコードに従った処理では、処理系異常が生じる可能性がある。このため、これらの記述は問題記述に相当する。
【００５０】
なお、浮動小数点数の変数の加算及び減算のうちの少なくとも一方を含む演算を行う記述においても、同様にして処理系異常が起こる可能性がある。このため、該記述も問題記述となる可能性がある。
【００５１】
そして、乗除算ブロック１３４、又は、乗除算ブロック１３４に基づき生成されたソースコードが問題記述として抽出されたとする。この場合、ｂ，ｃに特異数である異常入力値が設定された状態で、該問題記述が示す処理のシミュレーションが行われる。
【００５２】
なお、該シミュレーションにおいて、ａ，ｂ，ｃの値を３２７６７，８．１９２，８．１９２とする入力値を、異常入力値とすることも考えられる。この場合、ｂ，ｃは単精度の浮動小数点数であるため、上述した（Ｂ）〜（Ｄ）のうちのいずれかの出力値が得られた場合には、処理系異常が起こっていると考えられる。このため、このような場合には、該問題記述を処理系異常記述とみなすことができる。
【００５３】
また、検証装置は、複数の同一記述物における上記問題記述が示す処理のシミュレーションにより得られた各出力値が、一致するか否かを判定しても良い。そして、これらの出力値が一致しない場合には、これらの問題記述を処理系異常記述とみなしても良い。
【００５４】
そして、図６の乗除算モデル１３０は、図５の乗除算モデル１３０における乗除算ブロック１３４を、抑制記述に置き換えたものに相当する。図６における乗算ブロック１４０及び除算ブロック１４１は、図５における乗除算ブロック１３４の抑制記述である。なお、乗算ブロック１４０及び除算ブロック１４１に基づくソースコードは、乗除算ブロック１３４に基づくソースコードの抑制記述となる。乗算ブロック１４０は、Ａ，Ｂブロック１３１，１３２の各々から入力されたａ，ｂの乗算を行う。そして、得られた値は、除算ブロック１４１に出力される。また、除算ブロック１４１は、乗算ブロック１４０から入力された値を、Ｃブロック１３３から入力されたｃにより除算する。そして、得られた値は、Ｄブロック１３５に出力される。
【００５５】
乗算ブロック１４０及び除算ブロック１４１は、入力される変数のデータ型を指定する機能を有する。このため、ａ×ｂ／ｃという乗除算に用いられる変数のデータ型が固定される。したがって、処理系異常を回避できる。
【００５６】
乗除算ブロック１３４が処理系異常記述とみなされた場合、乗除算ブロック１３４は、乗算ブロック１４０及び除算ブロック１４１に置き換えられる。また、乗除算ブロック１３４に基づき生成されたソースコードが処理系異常記述とみなされた場合、該ソースコードは、乗算ブロック１４０及び除算ブロック１４１に基づき生成されたソースコードに置き換えられる。
【００５７】
（３）拡張命令による処理系異常
一部のコンピュータは、汎用的なコンピュータには設けられていない専用の命令を有する。なお、ここで言う命令とは、機械語により直接示されるＣＰＵへの命令を意味する。以後、このような専用の命令を、拡張命令と記載する。特にマイクロコントローラは、拡張命令を有する場合がある。
【００５８】
そして、拡張命令の一例として、飽和加算命令が存在する。飽和加算命令によれば、ラップという現象を回避できる。ここで、ラップについて説明する。データ型が３２ビットの符号付き整数型（以後、ＩＮＴ３２型と記載）である変数ｍに加算を行うとする。なお、符号付き整数型とは、符号を示した状態で整数を表すデータ型である。ｍの値がＩＮＴ３２型の最大値である２１４７４８３６４７である場合に、汎用的な加算命令を用いてｍに１を加算すると、ｍはオーバーフローする。この時、符号が反転し、ｍの値は−２１４７４８３６４８（以後、ラップ異常値と記載）となる。このように、オーバーフローの発生により符号の反転等が生じ、加算前の値と大きく乖離した演算結果が得られる現象を、ラップと記載する。なお、ラップは、変数のデータ長に関わらず、汎用的な命令により加算が行われた際に生じる可能性がある。
【００５９】
これに対し、飽和加算命令では、加算を行う変数のデータ型をよりデータ長の大きい同種のデータ型に変換した状態で、加算が行われる。具体的には、例えば、ＩＮＴ３２型である変数ｍに加算を行う場合であれば、ｍを６４ビットの符号付き整数型（以後、ＩＮＴ６４型と記載）に変換した状態で加算が行われる。そして、加算結果は、変数ｍに保存される。そして、加算によりオーバーフローが生じた場合には、ｍにはＩＮＴ３２型の最大値が設定される。これにより、ラップが回避される。
【００６０】
ここで、図７のソースコード１６０、及び、図８のソースコード１７０は、ＩＮＴ３２型の２つの変数の加減算を行う処理を記述したものである。ソースコード１６０，１７０は、同一記述となる。
【００６１】
ソースコード１６０におけるコード１６１は、飽和加算命令によりＩＮＴ３２型の２つの変数の加算を行うことを示す。一方、ソースコード１７０におけるコード１７１は、汎用的な加算命令を用いて、ＩＮＴ３２型の２つの変数の加算を行うことを示す。
【００６２】
これらのソースコードに従い動作するコンピュータは、通常は同一の出力値を生成する。しかし、コード１６１，１７１が示す処理によりオーバーフローが生じる場合には、これらの処理では異なる出力値が生成される。つまり、処理系異常が起こる。このため、コード１６１，１７１は、問題記述に相当する。
【００６３】
なお、上述したように、飽和加算命令は、マイクロコントローラに設けられる場合がある。このため、ソースコード１６０は、組み込みシステム等に用いるためにモデルから生成される場合がある。一方、ソースコード１７０は、モデルシミュレーションのためにモデルから生成されたものであっても良い。無論、ソースコード１７０もまた、組み込みシステム等に用いるためにモデルから生成されたものであっても良い。
【００６４】
そして、コード１６１，１７１が問題記述として抽出されると、これらの問題記述が示す処理のシミュレーションが行われる。この時、これらの処理の入力変数には、異常入力値が設定される。
【００６５】
これらの異常入力値は、これらの問題記述が示す処理での加算によりオーバーフローが生じる値である。一例として、上述したＩＮＴ３２の最大値と１とを、異常入力値とすることが考えられる。この場合、飽和加算命令が用いられていれば、該シミュレーションの出力値は、ＩＮＴ３２の最大値となる。一方、飽和加算命令が用いられていなければ、該シミュレーションの出力値は、上述したラップ異常値となる。
【００６６】
このため、各々の上記問題記述に基づくシミュレーションで得られた出力値が異なる場合には、該問題記述を処理系異常記述とみなしても良い。また、ＩＮＴ３２の最大値とラップ異常値とのうちの一方を、異常出力値としても良い。そして、これらのシミュレーションの出力値が異常出力値である場合には、該問題記述を処理系異常記述とみなしても良い。
【００６７】
そして、図９のソースコード１７０は、図８のソースコードのコード１７１を、コード１８０〜１８２に置き換えたものである。図９のコード１８０〜１８２は、コード１６１，１７１の抑制記述である。
【００６８】
コード１８０，１８２は、サブルーチンである“ＡＤＤ＿ＦＵＮ＿ＲＥＰ”を示し、コード１８１は、“ＡＤＤ＿ＦＵＮ＿ＲＥＰ”をコールする処理を示す。“ＡＤＤ＿ＦＵＮ＿ＲＥＰ”は、ソースコード１６０におけるコード１６１が示すサブルーチンである“ＡＤＤ＿ＦＵＮ”と同じの処理を記述したものである。つまり、該サブルーチンは、ＩＮＴ３２型である２つの入力変数ａ，ｂを、入力引数とする。これらの入力変数ａ，ｂは、データ型が６４ビットの符号付き整数型に変換された状態で加算される。そして、加算により得られた値はｃに保存され、ＩＮＴ３２型の変数として出力される。この時、ｃの値がＩＮＴ３２型の最大値以上である場合には、ＩＮＴ３２型の最大値が加算結果として出力される。つまり、オーバーフロー発生時には、出力値がＩＮＴ３２型の最大値となり、ラップは発生しない。このため、コード１６１とコード１８０〜１８２とは、オーバーフローが生じる場合においても、コンピュータに同じ動作を行わせる。したがって、処理系異常を回避できる。
【００６９】
なお、コード１８０〜１８２は、“ＡＤＤ＿ＦＵＮ＿ＲＥＰ”をコールする記述となっている。しかし、サブルーチンをコールせずに“ＡＤＤ＿ＦＵＮ＿ＲＥＰ”が示す処理を記述したものを、抑制記述としても良い。そして、ソースコード１７０のコード１７１を、該抑制記述に置き換えても良い。
【００７０】
そして、コード１６１，１７１が処理系異常記述とみなされた場合、コード１７１がコード１８０〜１８２に置き換えられる。これにより、処理系異常が生じるのを抑制できる。
【００７１】
なお、ソースコード１７０，１８０を生成するブロックを、問題記述とみなすこともできる。このような場合には、検証装置は、同様にして、該ブロックをモデルからサーチし、シミュレーションを行うことで、該ブロックで処理系異常が起こるか否かを判定しても良い。そして、処理系異常が起こる場合には、同様にして、該モデルから生成されるソースコードの記述を、抑制記述に置き換えても良い。
【００７２】
［４．動作の詳細について］
（１）第１の検証処理について
次に、図１０により、モデル又はソースコードを検証対象とし、検証対象から処理系異常記述を検出する第１の検証処理について説明する。なお、本処理は、ユーザからの指示に応じて開始される。また、本処理は、検証装置の制御部３０により実行される。また、第１の検証処理が示す方法は、モデル又はソースコードの検証方法の一例に相当する。
【００７３】
Ｓ２００では、検証装置は、検証対象から予め定められた問題記述をサーチする。該サーチは、検証対象に対応して設けられた検証用データを用いて行われる。
検証用データから、検証対象における問題記述を特定可能となっている。具体例を挙げると、検証用データは、問題記述となるソースコードの文字列や、モデルのブロックや、ブロックと結線との組み合わせ等を示しても良い。なお、検証用データが示す問題記述と同一の記述のみならず、該問題記述に類似する記述も、問題記述とみなしても良い。また、検証用データは、例えば、問題記述が示す処理（換言すれば、アルゴリズム）等を示しても良い。このような場合には、該処理と、検証対象の記述が示す処理と比較することで、問題記述がサーチされる。また、検証用データは、問題記述についての異常入力値、異常出力値、及び、抑制記述を示す。なお、検証用データは、ユーザにより作成されたものであっても良い。また、検証装置は、問題記述、異常入力値、異常出力値、及び、抑制記述の入力をユーザから随時受け付け、ユーザからの入力に基づき、問題記述のサーチ等を行っても良い。
【００７４】
そして、検証装置は、検証対象の中から問題記述をサーチする。なお、検証対象がソースコードである場合には、一例として、ソースコードの先頭から最後尾に向かってサーチを行っても良い。また、検証対象がモデルである場合には、一例として、該モデルの入力側から出力側に向かってサーチを行っても良い。
【００７５】
サーチにより問題記述が抽出されると（Ｓ２０５：Ｙｅｓ）、検証装置は、その時点でサーチを一旦終了し、Ｓ２１０に移行する。なお、この時、検証装置は、問題記述の記録処理を行っても良い。具体的には、記録処理では、例えば、検証対象における対象となる記述に目印（例えば、コメント等）を付しても良いし、該記述の位置を記録しても良い。一方、新たな問題記述を抽出すること無く検証対象のサーチが終了すると（Ｓ２０５：Ｎｏ）、検証装置は、Ｓ２３０に移行する。
【００７６】
Ｓ２１０では、検証装置は、抽出された問題記述が示す処理のシミュレーションを行う。この時、検証用データが示す該問題記述の異常入力値が、該処理の入力値として設定される。そして、シミュレーションにより得られた該処理の出力値が、検証用データが示す該問題記述の異常出力値と一致する場合には、該問題記述により処理系異常が起こるとみなされる。つまり、該問題記述は、処理系異常記述とみなされる。検証装置は、処理系異常が起こる場合には（Ｓ２１５：Ｙｅｓ）、Ｓ２２０に移行し、処理系異常が起こらない場合には（Ｓ２１５：Ｎｏ）、Ｓ２００に移行する。
【００７７】
Ｓ２２０では、検証装置は、検証用データに基づき、検証対象の処理系異常記述を、該処理系異常記述に相当する問題記述についての抑制記述に置き換え、Ｓ２２５に移行する。
【００７８】
Ｓ２２５では、検証装置は、検証対象における抑制記述について上述した記録処理を行い、Ｓ２００に移行する。
なお、Ｓ２１５、又は、Ｓ２２５から移行したＳ２００では、検証装置は、検証対象における問題記述のサーチが行われていない部分についてのサーチを再開する。そして、検証装置は、同様にしてＳ２０５以降の処理を行う。
【００７９】
一方、サーチ終了後に移行するＳ２３０では、検証装置は、処理系異常の発生箇所をユーザに通知する。より詳しくは、検証装置は、検証対象における抑制記述を、検証対象における抑制記述以外の他の記述とは異なる態様で表示しても良い。具体例を挙げると、検証対象において抑制記述に目印が付されている場合には、検証装置は、検証対象を表示し、目印と共に抑制記述を表示しても良い。この時、検証装置は、抑制記述を強調表示しても良い。なお、強調表示とは、例えば、対象となる記述を他の記述とは異なる色で表示したり、対象となる記述の背景に固有の色を付したりすることを意味する。また、抑制記述に目印が付されていない場合においても、検証装置は、例えば、抑制記述を強調表示した状態で検証対象を表示しても良い。また、検証装置は、例えば、抑制記述、又は、抑制記述及びその周辺の記述を、検証対象から抽出して表示したり、テキストデータ等として保存したりしても良い。そして、検証装置は、本処理を終了する。
【００８０】
なお、検証装置は、第１の検証処理において、検出した処理系異常記述を抑制記述に置き換える処理を省略すると共に、該処理系異常記述についての記録処理を行っても良い。そして、検証装置は、Ｓ２３０において、処理系異常記述を他の記述とは異なる態様で表示することで、処理系異常の発生箇所をユーザに通知しても良い。具体例を挙げると、検証装置は、検証対象を表示し、目印と共に処理系異常記述を表示しても良い。また、例えば、検証装置は、処理系異常記述を強調表示した状態で検証対象を表示しても良い。また、例えば、検証装置は、処理系異常記述、又は、該処理系異常記述及びその周辺の記述を、検証対象から抽出して表示したり、テキストデータ等として保存したりしても良い。
【００８１】
また、検証装置は、Ｓ２３０において、第１の検証処理にて抽出された問題記述をユーザに通知しても良い。換言すれば、処理系異常記述の発生箇所を通知する場合と同様にして、検証対象における該問題記述を、該問題記述以外の他の記述とは異なる態様で表示しても良い。
【００８２】
（２）第２の検証処理について
次に、図１１により、２つの検証対象から処理系異常記述を検出する第２の検証処理について説明する。２つの検証対象とは、同一記述物であるモデル及びソースコードであっても良いし、同一記述物である２つのソースコードであっても良い。なお、本処理は、ユーザからの指示に応じて開始される。また、本処理は、検証装置の制御部３０により実行される。また、第２の検証処理が示す方法は、モデル又はソースコードの検証方法の一例に相当する。
【００８３】
Ｓ３００では、検証装置は、Ｂａｃｋ  Ｔｏ  Ｂａｃｋテスト（以後、ＢＴＢテストと記載）を実施し、Ｓ３０５に移行する。ＢＴＢテストでは、各検証対象が示す処理全体のシミュレーションが、１回又は複数回にわたって行われる。各回のシミュレーションでは、各検証対象が示す処理に同じ入力値が設定される。そして、入力値が同じであるシミュレーションにより各処理から得られた出力値が比較される。なお、第２の検証処理では、後述するＳ３３５にて、１回又は複数回にわたって検証対象に対し抑制記述の置き換えが行われる。Ｓ３００でのＢＴＢテストは、該置き換えがなされた最新の検証対象に対して行われる。
【００８４】
Ｓ３０５では、検証装置は、後述するＳ３３５にて検証対象に対する抑制記述の置き換えが行われていない場合には（Ｓ３０５：Ｙｅｓ）、Ｓ３１０に移行する。
ここで、最後に行われたＳ３３５にて抑制記述の置き換えが行われた検証対象を、最新置換検証対象と記載する。また、最新置換検証対象にて最後に置き換えられた抑制記述を、最新抑制記述と記載する。
【００８５】
Ｓ３３５にて検証対象に対する置き換えがなされた場合、検証装置は、ＢＴＢテストの結果から、最新置換検証対象における最新抑制記述が示す処理の出力値と、他方の検証対象における最新抑制記述の同一記述が示す処理の出力値とを特定する。そして、検証装置は、入力値が同一である場合に得られたこれらの処理の出力値が、常に、上述した正常出力となるか否かを判定する。
【００８６】
そして、検証装置は、これらの出力値が常に正常出力の場合（Ｓ３０５：Ｙｅｓ）、Ｓ３１０に移行する。一方、否定判定の場合（Ｓ３０５：Ｎｏ）、最新置換検証対象において処理系異常記述を抑制記述に置き換えたにも関わらず、最新置換検証対象に基づく処理で異常相違動作が起こることになる。このため、検証装置は、該処理でその他異常が起こるとみなし、Ｓ３４５に移行する。
【００８７】
Ｓ３１０では、検証装置は、ＢＴＢテストの結果が正常であるか否かを判定する。具体的には、入力値が同一である場合の各検証対象のシミュレーションで得られた出力値が、常に正常出力である場合には、ＢＴＢテストの結果は正常とみなされる。そして、検証装置は、肯定判定が得られた場合には（Ｓ３１０：Ｙｅｓ）、Ｓ３５５に移行し、否定判定が得られた場合には（Ｓ３１０：Ｎｏ）、Ｓ３１５に移行する。
【００８８】
Ｓ３１５では、検証装置は、第１の検証処理のＳ２００と同様にして、対応する検証用データを用いて各検証対象から問題記述をサーチする。ここで、検証装置は、サーチにより抽出された記述を直ちに問題記述としても良いが、次のようにして問題記述を抽出しても良い。
【００８９】
すなわち、サーチにより一方の検証対象から抽出された問題記述を、問題記述の可能性のある記述（以後、問題記述候補と記載）とみなしても良い。また、検証装置は、他方の検証対象から問題記述候補の同一記述を抽出し、問題記述候補が示す処理と、該同一記述が示す処理とが一致するかどうかを判定しても良い。そして、これらの処理が一致しない場合には、問題記述候補、及び、該問題記述候補の同一記述を、問題記述とみなしても良い。
【００９０】
なお、２つの検証対象が共にソースコードである場合、ソースコードの記述を比較することで上記判定を行っても良い。また、一方の検証対象がモデルである場合、検証装置は、モデルにおける問題記述候補、又は、該問題記述候補の同一記述から、該記述が示す処理のモデルシミュレーションに用いられるソースコードを生成しても良い。そして、同様にしてソースコードの記述を比較することで、上記判定を行っても良い。
【００９１】
一方の検証対象から問題記述が抽出されると（Ｓ３２０：Ｙｅｓ）、検証装置は、その時点でサーチを一旦終了し、Ｓ３２５に移行する。この時、検証装置は、問題記述についての記録処理を行っても良い。一方、新たな問題記述を抽出すること無く双方の検証対象のサーチが終了した場合には、処理系異常ではなく、その他異常が生じていると考えられる。このような場合（Ｓ３２０：Ｎｏ）、検証装置は、Ｓ３５０に移行する。
【００９２】
Ｓ３２５では、検証装置は、一方の検証対象から抽出された問題記述が示す処理のシミュレーションを行う。そして、Ｓ２１０と同様にして、該問題記述により処理系異常が生じるか否かを判定する。なお、検証装置は、異常入力値を入力値とした状態で、問題記述が示す処理、及び、他方の検証対象における該問題記述の同一記述が示す処理のシミュレーションを行っても良い。そして、得られた２つの出力値が一致しない場合には、これらの処理で処理系異常が起こるとみなしても良い。検証装置は、処理系異常が生じている場合には（Ｓ３３０：Ｙｅｓ）、Ｓ３３５に移行し、そうでない場合には（Ｓ３３０：Ｎｏ）、Ｓ３１５に移行する。
【００９３】
Ｓ３３０から移行したＳ３１５では、検証装置は、各検証対象における問題記述のサーチが行われていない部分に対するサーチを再開する。そして、検証装置は、同様にしてＳ３２０以降の処理を行う。
【００９４】
Ｓ３３５では、検証装置は、第１の検証処理のＳ２２０と同様にして、検証対象における処理系異常記述を抑制記述に置き換える。続くＳ３４０では、検証装置は、Ｓ２２５と同様にして、検証対象における抑制記述についての記録処理を行い、Ｓ３００に移行する。
【００９５】
次に、Ｓ３４５の処理について説明する。Ｓ３４５は、最新置換検証対象の処理系異常記述を抑制記述に置き換えられたにも関わらず、該抑制記述が示す処理で異常相違動作が起こる場合に移行する。抑制記述がその他異常記述に該当する可能性は低いと考えられる。このため、該抑制記述が示す処理の入力値を生成する処理で、その他異常が生じているとみなされる。したがって、最新置換検証対象における該入力値を生成する処理の記述、又は、他方の検証対象における該記述の同一記述が、その他異常記述とみなされる。
【００９６】
ここで、一方の検証対象における抑制記述と、他方の検証対象における該抑制記述の同一記述を、置換箇所とする。また、最後に行われた置き換えにより生じた置換箇所を、最新置換箇所と記載する。一方、該置き換えよりも前に行われた置き換えにより生じた置換箇所を、先行置換箇所と記載する。
【００９７】
まず、抑制処理の置き換えが１回のみ行われた場合について検討する。このような場合、各検証対象における、置換箇所が示す処理への入力値を生成する処理の記述（以後、入力側記述と記載）が、その他異常記述とみなされる。次に、複数回にわたって抑制処理の置き換えが行われた場合について検討する。このような場合、各検証対象における、最新置換箇所が示す処理に対する入力側記述から、先行置換箇所が示す処理の出力値を生成する処理の記述を除いたもの（以後、中間記述と記載）が、その他異常記述とみなされる。そして、検証装置は、その他異常記述の記録処理を行い、Ｓ３５５に移行する。
【００９８】
同様に、Ｓ３５０においても、検証装置は、各検証対象におけるその他異常記述の記録処理を行う。具体的には、検証対象に対する抑制記述の置き換えが一度も行われていない場合、各検証対象全体がその他異常記述とみなされる。一方、検証対象に対する抑制記述の置き換えが行われた場合、各検証対象における、最新置換箇所が示す処理からの出力値を入力値として行われる処理で、その他異常が生じていると考えられる。このため、各検証対象における該処理の記述（以後、出力側記述と記載）が、その他異常記述とみなされる。そして、検証装置は、Ｓ３５５に移行する。
【００９９】
Ｓ３５５では、検証装置は、第１の検証処理におけるＳ２３０と同様にして、処理系異常の発生箇所をユーザに通知する。なお、Ｓ２３０と同様にして、抽出された問題記述をユーザに通知しても良い。また、検証装置は、処理系異常の発生箇所を通知するのと同様の方法で、その他異常記述をユーザに通知する。具体的には、検証装置は、例えば、その他異常記述を強調表示した状態で検証対象を表示しても良い。また、検証装置は、例えば、その他異常記述、又は、その他異常記述及びその周辺の記述を、検証対象から抽出して表示したり、テキストデータ等として保存したりしても良い。そして、検証装置は、本処理を終了する。
【０１００】
（３）第２の検証処理の具体例について
ここで、第２の検証処理の内容について、具体例を挙げて説明する。
図１２の検査対象モデル４００は、Ａ〜Ｈブロック４０１〜４０３，４０５〜４０７，４０９，４１０と、乗除算ブロック４０４と、ＤＴＣブロック４０８とを有する。なお、乗除算ブロック４０４は、図５の乗除算ブロック１３４と同様のブロックであり、問題記述に相当する。また、ＤＴＣブロック４０８は、図２のＤＴＣブロック１００と同様のブロックであり、問題記述に相当する。
【０１０１】
検査対象モデル４００と、検査対象モデル４００から生成されたソースコートとを検証対象とし、第２の検証処理が行われるとする。また、これらの検証対象では、乗除算ブロック４０４が示す処理、及び、これから生成されたソースコードが示す処理と、ＤＴＣブロック４０８が示す処理、及び、これから生成されたソースコードが示す処理とにおいて、処理系異常が生じているとする。
【０１０２】
検査対象モデル４００では、Ａ〜Ｃブロック４０１〜４０３にて当該検査対象モデル４００への入力値が入力され、Ｈブロック４１０にて、当該検査対象モデル４００の出力値が出力される。つまり、Ａ〜Ｃブロック４０１〜４０３が入力側、Ｈブロック４１０が出力側となる。このため、第２の検証処理では、Ａ〜Ｃブロック４０１〜４０３からＨブロック４１０に向かって問題記述がサーチされる。
【０１０３】
したがって、第２の検証処理が行われると、最初に、乗除算ブロック４０４が問題記述として抽出される。乗除算ブロック４０４は処理系異常記述に該当するため、図１３に示すように、乗除算ブロック４０４は、抑制記述である乗除算抑制ブロック４２０に置き換えられる。なお、乗除算抑制ブロック４２０は、図６の乗算ブロック１４０及び除算ブロック１４１と同様のモデルである。
【０１０４】
その後、乗除算ブロック４０４の置き換えがなされた検査対象モデル４００に対し、再度ＢＴＢテストが実施される。該ＢＴＢテストにより、乗除算抑制ブロック４２０の出力値が正常出力とならないことが判明した場合には、Ｓ３４５にて、乗除算抑制ブロック４２０についての上述した入力側記述であるＡ〜Ｃブロック４０１〜４０３が、その他異常記述とみなされる。そして、Ｓ３５５にて、処理系誤差の発生箇所として乗除算抑制ブロック４２０が強調表示されると共に、その他異常の発生箇所としてＡ〜Ｃブロック４０１〜４０３が強調表示される。その後、第２の検証処理が終了する。
【０１０５】
一方、乗除算抑制ブロック４２０の出力値が正常出力となったとしても、検査対象モデル４００にはＤＴＣブロック４０８が含まれているため、ＢＴＢテストの結果は正常にはならない。このため、乗除算抑制ブロック４２０が置換された検査対象モデル４００から、再度、問題記述がサーチされる。この時、Ｄブロック４０５から出力側に向かってサーチがされる。
【０１０６】
そして、ＤＴＣブロック４０８が問題記述として抽出される。ＤＴＣブロック４０８は処理系異常記述に該当するため、図１４に示すように、ＤＴＣブロック４０８は、抑制記述であるＤＴＣ抑制ブロック４３０に置き換えられる。なお、ＤＴＣ抑制ブロック４３０は、図４のＤＴＣ抑制モデル１２０と同様のモデルである。
【０１０７】
その後、再度ＢＴＢテストが実施される。該ＢＴＢテストにより、ＤＴＣ抑制ブロック４３０が正常出力とならないことが判明した場合には、Ｓ３４５にて、ＤＴＣ抑制ブロック４３０についての上述した中間記述であるＤ〜Ｆブロック４０５〜４０７が、その他異常記述とみなされる。そして、Ｓ３５５では、処理系誤差の発生箇所として、乗除算抑制ブロック４２０及びＤＴＣ抑制ブロック４３０が強調表示されると共に、その他異常の発生箇所として、Ｄ〜Ｆブロック４０５〜４０７が強調表示される。その後、第２の検証処理が終了する。
【０１０８】
一方、ＤＴＣ抑制ブロック４３０の出力値が正常出力であり、ＢＴＢテストの結果も正常であったとする。この場合、Ｓ３５５では、処理系誤差の発生箇所として、乗除算抑制ブロック４２０及びＤＴＣ抑制ブロック４３０が強調表示される。その後、第２の検証処理が終了する。なお、この時、検査対象モデル４００には、その他誤差記述は含まれていないことになる。このため、その他異常の発生箇所の強調表示はなされない。
【０１０９】
また、ＤＴＣ抑制ブロック４３０の出力値は正常出力だが、ＢＴＢテストの結果は正常でなかったとする。この場合、ＤＴＣ抑制ブロック４３０が置換された検査対象モデル４００から、再度、問題記述がサーチされる。この時、Ｇブロック４０９から出力側に向かってサーチがなされる。
【０１１０】
しかし、Ｇ，Ｈブロック４０９，４１０は問題記述に該当しないため、サーチを行っても問題記述は抽出されない。この場合、Ｓ３５０にて、ＤＴＣ抑制ブロック４３０についての上述した出力側記述であるＧ，Ｈブロック４０９，４１０が、その他異常記述とみなされる。そして、Ｓ３５５では、処理系誤差の発生箇所として、乗除算抑制ブロック４２０及びＤＴＣ抑制ブロック４３０が強調表示されると共に、その他異常の発生箇所として、Ｇ，Ｈブロック４０９，４１０が強調表示される。その後、第２の検証処理が終了する。
【０１１１】
［５．効果］
本実施形態によれば、以下の効果を奏する。
（１）本実施形態の第１及び第２の検証処理によれば、モデルやソースコード等の記述物である検証対象から問題記述が抽出された後、該問題記述が示す処理の出力値が算出される。そして、該出力値に基づき、該問題記述で実際に処理系異常が起こることが判明した場合には、該問題記述が処理系異常記述として検出される。このため、ユーザが検証対象の記述を解析しなくても、確実に、検証対象から処理系異常記述を検出することが可能となる。したがって、記述物の検証を行う際の作業負担を軽減できる。
【０１１２】
（２）また、第１及び第２の検証処理では、検証対象から抽出された問題記述が、検証対象における他の記述とは異なる態様で表示される。このため、検証対象における問題記述を容易に把握できる。
【０１１３】
（３）また、第２の検証処理においては、一方の検証対象から、問題記述である可能性のある問題記述候補が抽出される。また、問題記述候補が示す処理と、他方の検証対象における問題記述候補の同一記述が示す処理とが一致するかどうかが判定される。そして、これらの処理が一致しない場合には、問題記述候補、及び、該問題記述候補の同一記述が、問題記述とみなされる。このため、より高い精度で問題記述が抽出される。
【０１１４】
（４）また、第１及び第２の検証処理によれば、検証対象における処理系異常記述が、抑制記述に置き換えられる。これにより、検証対象に基づく処理で、処理系異常が生じなくなる。このため、置き換え後の検証対象が示す処理のシミュレーションを行うことで、該処理でその他異常が発生するか否かや、その他異常が発生する箇所を容易に検出可能となる。したがって、より容易に、検証対象からその他異常記述を見つけ出すことが可能となる。
【０１１５】
（５）また、第１及び第２の検証処理では、検証対象において置き換えられた抑制記述が、検証対象における他の記述とは異なる態様で表示される。このため、検証対象における抑制記述を容易に把握できる。
【０１１６】
（６）また、第２の検証処理によれば、ＢＴＢテストと並行して処理系異常記述の検出がなされる。そして、処理系異常記述の検出結果と、ＢＴＢテストにより得られた各検証対象全体が示す処理の出力値とに基づき、検証対象からその他異常記述が検出される。このため、検証対象からその他異常記述を容易に見つけ出すことが可能となる。
【０１１７】
（７）また、第２の検証処理では、検証対象におけるその他異常記述が、検証対象における他の記述とは異なる態様で表示される。このため、検証対象におけるその他異常記述を容易に把握できる。
【０１１８】
［６．他の実施形態］
以上、本開示の実施形態について説明したが、本開示は上述の実施形態に限定されることなく、種々変形して実施することができる。
【０１１９】
（１）本実施形態では、検証プログラムに従い動作するＰＣ１である検証装置により、第１及び第２の検証処理が実行される。しかしながら、検証プログラムと同様の機能を有する複数のプログラムをＰＣ１にて実行させることで、ＰＣ１を検証装置として動作させ、第１及び第２の検証処理を実行しても良い。
【０１２０】
（２）また、第２の検証処理では、２つの検証対象の記述全体から、処理系異常記述及びその他異常記述が検出される。しかしながら、これらの検証対象の一部に相当する同一記述を対象記述としても良い。そして、２つの検証対象の記述全体に替えて、これらの検証対象における各対象記述から、同様にして処理系異常記述及びその他異常記述を検出しても良い。すなわち、本実施形態と同様にして、ＢＴＢテストにより２つの検証対象における各対象記述が示す処理のシミュレーションを行いながら、これらの対象記述から、処理系異常記述及びその他異常記述を検出しても良い。
【０１２１】
（３）また、第２の検証処理において、検証装置は、検証対象に対する抑制記述の置き換えを行った後、さらに、各検証対象における置換箇所を含む記述である対象記述を設定しても良い。なお、各検証対象に設定された対象記述は、同一記述となる。そして、これらの対象記述が示す処理のシミュレーションを行い、これらの処理の出力が異常出力となる場合には、対象記述にその他異常記述が含まれるとみなしても良い。
【０１２２】
（４）本実施形態における１つの構成要素が有する複数の機能を、複数の構成要素によって実現したり、１つの構成要素が有する１つの機能を、複数の構成要素によって実現したりしてもよい。また、複数の構成要素が有する複数の機能を、１つの構成要素によって実現したり、複数の構成要素によって実現される１つの機能を、１つの構成要素によって実現したりしてもよい。また、本実施形態の構成の一部を省略してもよい。また、本実施形態の構成の少なくとも一部を、他の本実施形態の構成に対して付加又は置換してもよい。なお、特許請求の範囲に記載した文言から特定される技術思想に含まれるあらゆる態様が本開示の実施形態である。
【０１２３】
（５）上述した検証装置の他、当該検証装置を構成要素とするシステムや、当該検証装置としてＰＣ１を動作させる検証プログラムを記録した半導体メモリ等の非遷移的実態的記録媒体等、種々の形態で本開示を実現することもできる。
【０１２４】
［７．特許請求の範囲との対応］
本実施形態における第１の検証処理のＳ２００が抽出部，抽出手順の一例に、Ｓ２１０が問題記述算出部，問題記述算出手順の一例に、Ｓ２１０，Ｓ２１５が検出部，検出手順の一例に、Ｓ２２０が置換部の一例に、Ｓ２３０が問題表示部，抑制表示部の一例に相当する。
【０１２５】
また、第２の検証処理の検証対象が対象記述の一例に、Ｓ３００が対象記述算出部に、Ｓ３０５〜Ｓ３３０，Ｓ３４５，Ｓ３５０が判定部に、Ｓ３５５が異常表示部に相当する。また、Ｓ３１５が抽出部，抽出手順の一例に、Ｓ３２５が問題記述算出部，問題記述算出手順の一例に、Ｓ３２５，Ｓ３３０が検出部，検出手順の一例に、Ｓ３３５が置換部の一例に、Ｓ３５５が問題表示部，抑制表示部の一例に相当する。
【符号の説明】
【０１２６】
１…ＰＣ、１０…ディスプレイ、２０…ＨＤＤ、３０…制御部、４０…ＲＯＭ、５０…ＲＡＭ、６０…入力装置、１００…ＤＴＣブロック、１２０…ＤＴＣ抑制モデル、１３０…乗除算モデル、１５０…モデル、１６０…ソースコード、１７０…ソースコード、１８０…抑制ソースコード、４００…検査対象モデル。
【図１】
0006519530.tif 000002
【図２】
0006519530.tif 000003
【図３】
0006519530.tif 000004
【図４】
0006519530.tif 000005
【図５】
0006519530.tif 000006
【図６】
0006519530.tif 000007
【図７】
0006519530.tif 000008
【図８】
0006519530.tif 000009
【図９】
0006519530.tif 000010
【図１０】
0006519530.tif 000011
【図１１】
0006519530.tif 000012
【図１２】
0006519530.tif 000013
【図１３】
0006519530.tif 000014
【図１４】
0006519530.tif 000015