2011/01/25 JaSST'11 Tokyo

Cソース単体テストでは分からない「実装コード」レベル単体テストの意義～「カバレッジマスターwinAMS」のご紹介～

Copyright © 2011 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

1

2011/01/25 JaSST'11 Tokyo

ガイオ・テクノロジーとは？
■ 組み込み開発ツールの開発および販売
クロスコンパイラ/テストツール/仮想検証ツー
ル/プロトタイピングツール/解析ツール■ テスト・検証に関わるサービスやコンサルテーシ
ョン■ 受託開発ガイオ・テクノロジー株式会社
GAIO TECHNOLOGY CO., LTD. 東京・日本橋 愛媛・松山
■ 設立
1980年
■ 資本金2億9800万円■ 従業員80名■ 本社：
横浜■ 事業所： 東京、松山■ 子会社： GAIO INC（USA）

横浜・本社

2010年度の事業計画で挙げた事業ドメイン

Copyright © 2011 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

2

2011/01/25 JaSST'11 Tokyo

組込み「実装コード」をそのまま実行して単体テストの自動化が可能なカバレッジマスターwinAMS

Copyright © 2011 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

3

2011/01/25 JaSST'11 Tokyo

ガイオ カバレッジマスター winAMS 特長■ 実装コードがそのまま動く単体テストが可能な「業界唯一」のツール• クロスコンパイルした組込みオブジェクトをそのまま使用• テスト用のソース書き換えやテストドライバコードは一切不要■ テストデータ（関数、変数名）は全てCSVファイルで入出力■ 出力期待値との照合結果を自動レポート
テスト入力データ CSV■ 実行後のパスカバレッジ結果を自動レポート
試験対象のソースコード
base(int a, int b, int c){
if (a == 1){
if (b == 1){
idx = 0; // data[0]if (c == 1)
pos = 0; // data[0].str[0]：：}// 結果の設定
value = data[idx].str[pos]; //- 1;}

マイコンシミュレータ(ISS)・対象の関数名
・入力変数名＆入力データ
・出力変数名＆期待値
テスト結果出力 CSV

winAMSユニット
・出力変数名＆変数結果出力・期待値との比較結果（OK or NG）

・組み込みソースをそのまま使用
・コンパイラも現在お使いのものを利用可能

パスカバレッジ出力

Copyright © 2011 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

4

2011/01/25 JaSST'11 Tokyo

実装コードがそのまま動く単体テストとは？
■ 関数テスト、カバレッジ計測のためのコード追加を一切行わないテスト• 製品への実装コードそのものを実行して単体テストを実行• マイコン依存問題、クロスコンパイラコード展開、最適化処理を含めた高信頼性テスト― ターゲットと異なる要素を全て排除した 最も信頼性が高いテストとなる※クロス開発環境をサポートした他社ツールは、計測用コードを挿入してしまう！
カバレッジマスターwinAMS計測用フックコード
計測用テストドライバ

製品実装と同一のコード

C

テストCSV
データ作成

テスト実行
期待値評価
レビュー

スタブ作成
スタブ自動作成

C0/C1/MCDC
カバレッジ計測
レビュー

不要！

CPP
ASM

OBJ
CODE

BIN
LIB
評価対象の製品実装組込みコード

クロスコンパイラ※他社利用可能実装
マイコンコード

マイコンシミュレータ

実装コードがそのまま動く単体テスト
Copyright © 2011 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

5

2011/01/25 JaSST'11 Tokyo（参考）車載ソフトに要求される機能安全■ 自動車機能安全規格「ISO-26262」の最終ドラフトが一般公開■ ソフトウエア単体レベルでの構造カバレッジに関する規定• 自動車の安全性レベル、ASIL( Automotive Safety Integrity Level )に応じた
ステートメントカバレッジ（C0）、ブランチカバレッジ（C1）、MC/DCカバレッジ計測に関する要求事項が規定されている■ ソフトウエアの単体テストは ターゲット環境で行うことが推奨される• 単体テストは、ターゲット環境（実機コード）を使用するべきであるとされる• ターゲット環境と異なる環境で単体テストを行う場合は、ソースコードと実行オブジェクトコードとの差異、ターゲット環境とテスト環境の差異を分析する必要があるとされる ← 事実上不可能
要求を満たすツール■ カバレッジマスターwinAMSは 実機コードで単体テストが可能なツール• 実機コードでの単体テスト自動実行、C0.C1,MC/DC カバレッジ自動計測
Copyright © 2011 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

6

2011/01/25 JaSST'11 Tokyo

コンパイラの最適化によるコードへの影響■ 組込みではCソースで正しいロジックが想定しない結果となる場合がある■ コンパイラの最適化による 実行結果への影響の可能性■ C/C++コーディングで想定しないコード構造を生成する場合がある• レジスタの割り当て• 条件文の最適化• ストレングリダクション（ループ内の配列に対する最適化）• ループインバリアント（ループ内の値の変化しない式をループの外へ）• while文、for文のdoループ化• switch文の最適化• 無意味な変数の削除• 関数のインライン展開• 終端再帰のループ化

Copyright © 2011 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

7

2011/01/25 JaSST'11 Tokyo

コンパイラの仕様に依存した不具合要因（浮動小数点）■ 浮動小数点数から整数
C言語は小数点以下切り捨て

マイコンを変えると結果が異なる場合がある

1.4 -> 1
1.5 -> 1

整数演算のみのマイコンの場合→ コンパイラは浮動小数点ライブラリを用意し、小数点以下を切り捨てる
浮動小数点演算を持つマイコンの場合→ 【切り捨て】【四捨五入】【切り上げ】 制御を選択できる場合がある■ 「きりの良い」 数値って？
0.1 -> 0x3FB9999999999998

0.099999999999999977

0.1 -> 0x3FB999999999999A

0.100000000000000005

Copyright © 2011 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

8

2011/01/25 JaSST'11 Tokyo

コンパイラの仕様に依存した不具合要因（アセンブリ展開）-１
typedef signed short int s2;
typedef signed long int s4;
s4 func_sub( s2 arg1, s2 arg2 ){s4 answer = 0;answer = (s4)( arg1 - arg2);
return(answer);}

32Bit = 16Bit – 16Bit の演算
いつ、32Bit拡張されるのか。によって結果は変わる。
■ A社のコンパイラは① CAST arg1 の s2 -> s4② CAST arg2 の s2 -> s4③ SUB s4 = s4 – s4
④ COPY s4 -> answer■ B社のコンパイラは① SUB s2 = arg1 – arg2② CAST s2 -> s4③ COPY s4 -> answer

arg1 (32767) から arg2 (-32768) を 減算すると結果は 65535 に なるのか？

Copyright © 2011 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

9

2011/01/25 JaSST'11 Tokyo

コンパイラの仕様に依存した不具合要因（アセンブリ展開） -2
typedef signed short int s2;
typedef signed long int s4;
s4 func_sub( s2 arg1, s2 arg2 ){s4 answer = 0;answer = (s4)( arg1 - arg2);
return(answer);}s4 func_sub( s2 arg1, s2 arg2 ){ENTER#008H
s4 answer = 0;
MOV.W:Q#0,-4:8[FB]
MOV.W:Q#0,-2:8[FB]
answer = (s4)( arg1 - arg2);
MOV.W:G
7:8[FB],R0EXTS.W
R0
MOV.W:G
R0,-8:8[FB]
MOV.W:G
R2,-6:8[FB]
MOV.W:G
5:8[FB],R0
EXTS.W
R0
SUB.W:G-8:8[FB],R0
SBB.W-6:8[FB],R2
MOV.W:G
R0,-4:8[FB]
MOV.W:GR2,-2:8[FB]
return(answer);}
EXITD

A社の展開ではA社の展開では
結果は 65536
65536
結果は

s4 func_sub( s2 arg1, s2 arg2 ){ENTER#008H
MOV.W:G
R1,-2:8[FB]
MOV.W:GR2,-4:8[FB]s4 answer = 0;
MOV.W:Q#0,-8:8[FB]
MOV.W:Q#0,-6:8[FB]
answer = (s4)( arg1 - arg2);
MOV.W:G-2:8[FB],R0
SUB.W:G-4:8[FB],R0
EXTS.W
R0
MOV.W:G
R2,-6:8[FB]
MOV.W:G
R0,-8:8[FB]
return(answer);
MOV.W:G-8:8[FB],R0
MOV.W:G-6:8[FB],R2
EXITD
NOP}

Copyright © 2011 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

B社の展開では
B社の展開では
結果は -1-1
結果は10

2011/01/25 JaSST'11 Tokyo

コンパイラの仕様に依存した不具合要因（アセンブリ展開） -3
typedef signed short int s2;
typedef signed long int s4;
s4 func_sub( s2 arg1, s2 arg2 ){s4 answer = 0;answer = (s4)arg1 – (s4)arg2;
return(answer);}s4 func_sub( s2 arg1, s2 arg2 ){ENTER#008H
MOV.W:G
R1,-2:8[FB]
MOV.W:GR2,-4:8[FB]s4 answer = 0;
MOV.W:Q#0,-8:8[FB]
MOV.W:Q#0,-6:8[FB]
answer = (s4)arg1 - (s4)arg2;
MOV.W:G-2:8[FB],R0
EXTS.W
R0MOV.W:G
R0,R1
MOV.W:G
R2,R3
MOV.W:G-4:8[FB],R0
EXTS.W
R0
SUB.W:G
R0,R1
SBB.W
R2,R3
MOV.W:G
R1,-8:8[FB]
MOV.W:GR3,-6:8[FB]
return(answer);
MOV.W:G-8:8[FB],R0
MOV.W:G-6:8[FB],R2
EXITD
NOP}

B社の展開でもB社の展開でも結果は -1-1
結果はCopyright © 2011 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

11

2011/01/25 JaSST'11 Tokyo

本セミナーのまとめ

組込み開発では、Cソースレベルでの単体テストでは検出できない不具合がある！
マイコン実装コードを使用したテストが最も信頼性が高いテスト！
ガイオの単体テストツール
カバレッジマスターwinAMSをご検討ください！
Copyright © 2011 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

12

2011/01/25 JaSST'11 Tokyo

カバレッジマスターwinAMSの導入実績/事例■ 導入実績
• 自動車業界、鉄道、デバイス関連、通信機器、空調関連、メカトロ機器、プリンター
複写機、FA機器、計器関連、エネルギー関連、交通機器関連、等々■ 多数のユーザ事例を発表
••
•
•
•
•

：2005/12 組込み情報誌「ガイオ倶楽部」記事にて発表
アイシン精機（株）：2006/08 「組込みソフト単体テスト成功事例セミナー」にて発表
日産自動車（株）：2006/08 「組込みソフト単体テスト成功事例セミナー」にて発表
ソニーLSIデザイン（株） ：2007/11 「単体試験の賢い選択・活用セミナー」 にて発表
パイオニア（株）：2008/02 組込み情報誌「ガイオ倶楽部」記事にて発表
パナソニック（株）：2009/06 「ガイオ品質向上セミナー」にて発表

フェリカネットワーク（株）

Copyright © 2011 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

13

2011/01/25 JaSST'11 Tokyo

winAMSの販売実績■ リリースからの販売伸び率と主な販売サイト
自動車ECU
空調、デバイス、ガス機器、計器、医療機器
鉄道交通、FA機器、プリンター
自動車ITS
デジタル家電
携帯電話
エネルギー
2004年

2005年

2006年

2007年

2008年

■ 2004年～2007年と2008年以降の業界毎の販売比率
2004年～2007年

2008年～現在

自動車ECU

48.3％

30.6％

自動車ITS

4.5％

19.1％

鉄道/交通

3.7％

3.5％

エネルギー

2.3％

4.7％

デジタル家電

3.2％

22.6％

携帯電話

0.2％

1.2％

Copyright © 2011 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

14

2011/01/25 JaSST'11 Tokyo

END
最新の製品情報はhttp://www.gaio.co.jp/※会社名・商品名は各社の商標または登録商標です。
※本資料の無断転載、複写はお断りします。
ガイオ・テクノロジー株式会社
日本橋事業所 営業部〒103 東京都中央区日本橋人形町3-12-8
TEL.（03）3662-3041
FAX.（03）3662-3043
Email info＠gaio.co.jp

Copyright © 2011 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

・・ご質問はこちらにお願いします。

15