リアルタイムシステムの妥当性確認と検証の統合環境
~タイミング制約~
いまや、「リアルタイムシステムの安全性」は開発者だけでなく、高度に電子化されつつある現代社会のもっとも高い関心事のひとつです。しかし、リアルタイムでかつ複数のプロセスが同時に動作するようなシステムの安全性を確保するのは難しく、通常の方法(テスト)では非常にコストがかかります。
システムの非機能要求の一つとして重要な「時間に関する要件」を確認・検証するためには、以下のような課題があります。
リアルタイムシステムには、ユーザビリティを確保するための応答性から人命に関わる緊急時の振舞いの安全性に至るまで、多くの機能・動作が要求されます。しかし、その殆どが実機をつくるまで性能を評価できません。
形式手法の1分野である、モデル検査技術が注目されています。しかし、多くのモデル検査ツールは、リアルタイムシステムにおいて重要な概念である「時間制約」が自然な形で記述できず、また、ユーザビリティの面でも整備されていません。
- ※時間オートマトン理論に基づく、時間制約を利用した遷移のガード条件、状態の不変条件
複数の並列に動作するプログラムが共通のリソースに対して書き込みを行うような状況で動作する場合、タイミングにまつわる様々な問題( 「デッドロック」など)が増えています。これらの問題を設計図からレビューや限られたテストだけで検出、解決することは困難です。
時間制約を表現可能なモデルを通して検査・検証を行います。
リアルタイムシステムには、ユーザビリティを確保するための応答性から人命に関わる緊急時の振舞いの安全性に至るまで、多くの機能・動作が要求されます。しかし、その殆どが実機をつくるまで性能を評価できません。
時間制約の要求仕様を時間オートマトンとして、検証式を時間CTLとして記述することで、タイミングの問題を表現し、解法します。
各オートマトン間にブロードキャスト・メッセージ通信の機能を実装させることで、複雑な並列・分散システムの検証を実現します。
- UPPAALは時間拡張された状態遷移モデルを使っています。したがって、複数の並列で動作するプログラムたちが時間的な制約の中で適切な動作をするか、といった複雑なモデルを作成できます。これによって、テストではとてもカバーしきれないタイミングを含む網羅的な検証を可能とします。
- モデル検証技術を利用するには、検証対象の挙動を表す状態遷移モデルを作成する必要があります。この作成のために、プログラミング言語のようなモデル記述 言語(だけ)を利用してモデルを作成しなければならない検証ツールもあります。この作業はプログラミング言語によるプログラミングと同様特殊なスキルと手間が必要です。
- UPPAALは、使いやすいビジュアルなモデリング環境(システム・エディタ)を提供しているため、状態遷移モデルの構築を短時間で作成できます。また、詳細の記述のためのスクリプトに関しても、わかり易いエラーメッセージの表示が充実しているため、直ぐに間違いが見つけられます。
- シミュレーション機能によって、UPPAALの検証モデルとして作成した状態遷移モデルを直接実行し、動作の妥当性を確認する事が可能です。シミュレーションの進行は、UMLなどでおなじみの「メッセージ・シーケンス図」によってリアルタイムに表示されます。この図によって、定義された平行に動作する複数のプロセスの状態の変化と、そのプロセス同士の通信の発生も理解しやすい形で表示されます。シミュレーション中は、状態やシステムで定義された変数の内容の変化を確認できるため、シミュレーション中に起こった不具合などの原因を確かめることができます。
- モデル検査では、作成したモデルの性質を検査するために記述する検証式という論理式を記述します。UPPAALでは時相論理という時間制約を表現できる論理式を採用しておりこれによってモデルが充たすべき時間制約を適切に表現することができます。
- ある性質の検査の実行結果として、その性質が充たされなかった場合、UPPAALでは検査の失敗という情報だけでなくそのモデルが初期状態からどの様な動作経路を経て性質を充たさない状況にいたったのか、ということを「反例」として確認する事ができます。反例は、シミュレーションの画面のシーケンス図として表示されているため、そのシーケンス図の動作を再生して問題がある箇所を確認するといった作業が格段に楽に行なえます。
- システムが問題のある状況へ陥らないことをモデルと検証式(性質)から網羅的に検査し、安全性を保証できます。
- マルチスレッド、マルチタスク、及びマルチコアに配置される並列動作するソフトウェアからなるシステムが問題なく動作可能な設計になっているかどうかを確認できます。
UPPAALツール群は、Java/Swingで書かれたGUI部分(プラットフォーム非依存)と、C++によって書かれたモデル検査エンジン部分(プラットフォーム依存)が別々な実行単位として構成されています
STEP1 要件定義⇒UPPAAL性質記述を抽出
STEP2 設計⇒UPPAAL検査モデルの抽出
STEP3 UPPAALによる検査
STEP4 検査内容の設計へのフィードバック
STEP1 要件定義
⇒UPPAAL性質記述を抽出
STEP2 上位設計としてUPPAALモデルを検証しながら作成
STEP3 設計モデルを作成
Uppaalのモデルである時間オートマトンの遷移構造をグラフィカルなエディタによって記述できます。
(モデル要素)
Uppaalモデルを直接シミュレーションします。シミュレーションの表現は、状態遷移図、シーケンス図の動的な変化でグラフィカルに表示されて、見やすいものになっています。また、シミュレーションの各ステップでの変数の内容が表示されます。
記述したモデルが表現するシステムが満たすべき性質を時相論理式(TCTL)で表現したものを登録し、それぞれ、もしくは一括でモデル検査を実行できます。検査性質を満たさなれない場合、そこまでの実行パスを反例として出力し、シミュレーション画面で視覚的に不具合解析することができます。
<時相論理オペレータ(TCTL)による性質記述>
Tableau
Business Intelligence ツール
手元に存在する大量のデータを、専門知識やプログラミングスキルを要さず簡単に視覚化し、分析できるツールです。高速で簡単、そして美しさを備えた役立つデータ分析が可能な、誰もが使えるソフトウェアです。
UPPAAL
Timed Automaton
モデル検査ツール
複数の並列で動作するプログラムが時間的な制約の中で適切な動作をするか、といった複雑なモデルを作成できます。これによって、テストではカバーしきれないタイミングを含む網羅的な検証を可能とします。
National University of Singapore
Multi Domain
モデル検査ツール
並列システムの形式仕様記法 CSP(Communicating Sequential Process)を用いて並列システムが満たすべき性質のモデル検査を実行できます。検査性質を満たさない場合、実行パスを反例として出力し、シミュレーション画面で視覚的に不具合を解析できます。
PARASOFT社
静的解析・単体テストツール
C/C++ 言語対応の静的解析・単体テストツールです。静的解析はパターンマッチングによる解析と実行フローのシミュレーションによる解析の両方をサポートしています。開発工程に C++test による静的解析、単体テストを組み込むことにより、効率的なテストとソースコードの品質向上が期待できます。
Altia社
組込みシステム向け
モデルベース HMI 設計ツール、コードジェネレータ
組込み向け HMI/スクリーン設計およびソースコード生成ツールです。小さなメモリのローエンドシステムからハイエンドまで、幅広いデバイスと多くの RTOS に対応しています。理想の GUI 画像設計を実現出来ます。
組込みシステム向け
モデルベース HMI 設計ツール、コードジェネレータ
組込み向け HMI/スクリーン設計およびソースコード生成ツールです。小さなメモリのローエンドシステムからハイエンドまで、幅広いデバイスと多くの RTOS に対応しています。理想の GUI 画像設計を実現出来ます。
MicroFocus社
構成・変更管理ツール
構成管理機能の他に変更管理、欠陥追跡、要件管理、プロジェクト・タスク管理、スレッド形式のディスカッションなどを含む包括的なソリューションを提供するツール
導入に関する質問やご相談、サポートに関することなど、まずはお気軽にご相談ください。