組込みコンポーネントシステムにおける「情報取得フレームワーク」と「単体テストフレームワーク」
大阪大学大学院
M2 白田聖人

1Outline
1. 背景
2. 問題点3. 提案フレームワーク：TECSInfo
4. 提案フレームワーク：TECSUnit
5. まとめ2

１.背景
組込みソフトウェア：
規模の増大・構造の複雑化→さらなるコストや開発期間が必要

家電
携帯電話

自動車

これらの問題に対応するためにコンポーネントベース開発（CBD：Component-Based Development）
が普及してきている。

3

１.背景

CBD (Component-Based Development)
部品（コンポーネント）を統合することでソフトウェアを開発すること必要に応じて容易にコンポーネントを追加・削除できるため，高い生産性・再利用性を実現できる
LCD

モータ
組込み機器

センサ

ボタン

CBDツールの例：TECS, AUTOSAR, SaveCCM↑TECSは様々な組込み機器に対応
4

1.背景

TECS (TOPPERS Embedded Component System)
TOPPERSプロジェクトで開発している
コンポーネントシステム特徴：• 静的生成 → オーバヘッド小• ドメイン → 保護に対応• タスク・セマフォ → コンポーネント• RTOS(Real Time Operation System)のカーネルを構成するためのコードを自動生成
5

１.背景TECS コンポーネント図
TECSの構成要素
シグニチャ、セルタイプ、セル（組み上げ記述）

6

１.背景
TECS 開発フロー
TECS CDL (Component Description Language)
Signature
Description

Celltype
Description(Definition of Interface)(Definition of Component)

Build Description(Definition of Component
Configuration)

Component
Diagram

TECSInfo Plugin

TECS Generator

コンポーネント
開発者

Configuration File(*.cfg)Template Code(*.c)

Header(*.h)
InterfaceCode(*.c)

Celltype Code (*.c)(Component Source Code)Kernel Configurator

C Compiler

KernelConfiguration
Source (*.c)

Linker

Application
Moduleアプリ
開発者

7

１.Introduction
TECS シグニチャ記述
セルのインターフェス関数
C言語のプロトタイプ宣言の曖昧さを排除した記述
1
2
3
4
5

signature sLCD{
ER setFont([in]lcdfont t font);
ER drawString([in]const char *str, [in]int32 t x, [in]int32 t y);
ER drawLine([in]int32 t x0, [in]int32 t y0, [in]int32 t x1, [in]int32 t y1);};8１.Introduction
TECS セルタイプ記述
オブジェクト指向言語のクラスに相当
受け口と呼び口の設定を行う
振舞いはC言語（セルタイプコード）で実装
1
2
3
45
6
7
8

celltype tMain {entry sTaskBody eMain;
call sButton cButton;
call sLCD cLCD;
attr{ int32 t length= 32;
int32 t x = 1, y = 2; };var { [size is(length)] char *buf; };};9

１.Introduction
TECS 組上げ記述
セルタイプのインスタンス化（セル）と接続を定義
呼び口の設定のみ行う
1
2
3
4
5
6

cell tTask Task{
cTaskBody = Main.eMain;
stackSize = 4096;
Priority = 10;
Attribute = C_EXP(“TA_ACT”)};

10

２.問題点CBD開発における問題点
CBDは便利であるが、デバッガと連携できていない
既存のデバッガが検出するのは言語レベルのエラーのみである
CBD SystemsDebugger

提案フレームワーク→ TECSInfo（Section３）, TECSUnit (Section４)11

２.問題点提案フレームワーク
TECSInfo：コンポーネント開発者向け
コンポーネントの情報を動的に取得- セルタイプ、シグニチャ、セルの情報にアクセス- パスを指定することで属性・変数値を参照
TECSUnit：アプリ開発者向け
コンポーネントにおける単体テスト- json記述に基づくテスト項目- テストコードの自動生成
12

３.TECSInfo
システムモデルTECSInfo用フレームワーク

従来の開発フロー
Application.cdl
celltype tCelltype1{};signature Signature{};namespace nNS1{celltype tCelltypeA{};};
namespace nNS2{
celltype tCelltypeB{};};

Application Module

TECSInfo CDLTECS Plugin Code (Component Diagram)tSignatureInfo

TECS Generator TECS Info Plugin

tNamespaceInfo

RootNSsSignaturetCelltypeInfo

tCelltype1

Compiler&LinkertNamespaceInfo

tCelltypeInfo

nNS1

tCelltypeA

tNamespaceInfo

階層的に情報を保持
nNS2

Application Module Information
on TECS

tCelltypeInfo

tCelltypeB

TECSnfo.cdl

システムモデル13

３.TECSInfo
工夫点と評価TECSInfo プラグイン：
対応する情報（シグニチャ、セルタイプ、変数など）を持つセルを自動生成できる
動的接続：
必要な情報を持つセルだけに実効時に接続できる

CDL

Ⅰ

Ⅱ

5,731lines

740lines

Ⅰ + Ⅱ Ⅰ: Plugin
6,471lines Ⅱ: Dynamic Connections

提案手法はTECS以外のCBDシステムにも適応可能
LEGO mindstrom EV3

14

４.TECSUnit
機能仕様
TECSUnit- 各コンポーネントが「期待した通りの振舞いをしているかどうか」をチェックする
単体テストフレームワーク- 入力としてjson記述を採用- プラグインによりテストコードを自動生成- TECSInfoの活用例の一つ
json記述 :簡易的なデータ記述言語
15

４.TECSUnit
json 記述
セル、受け口、関数、引数、期待値を指定{"target1":{"cell":"Target1","entry":"eTarget1","function":"receiveMessage","argument":[ "out", 6 ],"exp_val":E_OK},"target2":{"cell":"Target2","entry":"eTarget2","function":"sendStruct","argument":[ {"number":1, "name":"aoki“ } ],"exp_val":E_OK}}
16

４.TECSUnit
TECSにおける従来のテスト方法① ターゲットのセルに接続する② TECSジェネレータを実行 → 非現実的
工数、保守性の観点から③ テストコードの作成 (.c)④ コンパイル、リンク、実行⑤ 上記のステップをテストケース分繰り返す
２tTasktTest

TaskTest
celltypecode(.c)

1tTargetTarget3417

４.TECSUnit
TECSにおける従来のテスト方法① ターゲットに接続
123456789101112

celltype tTest {call sTarget1 cTarget1; /* Call port of the target signature */attr {/* Describe the attributes */int8_t BTR = 5;};var {/* Describe the variables */[size_is(BTR)] char_t *buf;};};cell tTest Test {cTest = Target1.eTarget; /* Call to the target cell */};

18４.TECSUnit
TECSにおける従来のテスト方法②TECSジェネレータを実行③ テストコードの作成 (.c)
123
4eTest_main {cTarget_function( VAR_buf, ATTR_BTR );/* Check out value and return value */};

④ コンパイル、リンク、実行⑤上記のステップをテストケース分繰り返す

19

４.TECSUnit
システムモデル
JSMN Plugin
tJSMN
JSMN
tTask
Task

tTaskMain
TaskMain

input

target.json

TECSInfo PlugintTECSInfo
TECSInfo

TECSUnit PlugintTECSUnit
TECSUnit

obtaininformationtTarget1
Target1

tTarget3
Target3

tTarget2
Target2

tTarget4
Target4

動的接続
20

４.TECSUnit
貢献と特徴
貢献- デバッグ環境の提供- 簡易的で可読性の高いjson記述
特徴- セル、受け口、関数のパスのみ必要
セルタイプ、シグニチャ、引数、型などの情報はTECSInfoにより取得できる- jsonを入力としターゲットセルに動的に接続する
テスト内容が変化しても「TECSジェネレータの起動」「コンパイル・リンク」をし直す必要がない

21

５.まとめまとめ
TECSInfo：コンポーネント開発者向け
コンポーネントの情報を動的に取得
TECSUnit：アプリ開発者向け
コンポーネントにおける単体テスト→ CBDシステムにおけるデバッグ環境の提供

22