46
どんな規模のソフトウェアも高品質かつ短期間で 開発できる状態遷移設計ツールの紹介 IARシステムズ 技術部 岩野歩 1

どんな規模のソフトウェアも高品質かつ短期間で 開 …どんな規模のソフトウェアも高品質かつ短期間で 開発できる状態遷移設計ツールの紹介

  • Upload
    others

  • View
    9

  • Download
    1

Embed Size (px)

Citation preview

どんな規模のソフトウェアも高品質かつ短期間で開発できる状態遷移設計ツールの紹介

IARシステムズ 技術部 岩野歩

1

Agenda–状態遷移とUML–これまでの開発手法の課題–なぜIAR Visual Stateなのか–既存のモデルをモデルベースに置き換える–IAR Visual Stateの便利な機能

2

状態遷移とUML

3

組込み開発と状態遷移図

•組込み機器では様々なイベントに対して、その時の状態に応じた処理が必要➡状態遷移図による設計が最も効果的

•状態遷移適用例–オーディオ–スマートフォン–自動運転システム–自動販売機(ドリンク、ATM、etc)

–洗濯機–etc

4

状態遷移図の要素5

初期状態Initial state

アクションAction

イベントEvent

状態State

遷移Transition

UML (Unified Modeling Language)

• 統一モデリング言語– オブジェクト指向分析や設計のための統一された記法(モデリング言語)

6

ユースケース図

アクテビィティ図

状態遷移図

クラス図

パッケージ図

シーケンス図

コラボレーション図

オブジェクト図

コンポーネント図

配置図

これまでの開発手法の課題

7

これまでの開発手法:紙ベース設計書の課題

・複雑なシステムの設計を全体的に理解しにくい

・仕様の矛盾点・あいまいな部分がそのままになりやすい

・要求仕様に対するモレヌケを見落としやすい

➡開発終盤で大きな手戻りが発生しやすい

➡コードのみ修正されドキュメントがメンテされない

8

これまでの開発手法:状態遷移コード開発の課題

・複雑なシステムの状態遷移の実装は難易度が高い

・階層の深い入れ子状態のif文・Switch文

・複数品種対応でコードには大量の#ifdef

➡可読性の悪いコードはコードレビューに時間がかかる

➡修正時にミスが生じやすい

9

状態遷移設計ツールでの開発

•設計を全体的に理解しやすい•動作を確認しながら設計が行える•すぐにモデルの検証が行える•コード生成・ドキュメント生成機能➡開発期間を短縮➡高品質

10

IAR Visual Stateとは

• 組込みアプリの設計、テスト、実装をグラフィカルに行うツール

• UMLベースの状態遷移図 (Designer)

• 高度な形式検証と機能検証機能(Verificator, Validator)

• C/C++コードの生成 (Coder)

• ドキュメント生成 (Documenter)

• IAR Embedded Workbenchとの連携でターゲット上での状態遷移デバッグが可能

11

IAR Visual Stateの各種機能12

Navigator

プロジェクト全体を扱い、各種ツールを実行するコンテナ

DesignerUMLを用いてステートマシン図を作成するツール

CoderDesignerで作成したモデルからコードを生成するツール生成されたコードはユーザコードと組み合わせて使用

Verificator作成したモデルを検証するツール。デッドエンドの有無、使用されないステート、想定しない

動作がないかを確認可能。Verificatorはモデル上のすべてのパスを検証。

Validatorモデルのシミュレート、解析、デバッグをグラフィカルに行うツール

作成したモデルの機能検証が可能

DocumenterRTFもしくはHTML形式でドキュメント生成を行うツール

Viewerカスタマーやパートナーと設計レビューを行えるよう、

Visual Stateのライセンス無しで使用できる、スタンドアロンのビューアーアプリ

プロジェクトワークフロー13

• IAR Visual Stateで状態遷移図を作成• ターゲットボード用ファイルを追加• デバイスドライバやFWライブラリを作成or入手

ユーザーコード

入力をイベントに変換

(一度作ればOK)

ユーザーコード

アクションを出力に変換

(一度作ればOK)

入力button_pressed

入力sensor_triggered

入力temperature_gauge

入力stop_button

入力key_pressed

出力turn_on_LED

出力step_motor

出力close_valve出力shut_down

出力display_LCD

状態遷移Visual State生成コードVisual

StateのAPIを使用

ユーザコードのAPIを使用

ユーザーコードチップ初期化処理(一度作ればOK)

モデルの再利用可能

Automotive分野における採用事例14

カーナビ

HMIシステム

BMS

なぜIAR Visual Stateなのか

15

1. 高品質• Verificatorによるモデルの形式検証• Validatorによる動作シミュレート• テストシーケンスの記録と繰り返し実行• テストカバレッジの取得• MISRA-C/C++に準拠したバグのないコード生成

バグの混入しやすい状態遷移部分のコードを自動生成

16

2. レビュー・進捗管理が容易• 設計モデルをグラフィカルに共有・レビュー

コードレビューは不要 Viewerを利用してカスタマーやパートナーとも簡単に設計を共有

• モデル検証結果をドキュメント化 確認項目、エラー、ワーニング内容

起動時のスイッチ状態チェックの有無

ライトのOn/Offコントロールの条件判定の位置車内灯

モデルA

車内灯モデルB

17

3. 開発期間の短縮• 状態遷移のコーディング作業は 1 Click

• 状態遷移図から直接コード化(クラス図等は不要)• ユーザコードから必要な関数コールは初期化とイベント送信の二つだけ

• 面倒なドキュメント化作業も 1 Click• モデル図で記載したすべての情報とテスト結果をまとめてドキュメント化

• モデルとコードが一致しているかどうかを確認するためのテストや検証が不要

18

4. 仕様変更・機能追加に強い• 仕様変更や機能追加が必要になったらモデルを書き換えるだけ

• 常にモデル・コード・ドキュメントが100%一致した状態

• Diffツールで修正差分を簡単に把握

1 clickでコード生成

1 clickでドキュメント生成

19

5. シミュレートから実機評価までシームレスにVisual Stateプラグイン:IAR Embedded Workbenchでのデバッグ時に状態を可視化

形式検証

機能検証(シミュレート)

実機評価

20

IAR Visual Stateでの開発21

仕様書

モデル

実装

仕様書

実装

モデルによる検証で一致性を確認

ソース・実機・モデルのデバッグ連携により一致性を確認

モデルを介して「仕様」と「実装」の一致性を確認

C

Req

既存プロジェクトのモデル化

22

使用する既存プロジェクト

• STモータ制御キット P-NUCLEO-IHM001– Potentiometerサンプルプロジェクト– STM32 Motor Control SDKが利用可能–機能o ボタンによるモーター回転On/Offo Potentiometerでの回転スピード変更o モータ回転OnでLED点灯o PCアプリからのコントロールも可能

23

既存コード構成

mainループで状態を常にチェックしLED操作

ボタンハンドラで状態に応じてモータ制御命令

UIコマンドパーサーで状態を見ながらモータ制御命令

コード内のあらゆる場所で、状態をチェックし、

命令を発行する処理を行っている↓

Visual Stateで一元化

main.c

ui_task.c

user_interface.c

24

ポイント1:何をVisual Stateに任せるかを決める

- どのイベントをVisualStateに渡すか- どのアクションをVisualStateからさせるか

高速で頻繁に発生するようなイベントではなく、ある種の操作に従ったイベントにする

アクションはできるだけシンプルな関数を使う

• ボタン押下• エラー解除

• SysTick割込み• AD変換割込み

イベント アクション

• bool MC_StartMotor1(void) • bool MC_StopMotor1(void)• ….

25

イベントとアクションが決まったら状態遷移図を書いてみる26

イベント:ボタン押下

アクション:モーター回転On

ポイント2:イベントはすべてVisual Stateに投げるとるべきアクションはVisual Stateからコールさせる

27

アクションを追加:モータの状態に応じてLEDを点灯・消灯28

エントリーアクション:GreenLEDをOn

エントリーアクション:GreenLEDをOff

どんな遷移を通ったとしても必ず行う処理は遷移時のActionではなく、状態のEntry Actionに

ポイント3: 条件判定はイベントドリブンに

既存コード:メインループ内で条件判定

状態に応じて呼ばれる関数に

29

ポイント4:イベントはキューに入れ、順番に送る

イベントはキューに入れ、ループ内でイベントを順番に取り出してVisual Stateに送る

イベントはキューに入れ、ループ内でイベントを順番に取り出してVisual Stateに送る

30

これでモデルとコードが完成!

物足りないのでもう少し機能を増やしてみる

31

FAULT発生時にLEDを点滅させたい→タイマー関数を使ってイベントを発生させる

※タイマー関数は汎用的に使用可能

ユーザーコード内にタイマー関数を実装

タイマー完了時に発生させるイベントと時間を設定

32

PotentiometerモードとUIモードを動的に切り替えたい→外部変数を利用してVisual State内部の値を参照 Entry時のアクションとして

外部変数に値を代入する式を設定

状態遷移によって値が変わる変数を外部変数としてユーザアプリで参照Potentiometerモードの時だけPotentiometer位置のサンプリング・変換を行う

33

完成したモデルを検証する

Verificatorでシステムを検証

使用されないイベント引数の指摘

34

モデル上の動作を確認Validatorで動作を検証

ダブルクリックでイベントをシミュレータに送信

35

IAR Embedded Workbenchでビルド

Visual Stateが生成したファイル

VisualState用イベントキュー処理ファイル(サンプル同梱)

Visual State用に新たに作成したインターフェースファイル

36

実機評価

ステート アクショングラフィックアニメーション

Visual Stateプラグインを有効にすることで、デバッグ時に「Visual State」メニューが利用可能

37

VisualState生成コードサイズ

生成されるコードは小さく、状態遷移のコードを追加してもコードサイズの増加はわずか

38

3000728075

3085328765

3282630392

0

5000

10000

15000

20000

25000

30000

35000

最適化:高(速度) 最適化:高(バランス)

既存サンプルサイズ VS使用コードサイズ(C-SPY Linkなし)

VS使用コードサイズ(C-SPY Linkあり)

Visual Stateの便利な機能

39

Variant機能

• 一つの設計で複数のモデルを作成– 要素毎にVariant(モデル)もしくはFeature(機能)を割り当て可能– Variant(モデル)毎にどのFeature(機能)を持たせるかを割り当て可能

仕向け地毎に少しずつ異なる仕様も一つのモデル内で表現可能

40

DesignerとValidatorをリモートでコントロール可能

• スタンドアロンアプリとして提供• TCP/IP通信でJSONフォーマットを使用して命令を送信• Designerの起動、要素の作成などがリモートで可能• Validatorの起動、イベント送信などのシミュレートもリモートで可能

コントロールセンター

テスト実行の自動化が可能

41

• トップレベル状態遷移図を標準XMIフォーマットでインポート・エクスポート– 他のモデルツールとのモデル図のやり取りが可能

• 要素や遷移がXMIフォーマットで格納される(レイアウトは保持されない)

XMIインポート/エクスポート42

* XMI import and export has been tested against IBM Rhapsody using UML version 2.1 .

コード生成・ドキュメント生成

•ヒエラルキーCoder–より階層的なアプローチでデータを格納–サイズと処理速度が向上

• クラシックCoder– TableコードとReadableコードが選択可能

– 小さなモデル向け

43

ReqIFファイルのサポート• 標準のReqIF(Requirement Interchange Format)ファイルのインポートが可能• RequirementsをVisualState内の状態・遷移・アクション・要素と紐づけ

要求仕様がすべて満たされているか一目で確認することが可能

44

Summary• 短期間で高品質のアプリ開発の実現には状態遷移設計ツールでの開発が効果的

• IAR Visual Stateを使用することで組込みアプリにマッチした開発が可能

• 評価版ダウンロードで明日からすぐに試そう!

https://www.iar.com/jp/iar-embedded-workbench/add-ons-and-integrations/visualstate/

45

Thank you for your attention!

iar.com/jp

46