ソフトウェアテストシンポジウム2012
JaSST'12: Japan Symposium on Software Testing 2012

AUTOSAR OSに対するテスト
ケースおよびテストプログラムの自動生成
2012年1月25日
日本電気通信システム株式会社
風間 佳之

JaSST`12 Tokyo1

アジェンダ1. はじめに
2. 既存のテストスイートの概要
3. テストスイート開発における課題
4. 組み合わせテストツールの導入検討
5. 組み合わせテストツールによる課題解決
6. 実施結果と評価
7. まとめJaSST`12 Tokyo

2

背景•
•
•
•

ECU(Electronic Control Unit)数の増加
ソフトウェア複雑性の増加
車両内通信の増加
省エネルギー化と安全性に対する要求の増加

車載ソフトウェア開発規模が増加･･･
HWに依存しない非競争領域を共通化したプラットフォームにする事により，問題を解決する
JaSST`12 Tokyo

3

AUTOSARとは?

AUTomotive Open System ARchitecture
車両ソフトウェアにおけるオープンシステムアーキテクチャ
AUTOSARとは、大規模化する自動車用ソフトウェア開発における様々な課題を解決するために生まれ、標準化されたアーキテクチャ

AUTOSAR Consortium

OEM

Tier 1
Supplier

Tool vender

JaSST`12 Tokyo

Softwaredeveloper

4

AUTOSARのイメージ

Non- AUTOSARAUTOSAR

JaSST`12 Tokyo5

研究の紹介純国産AUTOSAR OS
TOPPERS/ATK2（Automotive Kernel 2）のコンソーシアム型共同研究/開発
具体的な活動•AUTOSAR OS仕様を明確化，修正→自由に使える日本語版の仕様書の作成•オープンソース実装•検証スイート開発

AUTOSAR OSの日本における標準を策定する
JaSST`12 Tokyo6コンソーシアム型共同研究
AUTOSAR OSの日本における標準・技術者，研究者・企業の経験・人材養成
・研究開発成果

・教員，研究者・研究の知見

・研究開発成果

名古屋大学組込みシステム研究センター（NCES）

複数の企業•1社当たりの開発投資の削減•AUTOSAR OS仕様に対する知見の取得，技術者の教育

産学連携による技術課題の解決
JaSST`12 Tokyo7

2011年度コンソーシアム型共同研究参加企業一覧
企業名（50音順）
株式会社ヴィッツ
株式会社 OTSL
株式会社サニー技研
株式会社デンソー
株式会社東芝トヨタ自動車株式会社
日本電気通信システム株式会社
パナソニック アドバンストテクノロジー株式会社
富士ソフト株式会社
富士通 VLSI 株式会社
ルネサスエレクトロニクス株式会社
JaSST`12 Tokyo

8

AUTOSAR OSの検証における背景
過去のコンソシーアム型共同研究で実績のあったテストス
イートをAUTOSAR OSの検証に活用したい…

μITRON仕様のOSであるTOPPERS/ASP/FMPを対象にしたテストスイートであるTTSP（TOPPERS Test Suite Package）をベースにAKTSP（Automotive Kernel Test Suite Package）を開発
補足：TOPPERS新世代カーネル•

μITRON仕様をベースとして，信頼性，安全性，ソフトウェアポータビ
リティを向上させるための改良・拡張• シングルプロセッサ向けRTOS：TOPPERS/ASPカーネル• マルチプロセッサ向けRTOS ：TOPPERS/FMPカーネル

JaSST`12 Tokyo9

1. はじめに
2. 既存のテストスイートの概要
3. テストスイート開発における課題
4. 組み合わせテストツールの導入検討
5. 組み合わせテストツールによる課題解決
6. 実施結果と評価
7. まとめJaSST`12 Tokyo

10

システムサービステストの概要
外部仕様書に基づいてシステムサービス発行前後のシステム状態の変化を確認する
ActivateTaskの仕様抜粋
ActivateTask
タスクの起動【機能】
ActivateTask は，TaskID で指定されたタスクの状態
を ，休 止 状 態 か ら 実 行 可 能 状 態 へ 遷 移 させる

前状態
TASK2

TASK1
(実行中)
優先度:高(休止中)
優先度:中

処理
仕様の振舞いを確認するテストを実施する
・自タスク以外のタスクを指定して呼び出す．
・休止状態のタスクを指定する．
・対象タスクの優先度が，実行状態のタスクより低い場合，対象タスクが実行可能状態になること．

TASK1

ActivateTask

TASK2

後状態

仕様，実装の両面からテストを実施
JaSST`12 Tokyo

TASK1
(実行中)

TASK2
(実行可能)
11ハンドコーディングでのテストプログラム開発の問題点
1. テストプログラムの可読性，保守性の低下
テストケースの実現方法が複数存在するため，開発担当者が異なることによるばらつき発生

2. テストの開発工数
ASPカーネルのAPIは121個存在し，抽出したテストケースは1,669件

3. 異なるRTOSへの流用不可
同一テストシナリオに対するRTOS毎の重複開発

テストプログラムを生成するツールを開発
JaSST`12 Tokyo12

テストシナリオからのテストプログラム生成
テストケース(ブラックボックス)

テストケース(ホワイトボックス)

テストケースを前状態・処理・後状態へ具体化する

テストシナリオを実現するテストプログラム形式化したテストシナリオ

test.cfg

前状態＜システムサービス発行前のシステム状態＞

入力

出力

test.htest.c処理＜システムサービス発行処理＞

AKTG

後状態
＜システムサービス発行後のシステム状態＞(Automotive Kernel Test Generator)
・Rubyで開発
・約22,000行TESRY記法(TEst Scenario for Rtos by Yaml)

AKTGはTTSPで開発したTTG(TOPPERS
Test Generator)をベースに開発する
JaSST`12 Tokyo

13

TESRY記法
階層型データ形式言語であるYAML形式を用いて全カーネルオブジェクトの属性/状態の記述方法を定めた(TESRY記法で記述したデータファイルをTESRYデータと呼ぶ)

前状態
優先度中のTASK1が実行状態
優先度高のTASK2が休止状態

pre_condition:
TASK1:
type : TASK
tskpri : TSK_PRI_MID
tskstat: runningTASK2:
type : TASK
tskpri : TSK_PRI_HIGH
tskstat: waiting
wobjid : SLEEP

処理
TASK1がActivateTask(TASK2)を発行してE_OKが返る

do:
id: TASK1
syscall: ActivateTask(TASK2)
ercd : E_OK

後状態
TASK1が実行可能状態となる
TASK2が実行状態となる

post_condition:
TASK1:
tskstat: readyTASK2:
tskstat: running(例)ActivateTaskのテストケース

JaSST`12 Tokyo14

1. はじめに
2. 既存のテストスイートの概要
3. テストスイート開発における課題
4. 組み合わせテストツールの導入検討
5. 組み合わせテストツールによる課題解決
6. 実施結果と評価
7. まとめJaSST`12 Tokyo15

課題：カーネル仕様の差異による組み合わせパターン増加
検査対象OSがμITRON仕様からAUTOSAR仕様に変更
OSが提供するAPIの数は減少したが…
仕様の複雑化によりテストとして考慮すべき組み合わせパターンが増大（タスクならば前状態だけでASPの4倍の組み合わせになる）
ATK2(SC1)のテストケース
ASPカーネルのテストケース

1,669件増加

5,000件?

従来型のテスト開発プロセスで行っていた，組み合わせテストケースの手動作成が困難に！
JaSST`12 Tokyo16

テスト手法の適用による効率的な組み合わせテストケース削減の検討

組み合わせ増加に対し，テスト手法による効率的な組み合わせテストケースの削減をすべきでは？
しかし・・・
組み合わせ削減によりRTOSの品質に与える影響が不明
例：
特定の因子の組み合わせのみ網羅に注力して組み合わせ削減→どこに注力すべきか，データの蓄積が無いのでポリシーが作れない

できることなら，考慮しうる全組み合わせでのテストを実施したい…
JaSST`12 Tokyo

17

従来型プロセスの課題と改善ポイント
テストプログラム生成ツールは再利用したい（拡張は必要）

テストシート
作成

TESRY
データ作成

手動では作りきれない&仕様変更時の保守ができない！

テストシート(テキストファイル)増大

テストケース
増大

テスト
プログラム
生成(AKTG)

テストシート
テストファイルレビュー

TESRYデータTESRYデータTESRYデータ

テスト
プログラム
実行

実行パス
確認

AKTG

テストプログラム・test.c・test.h・test.cfg

実行カバレッジファイル(gcovファイル)

テストシナリオ

組み合わせテストケース作成+TESRYデータ生成を自動化すれば，テストプログラム生成，実行まで自動で実施可能になりそう→組み合わせテストケース作成ツールの導入へ
JaSST`12 Tokyo

18

1. はじめに
2. 既存のテストスイートの概要
3. テストスイート開発における課題
4. 組み合わせテストツールの導入検討
5. 組み合わせテストツールによる課題解決
6. 実施結果と評価
7. まとめJaSST`12 Tokyo

19組み合わせテストツールの導入検討
組み合わせパラメータと制約を定義
ActivateTaskのテスト：
対象タスクの状態
READY
RUNNNING
WAITINGSUSPENDED
対象タスクの種別
BASIC
EXTENDED…

ActivateTask0001.yaml

ツール
入力

組み合わせ
テストケース
生成

テストシート

出力

Test_A:
ActivateTask0001:
pre_condition:
pre_condition:
TASK1:TASK1:...
...do:
do: syscall: slp_tsk()
syscall:... ActivateTask()...
post_condition:
post_condition:
TASK1:TASK1:...

…

TESRYデータ

ツール要件１：出力フォーマットはYAML形式が望ましい→ソースコードが公開され，拡張性があること
ツール要件２：組み合わせに対して制約条件を指定したい→仕様によって組み合わせできないパラメータを排除できること
JaSST`12 Tokyo

20

組み合わせテストツールの選定
候補

ALLPAIERS

PictMaster
QICT
選HEXAWISE

定

PictMasterとは？
岩通ソフトシステム社が開発した組み合わせテストケース生成ツール．
PICTというMicrosoft社が無償で公開しているCUIベースの組み合わせテストツー
ルを，VBAを使ってGUI（エクセル）上で扱える．
特に着目した点• 組み合わせテストがエクセルベースでモデル化されるので扱いが容易• 日本語マニュアルが整備されておりツールの習得に時間がかからない• オープンソースになっており，拡張性が高い

JaSST`12 Tokyo

21

PictMasterの入力パラメータ，値入力表
制約表

結果表

組み合わせテストをエクセルにモデル設計
JaSST`12 Tokyo

22

PictMasterの出力組み合わせパラメータと期待結果が形式化されて出力される
JaSST`12 Tokyo23

1. はじめに
2. 既存のテストスイートの概要
3. テストスイート開発における課題
4. 組み合わせテストツールの導入検討
5. 組み合わせテストツールによる課題解決
6. 実施結果と評価7. まとめ

JaSST`12 Tokyo

24

PictMasterによる組み合わせテストケース，TESRYデータの自動生成
TESRYデータ

赤字：組み合わせ対象パラメータ

pre_condition:
TASK1:
type: TASK
tstat : RUNNING
spolicy: AK_SCHFULLTASK2:
type: TASK
tstat: SUSPENDED
inipri: TSK_PRI_HIGH
do :id: TASK1
syssrv:
ActivateTask(Task2)
rettype: StatusType
retva l: E_OK
post_condition :TASK1:
tstat: READYTASK2:
tstat: RUNNING

パラメータ，値入力表

制約表

結果表

JaSST`12 Tokyo

25

PictMasterによる組み合わせテストケース，TESRYデータの自動生成
外部仕様書

VBA修正量を考え，出力形式は従来型のCSV形式のままにした

テスト設計

Rubyスクリプト（160行程度）

PictMaster入力

テストシート組み合わせ
テストケース+TESRY生成

出力

入力

TESRYデータ（CSV形式）

行毎に出力される組み合わせパターンに付随してCSV形式のTESRYデータを出力するように，PictMasterのVBAを60行程度修正，拡張した

PictMasterとRubyスクリプトを連携させることで，
TESRYデータを自動生成
JaSST`12 Tokyo

CSV形式→YAML形式
変換
出力

ActivateTask.yaml

ActivateTask0001:
ActivateTask0001:
pre_condition:
pre_condition:
TASK1:TASK1:
...
...
do:
do:
syscall:syscall: ActivateTask()
ActivateTask()...
...
post_condition:
post_condition:
TASK1:TASK1:…

TESRYデータ26

1. はじめに
2. 既存のテストスイートの概要
3. テストスイート開発における課題
4. 組み合わせテストツールの導入検討
5. 組み合わせテストツールによる課題解決
6. 実施結果と評価
7. まとめJaSST`12 Tokyo

27

実施結果
• 2011/12月末時点で6,107件のTESRYデータを自動生成し，テストを実施した．
• TESRYデータ総行数：20万行以上• PictMaster改造量 ：約50行• Rubyスクリプト作成量：約160行• 発見したバグ
バグ種別
仕様バグ

発見件数
8件

実装バグ

7件

JaSST`12 Tokyo28

評価 ～テストプロセス改善結果～
テストシート
作成

TESRY
データ作成

テスト
プログラム
生成(AKTG)

テストシート
テストファイルレビュー

テストプログラム
実行

実行パス
確認

自動化
AKTG

テストシート(PictMaster_XLSファイル)

テストプログラム・test.c・test.h・test.cfg

TESRYデータTESRYデータTESRYデータ

テストポリシー組み合わせ
パラメータ，値，制約
期待結果（TESRY生成表）
保守対象を局所化

実行カバレッジファイル(gcovファイル)

得られた効果• 生産性が向上- TESRYデータを手動→自動生成- テスト設計における組み合わせ漏れレビューが容易に• 保守性が向上- 仕様変更に対する保守性が向上した- テストケースの属人性を排除
JaSST`12 Tokyo29評価 ～実装バグ分析～
システムサービスを発行する処理単位
Task

ErrorHook

GetEvent()
ShutdownHook

Category1 ISR

PreTaskHook

Category2 ISRStartupHook

AlarmCallback

PostTaskHook

ProtectionHook

特定の処理単位から呼び出した場合のみ，仕様に無いエラーが返る

複数ある処理単位のテストなど，手動ならばポリシーで部分網羅しかしなかった組み合わせを全網羅することでバグを発見できた

JaSST`12 Tokyo

30

課題
PictMasterの品質維持に関する課題• ソースコードを直接バージョン管理できない• ブックが複数ある場合，VBAのアップデートは各ブック毎に実施する必要あり1つ1つアップデートし，テストケースを再生成

VBA
修正

課題解決の為，新たなツールの開発/導入を検討

JaSST`12 Tokyo31

1. はじめに
2. 既存のテストスイートの概要3. テストスイート開発における課題
4. 組み合わせテストツールの導入検討
5. 組み合わせテストツールによる課題解決
6. 実施結果と評価
7. まとめJaSST`12 Tokyo32

まとめ• 名古屋大学を中心としたATK2カーネルの開発/検証に関するコンソーシアム型研究組織は，2009年度に開発したASPカーネルのテストスイート（TTSP）を拡張する形で，2011年度，ATK2のテストスイート（AKTSP）を開発しテス
トをシステムサービステストを実施した• PictMasterの導入により，組み合わせテストケースとTESRYデータ（形式言語によるテストスクリプトファイル）を自動生成し，生産性，保守性の改善を実現した• ATK2の実装，仕様の不具合を合計15件検出した

JaSST`12 Tokyo

33