(57)【要約】【課題】制御ロジックをブロックや結線で表現したモデルから生成されたソースコードに対するエラー情報に基づいたモデルチェックを迅速、容易且つ正確に行えるようにする。【解決手段】ソースコードに対するエラー情報とともに、それに関連するモデル（モデル図）を表示する。エラー情報とそれに関連するモデルをハイパーリンク形式で関連づけ、エラー情報をクリックすることで、関連するモデルが表示され、又は表示されているモデルにおけるエラー情報に関連するブロックがハイライト表示される。【選択図】図２
2007193483.tif 000002
【特許請求の範囲】
【請求項１】
制御ロジックを構成する制御要素と制御要素間の関連状態とを表現した制御モデルからプログラムを生成する際に生じたエラー情報を取得する取得手段と、
前記エラー情報とともに、前記エラー情報に関連する前記制御モデルのモデル図を表示する表示手段とを備えることを特徴とするモデルチェックシステム。
【請求項２】
請求項１において、
前記表示手段は、表示された前記モデル図における前記エラー情報に関連する制御要素を、他の要素と異なる形態で表示することを特徴とするモデルチェックシステム。
【請求項３】
請求項１において、
前記表示手段は、表示された前記エラー情報における前記モデル図に関連する情報を、他の情報と異なる形態で表示することを特徴とするモデルチェックシステム。
【請求項４】
請求項１において、
表示された前記エラー情報における前記モデルに関連する情報を選択する操作を検知する検知手段を備え、
前記表示手段は、前記検知手段により前記選択操作が検知されると、選択された情報を含む前記エラー情報に関連する前記モデル図を表示することを特徴とするモデルチェックシステム。
【請求項５】
請求項１において、
表示された前記エラー情報における前記モデルに関連する情報を選択する操作を検知する検知手段を備え、
前記表示手段は、前記検知手段により前記選択操作が検知されると、表示された前記モデル図における選択された情報を含む前記エラー情報に関連する制御要素を、他の制御要素と異なる形態で表示することを特徴とするモデルチェックシステム。
【請求項６】
請求項１において、
前記表示手段は、一つのエラー情報に関連する複数のモデル図を同時に表示することを特徴とするモデルチェックシステム。
【請求項７】
請求項１において、
前記表示手段は、一つのモデル図に関連する複数のエラー情報を同時に表示することを特徴とするモデルチェックシステム。
【請求項８】
請求項１乃至７のいずれかにおいて、
前記プログラム上の用語と前記制御モデル上の用語との対応関係を記憶する記憶手段と、
前記プログラム上の用語により表現される前記エラー情報に含まれる前記制御モデルに関連する情報を、前記対応関係に基づいて前記制御モデル上の用語に変換する変換手段とを備え、
前記表示手段は、前記変換手段により変換された前記エラー情報を表示することを特徴とするモデルチェックシステム。
【請求項９】
複数の単位プログラムから構成されるプログラムの中から、制御ロジックを構成する制御要素と制御要素間の関連状態とを表現した制御モデルから生成された単位プログラムのエラー情報を抽出する抽出手段と、
前記抽出手段により抽出されたエラー情報を、前記エラー情報に関連する前記モデルのモデル図とともに表示する表示手段とを備えることを特徴とするモデルチェックシステム。
【請求項１０】
コンピュータ読み取り可能なプログラムにおいて、
制御ロジックを構成する制御要素と制御要素間の関連状態とを表現した制御モデルからプログラムを生成する際に生じたエラー情報を取得する取得処理と、
前記エラー情報とともに、前記エラー情報に関連する前記制御モデルのモデル図を表示する表示処理とをコンピュータに実行させるプログラム。
【請求項１１】
制御ロジックを構成する制御要素と制御要素間の関連状態とを表現した制御モデルからプログラムを生成する際に生じたエラー情報を取得する取得工程と、
前記エラー情報とともに、前記エラー情報に関連する前記制御モデルのモデル図を表示する表示工程とを備えることを特徴とするモデルチェック方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、特定のモデル記述言語等を用いて作成した制御モデルのチェックのより容易に行えるようにするモデルチェックシステムに関する。
【背景技術】
【０００２】
例えば自動車などの車両の開発、設計において、エンジンやトランスミッションなどの車両コンポーネントの制御・動作を制御モデル（以下、単にモデルと称す）として作成し、作成されたモデルをシミュレーション及び解析するモデリングツールが知られている（例えば、MATLAB（登録商標）、Simulink（登録商標））。モデルとは、制御ロジックをブロックと結線で表現されたものであって、モデルは人手により作成される。モデルを構成する各構成要素間の不整合（モデルから自動生成されるプログラム（ソースコード）内に潜在する不正なロジック）の有無をチェックする必要がある。従来、このチェックは、ソースコードに対してコードベースのチェックツールをかけ、その結果からモデルベースでの修正箇所を手作業で探して、修正が必要な場合、モデルを修正している。
【０００３】
従来のモデルのチェック動作について、さらに詳しく説明する。まず、設計・実装したモデルに対し直接、静的解析を行う技術が用いられる。具体的には、モデル構成（レイヤ構成）や、モデル上の構成要素（制御要素）に付けられた名称が一定のルールに従っているかどうかのチェック技術や、単一の構成要素相互の属性を比較したプログラム不整合チェック技術が用いられている（従来技術１）。
【０００４】
この（従来技術１）によれば、モデル内で閉じた不整合の検出は可能である。しかし、現状、実際のターゲットシステム開発においては、モデルに基づいて作成したソースコードと、既存のソースコードとを組み合わせて１つのプログラムとする場合が多く、（従来技術１）では、既存のソースコードと組み合わせてはじめて発生するプログラム内不整合の検出は不可能である。
【０００５】
そこで、モデルに記述された仕様・設計情報に基づき、モデルから（特定のプログラム言語に従った）ソースコードを自動生成する技術を用いて、モデルと同等の制御仕様・設計情報を記述したソースコードを生成し、既存のソースコードと組み合わせて１つのプログラムを構成するソースコードセットとし、静的解析技術を用いたツールにこのソースコードセットを与え、検出したプログラム上の問題点を、警告形式で表現し、警告内容とソースコード上の警告箇所から、モデル上の問題指摘箇所を（主として目視・人手により）特定することでモデルの問題箇所修正を行っている（従来技術２）。
【０００６】
図１は、従来の技術におけるモデルの静的解析技術（従来技術２）の動作フローを示した図である。図１は、従来技術の使用に先立って使用者が行う事前準備フローB１と、従来技術であるコードベースチェック方法のフローB２とから構成される。
【０００７】
事前準備Ｂ１において使用者は、まず、チェック対象とするモデルを作成する（Ｂ１０１）。モデルの作成は一般的に、ソフトウェアツール（モデリングツール）を用いて行われる。モデルは物理的には１つ若しくは複数のモデルファイルとして存在する。さらに、モデルには、使用者が設計するターゲットシステムの設計情報が記述されているものとする。
【０００８】
次に、使用者は、作成したモデルから、モデルに記述された設計情報を基に、特定のプログラム言語に従ったソーコードを人手により（即ちエディタ等を用いて）作成する（Ｂ１０２a）。あるいは、使用者は、モデルからソースコードを自動生成するソフトウェアツールを用いて、モデルと同等の設計情報を表すソースコードを得る場合もある（Ｂ１０２b）。実際のターゲットシステムの設計業務においては、モデルから作成若しくは自動生成したソースコード(1)（Ｂ１０３a）と、既存の標準部品であるソースコード(2)（Ｂ１０３b）とを１つのソースコードセットとし（Ｂ１０３）、このソースコードセットをもって１つのプログラムを構成させる場合が多い。
【０００９】
以上が、従来技術の実施に先立って、従来技術の使用者が行う事前準備Ｂ１の説明である。
【００１０】
次に、コードベースチェック方法においては、ソースコードセットＢ１０３を与えてコードベースチェッカＢ２０１を起動し、ソースコードセットが表すプログラム内に潜在する不整合をチェック・検出させ、結果をコードベース警告Ｂ２０２に格納する。使用者B２０３は、例えばコードベース警告（Ｂ２０２）内の１つの警告メッセージ中に関数FuncBに対する指摘があると、コードベースの「関数」をモデルベースの「ブロック」に読み替える。さらに、コードベースで関数名称がFuncBであればこれをモデルベースではブロックBlockBであり、BlockBをモデル（Ｂ２０４）内で検索し、探し当てたBlockB（Ｂ２０４a）について不整合が何かを、コードベースの警告メッセージを見て推測する。
【発明の開示】
【発明が解決しようとする課題】
【００１１】
（従来技術２）のような従来のモデル静的解析技術によれば、モデルから、モデルと同等の制御仕様・設計情報を記述したソースコードを生成し、既存のソースコードと組み合わせて１つのプログラムを構成するソースコードセットとし、静的解析技術を用いたツールにこのソースコードセットを与え、検出したプログラム上の問題点を、警告形式で表現するため、警告が既存のソースコードを指摘したものか、モデルからから生成したソースコードを指摘したものかの区別を、目視・人手により行わなければならない。
【００１２】
また、コードベース警告メッセージはコードベースの用語により記述されているため、これを目視・人手によりモデルベースの用語に読み替え、若しくは、書き換える必要がある。
【００１３】
さらに、コードベース警告指摘はソースコード上の構成要素に対しての指摘であり、モデルからから生成したソースコード上の構成要素から、その元となった、モデル上の構成要素を目視・人手により検索し特定する必要がある。
【００１４】
本発明は、上述の如き従来技術の課題を解決するためになされたもので、その目的は、モデルから、モデルと同等の制御仕様・設計情報を記述したソースコードを生成し、この生成したソースコードの問題点を、警告形式で表現する際に、その警告をモデルに関連づけて表示することができるモデルチェックシステムを提供することである。
【課題を解決するための手段】
【００１５】
上記目的を達成するための本発明のモデルチェックシステムの第一の構成は、制御ロジックを構成する制御要素と制御要素間の関連状態とを表現した制御モデルからプログラムを生成する際に生じたエラー情報を取得する取得手段と、前記エラー情報とともに、前記エラー情報に関連する前記制御モデルのモデル図を表示する表示手段とを備えることを特徴とする。
【００１６】
本発明のモデルチェックシステムの第二の構成は、上記第一の構成において、前記表示手段は、表示された前記モデル図における前記エラー情報に関連する制御要素を、他の制御要素と異なる形態で表示することを特徴とする。
【００１７】
本発明のモデルチェックシステムの第三の構成は、上記第一の構成において、前記表示手段は、表示された前記エラー情報における前記モデル図に関連する情報を、他の情報と異なる形態で表示することを特徴とする。
【００１８】
本発明のモデルチェックシステムの第四の構成は、上記第一の構成において、表示された前記エラー情報における前記モデルに関連する情報を選択する操作を検知する検知手段を備え、前記表示手段は、前記検知手段により前記選択操作が検知されると、選択された情報を含む前記エラー情報に関連する前記モデル図を表示することを特徴とする。
【００１９】
本発明のモデルチェックシステムの第五の構成は、上記第一の構成において、表示された前記エラー情報における前記モデルに関連する情報を選択する操作を検知する検知手段を備え、前記表示手段は、前記検知手段により前記選択操作が検知されると、表示された前記モデル図における選択された情報を含む前記エラー情報に関連する制御要素を、他の制御要素と異なる形態で表示することを特徴とする。
【００２０】
本発明のモデルチェックシステムの第六の構成は、上記第一の構成において、前記表示手段は、一つのエラー情報に関連する複数のモデル図を同時に表示することを特徴とする。
【００２１】
本発明のモデルチェックシステムの第七の構成は、上記第一の構成において、前記表示手段は、一つのモデル図に関連する複数のエラー情報を同時に表示することを特徴とする。
【００２２】
本発明のモデルチェックシステムの第八の構成は、上記第一乃至第七の構成において、前記プログラム上の用語と前記制御モデル上の用語との対応関係を記憶する記憶手段と、前記プログラム上の用語により表現される前記エラー情報に含まれる前記制御モデルに関連する情報を、前記対応関係に基づいて前記制御モデル上の用語に変換する変換手段とを備え、前記表示手段は、前記変換手段により変換された前記エラー情報を表示することを特徴とする。
【００２３】
本発明のモデルチェックシステムの第九の構成は、複数の単位プログラムから構成されるプログラムの中から、制御ロジックを構成する制御要素と制御要素間の関連状態を表現した制御モデルから生成された単位プログラムのエラー情報を抽出する抽出手段と、前記抽出手段により抽出されたエラー情報を、前記エラー情報に関連する前記制御モデルのモデル図とともに表示する表示手段とを備えることを特徴とする。
【００２４】
また、上記特徴を有するモデルチェック方法及びコンピュータ読み取り可能なコンピュータプログラムが提供される。
【００２５】
また、上記本発明の各構成の記述において、「制御モデル」は、モデル図やモデル図におけるブロックや結線などの各制御要素（構成要素）の詳細なパラメータの内容も含めて表現される制御ロジックと相関をもつものを意味し、「モデル図」は、制御モデルを作成する際に作成された図を意味する。ただし、以下の発明を実施するための最良の形態の説明においては、説明の便宜上、制御モデル（単に「モデル」と称す）にモデル図をも含むものとして説明する。
【発明の効果】
【００２６】
本発明によれば、モデルと同等の制御仕様・設計情報を記述したソースコード（プログラム）のエラー情報（警告）を対応するモデルとともに表示することができる。また、エラー情報に対応するモデル内の要素を強調表示することができる。また、エラー情報をソースコード上の用語ではなく、モデル上の用語で表示することができる。さらに、モデルと同等の制御仕様・設計情報を記述したソースコードと、既存のソースコードと組み合わせて構成されるソースコードから、モデルに基づいて生成されたソースコードに関するエラー情報を抽出することができ、当該組み合わせによりはじめて発生するプログラム内不整合を警告することができる。従って、ソースコードに対するエラー情報（警告）に対応するモデル上の構成要素を具体的に明示できるため、モデルチェックを迅速、容易且つ正確に行えるようになり、モデル開発が効率化し、モデルが表すターゲットシステムの品質が向上するという効果がある。
【発明を実施するための最良の形態】
【００２７】
以下、図面を参照して本発明の実施の形態例について説明する。しかしながら、かかる実施の形態例が、本発明の技術的範囲を限定するものではない。
【００２８】
図２は、本発明の実施の形態例におけるモデルチェックシステムの概略動作フローを説明する図であって、使用者から見たシステム処理のフローを示す概念図である。図２は、本発明の使用に先立って使用者が行う事前準備フローA１と、本発明であるモデルチェックシステムのフローA２とから構成される。
【００２９】
事前準備Ａ１において使用者は、まず、チェック対象とするモデルを作成する（Ａ１０１）。モデルの作成は一般的に、ソフトウェアツール（モデリングツール）を用いて行われる。モデル作成のためのソフトウェアツールは、本発明の範囲ではない。モデルは物理的には１つ若しくは複数のモデルファイルとして存在する。また、モデルファイルは、特定のモデル記述言語に従って記述されているが、本発明は複数の種類のモデル記述言語に対応しており、モデルファイルがどのモデル記述言語に従って記述されているかを、自動的に判定することができる。さらに、モデルには、使用者が設計するターゲットシステムの設計情報が記述されているものとする。
【００３０】
次に、使用者は、作成したモデルから、モデルに記述された設計情報を基に、特定のプログラム言語（例えばC言語）に従ったソーコードを人手により（即ちエディタ等を用いて）作成する（Ａ１０２a）。あるいは、使用者は、モデルからソースコードを自動生成するソフトウェアツールを用いて、モデルと同等の設計情報を表すソースコードを得る場合もある（Ａ１０２b）。なお、このモデルからソースコードを自動生成するソフトウェアツールは、本発明の範囲ではない。実際のターゲットシステムの設計業務においては、モデルから作成若しくは自動生成したソースコード(1)（Ａ１０３a）と、既存の標準部品であるソースコード(2)（Ａ１０３b）とを１つのソースコードセットとし（Ａ１０３）、このソースコードセットをもって１つのプログラムを構成させる場合が多い。
【００３１】
以上が、本発明の実施に先立って、本発明の使用者が行う事前準備Ａ１の説明である。
【００３２】
次に、モデルチェックシステムのフローA２において、まず、モデルチェックシステムは、モデルファイルＡ１０１から、モデル字句解析規則Ａ２０１aとモデル構文解析規則Ａ２０１bに従って、モデル記述情報Ａ２０２を抽出する（Ａ２０１）。ここで、モデルチェックシステムは、モデル字句解析規則Ａ２０１aとモデル構文解析規則Ａ２０１bについては、モデル記述言語の種類に応じて複数のものを保持しているものとする。モデル記述情報Ａ２０２には、複数のモデル構成要素インスタンスが格納されており、各々のモデル構成要素インスタンス内には対応するモデル構成要素の属性情報が格納されており、さらに、構成要素インスタンスはお互いに、構成要素間相互の親子関係に基づいて木構造を構成している。
【００３３】
次に、モデルチェックシステムは、ソースコードセットＡ１０３から、コード字句解析規則Ａ２０３aとコード構文解析規則Ａ２０３bに従って、コード記述情報Ａ２０４を抽出する（Ａ２０３）。ここで、モデルチェックシステムは、コード字句解析規則Ａ２０３aとコード構文解析規則Ａ２０３bについては、コード記述言語の種類に応じて複数のものを保持しているものとする。コード記述情報Ａ２０４には、ソースコードセットが表すプログラム構成要素インスタンスが格納されており、各々のプログラム構成要素インスタンス内には対応するプログラム構成要素の属性情報が格納されており、さらに、構成要素インスタンスは、構成要素間相互の親子関係に基づいて木構造を構成している。
【００３４】
次に、モデルチェックシステムは、ソースコードセットＡ１０３を与えてコードベースチェッカＡ２０５aを起動し、ソースコードセットが表すプログラム内に潜在する不整合をチェック・検出させ、結果をコードベース警告Ａ２０６に格納する（Ａ２０５）。
【００３５】
次に、モデルチェックシステムは、得られたモデル記述情報Ａ２０２、コード記述情報Ａ２０４、及びコードベース警告Ａ２０６から、モデルベース警告Ａ２１１を得るために警告フォーマット変換を行う（Ａ２０７）。
【００３６】
警告フォーマット変換処理Ａ２０７において、まず、予めモデルチェックシステムに与えられた警告フィルタリング規則Ａ２０８aに従って、警告フィルタリングが実行される（Ａ２０８）。警告フィルタリング処理Ａ２０８により、コードベース警告Ａ２０６に含まれる警告のうち、モデルから作成若しくは自動生成されたソースコード（１）Ａ１０３aに対する警告のみが選定される。さらに、警告フィルタリング処理Ａ２０８により、警告の重複（警告番号や警告個所が同じ警告）が取り除かれる。警告フィルタリング規則Ａ２０８ａは、ソースコード(1)にのみに含まれる文字列があらかじめ登録されたファイルであって、当該文字列を含む警告を抽出することにより、ソースコード(1)に対する警告のみを選定することができる。ソースコード(1)のみに含まれる文字列は、例えば、モデルを構成する複数のモデル構成要素（ブロック）に共通の名称などである。これらの名称は、使用者が任意に付けることができるので、警告フィルタリング規則Ａ２０８は、あらかじめ使用者によって入力され、登録されるものである。
【００３７】
次に、用語変換処理Ａ２０９は、用語変換規則Ａ２０９aに基づいて、コードベース警告Ａ２０６に含まれるコードベースの用語をモデルベースの用語に変換し、モデルベース警告Ａ２１１とする。用語変換規則Ａ２０９ａは、ソースコード上の用語とモデル上の用語との対応関係が記述されたファイルである。
【００３８】
次に、要素間対応付け処理Ａ２１０は、モデル記述情報Ａ２０２、コード記述情報Ａ２０４及び要素間対応付け規則Ａ２１０aに基づいて、コードベース警告Ａ２０６に含まれるソースコード上の構成要素に対応するモデル上の構成要素を特定し、モデルベース警告Ａ２１１に付加する。要素間対応付け規則Ａ２１０ａは、ソースコード上の構成要素とモデル構成要素との対応関係が記述されたファイルである。
【００３９】
警告表示部Ａ２１１は、警告フォーマット変換処理Ａ２０７は、警告フィルタリング処理Ａ２０８、用語変換処理Ａ２０９、要素間対応付け処理Ａ２１０により、コードベース警告Ａ２０６の中から、モデルから生成されたソースコード(1)のみの警告を抽出し、それをモデル上の用語でモデルの対応構成要素に対応づけて表示する。例えば、モデルベース警告Ａ２０６を、抽出された警告をモデル上の用語にてハイパーリンク形式で表示する。システムの使用者はモデルベース警告Ａ２０６に含まれる個別警告Ａ２１１aの表示に対し、特定の構成要素を表す識別子（例えばBlock_B等）をクリックする。警告表示部Ａ２１１は、クリックされた構成要素をモデル上で検索し、検索された構成要素を含むレイヤＡ２１２を表示し、さらに、検索された構成要素Ａ２１２aをハイライト表示する。
【００４０】
このように、本発明の実施の形態例におけるモデルチェックシステムは、コードベースチェッカによって検出された警告から、自動的にモデルから生成されたソースコードのみの警告を抽出し、それをモデル上の用語でモデルの対応構成要素に対応づけて表示する。従って、プログラム内不整合を修正する際、警告に対応するモデル構成要素を探す作業を行うことなく、対象となるモデル構成要素を明示できるため、モデル開発を効率化することができ、また、品質向上に寄与する。
【００４１】
図３は、本発明の実施の形態例におけるモデルチェックシステムの全体構成例を示す図である。モデルチェックシステムは、例えば、パーソナルコンピュータとして構成される。モデルチェックシステム１は、中央演算処理装置（ＣＰＵ）２と、入出力装置３と、主記憶装置４と、補助記憶装置５とから構成されている。さらに、中央演算処理装置（ＣＰＵ）２は、ディスパッチ制御部２１と、ユーザインタフェース部２２と、モデル記述情報抽出部２３と、コード記述情報抽出部２４と、チェッカ駆動部２５と、コードベース警告格納部２６と、警告フォーマット変換部２７と、モデルベース警告格納部２８と、警告表示部２９とを備えている。各構成要素２１−２９はソフトウェアツールとして構成される。さらに、チェッカ駆動部２５は、コードベースチェッカ２５１が格納されている。入出力装置３は、入力装置３１と、出力装置３２と、表示装置３３とから構成されている。補助記憶装置５には、モデル記述言語規則定義ファイル群５１、コード記述言語規則定義ファイル群５２、チェッカ操作情報定義ファイル群５３、警告フィルタリング規則定義ファイル群５４、用語変換規則定義ファイル群５５、要素間対応付け規則定義ファイル群５６が格納されている。つづいて、各部の構成を述べる。
【００４２】
図４は、ディスパッチ制御部２１の構成例を示す図である。ディスパッチ制御部２１は、メイン操作２１-m１と、初期化操作２１-m２と、ディスパッチ操作２１-m３と、後処理操作２１-m４と、モデルファイル読込み操作２１-m５と、コードファイル読込み操作２１-m６と、チェッカ指定操作２１-m７と、チェッカ実行操作２１-m８とを備えている。
【００４３】
図５は、ユーザインタフェース部２２の構成例を示す図である。ユーザインタフェース部２２は、初期化操作２２-m１と、後処理操作２２-m２と、要求取得操作２２-m３と、チェッカ取得操作２２-m４と、モデルファイル取得操作２２-m５と、コードファイル取得操作２２-m６とを備えている。
【００４４】
図６は、モデル記述情報抽出部２３の構成例を示す図である。モデル記述情報抽出部２３は、初期化操作２３-m１と、後処理操作２３-m２と、モデルファイル読込み操作２３-m３と、モデルタイプ取得操作２３-m４と、規則定義読込み操作２３-m５と、単一モデル読込み操作２３-m６と、字句解析操作２３-m７と、構文解析操作２３-m８とを備えている。
【００４５】
図７は、コード記述情報抽出部２４の構成例を示す図である。コード記述情報抽出部２４は、初期化操作２４-m１と、後処理操作２４-m２と、コードファイル読込み操作２４-m３と、コードタイプ取得操作２４-m４と、規則定義読込み操作２４-m５と、単一コード読込み操作２４-m６と、字句解析操作２４-m７と、構文解析操作２４-m８とを備えている。
【００４６】
図８は、チェッカ駆動部２５の構成例を示す図である。チェッカ駆動部２５は、初期化操作２５-m１と、後処理操作２５-m２と、チェッカリスト取得操作２５-m３と、チェッカ実行操作２５-m４と、コマンド列作成操作２５-m５と、出力行取得操作２５-m６と、エラー行取得操作２５-m７とを備えている。
【００４７】
図９は、コードベース警告格納部２６の構成例を示す図である。コードベース警告格納部２６は、初期化操作２６-m１と、後処理操作２６-m２と、出力行付与操作２６-m３と、エラー行付与操作２６-m４と、警告格納操作２６-m５と、個別警告格納操作２６-m６と、開始行チェック操作２６-m７と、終了行チェック操作２６-m８と、空行チェック操作２６-m９と、警告取得操作２６-m１０とを備えている。
【００４８】
図１０は、警告フォーマット変換部２７の構成例を示す図である。警告フォーマット変換部２７は、初期化操作２７-m１と、後処理操作２７-m２と、サブ変換部初期化操作２７-m３と、コードベース警告付与操作２７-m４と、モデルベース警告取得操作２７-m５と、変換実行操作２７-m６と、モデル記述情報抽出部への参照付与操作２７-m７と、コード記述情報抽出部への参照付与操作２７-m８とを備えている。さらに、警告フォーマット変換部２７は、警告フィルタリング実行部２７aと、用語変換実行部２７bと、要素間対応付け実行部２７cとを備えている。
【００４９】
図１１は、警告フィルタリング実行部２７ａの構成例を示す図である。警告フィルタリング実行部２７aは、初期化操作２７a-m１と、後処理操作２７a-m２と、実行操作２７a-m３とを備えている。
【００５０】
図１２は、用語変換実行部２７ｂの構成例を示す図である。用語変換実行部２７bは、初期化操作２７b-m１と、後処理操作２７b-m２と、実行操作２７b-m３とを備えている。
【００５１】
図１３は、要素間対応付け実行部２７ｃの構成例を示す図である。要素間対応付け実行部２７cは、初期化操作２７c-m１と、後処理操作２７c-m２と、実行操作２７c-m３とを備えている。
【００５２】
図１４は、モデル警告格納部２８の構成例を示す図である。モデルベース警告格納部２８は、初期化操作２８-m１と、後処理操作２８-m２と、警告付与操作２８-m３と、警告取得操作２８-m４とを備えている。
【００５３】
図１５は、警告表示部２９の構成例を示す図である。警告表示部２９は、初期化操作２９-m１と、後処理操作２９-m２と、モデルベース警告付与操作２９-m３と、モデルベース警告表示操作２９-m４とを備えている。さらに、警告表示部２９は、ハイパーリンク警告作成部２９aと、ハイパーリンク警告表示部２９bと、モデル表示部２９cとを備えている。
【００５４】
図１６は、ハイパーリンク警告作成部２９ａの構成例を示す図である。ハイパーリンク警告作成部２９aは、初期化操作２９a-m１と、後処理操作２９a-m２と、モデルベース警告付与操作２９a-m３と、ハイパーリンク警告作成操作２９a-m４と、ハイパーリンク警告取得操作２９a-m５とを備えている。
【００５５】
図１７は、ハイパーリンク警告表示部２９ｂの構成例を示す図である。ハイパーリンク警告表示部２９bは、初期化操作２９b-m１と、後処理操作２９b-m２と、ハイパーリンク警告付与操作２９b-m３と、ハイパーリンク警告表示操作２９b-m４と、マウスクリック取得操作２９b-m５とを備えている。
【００５６】
図１８は、モデル表示部２９ｃの構成例を示す図である。モデル表示部２９cは、初期化操作２９c-m１と、後処理操作２９c-m２と、モデル付与操作２９c-m３と、モデル表示操作２９c-m４と、クリックブロック表示操作２９c-m５とを備えている。
【００５７】
以下、各部の動作フローについて説明する。なお、以下の動作フローにおいて、「Ａ操作はＢ操作を呼出す」という表現が用いられるが、これは、「Ａ操作の制御により、Ｂ操作が実行される」ことと同義である。また、初期化操作とは、データの読み込みなど各部の実質的な動作に必要な前準備のための動作である。また、後処理操作は、各部の実質的な動作終了後、起動を終了させるための動作である。
【００５８】
図１９は、本発明の実施の形態例におけるディスパッチ制御部２１のメイン操作２１-m１の処理を示すフローチャートであり、これは、モデルチェックシステム１のＣＰＵ２に属する各部の協調動作全体を示すフローチャートでもある。ディスパッチ制御部２１のメイン操作２１-m１は、まず、ステップＳ１０１において初期化操作２１-m２を呼出し、次に、ステップＳ１０２においてディスパッチ操作２１-m３を呼出し、最後に、ステップＳ１０３において後処理操作２１-m４を呼出す。
【００５９】
ステップ１０１におけるディスパッチ制御部２１の初期化操作２１-m2は、ＣＰＵ２に属する各部を起動し初期化する。すなわち、ディスパッチ制御部２１の初期化操作２１-m２は、ユーザインタフェース部２２を起動し、その初期化操作２２-m１を呼出す。次に、モデル記述情報抽出部２３を起動し、その初期化操作２３-m１を呼出す。次に、コード記述情報抽出部２４を起動し、その初期化操作２４-m１を呼出す。次に、チェッカ駆動部２５を起動し、その初期化操作２５-m１を呼出す。次に、コードベース警告格納部２６を起動し、その初期化操作２６-m１を呼出す。次に、警告フォーマット変換部２７を起動し、その初期化操作２７-m１を呼出す。ここで、警告フォーマット変換部２７の初期化操作２７-m１により呼出されたサブ変換部初期化操作２７-m３は、警告フォーマット変換部２７に属する各部を起動し初期化する。すなわち、警告フォーマット変換部２７のサブ変換部初期化操作２７-m３は、警告フィルタリング実行部２７aを起動し、その初期化操作２７a-m１を呼出す。次に、用語変換実行部２７bを起動し、その初期化操作２７b-m１を呼出す。次に、要素間対応付け実行部２７cを起動し、その初期化操作２７c-m１を呼出す。引続き、ディスパッチ制御部２１の初期化操作２１-m２は、モデルベース警告格納部２８を起動し、その初期化操作２８-m１を呼出す。次に、警告表示部２９を起動し、その初期化操作２９-m１を呼出す。
【００６０】
また、上記各初期化操作のうち、モデル記述情報抽出部２３の初期化操作２３-m１、コード記述情報抽出部２４の初期化操作２４-m1、チェッカ駆動部２５の初期化操作２５-m1、警告フィルタリング実行部２７ａの初期化操作２７a-m1、用語変換実行部２７ｂの初期化操作２７b-m1、要素間対応付け実行部２７ｃの初期化操作２７c-m1は、必要なファイルを補助記憶装置５から読み出して、主記憶装置に格納する動作を行う。当該各初期化操作について簡単に説明する。
【００６１】
図２０は、モデル記述情報抽出部２３の初期化操作２３-m1の動作を説明する図である。図２０に示すように、補助記憶装置５には、モデル記述言語規則定義ファイル５１群として、モデル字句解析規則を定義したモデル字句解析規則記述ファイルと、モデル構文解析規則を定義したモデル構文解析規則記述ファイルとが、モデル記述言語毎に格納されており、モデル記述情報抽出部２３の初期化操作２３-m１により呼出された規則定義読込み操作２３-m５は、このモデル記述言語規則定義ファイル５１群を読込み、主記憶装置４内のモデル記述言語規則定義テーブル４１に格納する。モデル記述情報抽出部２３は、後の処理でモデルが与えられた際に、モデル記述言語規則定義テーブル４１に格納されたモデル字句解析規則及びモデル構文解析規則に従って、モデルを字句解析・構文解析する。
【００６２】
図２１は、コード記述情報抽出部２４の初期化操作２４-m１の動作を説明する図である。図２１に示すように、補助記憶装置５には、コード記述言語規則定義ファイル群５２として、コード字句解析規則を定義したコード字句解析規則記述ファイルと、コード構文解析規則を定義したコード構文解析規則記述ファイルとが、コード記述言語毎に格納されており、コード記述情報抽出部２４の初期化操作２４-m１により呼出された規則定義読込み操作２４-m５は、このコード記述言語規則定義ファイル群５２を読込み、主記憶装置４内のコード記述言語規則定義テーブル４２に格納する。コード記述情報抽出部２４は、後の処理でコードが与えられた際に、コード記述言語規則定義テーブル４２に格納されたコード字句解析規則及びコード構文解析規則に従って、コードを字句解析・構文解析する。
【００６３】
図２２は、チェッカ駆動部２５の初期化操作２５-m１の動作を説明する図である。図２２に示すように、補助記憶装置５には、チェッカ操作情報定義ファイル群５３として、チェッカ操作情報（実行体パス、チェッカ起動スクリプト、チェッカ実行結果出力ファイルパス）を定義したチェッカ操作情報記述ファイルが、チェッカ毎に格納されており、チェッカ駆動部２５の初期化操作２５-m１により呼出されたチェッカリスト取得操作２５-m３は、このチェッカ操作情報定義ファイル群５３を読込み、主記憶装置４内のチェッカ操作情報定義テーブル４３に格納する。チェッカ駆動部２５は、後の処理でチェッカ実行する際に、チェッカ操作情報定義テーブル４３に格納されたチェッカ操作情報に従って、チェッカを実行する。
【００６４】
図２３は、警告フィルタリング実行部２７aの初期化操作２７a-m１の動作を説明する図である。図２３に示すように、補助記憶装置５には、警告フィルタリング規則定義ファイル群５４として、警告フィルタリング規則を定義した警告フィルタリング規則記述ファイルが、コード記述言語毎に格納されており、警告フィルタリング実行部２７aの初期化操作２７a-m１により呼出された規則定義読込み操作２７a-m３は、この警告フィルタリング規則定義ファイル群５４を読込み、主記憶装置４内の警告フィルタリング規則定義テーブル４４に格納する。警告フィルタリング実行部２７aは、後の処理でコードベースの警告が与えられた際に、警告フィルタリング規則定義テーブル４４に格納された警告フィルタリング規則に従って、コードベースの警告をフィルタリングする。
【００６５】
図２４は、用語変換実行部２７bの初期化操作２７b-m１の動作を説明する図である。図２４に示すように、補助記憶装置５には、用語変換規則定義ファイル群５５として、用語変換規則を定義した用語変換規則記述ファイルが、モデル記述言語とコード記述言語の組合せ毎に格納されており、用語変換実行部２７bの初期化操作２７b-m１により呼出された規則定義読込み操作２７b-m３は、この用語変換規則定義ファイル群５５を読込み、主記憶装置４内の用語変換規則定義テーブル４５に格納する。用語変換実行部２７bは、後の処理で警告フィルタリング実行部２７aの出力結果（中間警告データ）が与えられた際に、用語変換規則定義テーブル４５に格納された用語変換規則に従って、中間警告データの警告を用語変換する。
【００６６】
図２５は、要素間対応付け実行部２７cの初期化操作２７c-m１の動作を説明する図である。図２５に示すように、補助記憶装置５には、要素間対応付け規則定義ファイル群５６として、要素間対応付け規則を定義した要素間対応付け規則記述ファイルが、モデル記述言語とコード記述言語の組合せ毎に格納されており、要素間対応付け実行部２７cの初期化操作２７c-m１により呼出された規則定義読込み操作２７c-m３は、この要素間対応付け規則定義ファイル群５６読込み、主記憶装置４内の要素間対応付け規則定義テーブル４６に格納する。要素間対応付け実行部２７cは、後の処理で用語変換実行部２７bの出力結果（中間警告データ）が与えられた際に、要素間対応付け規則定義テーブル４６に格納された要素間対応付け規則に従って、中間警告データの警告に現れるコードベース構成要素とモデルベース構成要素とを対応付ける。
【００６７】
上述の各初期化操作により、各種定義ファイルが主記憶装置４に格納され、実質動作の準備が完了する。続いて、ステップＳ１０２において、ディスパッチ操作２１-m3が実行され、それにより、以下の処理、すなわち、モデル記述情報を生成するモデル記述情報抽出処理（図２のA201）、コード記述情報を生成するコード記述情報抽出処理（図２のA203）、コードベースチェッカを駆動するチェッカ駆動処理（図２のA205）が実行され、その上で、警告フィルタリング処理（図２のA208）、用語変換処理（図２のA209）、要素対応付け処理（図２のA210）が実行され、さらに、警告表示処理（図２のA211）が実行される。各処理について説明する。
【００６８】
（モデル記述情報抽出処理）
まず、ディスパッチ操作２１-m3は、ユーザインタフェース部２２の要求取得操作２２-m３を呼び出す。要求取得操作２２-m３の戻り値 request が「モデルファイル読込み」loadModelFile の場合、ユーザインタフェース部２２のモデルファイル取得操作２２-m５を呼び出す。モデルファイル取得操作２２-m５の戻り値 modelFilePath にはモデルファイルのパスが格納されている。モデルファイルのパス modelFilePath を添えて、モデルファイル読込み操作２１-m５を呼出す。
【００６９】
ディスパッチ制御部２１のモデルファイル読込み操作２１-m５は、モデルファイルのパス modelFilePath を添えて、モデル記述情報抽出部２３のモデルファイル読込み操作２３-m３を呼出す。
【００７０】
モデル記述情報抽出部２３のモデルファイル読込み操作２３-m３は、モデルファイルのパス modelFilePath を添えて、モデルタイプ取得操作２３-m４を呼出す。モデルタイプ取得操作２３-m４の戻り値 modelType にはモデル種類（モデル記述言語の種類を示す識別子）が格納されている。モデルファイルのパス modelFilePath とモデル種類 modelType とを添えて、単一モデル読込み操作２３-m６を呼出す。
【００７１】
モデル記述情報抽出部２３の単一モデル読込み操作２３-m６は、モデルファイルのパス modelFilePath をオープンし文字ストリーム strStream を得る。モデル種類 modelType に該当するモデル字句解析規則 modelScanRule とモデル構解析規則 modelPhraseRule を、モデル記述言語規則定義テーブル４２から検索する。文字ストリーム strStream と、モデル字句解析規則 modelScanRule を添えて、字句解析操作２３-m７を呼出す。字句解析操作２３-m７の戻り値には、字句解析結果 resScan が格納されている。字句解析結果 resScan と、モデル構文解析規則 modelPhraseRule を添えて、構文解析操作２３-m８を呼出す。構文解析操作２３-m８の戻り値 modelTree には、構文解析結果が格納されている。この構文解析結果 modelTree には、モデル内構成要素が相互の親子関係を保持した形式（木構造）なって格納されている。構文解析結果modelTreeは、モデル記述情報である（図２のA202）。
【００７２】
（コード記述情報抽出処理）
ディスパッチ操作２１-m3は、ユーザインタフェース部２２の要求取得操作２２-m３を呼び出す。要求取得操作２２-m３の戻り値 request が「コードファイル読込み」loadCodeFile の場合、ユーザインタフェース部２２のコードファイル取得操作２２-m６を呼び出す。コードファイル取得操作２２-m６の戻り値 codeFilePath にはコードファイルのパスが格納されている。コードファイルのパス codeFilePath を添えて、コードファイル読込み操作２１-m６を呼出す。ディスパッチ制御部２１のコードファイル読込み操作２１-m６は、コードファイルのパス codeFilePath を添えて、コード記述情報抽出部２４のコードファイル読込み操作２４-m３を呼出す。コード記述情報抽出部２４のコードファイル読込み操作２４-m３は、コードファイルのパス codeFilePath を添えて、コードタイプ取得操作２４-m４を呼出す。コードタイプ取得操作２４-m４の戻り値 codeType にはコード種類（コード記述言語の種類を示す識別子）が格納されている。コードファイルのパス codeFilePath とコード種類 codeType とを添えて、単一コード読込み操作２４-m６を呼出す。コード記述情報抽出部２４の単一コード読込み操作２４-m６は、コードファイルのパス codeFilePath をオープンし文字ストリーム strStream を得る。コード種類 codeType に該当するコード字句解析規則 codeScanRule とモデル構文解析規則 codePhraseRule を、モデル記述言語規則定義テーブル４２から検索する。文字ストリーム strStream と、モデル字句解析規則 codeScanRule を添えて、字句解析操作２３-m７を呼出す。字句解析操作２３-m７の戻り値には、字句解析結果 resScan が格納されている。字句解析結果 resScan と、モデル構文解析規則 codePhraseRule を添えて、構文解析操作２３-m８を呼出す。構文解析操作２３-m８の戻り値 codeTree には、構文解析結果が格納されている。この構文解析結果 codeTree には、コード内構成要素が相互の親子関係を保持した形式（木構造）なって格納されている。この構文解析結果codeTreeが、コード記述情報である（図２のA204）。
【００７３】
（チェッカ駆動処理）
ディスパッチ操作２１-m3は、ユーザインタフェース部２２の要求取得操作２２-m３を呼び出す。要求取得操作２２-m３の戻り値 request が「チェッカ指定」specChecker の場合、チェッカ指定操作２１-m７を呼出す。ディスパッチ制御部２１のチェッカ指定操作２１-m７は、ユーザインタフェース部２２のチェッカ取得操作２２-m４を呼び出す。チェッカ取得操作２２-m４の戻り値 theChecker には、使用者が指定したチェッカを表す識別子が格納されている。
【００７４】
ディスパッチ制御部２１のディスパッチ操作２１-m3は、ユーザインタフェース部２２の要求取得操作２２-m３を呼び出す。要求取得操作２２-m３の戻り値 request が「チェッカ実行」execChecker の場合、チェッカ実行操作２１-m８を呼出す。ディスパッチ制御部２１のチェッカ実行操作２１-m８は、指定チェッカ theChecker を添えて、チェッカ駆動部２５のチェッカ実行操作２５-m４を呼出す。チェッカ駆動部２５のチェッカ実行操作２５-m４は、指定チェッカ theChecker とコードファイルのパス codeFilePath を添えて、コマンド列作成操作２５-m５を呼出す。コマンド列作成操作２５-m５は、指定チェッカ theChecker に関するチェッカ操作情報（実行体パス、チェッカ起動スクリプト、チェッカ実行結果出力ファイルパス）を検索し、コードファイルのパス codeFilePath を用いてコマンド列を作成する。コマンド列作成操作２５-m５の戻り値 cmd には、作成されたコマンド列文字列が格納されている。コマンド列 cmd を添えて、標準関数 exec を呼出す。標準関数 getStdoutStream を呼出す。getStdoutStream の戻り値 outStream にはコマンド列実行による標準出力ストリームが格納されている。標準関数 getStderrStream を呼出す。getStderrStream の戻り値 errStream にはコマンド列実行による標準エラーストリームが格納されている。
【００７５】
ディスパッチ制御部２１のチェッカ実行操作２１-m８は、無限ループを開始する。チェッカ駆動部２５の出力行取得操作２５-m６を呼出す。出力行取得操作２５-m６の戻り値 outLine にはコマンド列実行による標準出力ストリームから得られた１行分の文字列が格納されている。チェッカ駆動部２５のエラー行取得操作２５-m７を呼出す。エラー行取得操作２５-m７の戻り値 errLine にはコマンド列実行による標準エラーストリームから得られた１行分の文字列が格納されている。出力行文字列 outLine が null でない場合、outLine を添えて、コードベース警告格納部２６の出力行付与操作２６-m３を呼出す。出力行付与操作２６-m３は、付与された出力行を順に配列 outLineArry[] に格納する。エラー行文字列 errLine が null でない場合、errLine を添えて、コードベース警告格納部２６のエラー行付与操作２６-m４を呼出す。エラー行付与操作２６-m４は、付与されたエラー行を順に配列 errLineArry[] に格納する。出力行文字列 outLine と エラー行文字列 errLine がともに null の場合、無限ループを抜出す。コードベース警告格納部２６の警告格納操作２６-m５を呼出す。
【００７６】
コードベース警告格納部２６の警告格納操作２６-m５は、インデックス i を 0 で初期化し、インデックス j を 0 で初期化する。警告内文字列フラグ fgWarn を false にセットする。無限ループを開始する。outLineArry[i] を添えて空行チェック操作２６-m９を呼出す。その戻り値 res が true の場合、無限ループを継続する。そうでない場合、  fgWarn が false の場合、outLineArry[i] を添えて開始行チェック操作２６-m７を呼出す。その戻り値 res が true の場合、outWarn[j] に outLineArry[i] を追加する。警告内文字列フラグ fgWarn を true にセットする。fgWarn が true の場合、outLineArry[i] を添えて終了行チェック操作２６-m８を呼出す。その戻り値 res が true の場合、outWarn[j] に outLineArry[i] を追加し、j をインクリメントし、警告内文字列フラグ fgWarn を false にセットする。そうでない場合、outWarn[j] に outLineArry[i] を追加する。i をインクリメントする。i >= outLineArry.length の場合、無限ループを抜ける。
【００７７】
警告格納操作２６-m５は、インデックス i を 0 で初期化し、インデックス j を 0 で初期化する。警告内文字列フラグ fgWarn を false にセットする。無限ループを開始する。errLineArry[i] を添えて空行チェック操作２６-m９を呼出す。その戻り値 res が true の場合、無限ループを継続する。そうでない場合、fgWarn が false の場合、    errLineArry[i] を添えて開始行チェック操作２６-m７を呼出す。その戻り値 res が true の場合、errWarn[j] に errLineArry[i] を追加する。警告内文字列フラグ fgWarn を true にセットする。fgWarn が true の場合、errLineArry[i] を添えて終了行チェック操作２６-m８を呼出す。その戻り値 res が true の場合、errWarn[j] に errLineArry[i] を追加し、j をインクリメントし、警告内文字列フラグ fgWarn を false にセットする。そうでない場合、errWarn[j] に errLineArry[i] を追加する。i をインクリメントする。i >= errLineArry.length の場合、無限ループを抜ける。警告格納操作２６-m５は、出力警告 outWarn と エラー警告 errWarn を添えて、個別警告格納操作２６-m６を呼出す。
【００７８】
個別警告格納操作２６-m６は、出力警告 outWarn と エラー警告 errWarn をマージし、警告配列 warnArry を作成する。この警告配列warnArryが、コードベース警告（図２のA206）である。
【００７９】
上記各処理で得られたモデル記述情報modelTree、コード記述情報codeTree、コードベース警告warnArryを用いて、以下の警告フィルタリング処理、用語変換処理、要素間対応付け処理が行われる。
【００８０】
（警告フィルタリング処理）
ディスパッチ操作２１-m3は、コードベース警告格納部２６の警告取得操作２６-m１０を呼出す。警告取得操作２６-m１０の戻り値 warnArry[] には、コードベース警告配列が格納されている。モデル構文解析木 modelTree を添えて、警告フォーマット変換部２７のモデル記述情報抽出部への参照付与操作２７-m７を呼出す。コード構文解析木 codeTree を添えて、警告フォーマット変換部２７のコード記述情報抽出部への参照付与操作２７-m８を呼出す。コードベース警告配列 warnArry[] を添えて、警告フォーマット変換部２７のコードベース警告付与操作２７-m４を呼出す。警告フォーマット変換部２７の変換実行操作２７-m６を呼出す。警告フォーマット変換部２７の変換実行操作２７-m６は、コードベース警告配列 warnArry[] を添えて、警告フィルタリング実行部２７aの実行操作２７a-m４を呼出す。
【００８１】
図２６は、警告フィルタリング時の警告フィルタリング実行部２７aの実行操作２７a-m４の動作を示すフローチャートである。実行操作２７a-m４は、ステップＳ４０１において、警告フィルタリング規則定義テーブル４４に格納された警告フィルタリング規則 filteringRule[] を取得する。次にステップＳ４０２において、インデックス i に 0 をセットし、無限ループ１を開始する。インデックスｉはコードベース警告配列warnArry[]における各警告の順番であり、最初の警告がまずセットされる。次にステップＳ４０３において（インデックス i < コードベース警告配列の長さ warnArry.length）を評価する。
【００８２】
評価が真の場合（最後の警告の番号を超えていない場合）、ステップＳ４０４に進み、偽の場合（最後の警告の番号を超えた場合）、処理を終了する。次にステップＳ４０４において、フィルタドフラグ fgFiltered を False（モデルから生成されたソースコードにおける警告ではない） にセットする。
【００８３】
次にステップＳ４０５において、インデックス j に 0 をセットし、無限ループ２を開始する。インデックスｊは、警告フィルタリング規則filteringRule[]における各規則の順番であり、最初の規則がまずセットされる。次にステップＳ４０６において（インデックス j < 警告フィルタリング規則配列の長さ filteringRule.length）を評価する。評価が真の場合（最後の規則の番号を超えていない場合）、ステップＳ４０７に進み、偽の場合（最後の規則の番号を超えた場合）、ステップＳ４１３に進む。次にステップＳ４０７において、インデックス i に相当するコードベース警告 warnArry[i]を添えて、インデックス j に相当する警告フィルタリング規則のチェック操作 filteringRule[j].check を呼出す。
【００８４】
次にステップＳ４０８において、チェック操作の戻り値 res には、チェック結果（その警告がフィルタされる（モデルから生成されたソースコードにおける警告である）場合 true が、フィルタされない（モデルから生成されたソースコードにおける警告ではない）場合 false ）が格納される。次にステップＳ４０９において、チェック操作の戻り値 res が true がどうか評価する。評価が真(true)の場合ステップＳ４１０に進み、偽(false)の場合、ステップＳ４１１に進む。次にステップＳ４１０において、インデックス j をインクリメントし、ステップＳ４０６に進む。ステップＳ４１１において、フィルタドフラグ fgFiltered を true にセットする。次にステップＳ４１２において、無限ループ２を抜ける。
【００８５】
次にステップＳ４１３において、フィルタドフラグ fgFiltered が true か評価する。評価が真(true)の場合、ステップＳ４１４に進み、偽(false)の場合、ステップＳ４１５に進む。ステップＳ４１４において、コードベース警告 warnArry[i] をフィルタド警告 filteredWarn に追加する。次にステップＳ４１５において、インデックス i をインクリメントし、ステップＳ４０３に戻る。
【００８６】
上述の警告フィルタリング処理により、各警告warnArry[i]を各警告フィルタリング規則filteringRule[j]と照らし合わせ、モデルから生成されたソースコードにおける警告filteredWarnのみが抽出される。
【００８７】
（用語変換処理）
続いて、警告フォーマット変換部２７の変換実行操作２７-m６は、フィルタド警告配列 filteredWarn[] を添えて、用語変換実行部２７bの実行操作２７b-m４を呼出す。
【００８８】
図２７は、本発明の実施例に係わる用語変換時の用語変換実行部２７bの実行操作２７b-m４の動作を示すフローチャートである。実行操作２７b-m４は、ステップＳ５０１において、用語変換規則定義テーブル４５に格納された用語変換規則 convWordRule[][] を取得する。ここで、用語変換規則はモデル記述言語の種類（例えば、MATLAB（登録商標）、UML（登録商標）など）とコード記述言語（C言語、C++言語など）の種類による２次元配列となっている。次にステップＳ５０２において、モデル記述言語インデックス m を取得する。すなわち、複数の種類から一つのモデル記述言語を指定する。次にステップＳ５０３において、コード記述言語インデックス n を取得する。すなわち、複数の種類から一つのコード記述言語を指定する。次にステップＳ５０４において、インデックス i に 0 をセットし、無限ループ１を開始する。インデックスｉは、フィルタド警告配列 filteredWarn[i]における各警告の順番であり、最初のフィルタド警告がまずセットされる。
【００８９】
次にステップＳ５０５において、インデックス i < フィルタド警告配列の長さ filteredWarn.length）を評価する。評価が真の場合（最後の警告の番号を超えていない場合）、ステップＳ５０６に進み、偽（最後の警告の番号を超えた場合）の場合、処理を終了する。次にステップＳ５０６において、インデックス i に相当するフィルタド警告配列 filteredWarn[i] と、インデックス i に相当する用語変換済警告配列 convWarn[i] を添えて、インデックス m、インデックス n に相当する用語変換規則の変換操作 convWordRule[m][n].convert を呼出す。次にステップＳ５０７において、インデックス i をインクリメントし、ステップＳ５０５に戻る。
【００９０】
上述の用語変換処理により、各フィルタド警告filteredWarn[i]は、モデル上の用語で表現された用語変換済警告convWarn[i]に変換される。
【００９１】
（要素間対応付け処理）
続いて、警告フォーマット変換部２７の変換実行操作２７-m６は、用語変換済警告配列 convWarn[i] を添えて、要素間対応付け実行部２７cの実行操作２７c-m４を呼出す。
【００９２】
図２８は、本発明の実施例に係わる要素間対応付け時の要素間対応付け実行部２７cの実行操作２７c-m４の動作を示すフローチャートである。実行操作２７c-m４は、ステップＳ６０１において、要素間対応付け規則定義テーブル４６に格納された要素間対応付け規則 mappingRule[][] を取得する。ここで、要素間対応付け規則は、用語変換規則と同様に、モデル記述言語の種類とコード記述言語の種類による２次元配列となっている。
【００９３】
次にステップＳ６０２において、モデル記述言語インデックス m を取得する。次にステップＳ６０３において、コード記述言語インデックス n を取得する。次にステップＳ６０４において、インデックス i に 0 をセットし、無限ループ１を開始する。インデックスｉは、用語変換済警告convWarnにおける各警告の順番であり、最初の用語変換済警告がまずセットされる。
【００９４】
次にステップＳ６０５において（インデックス i < 用語変換済警告配列の長さ convWarn.length）を評価する。評価が真（最後の警告の番号を超えていない場合）の場合ステップＳ６０６に進み、偽（最後の警告の番号を超えた場合）の場合、処理を終了する。
【００９５】
次にステップＳ６０６において、インデックス i に相当する用語変換済警告配列 convWarn[i] と、インデックス i に相当する要素間対応付け済警告配列 mappedWarn[i] を添えて、インデックス m、インデックス n に相当する要素間対応付け規則の変換操作 mappingRule[m][n].convert を呼出す。次にステップＳ６０７において、インデックス i をインクリメントし、ステップＳ６０５に進む。
【００９６】
上述の要素間対応付け処理により、各用語変換済警告convWarn[i]は、要素間対応付け済警告mappedWarn[i]に変換される。
【００９７】
（警告表示処理）
続いて、警告フォーマット変換部２７の変換実行操作２７-m６は、要素間対応付け済警告配列 mappedWarn を添えて、モデルベース警告格納部２８の警告付与操作２８-m３を呼出す。図２９は、本発明の実施の形態例におけるモデルベース警告登録時の警告フォーマット変換部２７の変換実行操作２７-m６の動作を示すフローチャートである。変換実行操作２７-m６は、ステップＳ６２１において、要素間対応付け済警告配列 mappedWarn を添えて、モデルベース警告格納部２８の警告付与操作２８-m３を呼出す。すなわち、mappedWarnがモデルベース警告格納部２８に格納される。以下、モデルベース警告格納部２８に格納されたmappeedWarnをモデルベース警告格納部２８への参照refModelWarnと称す。
【００９８】
さらに、ディスパッチ操作２１-m3は、モデルベース警告格納部２８への参照 refModelWarn を添えて、警告表示部２９のモデルベース警告付与操作２９-m３を呼出す。すなわち、ディスパッチ操作２１-m3は、モデルベース警告付与操作２９-m3を動作させ、モデル警告付与操作２９-m3は、モデルベース警告格納部２８への参照refModelWarnを読み出す。また、ディスパッチ操作２１-m3は、警告表示部２９のモデルベース警告表示操作２９-m４を呼出す。
【００９９】
図３０は、本発明の実施の形態例における警告表示部２９のモデルベース警告表示操作２９-m４の動作を示すフローチャートである。モデルベース警告表示操作２９-m４は、ステップＳ７０１において、モデルベース警告格納部２８への参照 refModelWarn を添えて、ハイパーリンク警告作成部２９aのモデルベース警告付与操作２９a-m３を呼出す。すなわち、モデルベース警告付与操作２９a-m3は、refModelWarnを読み出す。次にステップＳ７０２において、ハイパーリンク警告作成部２９aのハイパーリンク警告作成操作２９a-m４を呼出す。すなわち、refModelWarnに対してハイパーリンクを作成する。次にステップＳ７０３において、ハイパーリンク警告作成部２９aのハイパーリンク警告取得操作２９a-m５を呼出す。すなわち、ハイパーリンクが作成されたrefModelWarnを取得する。以下、ハイパーリンクが作成されたrefModelWarnをハイパーリンク警告への参照hyperlinkWarnと称す。
【０１００】
次にステップＳ７０４において、ハイパーリンク警告取得操作２９a-m５の戻り値 hyperlinkWarn には、ハイパーリンク警告への参照が格納されている。次にステップＳ７０５において、ハイパーリンク警告への参照 hyperlinkWarn を添えて、ハイパーリンク警告表示部２９bのハイパーリンク警告付与操作２９b-m３を呼出す。すなわち、ハイパーリンク警告付与操作２９b-m3は、ハイパーリンク警告への参照hyperlinkWarnを読み出す。次にステップＳ７０６において、ハイパーリンク警告表示部２９bのハイパーリンク警告表示操作２９b-m４を呼出す。すなわち、ハイパーリンク警告への参照（ハイパーリンクが付されたmappedWarn）hyperlinkWarnが表示される（図２のA211）。
【０１０１】
次にステップＳ７０７において、モデル構文解析木 modelTree（モデル記述情報）を添えて、モデル表示部２９cのモデル付与操作２９c-m３を呼出す。すなわち、モデル記述情報modelTreeが読み出される。次にステップＳ７０８において、モデル表示部２９cのモデル表示操作２９c-m４を呼出す。すなわち、モデル記述情報modelTreeに基づいて、ハイパーリンクにより対応づけられたモデルが表示される（図２のA212参照）。
【０１０２】
次にステップＳ７０９において、ハイパーリンク警告表示部２９bのマウスクリック取得操作２９b-m５を呼出す。マウスクリック取得操作２９b-m５は、表示されているハイパーリンクに対するクリック操作の有無を検出する。次にステップＳ７１０において、マウスクリック取得操作２９b-m５の戻り値 clickedBlock には、マウスクリックされたモデルとブロックの情報を格納したクリックブロック情報 が格納されている。次にステップＳ７１１において、戻り値 clickedBlock が null の場合、処理を終了し、nullでない場合（ハイパーリンクがクリックされた場合）、ステップＳ７１２へ進む。
【０１０３】
次にステップＳ７１２において、クリックブロック情報 clickedBlock を添えて、モデル表示部２９cのクリックブロック表示操作２９c-m５を呼出す。クリックブロック表示操作２９c-m5は、クリックされたハイパーリンク（図２のA211a）に対応するモデル記述情報上のブロックをハイライト表示する（図２のA212a）。すなわち、クリックされたハイパーリンクに対応するブロックは、他のブロックとは別の色で表示されたり、太線表示されるなど区別可能に強調されて表示される。
【０１０４】
上述の警告表示処理により、モデルから生成されたソースコードにおける警告のみをモデルベースの用語で表示することができ、要素間対応付けに基づいて、警告上のモデルベース用語とモデル記述情報内のブロックをハイパーリンクで関連づけることで、警告に対応するブロックを他のブロックと区別可能に表示する。これにより、使用者は、モデル上での問題箇所を容易に把握することができ、モデル開発の効率化が実現する。
【０１０５】
上述の警告表示処理では、モデルベースの警告上のハイパーリンクをクリックすることで、モデル内のブロックが強調表示されるが、クリックされなくとも、警告に対応するブロックをハイライト表示してもよい。また、警告上のハイパーリンクをクリックすることにより、対応するモデルが表示されるようにしてもよい。
【０１０６】
さらに、上述の警告表示処理では、例えば、一つの警告に複数のモデルが関連づけられている場合（一つの警告に複数のモデルで利用される共通ブロックの用語が含まれているような場合）、当該複数のモデルが同時に表示される。また、複数のエラー情報が特定の一つのモデルに関連づけられている場合（一つのモデルに複数の異なる警告が含まれているような場合）、当該モデルに関連する複数の警告が同時に表示される。
【０１０７】
本発明によれば、モデルと同等の制御仕様・設計情報を記述したソースコード（プログラム）のエラー情報（警告）を対応するモデルとともに表示することができる。また、エラー情報に対応するモデル内の要素を強調表示することができる。また、エラー情報をソースコード上の用語ではなく、モデル上の用語で表示することができる。さらに、モデルと同等の制御仕様・設計情報を記述したソースコードと、既存のソースコードと組み合わせて構成されるソースコードから、モデルに基づいて生成されたソースコードに関するエラー情報を抽出することができ、当該組み合わせによりはじめて発生するプログラム内不整合を警告することができる。従って、ソースコードに対するエラー情報（警告）に対応するモデル上の構成要素を具体的に明示できるため、モデルチェックを迅速、容易且つ正確に行えるようになり、モデル開発が効率化し、モデルが表すターゲットシステムの品質が向上するという効果がある。
【図面の簡単な説明】
【０１０８】
【図１】従来の技術におけるモデルの静的解析技術の動作フローを示した図である。
【図２】本発明の実施の形態例におけるモデルチェックシステムの概略動作フローを説明する図である。
【図３】本発明の実施の形態におけるモデルチェックシステムの全体構成例を示す図である。
【図４】ディスパッチ制御部２１の構成例を示す図である。
【図５】ユーザインタフェース部２２の構成例を示す図である。
【図６】モデル記述情報抽出部２３の構成例を示す図である。
【図７】コード記述情報抽出部２４の構成例を示す図である。
【図８】チェッカ駆動部２５の構成例を示す図である。
【図９】コードベース警告格納部２６の構成例を示す図である。
【図１０】警告フォーマット変換部２７の構成例を示す図である。
【図１１】警告フィルタリング実行部２７ａの構成例を示す図である。
【図１２】用語変換実行部２７ｂの構成例を示す図である。
【図１３】要素間対応付け実行部２７ｃの構成例を示す図である。
【図１４】モデル警告格納部２８の構成例を示す図である。
【図１５】警告表示部２９の構成例を示す図である。
【図１６】ハイパーリンク警告作成部２９ａの構成例を示す図である。
【図１７】ハイパーリンク警告表示部２９ｂの構成例を示す図である。
【図１８】モデル表示部２９ｃの構成例を示す図である。
【図１９】本発明の実施の形態例におけるディスパッチ制御部２１のメイン操作２１-m１の処理を示すフローチャートである。
【図２０】モデル記述情報抽出部２３の初期化操作２３-m1の動作を説明する図である。
【図２１】コード記述情報抽出部２４の初期化操作２４-m１の動作を説明する図である。
【図２２】チェッカ駆動部２５の初期化操作２５-m１の動作を説明する図である。
【図２３】警告フィルタリング実行部２７aの初期化操作２７a-m１の動作を説明する図である。
【図２４】用語変換実行部２７bの初期化操作２７b-m１の動作を説明する図である。
【図２５】要素間対応付け実行部２７cの初期化操作２７c-m１の動作を説明する図である。
【図２６】警告フィルタリング時の警告フィルタリング実行部２７aの実行操作２７a-m４の動作を示すフローチャートである。
【図２７】本発明の実施例に係わる用語変換時の用語変換実行部２７bの実行操作２７b-m４の動作を示すフローチャートである。
【図２８】本発明の実施例に係わる要素間対応付け時の要素間対応付け実行部２７cの実行操作２７c-m４の動作を示すフローチャートである。
【図２９】本発明の実施の形態例におけるモデルベース警告登録時の警告フォーマット変換部２７の変換実行操作２７-m６の動作を示すフローチャートである。
【図３０】本発明の実施の形態例における警告表示部２９のモデルベース警告表示操作２９-m４の動作を示すフローチャートである。
【符号の説明】
【０１０９】
１：モデルチェックシステム、２：中央演算処理装置（ＣＰＵ）、３：入出力装置、４：主記憶装置、５：補助記憶装置、２１：ディスパッチ制御部、２２：ユーザインタフェース部、２３：モデル記述情報抽出部、２４：コード記述情報抽出部、２５：チェッカ駆動部、２６：コードベース警告格納部、２７：警告フォーマット変換部、２８：モデルベース警告格納部、２９：警告表示部、２５１：コードベースチェッカ２５１、３１：入力装置、３２：出力装置、３３：表示装置、５１：モデル記述言語規則定義ファイル群、５２：コード記述言語規則定義ファイル群、５３：チェッカ操作情報定義ファイル群、５４：警告フィルタリング規則定義ファイル群、５５：用語変換規則定義ファイル群、５６：要素間対応付け規則定義ファイル群
【図１】
2007193483.tif 000003
【図２】
2007193483.tif 000004
【図３】
2007193483.tif 000005
【図４】
2007193483.tif 000006
【図５】
2007193483.tif 000007
【図６】
2007193483.tif 000008
【図７】
2007193483.tif 000009
【図８】
2007193483.tif 000010
【図９】
2007193483.tif 000011
【図１０】
2007193483.tif 000012
【図１１】
2007193483.tif 000013
【図１２】
2007193483.tif 000014
【図１３】
2007193483.tif 000015
【図１４】
2007193483.tif 000016
【図１５】
2007193483.tif 000017
【図１６】
2007193483.tif 000018
【図１７】
2007193483.tif 000019
【図１８】
2007193483.tif 000020
【図１９】
2007193483.tif 000021
【図２０】
2007193483.tif 000022
【図２１】
2007193483.tif 000023
【図２２】
2007193483.tif 000024
【図２３】
2007193483.tif 000025
【図２４】
2007193483.tif 000026
【図２５】
2007193483.tif 000027
【図２６】
2007193483.tif 000028
【図２７】
2007193483.tif 000029
【図２８】
2007193483.tif 000030
【図２９】
2007193483.tif 000031
【図３０】
2007193483.tif 000032