Technical report
モデルレベルデバッグ手法の紹介

制御エンジニアリングとソフトウェアエンジニアリングの架け橋
AdaCore 言語リサーチディレクタ

モデルレベルデバッガは、オートコードジェネレータによって生成されたソースコードと制御システムのシミュレーションモデル（Simulink® で作成）を並列に表示できます。エンジニアは、生成されたソースコードの代わりにモデルを使用して、ブレークポイント設定、シグナル値の表示と変更、ステップ実行が可能です。ソースレベ
ルデバッガがアセンブリレベルコードの詳細を知らなくてもソースコードデバッグできる事に似ています。ソー
スレベルデバッガをベースにしたモデルレベルデバッガは、自動生成コードと手書きコードを組み合わせて、ホスト上でのシミュレーションならびにターゲットプロセッサシステムでも利用可能です。
このデバッガは個々のブロックまたはモデル全体でシミュレーション時に記録されたシグナル値とのバックツーバックでの比較ができます。
モデルレベルデバッガは、生成されたソースコードとモデルを同時に表示するため、制御エンジニアリングとソフトウェア エンジニアリング間の架け橋となります。

タッカ タフト力のみの変更では、実現できない場合があります。
モデルの特定部分で問題が発生している場合は、モデルの変更や入力ストリームを新たに作成するためにデバッガの作業を中断することなく、検証作業を継続できます。
モデルレベルデバッガの重要な機能は、デバッガ実行中にシグナル値を記録し、シミュレータでモデル内の元のブロックにトレースバックすることができるため、予期しない動作を解決するのに役立ちます。さらにモデル内で特定したポイントをもとに、シミュレータで必要な個所の修正が可能です。
モデルデバッガを利用したクロス開発
ソースレベルデバッガの多くは、ホスト（デバッガが実行されている PC）とターゲット（エージェントが動作している環境）間をネットワークやその他の接続を利用して、ターゲットハードウエア上のプログラムをデバッグできるクロスデバッグ機能がサポートされています。モ
デルレベルデバッガでも同様のクロスデバッグ機能に対応しています。
オートコードジェネレータとともに、クロスコンパイラツールチェーンとターゲットインタフェース機能を使用して、プラットフォーム上で自動生成コードを直接クロスコンパイルして実行、ホストからモデルレベルでデバッグを行いながらターゲットの実行動作を観察できます。
シミュレーションモデルは、全てのシミュレーションブ
ロック、サブシステムおよびサブモデルを IDE に表示できます。

QGen モデルレベルデバッガー画面

モデルレベルのデバッガの機能
モデルレベルデバッガは、ホスト（「Software in theloop」/SIL）または組込ターゲットプロセッサ（「Processor in the Loop」/PIL ）上でシミュレーションが終了したモデルから生成されたコードの実行をモニタあるいは制御できます。
さらに、このデバッガはモデルレベルでのブレークポイント設定やシグナル値の表示が可能でソフトウェアの要素と対応するモデルの要素を結びつけることが可能です。
モデルレベルデバッガは、自動生成されたコードセクションまで実行するとモデルとそのシグナル値が表示可能となります。
また、デバッガが手書きコードで停止するとソースコードのみを表示、自動生成コードでブレークポイント停止
すると、ソースコード行とモデル内の関連ブロックの両方を表示します。
つまり、モデルレベルデバッグは、オートコードジェネレータによって作成されたトレーサビリティ情報を使用して、シミュレーションのモデル実行とコードの実行を同期させる機能を持っています。このようにして、生成されたソースコードあるいは最終的なアセンブリコードをステップ実行しながら、モデルの動作を解析することができます。
モデルレベルデバッガでは、シグナル値を変更したり、プログラムの実行を制御したりして、モデルを特定の状態に移行させることができます。 これはモデルへの入モデルレベルデバッガの実行例

モデルの入力は、標準シミュレータ機能を使用、あるいは、別のモデルを使用して定義できます。

シミュレータを使用してターゲット入力を作成

モデルレベルデバッガは、モデルへの全入力を記録し、同じ入力を与えることができるデバッグセッションが作成可能です。この入力を用いてモデルおよび生成されたコードの動作は、後で、同期して観察およびデバッグが可能です。

モデルレベルデバッガは、デバッグセッション中に取得したシグナル値の全て、または一部をファイルへ保存する事ができます。

ソースコードにブレークポイントを設定できるように、モデルレベルデバッガでも、モデルビューからブレークポイントを直接設定することができます。ブレークポイントが設定されたブロックまでコードが到達すると、実行が一時停止されます。
シグナルの記録とシミュレータ内での対応するブロックの強調表示

シミュレータでこのファイルを開くと、各シグナルに対応するシミュレーションブロックへのリンクがあります。
そのためコードレベルで発見された問題点に対応するモデルブロックを特定するのに役立ちます。さらに、シミュレータで問題点を調査する事ができます。

ブロックまたはモデル参照にブレークポイントを設定

モデルレベルデバッガは、コード内の変数とシミュレーションモデルのシグナル間のトレーサビリティにより、シグナル値を更新表示することができます。実行されたブロックをグレーアウトして、更新されたシグナルには新しい値を表示します。

生産性の高いモデルベースデバッガ
モデルレベルデバッガは、手書きコードとの組み合わせ
でも、モデルベースシステムのターゲットでの実行を検証することができます。それは、問題のあるモデルのブロックで停止し、シグナル値を調べ、時間の経過とともに変化する状態を確認できるからです。
手作業で停止することによって、システムの動作（モデル、ソースコード、またはアセンブリコード）を観察することができ、必要に応じて手書きコードで停止することもできます。
したがって、プログラム全体のモニタ、テスト、デバッグが可能なため、モデルブロックとシグナルの制御エンジニアリングの観点と、関数と変数のソフトウェアエンジニアリングの観点との差分を埋めることができます。
モデルレベルデバッガは、システム全体のモデルレベルデバッグ機能と低レベルデバッグ機能とを組み合わせることで、問題点の特定を行います。

シグナル値を動的に表示する機能

モデルレベルのデバッガは、シミュレーションモデルの特定の振舞を解析する強力な手法を提供しています。
それは、1 つ以上の反復するシグナル値を変更して、モデルを異なるステートに移行できます。

AdaCore は、QGen モデルレベル開発スィートの一部として、上記の機能に対応したモデルレベルのデバッガを開発しました。このことは、最終ターゲットでしか問題点を確認できなかったエンジニアが、モデルベースレベルでの作業が可能となりデバッグ効率を飛躍的に改善します。
また、このデバッガは、モデルベースの開発に不慣れなエンジニアに、モデルと自動生成されたコードの間の相関関係を示したり、モデリングの概念をプログラミングの概念に結びつけたりする際に有用です。最終的に、同じシステムを複数の視点から見ることができるため、システムエンジニアとソフトウェアエンジニアが協力して、提供されるモデルベースシステムの全体的な品質を向上することが可能となります。

実行中の信号値の変更
お問い合わせ先

Article originally published in EENewsEurope, 1 February 2018
※本文中の会社名、商標、製品名等は各社の商標または登録商標です。

本社

アイティアクセス株式会社〒222-0033 神奈川県横浜市港北区新横浜 3-17-6
TEL: 045-474-9095 FAX: 045-474-8823
E-mail: info@itaccess.co.jp URL: http://www.itaccess.co.jp
2018.9