シミュレーションを活用した組み込みソフトウエアテストの改善
2012年
年1月月26日
日
アルプス電気㈱ AUTO事業本部事業本部
第４技術部ファーム設計グループ
千葉 修一

Contents
１．会社紹介２．テスト効率化の要求と壁
３．SBTによるテスト実行の効率化によるテスト実行の効率化
３．
４．テストオラクルによるテスト設計の効率化
５．改善効果６．今後の展開2

Contents
１．会社紹介２．テスト効率化の要求と壁
３．SBTによるテスト実行の効率化によるテスト実行の効率化
３．
４．テストオラクルによるテスト設計の効率化
５．改善効果６．今後の展開3

会社紹介

ECU組込み製品

4

Contents
１．会社紹介２．テスト効率化の要求と壁
３．SBTによるテスト実行の効率化によるテスト実行の効率化
３．
４．テストオラクルによるテスト設計の効率化
５．改善効果６．今後の展開

5ソフトウエアテスト工数の爆発
300

工数（人日）

250

テスト
１０年で４倍のペースで増加

200
150
100

2000年

50

設計工数(人日)
テスト工数(人日)

0設計

2000年

2010年

2010年
40
10

2020年
60
40

90
160

設計
１０年で1.4倍
2020年

背景◆ ソフトウエアの規模自体が爆発的に増加。（ハイブリット、EV化）
ソフトウエアの規模自体が爆発的に増加。（ハイブリット、 化）◆ 設計は効率化できているが、テストは効率化できてない。
6

ソフトウエアテストの位置づけ
ALPS Firmware Development V-Model

耐久テスト
高低温テスト

システム要件分析

システムテスト

ＥＭＣテストメカ、エレを含めたシステムテストは品質保証部が担当(Electro-Magnetic Compatibility)
ソフトウエア要件分析

ソフトウエアテスト

ハイレベル設計

インテグレーションテスト
（結合テスト）

ローレベル設計

モジュールテスト

効率化が進まない
ＭＢＴＤＤ開発(Model Based Test Driven Development)MB(Model Based Development)とTDD(Test Driven Development)を融合させたALPSオリジナルの設計手法

コーディングモデルベース開発、テスト駆動開発の導入により効率化

ユニットテスト◆ テスト実施工数の爆発
車は量産までに何度も試作を繰り返すが、その度に膨大なテストが発生。

◆ テスト設計工数の爆発仕様がどんどん複雑になりテスト設計が年々難しくなってきた。
7

テスト実施効率化の壁
従来テストの環境◆ 膨大なテスト数を人手をかけて行うので工数が増える一方。
◆ 自動化したいがインターフェースがハードウエアなので自動化に大きなコストがかかる。

8

テスト設計効率化の壁◆ システムが複雑になり顧客要件の多くがシステムの内部変数を入出力として定義されている。
また、要件自体も非常に複雑。
◆ このような要件のテスト設計を効率良く行う手法がない。

9

Contents
１．会社紹介２．テスト効率化の要求と壁
３．SBTによるテスト実行の効率化によるテスト実行の効率化
３．
４．テストオラクルによるテスト設計の効率化
５．改善効果６．今後の展開10

自動化技術の検討結果

11

SBT(Simulation Based Test)概要
概要
シミュレーションテストの環境

12ソフトウエアアーキテクチャーの見直し（1/2）
ソフトウエアアーキテクチャーの見直し（ ）表示スイッチアプリケーション
プラットフォーム

モータ

センサ
プラットフォーム

車両情報製品情報■ アプリケーション：客先要件の実装■ プラットフォーム：ハードウエア要件の実装

ソフトウエアをアプリケーションとプラットフォームに明確に分離
13ソフトウエアアーキテクチャーの見直し（2/2）
ソフトウエアアーキテクチャーの見直し（ ）アプリケーション

プラットフォーム

アプリケーションをハードウエアや処理系に「非依存」とすることで、一切手を加えることなくPCで、一切手を加えることなく上でシミュレーションできるようした。

ハードウエア14

SBTのプロセスのプロセス
プラットフォーム開発

ソフトウェア要件

プラットフォーム
要件(30%)

プラットフォーム
設計

ハンド
コーデイングプラットフォーム
コード

アプリケーション
要件(70%)

モデルベース設計

自動コーデイング

アプリケーション
コード

アプリケーション開発

SBTシミュレータ
シミュレータ

コード修正無しにシミュレータに取り込みＤＬＬ化
DLL: Dynamic Link Library

リンク ＆コンパイル

自動テスト
シナリオ
C#コード

ソフトウェア
要件の大半を自動化

従来より簡素に実機テストシナリオ
ドキュメント15

SBTの特徴の特徴■ MBTDD開発とリンクしたテストツール
開発とリンクしたテストツール
テストツール用へのプログラム変換が不要、テスト環境の構築が容易。
■ アプリケーションＣコードを一切変更しないで使用することで「SBTによるテストによるテスト = アプリケーションのテスト」を実現 。
■ これまでのテスト環境をそのままシミュレータに実装することで違和感なく、 テスト環境の移行が可能。
■ フレキシブルな対応
シミュレータを自分たちで開発することでフレキシブル、且つ継続した改善が可能。
16

Contents
１．会社紹介２．テスト効率化の要求と壁
３．SBTによるテスト実行の効率化
によるテスト実行の効率化
３．
４．テストオラクルによるテスト設計の効率化
５．改善効果６．今後の展開

17

テストオラクル概要
Oracleとは神のお告げという意味。とは神のお告げという意味。
ファームウエアテストでは入力に対する出力の関係が正しいかどうかの判断基準になる仕組み。
簡単に言えば動く要件。
データベースソフト会社のオラクルとは関係ない。

強力な言語C#で楽に実装。
強力な言語 で楽に実装。

18

テストオラクルの導入
オラクル非適用

オラクル適用

テストケース（入力作成）

オラクルの結果とアプリの出力を比較

19

テストオラクルのメリット／デメリット
メリット■ テスト設計の標準化。
「オラクル」「テストケース」の基本構成。
■ 仕様変更対応が容易。
オラクルを変更し、後は「入力条件」を考える。
■ 要件検証の強化。
オラクル作成時に要件の間違いに気づける。
■ 設計と平行してテスト設計可能。
やり直しテスト設計が減少。
（従来はいざ実行しようとしてもできないテストがあった）デメリット◆ オラクル作成には経験とスキルが必要。
教育体制の整備、新たな基準作成が必要。
20

Contents
１．会社紹介２．テスト効率化の要求と壁
３．SBTによるテスト実行の効率化によるテスト実行の効率化
３．
４．テストオラクルによるテスト設計の効率化
５．改善効果６．今後の展開21

品質面の効果
評価：★★★☆☆

Q: 不具合検出実績
不具合検出実績
14121212910786453

MANUAL A/C
AUTO A/C
計20
従来（件数）

SBT導入後（件数）従来平均と同等レベル

22効率化の効果
評価：★★★★★

C: 作業工数
工数比較
161412108642015.5

105.55TEOP計50

SBT適用しない場合の見込み工数（人）SBT適用による実工数（人）TE: テストエンジニア
OP: オペレータ

従来より３倍以上効率化

23楽しさの効果（やりがい）
Pleasant: 楽しさ

評価：★★★★★

■SBT実施者の感想
実施者の感想1. テストシナリオを考える楽しさ
C#コードで作成するテストシナリオは「発展性」を持っている。
コードで作成するテストシナリオは「発展性」を持っている。
「網羅性重視」「効率性重視」「タフネス重視」「プレゼンテーション重視」
いろいろなテストシナリオを考え、展開することができる。
2. シミュレータを考える楽しさ「機材が無くてテスト出来ない」「動作が理解し難い」など、シミュレータの改造・展開で解決することが可能。
テストエンジニアとしての腕の見せ所。

24

Contents
１．会社紹介２．テスト効率化の要求と壁
３．SBTによるテスト実行の効率化
によるテスト実行の効率化
３．
４．テストオラクルによるテスト設計の効率化
５．改善効果６．今後の展開25

今後の展開 (1/3)
シミュレータ活用による要件検証の推進
シミュレータには客先要件の殆どを実装したアプリケーションをそのまま組み込んでいるため、顧客との動作確認に使用可能。
文章ではなかなか分かりにくい機能も、シミュレーションで確認することにより精度の高い検証が可能に。
要件仕様

設計書
（ステートチャート）

検証が難しいアプリケーションコード26

今後の展開 (2/3)
テストシナリオ再利用の促進
再利用性を考慮したクラス分けや操作分けを行い、そのまま使える資産としてテストシナリオを蓄積 。

プロジェクト A

シナリオ

プロジェクト B

オラクル

プロジェクト B

改善、追加

データベース27

今後の展開 (3/3)
オラクルと自動テストを活用してマニュアルテストを超える圧倒的なバグ検出率を目指す。
具体例：
入力をランダムに変化させてテスト実行の度に違う入力でテストできるようにする。
このテストを毎晩実行しテスト技術者が寝てる間にバグを見つける。

28

おわり

ご清聴、ありがとうございました。

29