(57)【要約】      （修正有）【課題】  モデルからソースコードを生成するモデルベース開発環境において、当該ソースコードの品質評価の結果抽出された構成部分が、当該モデルのどの構成部分に対応するかを開発者に表示するための手段を提供する。【解決手段】  モデルの構成部分と、当該モデルに基づいて生成されたソースコードの構成部分との対応関係を取得し、この情報に基づいてソースコードの品質評価の結果抽出された構成部分と、この部分に対応する当該モデルの構成部分とを関連づけ、他の構成部分と視覚的に区別出来るよう表示する。また、当該モデルの品質評価の結果抽出された構成部分と、この部分に対応するソースコードとを関連づけて表示する。  【選択図】 図２
2005301568.tif 000002
【特許請求の範囲】
【請求項１】
モデルの構成部分と当該モデルに基づいて生成されたソースコードの構成部分との対応関係の情報である対応情報を取得する対応情報取得手段と、
前記対応情報取得手段が取得した前記対応情報に基づいて、前記ソースコードの品質評価の結果抽出された構成部分と、この構成部分に対応する前記モデルの構成部分とが関連づけられた表示を行わせるための表示用情報を記憶媒体に記憶させる記憶制御手段と、を備えたことを特徴とする表示情報記憶制御装置。
【請求項２】
前記対応情報は、前記モデルの構成部分と前記ソースコードの構成部分との対応表であり、
前記記憶制御手段は、前記対応表と、前記ソースコードの品質評価の結果抽出された構成部分とを比較することに基づいて、この構成部分に対応する前記モデルの構成部分とが関連づけられた表示を行わせるための表示用情報を記憶媒体に記憶させることを特徴とする請求項１に記載の表示情報記憶制御装置。
【請求項３】
モデルの構成部分と当該モデルに基づいて生成されたソースコードの構成部分との対応関係の情報を取得する対応情報取得手段と、
前記対応情報取得手段が取得した前記対応情報に基づいて、前記モデルの品質評価の結果抽出された構成部分と、この構成部分に対応する前記ソースコードの構成部分とが関連づけられた表示を行わせるための表示用情報を記憶媒体に記憶させる記憶制御手段と、を備えたことを特徴とする表示情報記憶制御装置。
【請求項４】
前記記憶制御手段が記憶媒体に記憶させた前記表示用情報に基づいた表示を表示装置に行わせる表示制御手段を備え、
前記表示手段は、前記ソースコードの品質評価の結果抽出された構成部分と、この構成部分に対応する前記モデルの構成部分とを、他の構成部分と視覚的に区別できるように表示装置に表示させることを特徴とする請求項１ないし３のいずれか１つに記載の表示情報記憶制御装置。
【請求項５】
コンピュータを、
モデルの構成部分と当該モデルに基づいて生成されたソースコードの構成部分との対応関係の情報を取得する対応情報取得手段、および
前記対応情報取得手段が取得した前記対応情報に基づいて、前記ソースコードの品質評価の結果抽出された構成部分と、この構成部分に対応する前記モデルの構成部分とが関連づけられた表示を行わせるための表示用情報を記憶媒体に記憶させる記憶制御手段、として機能させる表示情報記憶制御プログラム。
【請求項６】
コンピュータを、
モデルの構成部分と当該モデルに基づいて生成されたソースコードの構成部分との対応関係の情報を取得する対応情報取得手段、および
前記対応情報取得手段が取得した前記対応情報に基づいて、前記モデルの品質評価の結果抽出された構成部分と、この構成部分に対応する前記ソースコードの構成部分とが関連づけられた表示を行わせるための表示用情報を記憶媒体に記憶させる記憶制御手段、として機能させる表示情報記憶制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、モデルからソースコードを生成するモデルベース開発環境に関する。
【背景技術】
【０００２】
従来、例えば車両のエンジンＥＣＵの作動のためのプログラムにおいては、開発者が直接そのプログラムのソースコードを記述せず、目的とするプログラムの機能を、より作成が簡易で視認性の良い「モデル」という形態で記述する場合がある（例えば特許文献１参照）。開発者は、このモデルに対応したプログラム開発環境がインストールされたワークステーション、パーソナルコンピュータ等を用い、モデルからソースコードを生成する。モデルからソースコードを生成する機能を担うプログラムをコード生成ツールと呼ぶ。コード生成ツールは、モデル開発環境に組み込まれている場合が多い。モデルからソースコードを生成するようなプログラム開発は、モデルベース開発と呼ばれる。
【０００３】
モデルベース開発に対応したプログラム開発環境としては、Ｍａｔｌａｂ（登録商標）がある。Ｍａｔｌａｂ（登録商標）においては、開発者はＭａｔｌａｂ（登録商標）の一機能であるＳｉｍｕｌｉｎｋ（登録商標）を用いて、目的とするプログラムの機能を、ブロックと呼ばれる機能単位の組み合わせとして記述する。この組み合わされたブロックの集合体がモデルである。Ｓｉｍｕｌｉｎｋ（登録商標）のブロックとしては、例えばサイン関数を生成するブロック、ファイルからデータを読み出すブロック、入力されたデータに対する特定の四則演算を行うブロック、ブロックの組み合わせから成る上位のブロックとしてのサブシステム等がある。
【０００４】
このようなモデルベース開発では、開発者がモデルを作成し、そのモデルをシミュレーションすることで開発者の要求する仕様どおりに動作するかを検証する。また、開発者は要求する仕様どおりになるまでモデルを適宜修正する。その後、モデルからコード生成ツールを用いてソースコードを自動生成する。このようにモデルベース開発では、モデルを作成する段階で、動作を予め検証することができるため、ソースコードを生成した後におかしな動作をするといった問題が発覚することが少ない。これによりプログラム開発工数や時間が短縮できるという効果がある（従来の開発方法では、動作を検証できていない仕様書からソースコードを作成するため、ソースコードを作成して初めて仕様書の動作がおかしいことが発覚する場合があった。）。
【０００５】
また、モデルベース開発においては、開発過程において、モデルやソースコードの品質評価を行うことが多い。品質評価とは、当該モデル、ソースコードが、プログラムの製品としてどのような品質を有しているかを、種々の基準から評価することをいう。
【０００６】
品質評価の基準としては、例えばカバレッジ、処理負荷、プログラムサイズ、使用する変数の数等がある。
【０００７】
カバレッジとは、モデルやソースコードの構成部分として記述されている条件分岐における複数の分岐先のうち、実際には実行されないものがどれくらいあるかを示す指標である。モデルやソースコードのカバレッジを特定するためには、上記したプログラム開発環境において、テスト入力パターンを用いて、モデルやソースの実行シミュレーションを行い、そのシミュレーションにおいて実行された分岐先と実行されなかった分岐先とを記憶することで行う。このようなカバレッジの特定のための処理を、カバレッジテストという。
【０００８】
また、処理負荷の特定についても、上記のようなシミュレーションを行い、その結果ＣＰＵに対してどの程度負荷があったかを記憶することで実現される。
【０００９】
また、開発環境においては、これらの品質評価の結果として、例えば実際に実行されてない分岐先、処理負荷の高い部分等が抽出され、抽出された部分が開発者に対して表示されるようになっている。
【００１０】
従来は、このような品質評価の結果としてのモデルやソースコードの構成部分の抽出はモデル、ソースコードのそれぞれに対して個別に行われていた。
【特許文献１】特開平２０００−２０２９１号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
しかし、ソースコードの品質評価の結果として抽出された構成部分が、モデルのどの構成部分に対応するか、あるいは、モデルの品質評価の結果として抽出された構成部分が、ソースコードのどの構成部分に対応するかについて、開発者が知りたい場合がある。
【００１２】
例えば、ソースコードの品質評価の結果、実行されていない分岐先、処理負荷が高い部分、ソースコードの量が膨大になっている部分等が抽出された場合に、当該ソースコードの抽出個所がモデルにおいてどの構成部分に相当するかを開発者が知りたい場合がある。モデルベース開発では、開発者が直接変更を加えるのはほとんどの場合ソースコードではなくモデルだからである。その理由の一つとして、以前に開発した車両Ａのモデルを流用して、新機能を追加した別の車両Ｂを開発するといった場合が考えられる。つまり、車両Ａの開発時に、モデルでなくソースコードを直接変更してしまうと、別の車両Ｂの開発時に再度ソースコードを変更しなければいけないためである（車両開発では複数車種で類似の制御が多数存在し、特にエンジン制御開発では流用して新機能追加するといったことが頻繁に行われる）。
【００１３】
従来は、このようにソースコードとモデルの対応部分の特定は、熟練の開発者が経験に基づいて手作業で行わねばならなかった。
【００１４】
本発明は上記点に鑑み、モデルからソースコードを生成するモデルベース開発環境において、当該ソースコードの品質評価の結果抽出された構成部分が、当該モデルのどの構成部分に対応するかを開発者に表示するための手段を提供することを目的とする。
【００１５】
または、モデルからソースコードを生成するモデルベース開発環境において、当該モデルの品質評価の結果抽出された構成部分が、当該ソースコードのどの構成部分に対応するかを開発者に表示するための手段を提供することを目的とする。
【課題を解決するための手段】
【００１６】
上記目的を達成するための本発明に係る表示情報記憶制御装置の特徴は、モデルの構成部分と当該モデルに基づいて生成されたソースコードの構成部分との対応関係の情報を取得し、その取得した対応情報に基づいて、当該ソースコードの品質評価の結果抽出された構成部分と、この構成部分に対応する当該モデルの構成部分とが関連づけられた表示を行わせるための表示用情報を記憶媒体に記憶させることである。
【００１７】
このようにすることで、モデルからソースコードを生成するモデルベース開発環境において、当該ソースコードの品質評価の結果抽出された構成部分が、当該モデルのどの構成部分に対応するかを開発者に表示するための手段が提供される。
【００１８】
また、表示情報記憶制御装置は、取得した対応表と、当該ソースコードの品質評価の結果抽出された構成部分とを比較することに基づいて、この構成部分に対応する当該モデルの構成部分とが関連づけられた表示を行わせるための表示用情報を記憶媒体に記憶させるようになっていてもよい。
【００１９】
また、本発明に係る表示情報記憶制御装置の第２の特徴は、モデルの構成部分と当該モデルに基づいて生成されたソースコードの構成部分との対応関係の情報を取得し、その取得した対応情報に基づいて、当該モデルの品質評価の結果抽出された構成部分と、この構成部分に対応する当該ソースコードの構成部分とが関連づけられた表示を行わせるための表示用情報を記憶媒体に記憶させることである。
【００２０】
このようにすることで、モデルからソースコードを生成するモデルベース開発環境において、当該モデルの品質評価の結果抽出された構成部分が、当該ソースコードのどの構成部分に対応するかを開発者に表示するための手段が提供される。
【００２１】
また、上記した本発明の特徴は、コンピュータを上記した各手段として機能させるプログラムとしても実現できる。
【発明を実施するための最良の形態】
【００２２】
以下、本発明の一実施形態について説明する。図１に、本実施形態に係るパーソナルコンピュータ１の構成を示す。このパーソナルコンピュータ１は、図１において示したモデルベース開発の工程の各段階において用いられるようになっている。このパーソナルコンピュータ１は、ディスプレイ１１、入力装置１２、ＲＡＭ１３、ＲＯＭ１４、ＨＤＤ（ハードディスクドライブ）１５、ＣＰＵ１６等から構成される。
【００２３】
ディスプレイ１１は、ＣＰＵ１６から入力された映像信号を、ユーザ（開発者）に対して映像として表示する。
【００２４】
入力装置１２は、キーボード、マウス等から構成され、ユーザが操作することにより、その操作に応じた信号をＣＰＵ１６に出力する。
【００２５】
ＲＡＭ１３は読み出し、書き込み可能な揮発性メモリであり、ＲＯＭ１４は読み出し専用の不揮発性メモリであり、ＨＤＤ１５は読み出し、書き込み可能な不揮発性メモリである。ＲＯＭ１４、ＨＤＤ１５には、ＣＰＵ１６が読み出して実行するプログラム等があらかじめ記憶されている。またＨＤＤ１５には、後述するような見積もりモデルのテーブル、モデル情報テーブル等の情報が記憶されている。ＲＡＭ１３は、ＣＰＵ１６がＲＯＭ１４、ＨＤＤ１５に記憶されたプログラムを実行する際に、そのプログラムを一時的に保存するための記憶領域として用いられる。
【００２６】
ＣＰＵ１６は、パーソナルコンピュータ１に電源が投入されることによって起動すると、ＲＯＭ１４から所定のブートプログラムを読み出して実行し、このブートプログラムに規定されるオペレーティングシステム（以下ＯＳと記す）その他のプログラムをＨＤＤ１５から読み出して実行することにより、起動処理を行う。起動処理以後電源が遮断されるまで、ＣＰＵ１６は、入力装置１２からの信号、ＯＳによって予め定められたスケジュール等に基づいて、ＨＤＤ１５に記録されている各種プログラムを当該ＯＳ上のプロセスとして実行する。また、上記した起動処理およびプロセスにおいて、ＣＰＵ１６は必要に応じて入力装置１２から信号の入力を受け付け、またディスプレイ１１に映像信号を出力し、またＲＡＭ１３、ＨＤＤ１５に対してデータの読み出し／書き込みの制御を行う。
【００２７】
なお以降は、プログラムを実行することによるＣＰＵ１６の動作を、その実行されるプログラム自体の動作であるとして説明する。
【００２８】
パーソナルコンピュータ１のＣＰＵ１６が実行するプログラムの構成を図２に示す。ＣＰＵ１６は、自動コード生成プログラム２２、対応情報作成プログラム２４、モデルシミュレーションプログラム２６、ソースコードシミュレーションプログラム２８、比較プログラム３０、表示制御プログラム３１等を実行する。これらプログラムは、ユーザが入力装置１２に対して所定の操作をすることにより、または、他のプログラムから呼び出されることにより、その実行が始まる。
【００２９】
なお、モデル格納部２１、ソースコード格納部２３、対応情報格納部２５、テスト入力パタン格納部２７、シミュレーション結果格納部２９およびレポート格納部３２は、ＨＤＤ１５の記憶領域の一部である。
【００３０】
自動コード生成プログラム２２は、モデル格納部２１に格納されたモデルを読み出し、読み出したモデルをＣ等のプログラミング言語によるソースコードに変換し、変換された結果のソースコードをソースコード格納部２３に保存する。
【００３１】
なお、モデルは、図示しないモデルエディタ等の上記ＯＳ上で実行されるプログラムをユーザが利用することによって作成され、さらにモデル格納部２１に記憶されるようになっている。
【００３２】
モデルエディタとしては、例えばＭａｔｌａｂ（登録商標）上で動作するＳｉｍｕｌｉｎｋ（登録商標）と呼ばれるソフトウェアを用いることができる。また、自動コード生成プログラム２２としては、同じくＭａｔｌａｂ（登録商標）上で動作するＲｅａｌ  Ｔｉｍｅ  Ｗｏｒｋｓｈｏｐ（登録商標）と呼ばれるソフトウェアを用いることができる。モデルは、ブロック、およびあるブロックの出力を他のブロックの入力に繋ぐリンクから成る。
【００３３】
図３に、ソースコード格納部２３が読み出すモデル４０を例示する。このモデルは、車両のエンジン回転数、バッテリ電圧、気温等の、車両に関する物理量の入力を受け、この入力に基づいてエンジンのインジェクタが噴射する燃料の量を算出し、この産出量に基づいてインジェクタ弁を制御するための出力を行うことを表現するプログラムである。
【００３４】
モデル４０は、ブロックとして、入力１ブロック４１、入力２ブロック４２、入力３ブロック４３、入力４ブロック４４、入力５ブロック４５、入力６ブロック４６、出力１ブロック４７、出力２ブロック４８、動作モード設定サブシステム４０ａ、基本噴射量算出サブシステム４０ｂ、補正量算出サブシステム４０ｃ、噴射量算出サブシステム４０ｄを有している。
【００３５】
入力１ブロック４１、入力２ブロック４２、入力３ブロック４３、入力４ブロック４４、入力５ブロック４５、入力６ブロック４６は、このモデルの外部からのデータの入力を、それぞれのブロックの紙面中右側にリンク（図４０中では線分で表現されている）を介して繋がっているブロックに出力する機能を表すブロックである。
【００３６】
出力１ブロック４７、出力２ブロック４８は、それぞれのブロックの紙面中左側にリンクを介して繋がっているブロックからの出力を、このモデルの外部に出力する機能を表すブロックである
動作モード設定サブシステム４０ａ、基本噴射量算出サブシステム４０ｂ、補正量算出サブシステム４０ｃ、噴射量算出サブシステム４０ｄ、インジェクタ弁制御サブシステム４０ｅおよび噴射量記憶サブシステム４０ｆは、それぞれ複数のブロックおよびリンクの組み合わせによって構成されるブロックである。このように、複数のブロックおよびリンクの組み合わせによって構成されるブロックはサブシステムとも呼ばれる。
【００３７】
動作モード設定サブシステム４０ａは、入力１ブロック４１、入力２ブロック４２、入力３ブロック４３から、エンジン回転数、バッテリ電圧等の物理量の出力を受け、受けた物理量に基づいて車両の動作モードを特定し、特定した動作モードの状態を噴射量算出サブシステム４０ｄに出力する機能を有する。車両の動作モードとしては、車両がエンジンをかけた直後の始動状態、および、始動状態が終了した後の通常状態の２つがある。  
【００３８】
基本噴射量算出サブシステム４０ｂは、エンジン回転数、バッテリ電圧、外気温、エンジン冷却水温、スロットル開度等の物理量の出力を受け、受けた物理量に基づいて燃料噴射量の基本値を特定し、特定した基本燃料噴射量を噴射量算出サブシステム４０ｄに出力する機能を有する。
【００３９】
補正量算出サブシステム４０ｃは、噴射量変化値（後述する噴射量記憶サブシステム４０ｆの直前の出力に相当する）、エンジン回転数等の物理量の出力を受け、受けた物理量に基づいて、基本燃料噴射量に対する補正量を特定し、特定した補正量を噴射量算出サブシステム４０ｄに出力する機能を有する。なお、補正量としては、基本燃料噴射量に乗算する係数、係数が乗算された後の噴射量に加算するオフセット値の種類がある。  
【００４０】
噴射量算出サブシステム４０ｄは、動作モード設定サブシステム４０ａ、基本噴射量算出サブシステム４０ｂ、および補正量算出サブシステム４０ｃからの出力を受け、受けた量に基づいて燃料噴射量を特定し、特定した燃料噴射量、および燃料噴射量の前回量から今回量への変化値をインジェクタ弁制御サブシステム４０ｅおよび噴射量記憶サブシステム４０ｆに出力する機能を有する。噴射量算出サブシステム４０ｄの詳細な構成については後述する。  
【００４１】
インジェクタ弁制御サブシステム４０ｅは、噴射量算出サブシステム４０ｄの出力を受け、受けた燃料噴射量に基づいてインジェクタ弁の制御のための制御用パラメータを特定し、特定した制御用パラメータを出力１ブロック４７に出力する機能を有する。  
【００４２】
噴射量記憶サブシステム４０ｆは、噴射量算出サブシステム４０ｄの出力を受け、受けた物理量を出力２ブロック４８に出力する機能を有する。なお、出力２ブロック４８が受けた量は、後に補正量算出サブシステム４０ｃへ出力されることになる。
【００４３】
図４に、噴射量算出サブシステム４０ｄの詳細な構成を示す。噴射量算出サブシステム４０ｄは、ブロック５１〜６９、およびそれらの入出力を繋ぐリンクから成る。
【００４４】
ｓｔａｅｆｉ入力ブロック５１は、動作モード設定サブシステム４０ａからの動作モードの出力を受けて条件分岐ブロック６５に出力する機能を表す入力ブロックである。
【００４５】
ｔａｕ＿ｓ入力ブロック５２は、基本噴射量算出サブシステム４０ｂからの基本噴射量の出力を受けて乗算ブロック５５に出力する機能を表す入力ブロックである。
【００４６】
ｔａｕ＿ｓｔａｒｔ入力ブロック５３は、補正量算出サブシステム４０ｃから係数の出力を受けた乗算ブロック５５に出力する機能を表す入力ブロックである。
【００４７】
ｔａｕ＿ｃｏｍｐ２入力ブロック５４は、補正量算出サブシステム４０ｃからオフセット値の出力を受けて加算ブロック５６に出力する機能を表す入力ブロックである。なお、このオフセット値は、複数の値の組から成るベクトルデータである。
【００４８】
乗算ブロック５５は、ｔａｕ＿ｓ入力ブロック５２から出力された量とｔａｕ＿ｓｔａｒｔ入力ブロック５３から出力された量との乗算結果を２項加算ブロック５７に出力する機能を表すブロックである。
【００４９】
加算ブロック５６は、ｔａｕ＿ｃｏｍｐ２入力ブロック５４から出力されたベクトルデータの各要素の総和を２項加算ブロック５７に出力する機能を表すブロックである。
【００５０】
２項加算ブロック５７は、乗算ブロック５５から出力された量と加算ブロック５６から出力された量との和を比較ブロック５９および条件分岐ブロック６０に出力する機能を表すブロックである。
【００５１】
ＴＡＵ＿ＭＡＸ２定数ブロック５８は、定数ＴＡＵ＿ＭＡＸ２の値を比較ブロック５９および条件分岐ブロック６０に出力する機能を表すブロックである。
【００５２】
比較ブロック５９は、２項加算ブロック５７から出力された量がＴＡＵ＿ＭＡＸ２定数ブロック５８から出力された量より大きい場合に「真」を示す量を条件分岐ブロック６０に出力し、それ以外の場合には「偽」を示す量を条件分岐ブロック６０に出力する機能を表すブロックである。
【００５３】
条件分岐ブロック６０は、比較ブロック５９からの出力が「真」を示す量である場合、ＴＡＵ＿ＭＡＸ２定数ブロック５８からの出力を条件分岐ブロック６５に出力し、比較ブロック５９からの出力が「偽」を示す量である場合、２項加算ブロック５７からの出力を条件分岐ブロック６５に出力する機能を表すブロックである。
【００５４】
ｔａｕ＿ｓｔａｒｔデータ読み出しブロック６１は、モデル４０の外部の機能によって記憶された値ｔａｕ＿ｓｔａｒｔを比較ブロック６３および条件分岐ブロック６４に出力する機能を有するブロックである。
【００５５】
ＴＡＵ＿ＭＡＸ１定数ブロック６２は、定数ＴＡＵ＿ＭＡＸ１の値を比較ブロック６３および条件分岐ブロック６４に出力する機能を表すブロックである。
【００５６】
比較ブロック６３は、ｔａｕ＿ｓｔａｒｔデータ読み出しブロック６１から出力された量がＴＡＵ＿ＭＡＸ１定数ブロック６２から出力された量より大きい場合に「真」を示す量を条件分岐ブロック６４に出力し、それ以外の場合には「偽」を示す量を条件分岐ブロック６４に出力する機能を表すブロックである。
【００５７】
条件分岐ブロック６４は、比較ブロック６３からの出力が「真」を示す量である場合、ＴＡＵ＿ＭＡＸ１定数ブロック６２からの出力を条件分岐ブロック６５に出力し、比較ブロック６３からの出力が「偽」を示す量である場合、ｔａｕ＿ｓｔａｒｔデータ読み出しブロック６１からの出力を条件分岐ブロック６５に出力する機能を表すブロックである。
【００５８】
条件分岐ブロック６５は、ｓｔａｅｆｉ入力ブロック５１からの出力が「始動状態」を示す量である場合、条件分岐ブロック６４からの出力を２項減算ブロック６７およびｔａｕｏｕｔ出力ブロック６８に出力し、ｓｔａｅｆｉ入力ブロック５１からの出力が「通常状態」を示す量である場合、条件分岐ブロック６０からの出力を２項減算ブロック６７およびｔａｕｏｕｔ出力ブロック６８に出力する機能を表すブロックである。
【００５９】
ｔａｕ＿ｐｒｅｖデータ読み出しブロック６６は、モデル４０の外部の機能によって記憶された値ｔａｕ＿ｐｒｅｖを２項減算ブロック６７に出力する機能を表すブロックである。
【００６０】
２項減算ブロック６７は、条件分岐ブロック６５の出力量からｔａｕ＿ｐｒｅｖデータ読み出しブロック６６の出力量を減算した量をｔａｕｏｕｔ＿ｃ出力ブロック６９に出力する機能を表すブロックである。
【００６１】
ｔａｕｏｕｔ出力ブロック６８は、条件分岐ブロック６５からの出力を値ｔａｕｏｕｔとしてインジェクタ弁制御サブシステム４０ｅに出力する機能を表すブロックである。
【００６２】
ｔａｕｏｕｔ＿ｃ出力ブロック６９は、２項減算ブロック６７からの出力を値ｔａｕｏｕｔ＿ｃとして噴射量記憶サブシステム４０ｆに出力する機能を表すブロックである。
【００６３】
このような構成の噴射量算出サブシステム４０ｄにより、乗算ブロック５５においてｔａｕ＿ｓ入力ブロック５２からの基本噴射量とｔａｕ＿ｓｔａｒｔ入力ブロック５３からの係数とが乗算され、さらに２項加算ブロック５７でこの乗算結果とｔａｕ＿ｃｏｍｐ２入力ブロック５４からのオフセット値の総和とが加算されることで、補正後の噴射量が算出される。
【００６４】
そして、比較ブロック５９および条件分岐ブロック６０によって、この補正後の噴射量と上限値ＴＡＵ＿ＭＡＸ２のうち小さい方の値、すなわちＴＡＵ＿ＭＡＸ２によって上限を抑えられた補正後の噴射量、が条件分岐ブロック６５に出力される。
【００６５】
また、比較ブロック６３および条件分岐ブロック６４によって、値ｔａｕ＿ｓｔａｒｔと上限値ＴＡＵ＿ＭＡＸ１のうち小さい方の値が条件分岐ブロック６５に出力される。
【００６６】
そして、条件分岐ブロック６５により、ｓｔａｅｆｉ入力ブロック５１からの値が「始動状態」なら、値ｔａｕ＿ｓｔａｒｔと上限値ＴＡＵ＿ＭＡＸ１のうち小さい方の値がｔａｕｏｕｔ出力ブロック６８に出力され、ｓｔａｅｆｉ入力ブロック５１からの値が「通常状態」なら、ＴＡＵ＿ＭＡＸ２によって上限を抑えられた補正後の噴射量が、噴射量としてｔａｕｏｕｔ出力ブロック６８に出力される。
【００６７】
また、２項減算ブロック６７によって、この噴射量と前回の噴射量との差がｔａｕｏｕｔ＿ｃ出力ブロック６９に出力される。
【００６８】
なお、ここで出力される噴射量は、多気筒エンジンの各シリンダー毎の噴射量を示す配列値である。
【００６９】
自動コード生成プログラム２２は、このようなモデル４０の一部である噴射量算出サブシステム４０ｄを元に、Ｃソースコードの一関数を生成する。この、噴射量算出サブシステム４０ｄから生成されるＣソースコードを図５〜図７に示す。なお、図５〜図７のソースコードの各行の左端には、説明の便宜のために行番号を付した。また、記号列／＊で始まり記号列＊／で終わるコメント文を、プログラムの説明のために便宜的に付した。
【００７０】
このソースコードにおいては、例えば、第１０５行から第１５１行までのｔａｕ＿ｃａｌ（）関数が、噴射量算出サブシステム４０ｄの機能を実現する。
【００７１】
また、第１１４行のｉｆ文から始まる第１１４行〜第１４２行のｉｆ〜ｅｌｓｅブロックが、条件分岐ブロック６５の機能を実現する。
【００７２】
また、第１４３行がｔａｕｏｕｔ出力ブロック６８の機能を実現し、第１４４行２項減算ブロック６７およびｔａｕｏｕｔ＿ｃ出力ブロック６９の機能を実現する。
【００７３】
また、第１３８行のｉｆ文から始まるｉｆブロックが、条件分岐ブロック６４の機能を実現する。
【００７４】
このように、モデルと、そのモデルから生成されたＣソースコードとの間では、モデルの構成部分（ブロック等）と、その機能を実現するＣソースコードの構成部分との対応関係がある。この構成部分間の対応関係は、１対１の対応関係である場合がほとんどである。
【００７５】
自動コード生成プログラム２２は、読み出したモデルからソースコードを生成する際、当該モデルのどの構成部分と当該ソースコードのどの構成部分とが対応するかの対応情報を出力するようになっている。
【００７６】
対応情報作成プログラム２４は、自動コード生成プログラム２２が出力するこの対応情報から、モデルの構成部分であるブロックと、そのモデルから生成されたソースコードの構成部分との対応関係の表、すなわち対応表を作成し、当該対応表を対応情報格納部２５に記憶させる。なお、この対応表の作成は、自動コード生成プログラム２２から出力された情報に加え、モデル格納部２１に格納されている当該モデルの情報に基づいて行ってもよい。
【００７７】
図８に、この対応表の一例を示す。この対応表は、モデル４０、特に噴射量算出サブシステム４０ｄの構成部分についての対応表である。この表は、ブロックの種類（サブシステム、入力ブロック、出力ブロック、条件分岐ブロック等）毎に細分化されている。また、この表の各行が、１つの対応関係を表している。ただし、条件分岐ブロック（図８中ではｉｆブロックと記す）は、表中の連続する複数行が１つの対応関係を表している。
【００７８】
各行において、左端の項目（ＩＤ）は、自動コード生成プログラム２２によって決められた、モデルの各ブロックを特定するための識別記号である。また、中央の項目（サブシステム名、入力ブロック名等）は、モデルエディタでユーザがそのブロックを作成したときに、ユーザ自身がそのブロックに与えた名称である。
【００７９】
左端の項目（関数、グローバル変数、引数、戻り値等）は、当該ブロックがソースコード中のどの構成部分に対応しているかを示す情報である。
【００８０】
例えば、サブシステムＢ、すなわち基本噴射量算出サブシステム４０ｂについては、ソースコード中の関数ｔａｕ＿ｔａｕｓｔ（）に対応していることが示されている。
【００８１】
また、噴射量算出サブシステム４０ｄのｉｎ＿１のブロック、すなわちｓｔａｅｆｉ入力ブロック５１については、図５の第１０５行において引数として渡され、第１１４行で条件判定に用いられるローカル変数ｓｔａｅｆｉに対応していることが示されている。
【００８２】
また、ｉｆ＿１のブロック、すなわち条件分岐ブロック６５については、図５〜図７の第１１４行〜第１４２行に対応していることが示されている。
【００８３】
また、モデルエディタによって作成されたモデル、自動コード生成プログラム２２によって生成されたソースコードに対して、それぞれモデルシミュレーションプログラム２６、ソースコードシミュレーションプログラム２８がシミュレーションを行う。
【００８４】
具体的には、モデルシミュレーションプログラム２６は、モデル格納部２１に格納されたモデルを読み出し、テスト入力パタン格納部２７にあらかじめ格納されているテスト入力パタンを読み出して、これをモデルへの入力データ（モデル４０においては入力ブロック４１〜４６から出力されるデータ）として、モデルによって表現された機能をパーソナルコンピュータ１上で仮想的に実行する。そして、この実行結果をシミュレーション結果格納部２９に記憶させる。実行結果とは、モデルの出力データ（モデル４０においては出力ブロック４７、４８への入力データ）、モデルのどの構成部分の機能がどの時刻からどの時刻まで実行されたかのデータ、モデルの構成部分が正常に実行されたかのデータ、その実行時におけるＣＰＵ１６の処理負荷（具体的にはＣＰＵ占有率）等をいう。
【００８５】
また、ソースコードシミュレーションプログラム２８は、ソースコード格納部２３に格納されたソースコードを読み出し、テスト入力パタン格納部２７にあらかじめ格納されているテスト入力パタンを読み出して、これをソースコードへの入力データ（例えば関数の引数）として、ソースコードによって表現された機能をパーソナルコンピュータ１上で仮想的に実行する。そして、この実行結果をシミュレーション結果格納部２９に記憶させる。実行結果とは、ソースコードの出力データ（例えば関数の戻り値）、ソースコードのどの行の機能がどの時刻からどの時刻まで実行されたかのデータ、モデルの構成部分が正常に実行されたかのデータ、その実行時におけるＣＰＵ１６の処理負荷（具体的にはＣＰＵ占有率）等をいう。
【００８６】
なお、モデルシミュレーションプログラム２６、ソースコードシミュレーションプログラム２８としては、例えばｍｅｔｒｏｗｅｒｋｓ（登録商標）社のＣｏｄｅＴＥＳＴ（登録商標）を用いることで実現できる。
【００８７】
比較プログラム３０は、対応情報格納部２５に格納された対応表に基づいて、ソースコード（またはモデル）の品質評価の結果抽出された構成部分と、この構成部分に対応するモデル（またはソースコード）の構成部分とが関連づけられた表示を行わせるための表示用情報を生成し、レポート格納部３２に記憶する。
【００８８】
この比較プログラム３０の作動のフローチャートを図９〜図１１に示す。
【００８９】
この比較プログラム３０は、まずステップ１０１で、モデル実行結果、すなわちモデルシミュレーションプログラム２６がシミュレーション結果格納部２９に記憶させたシミュレーション結果を読み込む。
【００９０】
続いてステップ１０２で、ソースコード実行結果、すなわちソースコードシミュレーションプログラム２８がシミュレーション結果格納部２９に記憶させたシミュレーション結果を読み込む。
【００９１】
続いてステップ１０３で、対応情報読み込みを行う。具体的には、対応情報格納部２５に対応情報作成プログラム２４が格納した対応表を読み出す。
【００９２】
続いてステップ１０４で、ソースコード解析処理を行う。後述する通り、このソースコード解析処理によって、ソースコードの各構成部分についての品質評価の情報がＲＡＭ１３に記憶される。
【００９３】
続いてステップ１０５で、後述する様に、改善の必要性の高い順、すなわち重要度順にソースコードの構成部分を並び替え、当該並び替えた構成部分を、対応表を用いて、モデルの構成部分にリンクする。
【００９４】
続いてステップ１０６で、当該リンクの結果をレポート格納部３２に記憶させ、かつ表示制御プログラム３１に表示させる。なお、表示制御プログラム３１に表示させるための具体的方法は、表示制御プログラム３１を起動すると共に、重要度順に並んだ当該リンクの情報およびソースコード解析処理結果から成る表示用情報を引数として表示制御プログラム３１に渡すことである。ステップ１０６の後、比較プログラム３０の実行は終了する。
【００９５】
このようにして、比較プログラム３０は、モデルの構成部分と当該モデルに基づいて生成されたソースコードの構成部分との対応関係の情報である対応表を取得し（ステップ１０３参照）、この取得した対応表に基づいて、当該ソースコードの品質評価の結果に基づいて、改善の必要性の高い構成部分を、重要度に基づいた並び替えによって抽出し（ステップ１０５参照）、抽出された構成部分と、この構成部分に対応するモデルの構成部分とが関連づけられた表示を行わせるための表示用情報を記憶媒体に記憶させ、また比較プログラム３０に表示させる（ステップ１０６）。
【００９６】
以下、上記したステップ１０４のソースコード解析処理の詳細について説明する。図１０にこの処理のフローチャートを示す。
【００９７】
このソースコード解析処理において、まずステップ３０１では、ソースカバレッジ調査を行う。具体的には、ステップ１０２において読み込んだソースコード実行結果から、ソースコード中のｉｆブロックによる条件分岐において、どの分岐先が実行されなかったかを特定する。
【００９８】
続いてステップ３０２で、ステップ１０１において特定した、実行されなかった分岐先の情報をＲＡＭ１３に格納する。
【００９９】
続いてステップ３０３で、動的評価調査を行う。具体的には、ステップ１０２において読み込んだソースコード実行結果から、関数、ｉｆブロック、ｗｈｉｌｅブロック等の構成部分のそれぞれについて、ＳＣパスカバレッジ、ＭＣＤＣパスカバレッジ、実行回数、実行１回あたりの実行時間、総実行時間、実行周期、処理負荷、レイテンシ、ジッタ−等の動的評価の評価項目についての情報を特定する。
【０１００】
ＳＣパスカバレッジとは、ソースコードの一行を単位として、ソースコードの対象となる構成部分のうちどれぐらいの割合がシミュレーションにより実行されたかを示すデータである。
【０１０１】
ＭＣＤＣパスカバレッジとは、ＳＣパスカバレッジより複雑にソースコードの実行割合を評価した値である。例えば、ソースコードのｉｆ文が複数の式の複合式となっている場合、複合式自体の真、偽による分岐のあるなしのみならず、それぞれの式の真、偽の全ての組み合わせについて、その組み合わせが発生したか否かを含めたものである。
【０１０２】
レイテンシとは、ある計算（例えば関数）が開始されてから結果が出力される（例えば戻り値が返される）までの時間をいう。
【０１０３】
ジッターとは、複数の実行のそれぞれにおけるレイテンシのぶれの大きさをいう。
【０１０４】
このように、動的評価とは、ソースコードの実行をシミュレートすることによってわかる品質評価をいう。
【０１０５】
続いてステップ３０４で、ステップ３０３によって特定された動的評価をＲＡＭ１３に格納する。
【０１０６】
続いてステップ３０５で、静的評価調査を行う。具体的には、当該ソースコードの関数、ｉｆブロック、ｗｈｉｌｅブロック等の構成部分のそれぞれについて、行数、入れ子の深さ、テンポラリ変数の数、使用する外部変数の数、経路複雑度等の静的評価の評価項目についての情報を特定する。
【０１０７】
経路複雑度とは、ソースコードの複雑度であり、ソースコードの行数、入れ子の深さ、テンポラリ変数の数、外部変数の数に基づいて、所定の式で算出される量である。
【０１０８】
このように、静的評価とは、ソースコード（またはモデル）の構造を確認するだけで特定できる品質評価である。
【０１０９】
続いてステップ３０６で、ステップ３０５によって特定された静的評価をＲＡＭ１３に格納する。
【０１１０】
続いてステップ３０７で、ソースコードの各構成部分毎に、評価項目の評価を重み付けて足し合わせる。具体的には、ソースコードの各構成部分毎に、上記した動的評価および静的評価の評価項目の１つ１つにあらかじめ設定された重要度の係数（単位は各評価項目の単位の逆数）を乗算し、この乗算結果の総和を算出し、その総和を重要度情報として、当該構成部分と対応づけてＲＡＭ１３に格納する。なお、各係数は、ソースコードの改善の必要度が高いものほど重要度が高くなるようにあらかじめ設定され、ＨＤＤ１５に格納されている。
【０１１１】
そして図９のステップ１０４の処理が終了する。
【０１１２】
次に、上記した図９のステップ１０５のリンクの処理の詳細について説明する。図１１にこの処理の詳細なフローチャートを示す。
【０１１３】
まずステップ４０１で、図９のステップ１０４の結果ＲＡＭ１３に格納された動的評価、静的評価の各評価項目についての情報（重要度の情報を含む）を読み出す。
【０１１４】
続いてステップ４０２で、ソースコードの各構成部分を重要度の高い順に並べる。
【０１１５】
続いてステップ４０３で、ステップ１０３で読み込んだ対応表を用いて、並び替えられた構成部分に対応するモデルの構成部分を特定し、その特定した情報をＲＡＭ１３に格納する。そして、図９のステップ１０５の処理は終了する。
【０１１６】
次に、比較プログラム３０によって呼び出される表示制御プログラム３１の作動について説明する。表示制御プログラム３１は、起動すると共に、重要度順に並んだ当該リンクの情報およびソースコード解析処理結果から成る表示用情報を引数として受け取る。
【０１１７】
そして表示制御プログラム３１は、まず、重要度が最も高いソースコードの構成部分と、図９のステップ１０５で特定したその構成部分に対応するブロックの構成部分とを並べてディスプレイ１１に表示させる。
【０１１８】
なお、この時に表示制御プログラム３１が表示させる部分は、ソースコードのシミュレーションの結果実行されなかった構成部分がある場合、その部分を表示させる。これは、ソースコードシミュレーションプログラム２８によって実行されていないソースコードの構成要素がある場合、その部分が最も重要度の高い構成要素となるように、上記係数を設定されているからである。
【０１１９】
図１２に、比較プログラム３０の制御によるディスプレイ１１の表示例を示す。比較プログラム３０の制御によって、ディスプレイ１１の画面上には、ソースコード表示部７１、モデル表示部７２、静的評価表示ボタン７３、および動的評価表示ボタン７４が並べて表示される。
【０１２０】
ソースコード表示部７１は、ソースコードを表示する部分であり、モデル表示部７２は、当該ソースコードの元となるモデルを表示する部分である。
【０１２１】
表示制御プログラム３１は、ソースコード表示部７１に、引数として受け取ったソースコードの構成部分のうち、最も先頭のもの、すなわち最も重要度の高い構成部分７５を表示させる。
【０１２２】
なお、この構成部分を他の構成部分と同時に表示する場合には、強調表示、点滅表示、色分け表示等、当該他の部分と視覚的に区別できるような表示を行う。
【０１２３】
また表示制御プログラム３１は、モデル表示部７２に、上記区別して表示されたソースコードの構成部分７５に対応するモデルの構成部分７６、７７をディスプレイ１１に表示させる。
【０１２４】
なお、このモデルの構成部分を他の構成部分と同時に表示する場合には、強調表示、点滅表示、色分け表示等、当該他の部分と視覚的に区別できるような表示を行う。
【０１２５】
また、上記したソースコードおよびモデルの、他の構成部分と視覚的に区別できるような表示の態様は同じものとする。例えば、ソースコードの構成部分が色分け表示されていれば、モデルの対応する構成部分は、同じ色で色分け表示されるようにする。
【０１２６】
図１２においては、ソースコードの構成部分７５は、条件分岐ブロックの下半分である構成部分７６、および比較ブロック７７に対応する。これは、ソースコードの構成部分７５中のｉｆ文の分岐先のうち、ｔａｕ＞ＴＡＵ＿ＭＡＸとなる場合の分岐先が、ソースコードのシミュレーションにおいて一度も実行されなかったことを示している。
【０１２７】
また、静的評価表示ボタン７３、動的評価表示ボタン７４は、ユーザが入力装置１２に対して所定の操作を行うことで選択することができる。
【０１２８】
表示制御プログラム３１は、ユーザによる静的評価表示ボタン７３の選択を検知すると、図１３に例示するような表形式による静的評価の画面表示を行う。また表示制御プログラム３１は、ユーザによる動的評価表示ボタン７４の選択を検知すると、図１４に例示するような表形式による動的評価の画面表示を行う。
【０１２９】
静的評価表示ボタン７３が選択された場合および動的評価表示ボタン７４が選択された場合のいずれにおいても、表示する静的評価、動的評価等の品質評価の対象となる構成部分は、当該重要度の最も高い構成部分である。
【０１３０】
なお、表においては、動的評価または静的評価の対象となったソースコードの構成部分に対応するモデルの構成部分の識別情報（名称でもよい）７８、７９が表示される。これによって、そのソースコードの構成部分についての動的評価、静的評価の結果が、対応するモデルの構成部分と対応づけられて表示される。これは、ソースコードの構成部分とモデルの構成部分とが間接的に関連づけられた表示である。
【０１３１】
なお、ユーザが次候補、すなわち次に重要度が高い構成部分の表示を行う旨の操作を入力装置１２に対して行うことで、表示制御プログラム３１は、当該構成部分についてのソースコード表示、モデル表示、動的評価表示、静的評価表示を行うようになっていてもよい。
【０１３２】
また、静的評価表示ボタン７３または動的評価表示ボタン７４が選択されると、それぞれ全ての構成部分についての静的評価または動的評価が、当該構成部分に対応するモデルの構成部分の識別情報が付されて表示されるようになっていてもよい。
【０１３３】
なお、上記した、図９のステップ１０４〜１０６の処理の記載において、モデルをソースコードに、ソースコードをモデルに、それぞれ読み替えたような処理が行われてもよい。
【０１３４】
このようになっていると、比較プログラム３０は、モデルの構成部分と当該モデルに基づいて生成されたソースコードの構成部分との対応関係の情報である対応表を取得し、この取得した対応表に基づいて、当該モデルの品質評価の結果に基づいて、改善の必要性の高い構成部分を、重要度に基づいた並び替えによって抽出し、抽出された構成部分と、この構成部分に対応するソースコードの構成部分とが関連づけられた表示を行わせるための表示用情報を記憶媒体に記憶させ、また比較プログラム３０に表示させることになる。
【０１３５】
なお、上記した実施形態において、ＣＰＵ１６が、特許請求の範囲に記載のコンピュータに相当する。
【０１３６】
また、ＣＰＵ１６が、図９のステップ１０３の処理を実行することで、対応情報取得手段として機能する。
【０１３７】
また、ＣＰＵ１６が、図９のステップ１０４〜１０６の処理を実行することで、記憶制御手段として機能する。
【０１３８】
また、ＣＰＵ１６が、図１の表示制御プログラム３１を実行することで、表示制御手段として機能する。
【図面の簡単な説明】
【０１３９】
【図１】パーソナルコンピュータ１のハードウェア構成を示す図である。
【図２】パーソナルコンピュータ１のＣＰＵ１６が実行するプログラムの機能構成を示す図である。
【図３】自動コード生成プログラム２２が読み出すモデルの一例を示す図である。
【図４】噴射量算出サブシステム４０ｄの詳細な構成を示す図である。
【図５】噴射量算出サブシステム４０ｄから生成されたソースコードを示す図である。
【図６】噴射量算出サブシステム４０ｄから生成されたソースコードを示す図である。
【図７】噴射量算出サブシステム４０ｄから生成されたソースコードを示す図である。
【図８】対応情報作成プログラム２４が対応情報格納部２５に記憶させる対応表を示す図表である。
【図９】比較プログラム３０のフローチャートである。
【図１０】比較プログラム３０のステップ１０４の詳細なフローチャートである。
【図１１】比較プログラム３０のステップ１０５の詳細なフローチャートである。
【図１２】比較プログラム３０の制御によるディスプレイ１１の表示例を示す図である。
【図１３】比較プログラム３０の表示する動的評価を示す図である。
【図１４】比較プログラム３０の表示する動的評価を示す図である。
【符号の説明】
【０１４０】
１…パーソナルコンピュータ、１１…ディスプレイ、１２…入力装置、
１３…ＲＡＭ、１４…ＲＯＭ、１５…ＨＤＤ、１６…ＣＰＵ、２１…モデル格納部、
２２…自動コード生成プログラム、２３…ソースコード格納部、
２４…対応情報作成プログラム、２５…対応情報格納部、
２６…モデルシミュレーションプログラム、２７…テスト入力パタン格納部、
２８…ソースコードシミュレーションプログラム、
２９…シミュレーション結果格納部、３０…比較プログラム、
３１…表示制御プログラム、３２…レポート格納部、４０…モデル、
４１…入力１ブロック、４２…入力２ブロック、４３…入力３ブロック、
４４…入力４ブロック、４５…入力５ブロック、４６…入力６ブロック、
４０ａ…動作モード設定サブシステム、４０ｂ…基本噴射量算出サブシステム、
４０ｃ…補正量算出サブシステム、４０ｄ…噴射量算出サブシステム、
４０ｅ…インジェクタ弁制御サブシステム、４０ｆ…噴射量記憶サブシステム、
４７…出力１ブロック、４８…出力２ブロック、５１…ｓｔａｅｆｉ入力ブロック、
５２…ｔａｕ＿ｓ入力ブロック、５３…ｔａｕ＿ｓｔａｒｔ入力ブロック、
５４…ｔａｕ＿ｃｏｍｐ２入力ブロック、５５…乗算ブロック、
５６…加算ブロック、５７…２項加算ブロック、
５８…ＴＡＵ＿ＭＡＸ２定数ブロック、５９…比較ブロック、
６０…条件分岐ブロック、６１…ｔａｕ＿ｓｔａｒｔデータ読み出しブロック、
６２…ＴＡＵ＿ＭＡＸ１定数ブロック、６３…比較ブロック、
６４…条件分岐ブロック、６５…条件分岐ブロック、
６６…ｔａｕ＿ｐｒｅｖデータ読み出しブロック、６７…２項減算ブロック、
６８…ｔａｕｏｕｔ出力ブロック、６９…ｔａｕｏｕｔ＿ｃ出力ブロック６９
７１…ソースコード表示部、７２…モデル表示部、７３…静的評価表示ボタン、
７４…動的評価表示ボタン、７５…ソースコードの構成部分、
７６、７７…モデルの構成部分、７８、７９…モデルの構成部分の識別情報。
【図１】
2005301568.tif 000003
【図２】
2005301568.tif 000004
【図３】
2005301568.tif 000005
【図４】
2005301568.tif 000006
【図５】
2005301568.tif 000007
【図６】
2005301568.tif 000008
【図７】
2005301568.tif 000009
【図８】
2005301568.tif 000010
【図９】
2005301568.tif 000011
【図１０】
2005301568.tif 000012
【図１１】
2005301568.tif 000013
【図１２】
2005301568.tif 000014
【図１３】
2005301568.tif 000015
【図１４】
2005301568.tif 000016