ソフトウェアテストシンポジウム 2012 JaSST'12: Japan Symposium on Software Testing 2012 AUTOSAR OS に対するテスト ケースおよびテストプログラムの 自動生成 2012 年 1 月 25 日 日本電気通信システム株式会社風間佳之 1
アジェンダ 1. はじめに 2. 既存のテストスイートの概要 3. テストスイート開発における課題 4. 組み合わせテストツールの導入検討 5. 組み合わせテストツールによる課題解決 6. 実施結果と評価 7. まとめ 2
背景 ECU(Electronic Control Unit) 数の増加 ソフトウェア複雑性の増加 車両内通信の増加 省エネルギー化と安全性に対する要求の増加 車載ソフトウェア開発規模が増加 HW に依存しない非競争領域を共通化したプラットフォームにする事により, 問題を解決する 3
AUTOSAR とは? AUTomotive Open System ARchitecture 車両ソフトウェアにおけるオープンシステムアーキテクチャ AUTOSARとは 大規模化する自動車用ソフトウェア開発における様々な課題を解決するために生まれ 標準化されたアーキテクチャ AUTOSAR Consortium OEM Tier 1 Supplier Tool vender Software developer 4
AUTOSAR のイメージ Non- AUTOSAR AUTOSAR 5
研究の紹介 純国産 AUTOSAR OS TOPPERS/ATK2(Automotive Kernel 2) のコンソーシアム型共同研究 / 開発 具体的な活動 AUTOSAR OS 仕様を明確化, 修正 自由に使える日本語版の仕様書の作成 オープンソース実装 検証スイート開発 AUTOSAR OS の日本における標準を策定する 6
コンソーシアム型共同研究 技術者, 研究者 企業の経験 人材養成 研究開発成果 AUTOSAR OS の日本における標準 研究開発成果 教員, 研究者 研究の知見 複数の企業 名古屋大学組込みシステム研究センター (NCES) 1 社当たりの開発投資の削減 AUTOSAR OS 仕様に対する知見の取得, 技術者の教育 産学連携による技術課題の解決 7
2011 年度コンソーシアム型共同研究参加企業一覧 企業名 (50 音順 ) 株式会社ヴィッツ株式会社 OTSL 株式会社サニー技研株式会社デンソー株式会社東芝トヨタ自動車株式会社日本電気通信システム株式会社パナソニックアドバンストテクノロジー株式会社富士ソフト株式会社富士通 VLSI 株式会社ルネサスエレクトロニクス株式会社 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 カーネル 9
1. はじめに 2. 既存のテストスイートの概要 3. テストスイート開発における課題 4. 組み合わせテストツールの導入検討 5. 組み合わせテストツールによる課題解決 6. 実施結果と評価 7. まとめ 10
システムサービステストの概要 外部仕様書に基づいてシステムサービス発行前後のシステム状態の変化を確認する ActivateTask の仕様抜粋 ActivateTask タスクの起動 機能 ActivateTask は,TaskID で指定されたタスクの状態を, 休止状態から実行可能状態へ遷移させる 前状態 TASK1 ( 実行中 ) 優先度 : 高 TASK2 ( 休止中 ) 優先度 : 中 仕様の振舞いを確認するテストを実施する 自タスク以外のタスクを指定して呼び出す. 休止状態のタスクを指定する. 対象タスクの優先度が, 実行状態のタスクより低い場合, 対象タスクが実行可能状態になること. 処理 TASK1 後状態 ActivateTask TASK2 仕様, 実装の両面からテストを実施 TASK1 TASK2 ( 実行中 ) ( 実行可能 ) 11
ハンドコーディングでのテストプログラム開発の問題点 1. テストプログラムの可読性, 保守性の低下テストケースの実現方法が複数存在するため, 開発担当者が異なることによるばらつき発生 2. テストの開発工数 ASP カーネルの API は 121 個存在し, 抽出したテストケースは 1,669 件 3. 異なる RTOS への流用不可同一テストシナリオに対する RTOS 毎の重複開発 テストプログラムを生成するツールを開発 12
テストシナリオからのテストプログラム生成 テストケース ( ブラックボックス ) テストケース ( ホワイトボックス ) 形式化したテストシナリオ 前状態 < システムサービス発行前のシステム状態 > 処理 < システムサービス発行処理 > テストケースを前状態 処理 後状態へ具体化する 後状態 < システムサービス発行後のシステム状態 > 入力 AKTG 出力 (Automotive Kernel Test Generator) Ruby で開発 約 22,000 行 テストシナリオを実現するテストプログラム test.cfg test.h test.c TESRY 記法 (TEst Scenario for Rtos by Yaml) AKTG は TTSP で開発した TTG(TOPPERS Test Generator) をベースに開発する 13
TESRY 記法 階層型データ形式言語である YAML 形式を用いて全カーネルオブジェクトの属性 / 状態の記述方法を定めた (TESRY 記法で記述したデータファイルを TESRY データと呼ぶ ) ( 例 )ActivateTask のテストケース 前状態優先度中の TASK1 が実行状態優先度高の TASK2 が休止状態 処理 TASK1 が ActivateTask(TASK2) を発行して E_OK が返る 後状態 TASK1 が実行可能状態となる TASK2 が実行状態となる pre_condition: TASK1: type : TASK tskpri : TSK_PRI_MID tskstat: running TASK2: type : TASK tskpri : TSK_PRI_HIGH tskstat: waiting wobjid : SLEEP do: id : TASK1 syscall: ActivateTask(TASK2) ercd : E_OK post_condition: TASK1: tskstat: ready TASK2: tskstat: running 14
1. はじめに 2. 既存のテストスイートの概要 3. テストスイート開発における課題 4. 組み合わせテストツールの導入検討 5. 組み合わせテストツールによる課題解決 6. 実施結果と評価 7. まとめ 15
課題 : カーネル仕様の差異による組み合わせパターン増加 検査対象 OS が μitron 仕様から AUTOSAR 仕様に変更 OS が提供する API の数は減少したが 仕様の複雑化によりテストとして考慮すべき組み合わせパターンが増大 ( タスクならば前状態だけで ASP の 4 倍の組み合わせになる ) ASP カーネルのテストケース ATK2(SC1) のテストケース 1,669 件増加 5,000 件? 従来型のテスト開発プロセスで行っていた, 組み合わせテストケースの手動作成が困難に! 16
テスト手法の適用による効率的な組み合わせテストケース削減の検討 組み合わせ増加に対し, テスト手法による効率的な組み合わせテストケースの削減をすべきでは? しかし 組み合わせ削減により RTOS の品質に与える影響が不明 例 : 特定の因子の組み合わせのみ網羅に注力して組み合わせ削減 どこに注力すべきか, データの蓄積が無いのでポリシーが作れない できることなら, 考慮しうる全組み合わせでのテストを実施したい 17
従来型プロセスの課題と改善ポイント テストプログラム生成ツールは再利用したい ( 拡張は必要 ) テストシート作成 TESRY データ作成 テストシートテストファイルレビュー テストプログラム生成 (AKTG) テストプログラム実行 実行パス確認 手動では作りきれない & 仕様変更時の保守ができない! AKTG テストシート ( テキストファイル ) テストケース テストシナリオ 増大 増大 TESRY TESRY データ TESRYデータ テストプログラム test.c test.h test.cfg 実行カバレッジファイル (gcov ファイル ) 組み合わせテストケース作成 +TESRY データ生成を自動化すれば, テストプログラム生成, 実行まで自動で実施可能になりそう 組み合わせテストケース作成ツールの導入へ 18
1. はじめに 2. 既存のテストスイートの概要 3. テストスイート開発における課題 4. 組み合わせテストツールの導入検討 5. 組み合わせテストツールによる課題解決 6. 実施結果と評価 7. まとめ 19
組み合わせテストツールの導入検討 組み合わせパラメータと制約を定義 ActivateTask のテスト : 対象タスクの状態 READY RUNNNING WAITING SUSPENDED 対象タスクの種別 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 データ ツール要件 1: 出力フォーマットはYAML 形式が望ましい ソースコードが公開され, 拡張性があることツール要件 2: 組み合わせに対して制約条件を指定したい 仕様によって組み合わせできないパラメータを排除できること 20
組み合わせテストツールの選定 候補 ALLPAIERS HEXAWISE QICT PictMaster 選 定 PictMaster とは? 岩通ソフトシステム社が開発した組み合わせテストケース生成ツール. PICT という Microsoft 社が無償で公開している CUI ベースの組み合わせテストツールを,VBA を使って GUI( エクセル ) 上で扱える. 特に着目した点 組み合わせテストがエクセルベースでモデル化されるので扱いが容易 日本語マニュアルが整備されておりツールの習得に時間がかからない オープンソースになっており, 拡張性が高い 21
PictMaster の入力 パラメータ, 値入力表 制約表 結果表 組み合わせテストをエクセルにモデル設計 22
PictMaster の出力 組み合わせパラメータと期待結果が形式化されて出力される 23
1. はじめに 2. 既存のテストスイートの概要 3. テストスイート開発における課題 4. 組み合わせテストツールの導入検討 5. 組み合わせテストツールによる課題解決 6. 実施結果と評価 7. まとめ 24
PictMaster による組み合わせテストケース,TESRY データの自動生成 TESRY データ 赤字 : 組み合わせ対象パラメータ pre_condition: TASK1: type: TASK tstat : RUNNING spolicy: AK_SCHFULL TASK2: type: TASK tstat: SUSPENDED inipri: TSK_PRI_HIGH do : id: TASK1 syssrv: ActivateTask(Task2) rettype: StatusType retva l: E_OK post_condition : TASK1: tstat: READY TASK2: tstat: RUNNING パラメータ, 値入力表 制約表 結果表 25
PictMaster による組み合わせテストケース,TESRY データの自動生成 外部仕様書 テスト設計 VBA 修正量を考え, 出力形式は従来型の CSV 形式のままにした テストシート 入力 PictMaster 組み合わせテストケース +TESRY 生成 出力 TESRY データ (CSV 形式 ) 入力 Ruby スクリプト (160 行程度 ) CSV 形式 YAML 形式変換 出力 行毎に出力される組み合わせパターンに付随して CSV 形式の TESRY データを出力するように,PictMaster の VBA を 60 行程度修正, 拡張した PictMaster と Ruby スクリプトを連携させることで, TESRY データを自動生成 ActivateTask.yaml ActivateTask0001: pre_condition: TASK1:... do: syscall: ActivateTask()... post_condition: TASK1: TESRY データ 26
1. はじめに 2. 既存のテストスイートの概要 3. テストスイート開発における課題 4. 組み合わせテストツールの導入検討 5. 組み合わせテストツールによる課題解決 6. 実施結果と評価 7. まとめ 27
実施結果 2011/12 月末時点で 6,107 件の TESRY データを自動生成し, テストを実施した. TESRY データ総行数 :20 万行以上 PictMaster 改造量 : 約 50 行 Ruby スクリプト作成量 : 約 160 行 発見したバグ バグ種別 仕様バグ 実装バグ 発見件数 8 件 7 件 28
評価 ~ テストプロセス改善結果 ~ テストシート作成 TESRY データ作成 テストシートテストファイルレビュー テストプログラム生成 (AKTG) 自動化 テストプログラム実行 実行パス確認 AKTG テストシート (PictMaster_XLS ファイル ) テストポリシー TESRY TESRY データ TESRY データデータ テストプログラム test.c test.h test.cfg 実行カバレッジファイル (gcov ファイル ) 組み合わせパラメータ, 値, 制約 期待結果 (TESRY 生成表 ) 保守対象を局所化 得られた効果 生産性が向上 - TESRY データを手動 自動生成 - テスト設計における組み合わせ漏れレビューが容易に 保守性が向上 - 仕様変更に対する保守性が向上した - テストケースの属人性を排除 29
評価 ~ 実装バグ分析 ~ システムサービスを発行する処理単位 Task ErrorHook ShutdownHook GetEvent() Category1 ISR Category2 ISR AlarmCallback PreTaskHook PostTaskHook StartupHook ProtectionHook 特定の処理単位から呼び出した場合のみ, 仕様に無いエラーが返る 複数ある処理単位のテストなど, 手動ならばポリシーで部分網羅しかしなかった組み合わせを全網羅することでバグを発見できた 30
課題 PictMaster の品質維持に関する課題 ソースコードを直接バージョン管理できない ブックが複数ある場合,VBA のアップデートは各ブック毎に実施する必要あり VBA 修正 1 つ 1 つアップデートし, テストケースを再生成 課題解決の為, 新たなツールの開発 / 導入を検討 31
1. はじめに 2. 既存のテストスイートの概要 3. テストスイート開発における課題 4. 組み合わせテストツールの導入検討 5. 組み合わせテストツールによる課題解決 6. 実施結果と評価 7. まとめ 32
まとめ 名古屋大学を中心とした ATK2 カーネルの開発 / 検証に関するコンソーシアム型研究組織は,2009 年度に開発した ASP カーネルのテストスイート (TTSP) を拡張する形で, 2011 年度,ATK2 のテストスイート (AKTSP) を開発しテストをシステムサービステストを実施した PictMaster の導入により, 組み合わせテストケースと TESRY データ ( 形式言語によるテストスクリプトファイル ) を自動生成し, 生産性, 保守性の改善を実現した ATK2 の実装, 仕様の不具合を合計 15 件検出した 33