目次 2 1. 目的 捉える課題 2. コンポーネントシステムについて TECS (TOPPERS Embedded Component System) 他言語との比較 3. コンポーネントシステムの適用 TOPPERS/SSPカーネルへの適用開発工程における有効性ソフトウェア構造の俯瞰における有効

Similar documents
PowerPoint Presentation

TECSをサポートする構造設計ツール ZIPC Toy!

個人依存開発から組織的開発への移行事例 ~ 要求モデル定義と開発プロセスの形式化 による高生産性 / 高信頼性化 ~ 三菱電機メカトロニクスソフトウエア ( 株 ) 和歌山支所岩橋正実 1

PowerPoint プレゼンテーション

組込みシステムにおける UMLモデルカタログの実践研究

Microsoft PowerPoint - A3② JaSST_MISRA2004ソースコード品質診断.ppt

MMUなしプロセッサ用Linuxの共有ライブラリ機構

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

press-1005.OHP

ホンダにおける RT ミドルウェア開発と標準化活動 株式会社本田技術研究所基礎技術研究センター関谷眞

Microsoft PowerPoint - UML1_2009.ppt

Oracle SQL Developer Data Modeler

各種パスワードについて マイナンバー管理票では 3 種のパスワードを使用します (1) 読み取りパスワード Excel 機能の読み取りパスワードです 任意に設定可能です (2) 管理者パスワード マイナンバー管理表 の管理者のパスワードです 管理者パスワード はパスワードの流出を防ぐ目的で この操作

SpeC記述のC記述への変換 (SpecCによるソフトウェア記述の実装記述への変換)

CodeRecorderでカバレッジ

Using VectorCAST/C++ with Test Driven Development

目次 ペトリネットの概要 適用事例

Microsoft PowerPoint - 04_01_text_UML_03-Sequence-Com.ppt

Microsoft PowerPoint - 【最終提出版】 MATLAB_EXPO2014講演資料_ルネサス菅原.pptx

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

CLUSTERPRO MC ProcessSaver 1.2 for Windows 導入ガイド 第 4 版 2014 年 3 月 日本電気株式会社

CLUSTERPRO MC ProcessSaver 2.3 for Windows 導入ガイド 第 5 版 2018 年 6 月 日本電気株式会社

アナリシスパターン勉強会 責任関係事例紹介 株式会社オーエスケイ小井土亨 (CBOP COM 分科会主査 ) 2000/07/19 1

目次 はじめに 4 概要 4 背景 4 対象 5 スケジュール 5 目標点 6 使用機材 6 第 1 章 C# 言語 7 C# 言語の歴史 7 基本構文 8 C 言語との違い 9 Java 言語との違い 10.Netフレームワーク 10 開発資料 10 第 2 章 Mono 11 Monoの歴史 1

Microsoft PowerPoint - 01_Vengineer.ppt

PowerPoint プレゼンテーション

Source Insight

要求仕様管理テンプレート仕様書

f2-system-requirement-system-composer-mw

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

Javaの作成の前に

NEXCESS基礎コース01 組込みソフトウェア開発技術の基礎 ソフトウェア開発プロセス編

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

UMLプロファイル 機能ガイド

Microsoft Word - ModelAnalys操作マニュアル_

Fortran 勉強会 第 5 回 辻野智紀

エンジニアリング・サービスから見たMBD導入の成功・失敗

Microsoft PowerPoint - CproNt02.ppt [互換モード]

プログラミング基礎

Microsoft PowerPoint - IAF フォーラム2015講演資料_PLCopenJapan_A02.pptx

Undestand の解析 Understand の C 言語で抽出できない依存関係について サンプルコードを用いて説明します 確認バージョン Understand 3.0 (Build 640) Understand 3.1 (Build 700) Understand 4.0 (Build 78

メディプロ1 Javaプログラミング補足資料.ppt

- VHDL 演習 ( 組み合せ論理回路 ) 回路 半加算器 (half adder,fig.-) 全加算器を構成する要素である半加算器を作成する i) リスト - のコードを理解してから, コンパイル, ダウンロードする ii) 実験基板上のスイッチ W, が, の入力,LED, が, の出力とな

1 現コンフィギュレータの問題点 1.1 独自言語 TOPPERS カーネル開発者 ( 特に TOPPERS カーネルのポーティングを行う者 ) は 現コンフィギュレータが提供する tf を使用する必要がある しかし tf は TOPPERS の独自言語であり 初めて TOPPERS カーネルを開発

株式会社アルウィン C 言語コーディング規約 ver.0.1

TRQerS - Introduction

040402.ユニットテスト

UML は次のように表記を拡張して 利用しやすくすることができる ステレオタイプ クラス図などで モデル要素の意味を拡張するもの ギルメット << >> によるラベル表記と アイコン表記がある <<actor>> <<interface>> ステレオタイプ一覧 UML 表記の拡張 ATM 利用者 ス


インテル(R) Visual Fortran コンパイラ 10.0

PowerPoint Presentation

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

目次 1 はじめに 利用条件 動作環境 アドインのインストール アドインの操作方法 アドインの実行 Excel CSV の出力 テンプレートの作成 編集 テンプレートのレイアウト変更 特記

D5-2_S _003.pptx

変更要求管理テンプレート仕様書

ER/Studio Data Architect 2016 の新機能

PowerPoint プレゼンテーション

C#の基本

た場合クラスを用いて 以下のように書くことが出来る ( 教科書 p.270) プログラム例 2( ソースファイル名 :Chap08/AccountTester.java) // 銀行口座クラスとそれをテストするクラス第 1 版 // 銀行口座クラス class Account String name

利用者

CANapeを用いたラピッドコントロールプロトタイピングのバイパス手法による制御モデル開発

Microsoft PowerPoint - 09.pptx

Java講座

データベース暗号化ツール「D’Amo」性能検証

プログラミングI第10回

SysMLに関する操作方法について

Transcription:

9 th Workshop on Critical Software System ( 2011) TOPPERS/SSP への組込みコンポーネントシステム適用における設計情報の可視化と抽象化 2011.11.17 株式会社ヴィッツ組込制御開発部 TOPPERS TECS-WG 鵜飼敬幸

目次 2 1. 目的 捉える課題 2. コンポーネントシステムについて TECS (TOPPERS Embedded Component System) 他言語との比較 3. コンポーネントシステムの適用 TOPPERS/SSPカーネルへの適用開発工程における有効性ソフトウェア構造の俯瞰における有効性 4. まとめ 今後の取り組み

目的 3 組込みソフトウェアの大規模化に対応する 複雑なソフトウェアの つながり を整理するアプローチ 多分岐 多部品を含むソフトウェア構造へのアプローチ コンポーネントシステムの有効性を確認する TECSを例にUML 等の他言語との違いと利点 フィーチャ バリエーションを包含するソフトウェアの理解性向上 UML TECS

捉える課題 大規模ソフトウェアにおける課題 課題を抱える現場では何が起こっているのか? 機能追加によるコードとリソースの肥大化 初期アーキテクチャのまま時間を理由に歪な継ぎ足しを繰り返す 機能の肥大化がリソースの拡充に直結する 製品バリエーションに対応するコードが混在 条件分岐 マクロスイッチのネストや箇所が膨大で理解性に乏しい 過剰な 変数 関数の複写 が増加の一途を辿る 4 ソフトウェアの保守性 解析性における観点での矛盾 : 新規の仕様追加 変更において修正ポイントが分かりやすい事 問題の発生が生じた場合の原因箇所が特定しやすい事 分かりやすければ改修時の修正時間が理由にはならない 実装機能を必要内に集約できれば理解性低下の抑制に寄不

5 E.C. R&D Dept. コンポーネントシステムについて

コンポーネントシステムについて 6 コンポーネントシステムの前提 ソフトウェアを何らかの部品単位で扱うための仕組み 再利用し易い形 部品で開発する 部品化へのアプローチに用いる技術が重要なキー ソフトウェアの継続的な改善を支援する仕組み ライフサイクルを鑑み 長期的に継続して改善できることが重要 モデルベース開発との協調 ソフトウェアのモデルを記述しプログラムを ( 自動 ) 生成する 人間が行う作業負荷 ( 記述量 ) の削減 モデル化の段階での設計検証 組込みシステムで扱える決定版が存在しなかった 汎用 OSではJavaBeans, CORBA,.NETなど他多数存在 組込み開発で扱える仕組みが登場 (TECS, SaveCCT )

TECS とは 7 TECS (TOPPERS Embedded Component System) 2009 年 5 月にNPO 法人 TOPPERSから一般公開 組込みソフトウェア向けのコンポーネントシステムとして開発 TECS 仕様で規定しているもの TECS 仕様 内容 コンポーネントモデル コンポーネント図 コンポーネント記述言語 TECS CDL コンポーネント実装モデル TECS によるソフトウェア部品の構成と使い方を規定 コンポーネントモデルを図により表現する手段 正確なコンポーネントの定義とコンポーネントを組み合わせてシステムを組み上げる記述言語 TECS コンポーネントを実装し 利用するモデルを定義仕様書に提供されているモデルは一例 本発表のポイント

ロードマップにみる位置づけ 8 大規模化 複雑化 動的オブジェクト生成 新世代カーネルフルセット TECS コンポーネントシステム対応 ASP 新世代カーネル仕様スタンダードプロファイル FMP マルチコアプロセッサ拡張 HRP2 メモリ保護, 時間保護 ASP Safety 機能安全対応 高性能 省エネルギー 省エネルギー制御 信頼性 安全性 SSP 最小セット 適用範囲拡大 2007 2008 2009 2010 2011 2012 リリース前のカーネルの名称は仮称

TECS に関して 9 利用者の想定スキル コンポーネント作成者 利用者 UMLにおけるクラスが設計できる程度のスキルを想定 構造化設計に知見があること 仕様の完成度 2009 年 5 月に Version1 を一般公開 達成機能 : 静的結合, ROM/RAM 出力支援, 最適化, RPC, プラグイン機構 例 ) コンポーネントの呼び出しをシリアル出力によって時系列でトレース可能とするトレースプラグインなど 利用上の注意事項 TOPPERSライセンスに準拠 Windows, Cygwin, OSX 上ので動作を確認 Windowsの実行形式以外の利用はRubyおよびraccが必要

設計領域の位置づけ 10 想定するコンポーネントシステムがカバーする設計領域の範囲 TECS を例として 分析 設計 UML TECS コンポーネント図 実装 C アセンブラ TECS TECS CDL テスト 静的コード解析ツール デバッガ トレースプラグイン

開発の流れ 11 (1)TECS コンポーネント図でソフトウェア構造を表現する 関数の型である (2) シグニチャ記述を行い 部品の型となる (3) セルタイプを記述する 必要な部品の型が揃ったら (4) 組上げ記述を行う これらすべてを (5)TECS CDL を用いて行う (5) の作成物を (6)TECS ジェネレータに通す その結果 対象言語の (10) インタフェースコード (9) ヘッダファイル (8) セルタイプコードのテンプレートが自動生成される セルタイプコードのテンプレートを元に コンポーネント開発者は (11) セルタイプコード (C 言語 ) を記述する インタフェースコードとセルタイプコードを (12) コンパイルし (13) リンクすることで (14) アプリケーションモジュールが完成する コンポーネント仕様開発者 (2) シグニチャ記述 ( インタフェースの定義 )(3) セルタイプ記述 ( コンポーネントの定義 ) (4) 組上げ記述 ( コンポーネントの構成の定義 ) (5) TECS CDL( コンポーネント記述言語 ) (8) テンプレートコード (11) セルタイプコード ( コンポーネントのソースコード ) 設計 コンポーネント開発者 仕様の規定 (6) TECS ジェネレータ (9) ヘッダ (10) インタフェースコード (12)C コンパイラ (13) リンカ (14) アプリケーションモジュール 製品 アプリケーション開発者 設計 (1) コンポーネント図 利用 (7) プラグイン 設計 プラグイン開発者 エンドユーザー RPC アクセス制御 トレース

呼び側 ccall1_func1( ) ccall1_func2( ) 受け側 結合の実装構造の標準形 受け口ディスクリプタ &tb_eent_mt &tb_b_cb 受け口関数テーブル tb_eent_func1_skel tb_eent_func2_skel tb_eent_func3_skel 受け口関数テーブルへのポインタ 受け側のセル CB 受け口スケルトン関数 ER { } tb_eent_func1_skel( struct tag_ssig1_vdes *epd) struct tag_tb_eent_des *lepd = (struct tag_tb_eent_des *)epd; return tb_eent_func1( lepd->idx ); 受け口関数 ta A tb B 12 /* 呼び口関数マクロ ( 短縮形 ) */ #define ccall1_func1( ) ta_ccall1_func1( p_cellcb ) #define ta_ccall1_func1( p_that ) (p_that)->ccall1->vmt-> func1( (p_that)->ccall1 ) 呼び側のセル CB typedef struct tag_ta_cb { /* call port */ struct tag_ssig1_vdes *ccall1; struct tag_ssig2_vdes *ccall2; } ta_cb; ER eent_func1( tb_idx idx) { ER ercd_ = E_OK; tb_cb *p_cellcb; if( tb_valid_idx( idx ) ){ p_cellcb = GET_CELLCB(idx); }else{ return E_ID; } /* 処理 */ return ercd_; }

結合の実装構造の標準形 13 呼び側 受け側 受け口関数テーブル 受け口スケルトン関数 ccall1_func1( ) ccall1_func2( ) 受け口ディスクリプタ &tb_eent_mt &tb_b_cb tb_eent_func1_skel tb_eent_func2_skel tb_eent_func3_skel 受け口関数テーブルへのポインタ 受け側のセル CB ER { } tb_eent_func1_skel( struct tag_ssig1_vdes *epd) struct tag_tb_eent_des *lepd = (struct tag_tb_eent_des *)epd; return tb_eent_func1( lepd->idx ); 受け口関数 /* 呼び口関数マクロ ( 短縮形 ) */ #define ccall1_func1( ) ta_ccall1_func1( p_cellcb ) #define ta_ccall1_func1( p_that ) (p_that)->ccall1->vmt-> func1( (p_that)->ccall1 ) 呼び側のセル CB typedef struct tag_ta_cb { /* call port */ struct tag_ssig1_vdes *ccall1; struct tag_ssig2_vdes *ccall2; } ta_cb; ER eent_func1( tb_idx idx) { ER ercd_ = E_OK; tb_cb *p_cellcb; if( tb_valid_idx( idx ) ){ p_cellcb = GET_CELLCB(idx); }else{ return E_ID; } /* 処理 */ return ercd_; }

他言語との比較 14 統一モデリング言語 (UML) との比較 TECS コンポーネント図 オブジェクト図 ( 実体の関連 ) に相当 コンポーネントの型 = セルタイプは TECS の概念 コンポーネントの結線は操作可能な関数束を表す コンポーネント図では関連の存在に加えて 関数テーブル ( シグニチャ ) と関連方向 ( 呼び口 受け口 ) を確定する UML の関連は集約や多重度, 依存などの存在を表現できる 関連 クラス図 :UML 関連 オブジェクト図 :UML tcell Cell1 呼び口 ccallport 受け口 eentryport シグニチャ soperation コンポーネント図 :TECS tcell Cell2

UML との比較 15 UML TECS 備考 クラス セルタイプ TECSではコンポーネントの型を意味する セルタイプ同士の関連を表す関連図はない オブジェクト セル TECSではコンポーネントの型の実体を指す オブジェクト図に対してTECSコンポーネント図を用いる クラス内関数 シグニチャ TECSでは関連線が関数テーブルを指し 名前をもつ また呼びだし側 : 呼び口, 呼ばれ側 : 受け口の名前をもつ UMLは矢印も可能 シグニチャは必ず方向の指定を伴う アクセス指定子なし C 言語の機能に併せアクセス指定子と記号はない 継承 派生なしシグニチャを踏襲することで機能の継承は可能 tcell Cell1 呼び口 ccallport 受け口 eentryport シグニチャ soperation tcell Cell2 セルタイプ名 セル名 コンポーネント図 :TECS 受け口にはセル内部に矢印を表記する

他言語との比較 16 C++(Java) 言語との比較 継承 派生の関係, アクセス指定子は規定しない オブジェクト指向のプログラム言語に依存してしまう TECSではUMLのクラスの 操作 が独立した情報 C 言語で扱える点がTECSの特徴 class CApp { クラス private: int m_att1; public: int Ope1(int arg1); }; CApp.h(.hpp) クラス宣言 (C++) signature soperation { シグニチャ uint32_t Ope1( [in] int32_t arg1 ); }; celltype tcell { セルタイプ call soperation ccallport; 呼び口 entry soperatoin eentryport; 受け口 attr { int32_t attr1 = 10000; }; var { uint32_t var1; }; }; tcell.cdl ( コンポーネント記述ファイル ) シグニチャ宣言とセルタイプ宣言 (TECS)

C++(Java) との比較 17 signature soperation { シグニチャ uint32_t Ope1( [in] uint32_t arg1 ); }; celltype tcell { セルタイプ call soperation ccallport; 呼び口 entry soperatoin eentryport; 受け口 attr { uint32_t attr1 = 10000; }; var { uint32_t var1; }; }; tcell.cdl ( コンポーネント記述ファイル ) シグニチャ宣言とセルタイプ宣言 cell tcell Cell1 { ccallport = Cell2.eEntryPort; var1 = 1; }; cell tcell Cell2 { var1 = 2; }; Main.cdl( コンポーネント記述ファイル ) セル宣言と全体の組上げ 構文 call entry tcell Cell1 意味 呼び口 受け口 呼び口 ccallport 受け口 eentryport シグニチャ soperation コンポーネント図 tcell Cell2 attr 定数 (celltype 宣言時に初期化要 ) var コンポーネント内変数

C++(Java) 言語との比較 18 3 段階の出力手順を経る TECSはコンポーネントの情報をエンティティ化 独立した情報 CDLファイルの内容が設計情報の丌足を補完する コンポーネント構成 結合情報を文章から言語記述へ オブジェクト指向における設計フロー TECS の設計フロー

19 E.C. R&D Dept. コンポーネントシステムの適用

コンポーネントシステムの適用方針 20 TOPPERS/SSP カーネルへコンポーネントシステムを適用 カーネル本体に手を加えずラッパーとしてコンポーネント化する 動作の上位互換を確保する TOPPERS/SSP カーネルのサンプルが TOPPERS/ASP カーネルでも動作できるよう, 拡張パッケージの導入を前提とする TOPPERS/SSP カーネル ( 以降 SSP と呼ぶ ) TOPPERS Smallest Set Profile Kernel uitron4.0 仕様の 仕様準拠の最低限の条件 をベースとする小規模リアルタイムカーネル : 拡張パッケージの導入で ASP と上位互換 2011 年 6 月 10 日会員早期リリース TOPPERS/ASP カーネル ( 以降 ASP と呼ぶ ) TOPPERS Advanced Standard Profile Kernel uitron4.0 仕様のスタンダードプロファイル準拠のリアルタイムカーネル 2006 年より一般公開中

コンポーネント全体像 21 TOPPERS/SSP カーネルに対応するコンポーネント化 ASP 対応版を基に SSP 版との共通化を検討した コンポーネント記述は SSP/ASP 共通セルで全て同じ サービスの機能単位でコンポーネント化した 組み合わせによりセルを新設 周期タスク等を複合セルによりコンポーネント化 複合コンポーネントについては本発表では触れない teventflag tdataqueue tprioritydataqueue tsemaphore tfixedsizememorypool tisr ttask tkernel SSP カーネル tcyclichandler tcyclictask tcyclictaskactivator talarmhandler tkernel ttask tisr tterminateroutine ASP 対応セル 拡張パッケージ対応セル tconfiginterrupt tisrwithconfiginterrupt tinitializeroutine SSP/ASP 共通セル TOPPERS/SSP コンポーネント全体像 SSP 仕様 カーネルに対応したセル同士のコンポーネント間の結合は 既存コードをラップする手段としたため アプリケーションを実装した際に出現する ( 図は結合のイメージ )

コンポーネント全体像 22 SSP シリアル出力サンプルプログラムへの適応 シリアル接続のターミナルから入力文字を待機 入力文字に応じて タスクの起動, 終了,CPU 例外発生を行う ttask InitTask tcyclichandler CyclicHandler ttask MainTask tsample1 Sample1 tkernel SSPKernel ttask Task tserial Serial 2 重線は能動的に動作するアクティブセル サンプルプログラム TECS コンポーネント図

適用結果 23 コンポーネント化の恩恵を確認 コンポーネントのオーバーヘッドを小さく抑えられる SSP のような小さなカーネルでも利用を検討できる C++ のようなオブジェクト指向的な概念を これまで組込開発に持ち込めなかった点の打開策になり得る 文字送信における比較 1 文字 5 文字 コンポーネント ( 最適化なし ) 31.27us 69.16us コンポーネント ( 最適化あり ) 29.16us 64.18us 非コンポーネント 29.15us 63.47us 非コンポーネント ( インライン ) 27.00us 61.59us SH3 (96MHz の例 ) メモリ消費における比較 text data bss rodata total コンポーネント ( 最適化なし ) 3,632 100 512 190 4,436 コンポーネント ( 最適化あり ) 3,120 100 512 88 3,820 非コンポーネント 3,632 0 568 100 4,300

コンポーネントシステム適用工程 24 ASP 対応版を基としたので (1) コンポーネント図の組み替え以外 (4) 組上げ記述によるコンポーネント結合まで 修正作業が発生しない コンポーネント自体は ASP 版そのもの (6)TECS ジェネレータにより (9) ヘッダ (10) インタフェースコードが自動で出力される (11) セルタイプコードを SSP に併せて実装する ASP の仕様にのみ存在する機能の関数コードを削除する ASP のみに使用するコードを (13) リンカの対象から除外する コンポーネント図 ( 組み替え ) 以外は C 言語のコンポーネントコード実装と リンク対象の変更のみ ソフトウェアのアーキテクチャ設計を コーディング工程まで揺らぎなく引き継いでいるから簡略化可能である コンポーネント仕様開発者 (2) シグニチャ記述 ( インタフェースの定義 )(3) セルタイプ記述 ( コンポーネントの定義 ) (4) 組上げ記述 ( コンポーネントの構成の定義 ) (5) TECS CDL( コンポーネント記述言語 ) (8) テンプレートコード (11) セルタイプコード ( コンポーネントのソースコード ) 設計 コンポーネント開発者 仕様の規定 (6) TECS ジェネレータ (9) ヘッダ (10) インタフェースコード (12)C コンパイラ (13) リンカ (14) アプリケーションモジュール 製品 アプリケーション開発者 設計 (1) コンポーネント図 利用 (7) プラグイン 設計 プラグイン開発者 エンドユーザー RPC アクセス制御 トレース

適用における考察 25 コンポーネントの適用における考察 文章による設計内容には多分に曖昧さを含んでいる 文章でもガイドワードなど表記ルールを適用することで曖昧さ抑制できるが? 形式化した記述を制約に課しているのと同じ ( ある種のプログラム言語 ) 人間の読解の手間が必要 読解の過程でミスの混入リスクがある 下位工程は文章から想像力を働かせて元の設計を復元する努力をしていた コンポーネントシステムは曖昧性の排除を行っている 文章による補完では ソフトウェア構造設計を方式設計工程で行うのではなく 実はより下位の工程で行うのと同義 完全一致する事の方が難しい アーキテクトの最終イメージ 構造一致 文章曖昧さを含む ドキュメント記述 アーキテクト ダイアグラム記述 ソフトウェア構造設計 詳細設計担当プログラマ コンポーネントシステム

適用結果 26 人間によるプログラム記述量の減尐 コンポーネントアーキテクチャの記述が丌要 コンポーネント間のグルーコードまで自動生成 コーディング工程ではコンポーネント内のローカル関数や シグニチャで定義した関数の実装に専念可能 記述量非依存部依存部グルー CDL total コンポーネント 456 185 0 125 766 非コンポーネント 549 278 119 0 946 ASP カーネルの計数値

開発工程における有効性 27 開発工程で俯瞰してみると コンポーネント結合コンポーネント記述統一された結合規則 出典 :SEC 組込みソフトウェア向け開発プロセスガイド マクロスイッチ条件分岐コメントによる設計情報 ( 曖昧さを含む ) コンポーネント結合はソフトウェア設計に影響 詳細設計あるいは実装工程で補完を行っていた構造設計を方式設計工程へ戻す 数段階抽象化している ソフトウェアアーキテクトの意識との乖離を抑止する

ソフトウェア構造の俯瞰における有効性 開発ターゲットの違い バリエーションの検討 例えば機能性は同じで性能が異なる部品を実装する 28 #ifdef Target1 Switch (Target ) { case Target1: baudrate = 9600; #else テキストから図へ 解析性の向上更なるメリットとして省 ROM/RAM 化処理時間の最適化 ttask InitTask ttask MainTask ttask InitTask ttask Task ttask MainTask tsample1 tcyclichan tkernel Sample1 dler SSPKernel CyclicHan dler tsample1 Sample1 C 言語のマクロや条件分岐を使った実装の場合 判定条件の数値の理解が必要になる ( ドキュメントやコメントを読む ) 出現箇所が多種多数に及ぶ場合の解析性低下は著しい ttask Task tcyclichan dler CyclicHan dler tserial Serial1 tserial Serial2 tkernel SSPKernel cell tserial Serial1 { baudrate = 9600; channel = 1; }; cell tserial Serial2 { baudrate = 4800; channel = 2; }; コンポーネント図 記述から対象ソースコードは一意に特定 条件分岐の抑制や余剰コードの排除で ROM/RAM の節約や 処理時間の最適化というメリットを享受することもできる

ソフトウェア構造の俯瞰における有効性 フィーチャの違い プロダクトライン的構想の検討 例えば仕向けの違いで必要な部品 ( 構成 ) を切り替える 29 Switch (Target ) { case Target1: SendSerial(); break; case Target2: SendCAN(); テキストから図へ 構成の一意の特定視覚化による理解性向上 ttask InitTask ttask MainTask ttask InitTask ttask Task ttask MainTask tsample1 tcyclichan tkernel Sample1 dler SSPKernel CyclicHan dler tsample1 Sample1 ソースコード内に全ての機能を残しておくアプローチでは ttask Task tcyclichan dler CyclicHan dler tserial Serial1 tcan CAN1 tkernel SSPKernel cell tserial Serial1 { baudrate = 9600; channel = 1; }; cell tcan CAN1 { baudrate = BD5K; channel = 2; }; 場合によっては余剰コード自体を取り去ることで品質要件に変化が出る事がリスクとなってしまう ハード拡充に始まるデメリットが顕在化 コンポーネントシステムは図から結合情報を自動で補完する コンポーネント図からコンポーネント記述へ統一された規則によって完全に書き下せるからこそ可能となる

30 E.C. R&D Dept. まとめ 今後の取り組み

まとめ 条件分岐やマクロによる実行コードの切り替えを用いたバリーエーションを実現するような複雑なソフトウェア構造を 解析性に貢献しつつ管理する手法を示した 31 機能の異なるソフトウェア部品の組み合わせによるフィーチャやプロダクトライン対象部品の管理手法を示した C 言語を用いた組込みソフトウェア開発において ソフトウェアモデルからソースコードを自動生成する手法を用いて アーキテクチャ設計を上位工程へ抽象化する具体的な方法を示した

今後の取り組み 32 形式記述との連携 先に紹介したプラグイン機構を用いて 形式記述の仕組みと連携する試み ハードウェア / ソフトウェア間の協調設計 FPGA などの再構成可能なハードウェアと ソフトウェアとの役割分担を制御する試み 互換性を確保した記述の拡張 上下位互換性の検討 バイナリ流通や動的結合に対応する備えとして

参考文献 33 1. OMG: CORBA Component Model 4.0, http://www.omg.org/technology/documents/formal/components.htm. 2. Microsoft Corporation:.NET Framework Conceptual Overview, http://msdn.microsoft.com/en-us/library/zw4w595w.aspx. 3. ORACLE: Enterprise JavaBeans Technology, http://www.oracle.com/us/products/tools/ejb-141389.html. 4. NPO 法人 TOPPERSプロジェクト : TOPPERS/SSPカーネル, https://www.toppers.jp/members.html#early. 5. NPO 法人 TOPPERSプロジェクト : TOPPERS/ASPカーネル, https://www.toppers.jp/asp-kernel.html. 6. OMG: Unified Modeling Language (UML), http://www.omg.org/spec/uml

34 E.C. R&D Dept. ありがとうございました 発表にあたり協力頂いた TOPPERS TECS-WGの皆さまに感謝致します