ガイオ 定期セミナー CM1
2015.04.17 V13.4

ガイオ・テクノロジー 定期セミナーCM1

モジュール単体・カバレッジテスト
入門コース

ガイオ・テクノロジー（株） 営業部【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

1

ガイオ 定期セミナー CM1

アジェンダ■ 【ガイオ・テクノロジー 定期セミナーCM1 概要】
ソフト品質改善のための、モジュール単体テスト、カバレッジテスト手法の入門コースです。
専用シミュレータ「カバレッジマスターwinAMS」を実際に操作して、モジュール単体自動テス
トを体験頂けます。

■ 【アジェンダ】
–
–
–
–
–
–
–
–
–
–

組み込みソフト品質向上をとりまく業界の動向と課題について
品質向上のための解決策について「マイコンシミュレータ」を用いたソフト品質改善手法について導入事例紹介モジュール単体テスト、カバレッジテストの概要と方法
実習（１）： サンプルを使用した関数単体テストの基礎実習（２）： ポインタ変数を持つ関数の単体テスト
実習（３）： ＳＴＵＢ機能を使用したサブ関数の入れ替え
実習（４）：CasePlayer2と連携した テストデータ作成機能を使う
Ｑ＆Ａ

追加実習 ： MC/DCカバレッジ測定のための測定環境構築方法（通常のコースには含まれません）【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

2

ガイオ 定期セミナー CM1

組み込みソフト品質向上への課題【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

3

ガイオ 定期セミナー CM1

組み込みソフトウェア開発の現状■ 組み込みソフトウェアは大規模化、複雑化している– 累乗的に大規模化、複雑化するソフトウェア規模– ソフトウェア規模に比例して増大する不具合件数

市場不具合や
開発リスクが激増!!
【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

4

ガイオ 定期セミナー CM1

ソフト品質改善に対する意識・要求■組込みソフトが原因となる品質問題が非常に多い■「設計品質の向上」が企業における最優先課題となっている
Q5-2 原因別の不具合発生製品数比率（N=74）と不具合発生件数比率（N=73）

Q2-6-I 組込み系ソフトウェア開発の課題

設計品質向上が最大の命題

製品出荷後の不具合の原因

事業責任者層の課題意識【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

5

ガイオ 定期セミナー CM1

組込みソフトウェア開発の課題■ ソフト開発者の人数を増員により ソフト品質にばらつきが出てしまう– 組込み開発経験の浅い技術者も多く、ソフト品質が保てなくなる– システム全体のソフトウエアの全てを見通すことは不可能になっている■ コーディング後のソフト品質確認のために「単体テスト」が重要となる– コードレビュー、単体テストフェーズへの対策が必須
V字プロセス

Ｖ字ボトムフェーズの開発者の増加が著しい

仕様設計

システムテスト（実機テスト）

システム設計結合テスト

詳細設計（関数設計）

単体テスト【課題】
・ソフト品質が個人スキルに依存
・人的ミスの発生が大きい
このフェーズでのソフト品質改善が必須事項となっている

コーディング

コードレビュー

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

6

ガイオ 定期セミナー CM1

組込みソフト品質改善の方策

組込みソフト品質改善

Ｃ言語コーディング
規約の適用

ソースコードレビュー（クロスチェック）の実施
静的解析ツールの活用

モジュール単体テストの実施

コーディングの自由度を制限すること
で不具合を出しやすい記述を抑制。
MISRA-C、SEC規約などのルールが有名。新規開発には有効。

開発者個人に依存したミスや 単純な思い違いが無いかを相互確認。

動的テストにより、レビューでは漏れてしまう不具合を検出。
テスト履歴やテストエビデンスを定量的に残しやすい。

コーディングミスの早期発見、エラー推測が可能

プログラム解析/MISRA-Cルールチェックツール 「CasePlayer2」

組込み向け単体テストツール「カバレッジマスター」【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

7

ガイオ 定期セミナー CM1（参考）静的解析と動的テストの活用■ 静的解析エラー推測と 動的単体テストによるエラー検出の棲み分け
静的解析： 静的コードチェック、データフロー（ランタイム）解析、エラー推測
最小限のテスト工数で、コーディングミス、エラー推測が可能
動的検証： 単体テストによる期待値評価＋コードカバレッジ計測
要求仕様テスト、ターゲット依存の問題点検出が可能 → 機能安全（ISO26262）対応に必須
エラー有り

GOAL

エラー有り
コーディング・ハンドコード・オートコード

静的解析
データーフロー解析

エラー
検出

コーディングミス検出
エラー推測
要求仕様確認コードカバレッジ
確認
マイコン、コンパイラ
依存エラー検出

エラー無し

カバレッジマスター
実コードベース
単体テスト

エラー
無し
エラー検出
結果評価

ISO要求
品質要求
OK

可能だが、レビュー工数、スキルを要する

ツール活用により最小限の工数でエラー検出効果あり↑
後工程の工数削減
効果有り

要求仕様、カバレッジ確認
ターゲット上での動作担保↑
ISO要求、品質観点で不可欠【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

8

ガイオ 定期セミナー CM1

潜在バグを無くし 信頼性を向上する
モジュール単体テスト【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

9ガイオ 定期セミナー CM1

単体テストとは？
■ ブラックボックスの観点で 関数の機能性を評価– 各関数が仕様通りに作られていることを確認すること– ブラックボックスの観点で、関数仕様通りに設計されているかをテスト– 詳細設計から設定した引数/外部変数への入力値に対して 出力変数が正しいか？

■ ホワイトボックスの観点で コーディング時に作り込んだミスを検出– カバレッジの指針を使用して 実装コード構造の間違いを検出– 不要コード、デッドコードの有無の確認– ゼロ割、NULLアクセスへの回避コードの有無、オーバーフローの発生の有無を確認

定義された
関数機能

関数
詳細
仕様

一致性の
評価

ブラックボックスの観点で関数の機能を評価

ホワイトボックスの観点でコード実装ミスを評価

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]：：}// 結果の設定
data[idx].c = data[idx].str[pos];value = data[idx].str[pos]; //- 1;}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]：：}// 結果の設定
data[idx].c = data[idx].str[pos];value = data[idx].str[pos]; //- 1;}【開示及び用途制限資料 ガイオ・テクノロジー株式会社】

カバレッジ評価
デッドコード・パス検出
永久ループ検出「機能性テスト」の補完

ロバスト性（堅牢性）の評価
ゼロ除算
オーバーフローその他の
実装上の不具合

Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

10ガイオ 定期セミナー CM1（参考）ISTQBに定義された単体テスト技法■ ISTQBの定義から引用： 単体テストの設計技法
 仕様ベース テスト
関数仕様書を基にテスト項目を作成
ブラックボックステスト / 関数への入力に対する出力を評価
 構造ベース テスト
ソースコードの全ての構造を網羅して、これがすべて「動くこと」を確認するテスト
カバレッジの指標（C0,C1,MC/DC）により、これを満たすテストを行う
 欠陥ベース テスト
予測される潜在的な問題を中心にテストを設計する
 経験ベース テスト
過去の問題経験からテストを設計する【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

11

ガイオ 定期セミナー CM1（参考）仕様ベーステスト/仕様網羅のテスト項目設計
単体テスト設計の手法■ 関数仕様を基にテスト項目を導出する•

関数仕様を網羅するテストケースを設計する

導出

例： AddFunc() 関数仕様
【関数機能】
入力された２つの引数InA、InBの加算値を求め、戻り値として出力する【入出力仕様】
入力
引数： InA： unsigned char型、有効レンジ 150以下
引数： InB： unsigned char型、有効レンジ 150以下
出力
戻り値： unsigned char型【例外条件】InA、InBのいずれかが有効レンジ外の場合は、255（0xFF）を出力して終了
加算値が200を超える場合は、200を出力して終了【API】
unsigned char AddFunc(unsigned char InA, unsigned char InB)・境界値分析
・デシジョンテーブルテスト
・同値分割法・状態遷移テスト・ユースケーステスト
入力テストケース例
inA
inB
149
149
150 境界条件
150 境界条件
151
151
255 最大値
255 最大値
0 最小値
0 最小値
75 代表値75 代表値（参考）自動車機能安全規格 ISO 26262-6: 9 Software unit testing【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

12

ガイオ 定期セミナー CM1（参考）構造ベーステスト/カバレッジ確認■ 仕様を基に設計したテストケースでコード構造が網羅されるかを評価•

カバレッジ（C0、C1、MC/DC）が100%になるかを確認
 100%の場合： 不要コード、デッドコードが無いことが確認できる
 未達の場合： テストケースの不足か、または不要コード、デッドコードかを評価
仕様を網羅するテストケース

コード構造を網羅するかを評価（参考）自動車機能安全規格 ISO 26262-6: 9 Software unit testing【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

13

ガイオ 定期セミナー CM1

単体テストの工程■ 単体テスト設計指針の作成
 単体テストがテスト担当者のスキルに依存しないように指針を設定※次頁に参考例

モジュール単体テストの概要
単体テスト設計■ 単体テスト設計
 仕様ベースによるテストケース設計• 境界値分析、同値分割、状態遷移 など単体テストの導出手法を使用
 構造ベースによるカバレッジ網羅のテスト設計• C0、C1、MC/DCなどカバレッジ指針を満たすテストを行う
 欠陥ベース、経験ベースによるテストケースの追加■ 単体テスト実行– 期待値との一致を確認、カバレッジ評価

テスト実行

出力
テスト
データ

– 作成したテストデータを関数に与えて実行■ 実行結果の評価

入力
テスト
データ

ツールで
自動化が可能【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

カバレッジ

出力（評価対象）の確認↓

カバレッジ率確認↓

仕様評価

コード網羅評価14

ガイオ 定期セミナー CM1（参考）単体テストには作業フローのマニュアル化が重要■ 単体テストを定着運用するためには・・・••

単体テストの作業フローをマニュアル化する担当者のスキルに依存しないテストが可能な様にテストを標準化する 必ず行わなければならないテスト項目（必須項目）を明確に定義する
 テスト設計に可能な限り担当者の判断が入らないようにテスト指針を設定する※単体テスト代行サービスにおける 指針（ガイドライン）の一例

単体テスト実施の前に指針を決めておこう！
【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

15

ガイオ 定期セミナー CM1（参考）コントロールカバレッジ■ コントロール（実行制御に対する）カバレッジ
C0：ステートメント（命令）カバレッジ

C1：ブランチ（分岐）カバレッジ【指針】全ての実行文を１度実行すればOK【保証できる内容】
・コーディングしたが実行されない実行文はない
・存在してはいけない実行文はない【指針】全ての条件文の真/偽を実行すればOK【保証できる内容】
・存在してはいけない実行パスは存在しない
処理

C0では十分でない例

A=0
真

条件

真

条件

C1カバレッジ：

偽

偽
処理

処理

Ａ=1

C1では十分でない例

真

C0カバレッジ：
ソース行をマークして、
全て塗りつぶすフローチャートの全てのルートを塗りつぶす

X=Y/A
赤のパスには実行文がないので、
C0ではテストされない

条件Ｃ
X or (Y and Z)

処理Ａ

偽

処理Ｂ

複合条件では１つのTRUE/FALSEがテストされるのみ
全ての組合せがテストされる訳ではない【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

16

ガイオ 定期セミナー CM1（参考）コントロールカバレッジ（続）MC/DC：
全ての条件式のTRUE/FALSEの効果を確認する■ コントロール（実行制御に対する）カバレッジ （続き）
C2：コンディション（条件）カバレッジ

MC/DC：Modified Condition/Decision カバレッジ【指針】全ての条件文の条件式の組み合わせを１度実行すればOK【保証できる内容】
・存在してはいけない条件判定式の要素がないこと【指針】全ての条件文の条件式の組み合わせのうち、意味のある組み合わせを全て１度実行すればOK【保証できる内容】
・C2と同等の網羅内容（テストデータはC2より少ない）真真C2カバレッジ：
複合条件の全数組
合せをテストする

条件Ｃ（X and Y） or Z

処理Ａ

偽

条件Ｃ
（X and Y） or Z

偽
処理Ａ
処理Ｂ

全ての条件文の条件式の組み合わせを実行

処理Ｂ

他の条件式の真偽を固定して、１つの条件式の真偽を変化させたとき、全体の条件に変化があるものだけを実行する（↓色のついたデータ）
条件式 X

F

F

F

F

T

T

T

T

条件式 X

F

F

F

F

T

T

T

T

条件式 Y

F

F

T

T

F

F

T

T

条件式 Y

F

F

T

T

F

F

T

T

条件式 Z

F

T

F

T

F

T

F

T

条件式 Z

F

T

F

T

F

T

F

T

論理

F

T

F

T

F

T

T

T

条件要素に対する網羅性は100%だが、効果のないテストが含まれてしまう

２つのデータ組み合わせで、各条件式を評価→

Z

Y
X
Ｃ２の網羅性を維持して、テストパターン数を抑えることができる【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

17

ガイオ 定期セミナー CM1

単体テストの効果例/実施例【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

18

ガイオ 定期セミナー CM1

モジュール単体テストの効果例1■ ソフト設計の上流工程での単体テストは 潜在バグを未然に防ぐ– 上流工程での「ホワイトボックステスト」で「想定外」条件を検証– 下流工程のテスト項目を減らし、問題要因の発見を容易にする
単体テストを行わないと・・・

上流

コーディング
コードレビュー
単体テスト
結合テスト

下流

システムテスト（実機テスト）・テスト項目が多く複雑で、全てをテストしきれない・不具合を確認したが、要因の特定が難しい
・正常動作には問題がないと思うが、例外系はどうか分からない・・・
不具合潜在化のリスクあり！
単体テストを行ったら・・・
・テスト項目がすっきりと整理された！
・不具合が出ても、原因が関数にあるかシステムにあるかが、直ぐに分かる！
・例外系の条件に対するロバスト性も確保できた！

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

19

ガイオ 定期セミナー CM1

モジュール単体テストの効果例2■ 関数モジュールの再利用において 製品品質を確保可能にする– 単体テスト未実行の関数の再利用は 他の製品へ不具合を及ぼす– モジュールの再利用においては 単体テストは必須となる
旧機種のソースコード

OK!

新機種のソースコード
新規開発ソースコード

OK!

一般的な組み込み開発
では、新規開発する
ソースは、少ない

ほとんどは、ソースを再利用して開発される

OK!

OK!

OK!

ソースの
大半は
再利用

OK!

OK!

OK!

OK!

OK!

再利用するソースに 不具合が潜在していると・・

次の設計にも そのまま影響してしまう！

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

20

ガイオ 定期セミナー CM1

モジュール単体テストの効果例3■ テストの結果を定量的に図りやすく 品質の指標が明確になる
要素分析表： 変数に対してどの様な値を与えてテストしたかを示す
テストベクターの個数：
カバレッジ率： C1/MCDCなど、ソースコードのテスト網羅率を示す
入力要素

1

A

B

第1引数
y

第2引数
count

1

short型の
領域を示す
アドレス

C

D

E

第2引数 disp_set2 disp_set2 グローバ
countが
の
の引数
ル変数
示すメモ
復帰値
count
flag
リデータ
0xaa
aa

6

0

0

0

1

1

2

2

0xfff
e

3

5

0xffff

4

9

0xfff
e

入
力 5
値

10

0xffff

6

0

7

11

8

-5

9

15

※ガイオ単体テスト代行サービス
での納品物の例

F

カバレッジ率0xaa
aa

テストベクタ数↑関数の複雑度要素分析表【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

21

ガイオ 定期セミナー CM1

モジュール単体テストの効果例4■ 単体テストのテストデータ設計工程で ソースの不具合を発見する– 「網羅性」を意識したテストケース作りの過程で ソースの潜在バグを発見することが多い• 型の間違い、符号有無の間違い、パスの確認から不要コードを発見 など■ 自動テストシステムで 工数をかけない反復テストの実施が可能– 全ての単体テストを自動実行することで、ソース修正による影響（デグレ）を発見し易い※フェリカネットワークス様のユーザー事例より網羅性を意識した
テストケース作成で、ソースコードを繰り返しレビュー

自動テストシステムへ
データを登録すれば日々のテスト作業から解放される

２段階工程の モジュール単体・カバレッジテスト
関数設計＆テストデータ作成
ソースコードレビュー

関数設計
コーディング

１台の自動テストシステムで一定時間毎に自動実行

データ
登録
テストデータ作成

自動テスト
システム

実
機
総
合
テ
ス
ト
テスト
レポート

関数設計者
テスト指針書【開示及び用途制限資料 ガイオ・テクノロジー株式会社】

Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

22

ガイオ 定期セミナー CM1

単体テストの定着運用による効果■ 単体テストを「開発プロセス」化、定着運用することでソフト品質が高まる
１つのプロジェクトへの適用での 即時効果よりも、数回のプロジェクトへの運用で、再利用されることにより効果が高まる■ 単体テストの実施は 次のソフト設計に良い影響を与える
単体テスト実施で得た不具合情報を設計にフィードバック
テストしやすいコーディング ← 品質の高いソフトの基本条件
テストを意識したコーディング ← 網羅性を意識したソフト設計にテストを意識した
コーディング

単体テスト
反復した運用で品質が高まる
テストしやすいコーディング開発
結果のフィードバック

ソース
ソース
ソース
コード
コード
コード

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

ソース
ソース
ソース
コード
コード
コード

23

ガイオ 定期セミナー CM1（参考）単体テストの有無による比較■ 単体テスト導入により 総合的な工数と残存バグの削減が可能– HDDレコーダ開発会社の効果事例（※ユーザーヒアリングに基づく）【システムテストのみの場合の問題点】

システムテスト（ST）

システムテストのみの検証プロセス

不具合の収束グラフ

結果的に工数や検証期間が長くなってしまう－不具合の原因は開発者自身にしか分からないことが多く、不具合が収束するまで、ほとんどの開発者を拘束してしまう－初歩的なミスによる手戻りが大きくなる

これ以上
バグが発見
できない

潜在バグが多く残ってしまう－システムテストだけではテスト網羅性が低い

不具合の収束まで開発者を拘束してしまう

残存バグ 多ケアレスミスを修正する手戻りが大きい

製品の品質にリスクを背負う時間
単体テスト（UT）

システムテスト（ST）【単体テストを取り入れることの効果】
短期化も可能

ＵＴ期間中は工数負荷が高くなるが・・・

単体テストを取り入れた
検証プロセス

不具合はシステム要因に絞られる
不具合収束に、開発者を拘束することが少なくなる

総合的な工数や検証期間を削減することができる－確かに、ＵＴ期間中は工数負荷が高いがＳＴに移行したあとは、不具合の多くがシステム要因に絞られ、開発者を拘束しない
潜在バグを減らすことができる－ホワイトボックス的な観点のテストにより人的ミス、ケアレスミスを激減することが可能

残存バグ 少開発コードの再利用性を高める－関数のシステム依存性が低くなり、次機種への２次利用性が高まる効果もある

時間【開示及び用途制限資料 ガイオ・テクノロジー株式会社】

製品の品質が高まる

Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

24

ガイオ 定期セミナー CM1

単体テストを自動化する
カバレッジマスターwinAMS【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

25

ガイオ 定期セミナー CM1

ガイオ カバレッジマスター winAMS 特長■ 組込みソフトをターゲットとした 単体テストツール■ マイコンシミュレータ（ISS）を使用して 「実機コード」をテスト– マイコン仕様、コンパイラなどの、ターゲットへの実装時の問題を含めた評価が可能– 単体テストのソースコード、ビルド環境は、製品開発のものをそのまま適用可能■ テストドライバ作成、ソースコードの変更は不要■ テストデータ（関数、変数名）は全てCSVファイルで入出力■ 実行後のパスカバレッジ結果を自動レポート
テストデータ・結果
入出力データマイコンシミュレータ（ＩＳＳ）
winAMSユニット（仮想テスト装置）

実機マイコン
動作と等価な
テスト環境

C0/C1カバレッジ

内部連携●テストデータ（ＣＳＶ）入出力●評価対象の組み込みオブジェクトコード●カバレッジ結果の作成（実装ROMコード）を実行【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

26

ガイオ 定期セミナー CM1関数への入出力テスト方法（仕組み）■ 関数を単体実行する仕組みをシミュレータ本体に実装– クロスコンパイルした 組み込みオブジェクトをそのまま使用– 関数名、変数名、テストデータを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;}

・組み込みソースをそのまま使用
・コンパイラも現在お使いのものを利用可能
・バッチ処理で自動テスト

マイコンシミュレータ

・対象の関数名
・入力変数名＆入力データ
・出力変数名＆期待値
単体テスト
シミュレータカバレッジマスターwinAMS パッケージ

テスト結果出力 CSV・出力変数名＆変数結果出力・期待値との比較結果（OK or NG）【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

27

ガイオ 定期セミナー CM1

C0/C1カバレッジ自動レポート（標準機能）■ 「カバレッジマスター winAMS」 C0/C1カバレッジ結果を自動レポート– 条件分岐によるコードパスの網羅テストで品質を保証– 「winAMS」により テスト実行後に 実行したソース行を色表示– 組み込みソフトのC0/C1カバレッジの自動テストを実現
winAMS シミュレータ

C0/C1カバレッジ結果表示

実行後

入出力CSV
データ

クリックしたテストデータによる実行ソース行を色表示【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

28

ガイオ 定期セミナー CM1

サブ関数スタブ作成機能（標準機能）■ 単体テストのフェーズでは 関数を独立させて単体で評価する•

テスト対象関数とサブ関数の依存関係を無くすためにスタブ関数を作成■ スタブ関数作成・管理機能をサポート•••

元のソースコード修正なしで サブ関数の入れ替えが可能
関数リスト上の「置換」スイッチで スタブのON/OFFを簡単に切り替え可能
テスト対象の関数呼出し部分のコーディングは、一切修正不要
テスト対象関数void func( void ){ret = SubFunc( 10 );}テスト対象関数は戻り値を取得「置換」実行×サブ関数
int SubFunc( int value ){return ○×..;}
スタブ関数
int AMSTB_SubFunc( int value ){return ○×..;}

戻り値を設定する機能を持ったスタブを作成【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

29

ガイオ 定期セミナー CM1

ポインタ変数対応・その他機能（標準機能）■ ポインタ変数・引数の実体を自動割り付け– 変数の実体を伴わないポインタ変数・引数の場合でもそのままテスト可能– 入力データCSVの変数名に「$」を付けるだけで 実体を自動割り当て– 割り付けエリアは MPUのメモリモデルから 自由に指定可能$

int func1( char *data )ポインタ変数の実体を作るための割り当てエリアを指定■ CSVファイルに「～」で 期待値の範囲指定も可能– レンジ内に入ることを期待値とする場合– 浮動小数点変数に対する有効数字範囲指定【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

30

ガイオ 定期セミナー CM1

アセンブラ混在表示（標準機能）■コンパイラが生成したデバッグ
情報を基にソースと生成コードの対応を混在表示
関数内で使用されていないことにより、
マイコンコードが生成されていない為、背景色が白色となる例です。

クロスコンパイラの最適化等により、Ｃソー
スと生成されたマイコンコードの不一致が起こる場合がある為、混在表示で影響を判断出来ます。

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

31

ガイオ 定期セミナー CM1

選択テストデータを一斉自動実行（標準機能）■ 管理ツールSSTManagerで選択したデータを自動実行– 指定したCSVデータ（関数）を自動バッチ実行– 結果表示まで 全て自動実行
入出力テスト結果表示

テストデータを選択

C0/C1カバレッジ結果表示

テスト開始ボタン

自動テスト実行ダブルクリックで各結果詳細表示へ【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

32

ガイオ 定期セミナー CM1

機能安全規格ISO26262/IEC61508
ツール認証について【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

33

ガイオ 定期セミナー CM1

機能安全ツール認証をTÜV SÜDより取得■ 第三者認証機関であるドイツのテュフズード（TÜV SÜD）より
機能安全ツール認証を取得
 ISO26262（自動車）、IEC61508 （機能安全メタ企画）にて取得
 ツール認証取得製品 （2013/6/21に 取得）• カバレッジマスターwinAMS/ゼネラル V3.6.x： 単体テストツール• CasePlayer2 V5.6.x： プログラム解析ツール

 結合テスト向け「関数/コールカバレッジ計測機能」もツール認証対象に– 単体テスト機能に加え、結合テストで求められる「関数/コールカバレッジ」計測機能も、ツール認証の対象に含まれます。

 TCLの設定によらず適用可能– 最も煩雑なツール認定作業が必要となるTCL3に設定した場合にも適用されます• ユーザ様は、TCLによらずツール認定に関わる作業を省略することが可能です【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

34

ガイオ 定期セミナー CM1

リファレンスワークフロー（RWF）とは？
■ ISO 26262に適合した静的解析、単体テストを行うのに必要なガイオツールの使用方法（ワークフロー）を定義した文書■ TCLによらずツール認定に関わる作業を省略可能– ISO26262は開発に用いるソフトウェアツール毎に設定するTCL (Tool Confidence
Level)に応じた開発ツール認定レポートの作成を ユーザーに要求します– 「カバレッジマスターwinAMS/ゼネラル」「CasePlayer2」はTÜV認証取得済み– 最も煩雑なツール認定作業が必要となるTCL3に設定した場合にも適用可能※参考イメージ図

この使い方に沿え
ば、機能安全のツールとして使えますよ。TÜVの認証がありますよ。

TÜVの認証を基にして、ツールの認定をしましたよ。

納品物
ツール クオリフィケーション レポート

OEM

RWFに沿わない部分
は、自分でツールの認定をして、レポートに入れましたよ。

ECU
サプライヤ

リファレンス
ワークフロー

TÜVの認証テクニカルレポート発行
認証マーク発行
OK

ツール
ベンダー

RWFに沿わない部
分は、機能安全に沿ったプロセスが既にあるなら、それで良いですよ。

認証機関
TÜV

リファレンス
ワークフロー【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

35

ガイオ 定期セミナー CM1

ユーザーにツール認定に必要な資料を提供■ GAIOユニットテストツールセット リファレンスワークフロー（RWF）– 保守契約を頂いているユーザー様からの要求に基づいてガイオが提供• 提供先を管理されたペーパードキュメントで提供致します （複写、転送はできません）– 機能安全に対応する静的解析、単体テストを行うためにユーザー様は、RWFに沿ったプロセス（テスト手順）を構築する必要があります【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

36

ガイオ 定期セミナー CM1

認証バージョンの提供とバージョンアップについて■ ISO26262/IEC61508認証バージョン専用WEBページを設置
機能安全（ISO26262/IEC61508）ツール認証取得バージョン• カバレッジマスターwinAMS/ゼネラル：v3.6.x• CasePlayer2：v5.6.x
ガイオがアップデートバージョンで再認証を取得するまで、
上記認証取得バージョンをいつでもダウンロード可能■ 認証バージョンに対するバグフィックス等は認証の範囲内で個別対応
機能安全に影響を与えないアップデートは、リビジョンアップにて対応■ 再認証は機能安全へ与える影響とお客様のご意見を考慮し対応を決定※お客様自身で最新版のプライベート認定を行う場合は、資料提供などを協力致します
認証バージョンのリビジョンアップ

機能追加を含む
最新版(v3.6.x / v5.6.x)
認証の範囲内で個別対応
専用WEBページにて提供

未認証(v3.X / v5.X)
2012/06
認証済み

関数/コールカバレッジ
IEC61508対応を含む

通常のアップデートで提供
再認証はお客様のご意見を考慮して対応時期を決定【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

37

ガイオ 定期セミナー CM1（参考）機能安全規格 IEC61508 / ISO26262■ IEC61508（メタ規格）のもと各分野ごとに機能安全規格が派生
 自動車機能安全（ISO26262）はもとより、IEC61508のツール認証により 広範囲な機能安全のテストに使用可能

プロセス産業IEC 61511

鉄道
IEC 62278(RAMS)

原子力
IEC 61513

機能安全規格IEC 61508

産業機械
IEC 62061

自動車
ISO 26262

医療器械
IEC 62304

土工機械
ISO 15998

船舶

ロボット
ISO 10218

エレベータ
EN 81-1
ISO 22201

防衛【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

38

ガイオ 定期セミナー CM1

機能安全（IEC61508 / ISO26262）へのカバレッジマスターの優位性について【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

39

ガイオ 定期セミナー CM1

自動車機能安全規格ISO26262の推奨事項■ ソフトウエアの構造網羅テスト、カバレッジテストに関する項目が規定
自動車安全度水準ASILに応じて、ステートメントカバレッジ、ブランチカバレッジ、
MC/DCカバレッジの計測が推奨されている■ 「単体テストの環境はターゲット環境に可能な限り合わせること」を推奨
カバレッジマスターwinAMSは 「実装コードがそのまま動く単体テスト」 が可能な業界唯一のツール
IEC 61508 META-STANDARD
EN 5012x(鉄道)IEC 60601 1-4 (Medical)
IEC 62304(医療機器ソフトウェア)
IEC 61513 (原子力)IEC 61511 (プロセス産業)
ISO EN 12100 (Machinery)ISO 26262 (自動車)

6-9 ソフトウェア単体テスト
構造網羅テスト

Part1:Glossary of Terms
Part2:Management of Functional Safety
Part3:Concept Phase
Part4:System Development
Part5:Hardware Development
Part6:Software Development
Part7:Production and Operation
Part8:Supporting Processes
Part9: ASIL- and safety-oriented analyses

ステートメントカバレッジ
分岐カバレッジ,MCDCカバレッジ

機能レベルでの欠陥投入
モデルベーストテスト
MIL,SIL,PIL、HIL

モデルとコードの一致性テスト(BTBテスト)

6-10 ソフトウェア統合とテスト
モデルとコードの一致性テスト(BTBテスト)
モデルベーストテスト
SIL,PIL,HIL

欠陥投入テスト【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

40

ガイオ 定期セミナー CM1

フックコードを使わない「実コード」単体テスト■ 単体テスト、カバレッジ計測用フックコード追加なしで実行可能– 計測用コード挿入のない、製品実装コードそのものを実行して単体テストを実行– 計測の仕組みはコードではなく、シミュレータ本体に機能実装– マイコン依存問題、クロスコンパイラコード展開、最適化処理を含めた高信頼性テスト• ターゲットと異なる要素を全て排除した 最も信頼性が高いテストとなる

カバレッジマスターwinAMS
計測用フックコード
計測用テストドライバ

製品実装と同一のコードC

テストCSV
データ作成

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

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

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

不要！

CPP
ASM

OBJ
CODE

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

クロスコンパイラ※他社利用可能マイコンシミュレータ

実装
マイコンコード

実装コードがそのまま動く単体テスト【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

41

ガイオ 定期セミナー CM1

他社単体テストツール フックコード挿入の影響■ ターゲット環境での実行を行う他社ツールは コード構造を変化させる
ターゲット環境で実行したとしても、実装コードそのものをテストしていることにはならない！
●カバレッジマスターwinAMS
テスト対象関数C
展開

テスト対象関数にフックコード挿入

C

C言語ステートメント (1)
ASM

C
展開

●クロス対応を謳う他社単体テストツール

C言語ステートメント(1)のマイコンコード展開※最適化コード構造

ASM

C言語ステートメント (2)ASM

展開

C言語ステートメント(2)のマイコンコード展開※最適化コード構造

C

計測用フックコード１のマイコンコード展開

ASM
C言語ステートメント(2)のマイコンコード展開※コード構造が変化

C
展開

フックコード挿入により、レジスタの使用方法、最適化などが変わり、コード構造が変化してしまう

×

C言語ステートメント (2)◎完全にターゲットに一致したテスト！

C言語ステートメント(1)のマイコンコード展開※コード構造が変化

計測用フックコード１

ASM

C
展開

カバレッジマスターwinAMSは
このままのコードを
単体テストに使用

C言語ステートメント (1)展開

計測用フックコード２

ASM

計測用フックコード２のマイコンコード展開

他社のターゲット環境実行
可能なツールは全て構造の変化したコードを単体テストに使用する
ターゲット環境で実行したとしても実装コードをテストしていることにはならない！

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

42

ガイオ 定期セミナー CM1

機能安全認証IEC61508 への適用事例■ （株）不二越 ロボット事業部様の IEC61508機能安全認証への取り組みと単体テストツール「カバレッジマスターwinAMS」の適用事例– GAIO CLUB / 組込み開発技術者のための技術情報Vol.05 (2011/1/24)に掲載【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

43

ガイオ 定期セミナー CM1

導入実績・発表事例（参考資料）【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

44

ガイオ 定期セミナー CM1

カバレッジマスターwinAMSの導入実績/事例■ 導入実績
自動車業界、鉄道、デバイス関連、通信機器、空調関連、メカトロ機器、プリンター複写機、FA機器、計器関連、エネルギー関連、交通機器関連、等々■ 多数のユーザ事例を発表
・不二越（株）：2011/01 GAIO CLUB ONLINEに事例紹介
・パナソニック（株）：2009/06 「ガイオ品質向上セミナー」にて発表
・パイオニア（株）：2008/02 組込み情報誌「ガイオ倶楽部」記事にて発表
・ソニーLSIデザイン（株） ：2007/11 「単体試験の賢い選択・活用セミナー」 にて発表
・日産自動車（株）：2006/08 「組込みソフト単体テスト成功事例セミナー」にて発表
・アイシン精機（株）：2006/08 「組込みソフト単体テスト成功事例セミナー」にて発表
・フェリカネットワーク（株） ：2005/12 組込み情報誌「ガイオ倶楽部」記事にて発表【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

45

ガイオ 定期セミナー CM1

さあ、始めましょう！
実習準備
評価ソースサンプルを確認【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

46

ガイオ 定期セミナー CM1

評価ソースサンプル プロジェクトを開く■ ガイオ統合開発環境プロジェクトを開きます
1. C:¥winAMS_CM1¥target フォルダを開きます
2. 「SAMP1.gxp」をダブルクリックして開発環境を立ち上げます3. 「ビルド」メニューから「リビルド」を選択して、コンパイルします。

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

47

ガイオ 定期セミナー CM1

実習環境について■ 実習教材のファイル構成
Ｃドライブ直下に用意
単体テスト環境（実習１で作成）

評価ソースのコンパイル環境

SAMP1.xlo が評価用実行（ARM）コード【ロード可能なオブジェクトファイル】

・ガイオ製コンパイラのオブジェクト
ファイル（SAUFフォーマット *.xlo）
・デバッグ情報が必要（コンパイル時に指定）

静的解析環境（実習４で作成）【参考】
他社製（半導体メーカー製）コンパイラで生成したオブジェクトファイルの場合（例）ルネサス製HEW環境の場合
・debugモードでコンパイル・「*.abs」（ELFフォーマット）が生成される他社製コンパイラで生成したオブジェクトファイルはカバレッジマスターの「OMF変換」機能でSAUFフォーマット（*.xlo）に自動変換【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

48

ガイオ 定期セミナー CM1

実習1
評価ソースサンプルのC0網羅率を100%にする(テストデータはEXCELで作成)
カバレッジマスターの基本機能の学習【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

49

ガイオ 定期セミナー CM1

実習1-1：テストプロジェクトを新規作成■ カバレッジマスター用テストプロジェクトを新規作成します
1. デスクトップ「SSTManager」を起動します。
※「スタート」→「（すべての)プログラム」→「システムシミュレータ(winAMS)」→「SSTManager」を起動します。

2. 「ファイルメニュー」→「プロジェクト新規作成」を選択します。
3. ダイアログを以下のように設定して、「OK」を押します。
← プロジェクト名のフォルダができます。
← プロジェクト名のフォルダが作成されます「C:¥winAMS_CM1」 を選択← 「systemg.exe」を選択← 「ARM」を選択← 「ARM7DM Little Endian」を選択← XASS(GAIOクロス開発環境）← winAMSを選択← 実習１～３では空欄※実習４で使用します。

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

50

ガイオ 定期セミナー CM1

実習1-2：起動設定■ テスト対象ターゲットオブジェクトと、シミュレータ起動コマンドファイルを指定
1. オブジェクトファイルに、「C:¥winAMS_CM1¥target¥obj¥SAMP1.xlo」を指定します。
2. スタートアップコマンドファイルに、「C:¥winAMS_CM1¥target¥SS_STARTUP.com」
を指定します。
3. 「自動テストを行う」にチェックを付けます。

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

51

ガイオ 定期セミナー CM1(参考)スタートアップコマンドファイルとは？
■ マイコンシミュレータの起動時に実行されるスクリプトファイル– マイコンシミュレータの設定内容をテスト事情に合わせて変更するために使用• メモリ領域の属性を変更（ROM領域→RAM領域）• レジスタ変化待ちなどのループをブレイクする操作 など※通常の関数テストには必要なし
System Simulator

デフォルトコマンド（自動作成される）起動時に実行されるスクリプト

マイコンシミュレータ

xlo
テスト対象
オブジェクトコードcom
txt
スタートアップ
コマンドファイル

マイコンシミュレータに追加したい機能をユーザが自由に追加【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

52

ガイオ 定期セミナー CM1（参考）ユーザー向け技術サポート情報■ WEBサイトに技術サポート情報を掲載•「ユーザーサポート」トップページからアクセス → 【ユーザー向け技術サポート情報】■ カバレッジマスターwinAMS/ゼネラル 向けノウハウ情報••

FAQ（よくある質問）
マクロ（シミュレータコマンド）の使い方 ※上級者ユーザー向け

http://www.gaio.co.jp/support/user/tech_paper.html【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

53

ガイオ 定期セミナー CM1

実習1-3：単体テストで網羅率を100%に■ 実習１は サンプルソースに対して、C0カバレッジを100%にするデータ作成を、EXCELで行います。
– サンプルソース（main.c） の func1() を単体テストします// グローバル構造体変数
struct ST_PARAM{
int data;
int ret_code;} gb_result;case 2:gb_result.data = input * 100;
break;
case 3:if( input >100 )gb_result.data = 10000;
else
gb_result.data = input *100;
break;
default:
gb_result.data = -1;}// return code
gb_result.ret_code = TRUE;

void func1( int enable, int mode, int input ){if( enable ){switch( mode ){case 0:gb_result.data = input ;break;
case 1:gb_result.data = input * 10;
break;}
else{
gb_result.data = 0;
gb_result.ret_code = FALSE;}}【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

54

ガイオ 定期セミナー CM1

実習1-4：func1()テスト用CSV雛形を作成■ テスト対象は 関数func1()です ※「実習1-1」のソースコードを参照■ func1()の入力データと出力データの変数名を確認します– 入力変数【3個】： int enable, int mode, int input ← 全て引数
– 出力変数【2個】： gb_result.data, gb_result.ret_code ← グローバル変数(構造体)■ モジュールテスト用CSV作成機能を使用して 入出力変数名を指定
1. 上部の「テストCSV作成」ボタンを押します2. 「モジュールテスト用CSV」を選択して「OK」を押します【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

55

ガイオ 定期セミナー CM1

実習1-4：func1()テスト用雛形を作成（続き）■ モジュールテスト用雛形作成機能で、テスト関数名・変数名などを作成
1. ファイル名「func1_data」、関数名「func1」を指定 （テストタイトルは任意）
2. 変数INPUT/OUTPUT ツリービューから 変数を選択して登録– INPUTに func1@enable, func1@mode, func1@input (@は引数の意味)– OUTPUTに gb_result.data, gb_result.ret_code
3. 「OK」を押すと、CSVファイルが生成される【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

56

ガイオ 定期セミナー CM1

実習1-5：func1() 生成された雛形を確認■ テスト用CSVファイルは 「テスト設定」/「CSVファイル一覧」に表示されます
1. ウインドウ左の「テスト設定」ボタンを押して画面を切り替えます2. 「CSVファイル一覧」の「func1_data.csv」をダブルクリックしてExcelを立ち上げます■ 生成された雛形の内容を確認します– ※雛形の内容は、エクセル上で編集しないでください →次頁参考情報へ”モジュールテスト用”の意味

テスト対象関数名

テストタイトル（任意）

入力変数名（３個）

入力変数の個数

出力変数の個数

出力変数名（２個）【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

57

ガイオ 定期セミナー CM1（参考）CSVファイルの登録変数を変更する場合■ 「テスト設定」にてCSVファイルを選択し、「CSV雛形編集」ボタンを押す– モジュールテスト用CSV雛形作成 の画面で再設定を行う– 「OK」ボタンで編集内容をCSVファイルに書き込む※テストケースを設定した後であっても、テストケースは保存されます。
【注意】CSVファイルの変数等の雛形部分を、Excelなどで直接編集できますが、正しい変数名やフォーマットである必要があります【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

58

ガイオ 定期セミナー CM1

実習1-5：func1()雛形にテストデータを追加■ テストケースを追加します CSVの１行が１回のテストに相当します
1. ３～７行目のINPUT変数にテストデータを加えます（5回分のテストケース）
2. gb_result構造体のメンバーには「期待値」を入れますが、今回は空欄にしておきます。
3. このCSVファイル「func1_data」を上書き保存します
4. EXCELを閉じます （必ずファイルを閉じて下さい）
ここに入力【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

59

ガイオ 定期セミナー CM1（参考）カバレッジマスターの起動構成■ テスト実行時には、SSTManagerから以下のモジュールが起動– マイコンシミュレータ（ウインドウ名：System Simulator）– 単体テストシミュレータ（ウインドウ名：WinAMS）
SSTManager

System Simulator

起動

xlo テスト対象

オブジェクトコード

com スタートアップ
txt コマンドファイル

入力CSVファイル： TestCsv フォルダ
マイコンシミュレータ

連係動作
終了で戻る

出力CSVファイル（結果）：Out2012-01-22(14’19’41)フォルダ

WinAMS

マイコンシミュレータを終了すると
SSTManagerで結果が閲覧可能

カバレッジレポート（結果）：Out2012-01-22(14’19’41)¥TestCoVerLogフォルダ
・txt または html
マイコンシミュレータを操作して自動テスト【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

60

ガイオ 定期セミナー CM1

実習1-6：func1()テスト実行■ 実行のための設定を追加します1. 「テストCSV一覧」で「func1_data.csv」の実行チェックボックスをＯＮにします2. 「カバレッジ」欄のチェックボックスを下図の様に設定する
3. 「初期設定終了アドレス」を「main」＋「0x0」にします
4. 「その他の設定」のチェックボックスを全てOFFにします

1

2

4
3
【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

61

ガイオ 定期セミナー CM1

実習1-6：func1() トレースモードを使う■ 実行箇所をカーソル表示する「トレースモード」をONにします SystemSimulatorの「トレースモード」をONにした場合：• 実行時間に負荷がかかる（実行が遅くなる）• プロジェクトフォルダに、実行ログファイルが生成される（systemg.log）
 ログファイルは、シミュレータの実行エラーのトラブルシューティングに利用
1. ウィンドウ上部の「シミュレータ起動」ボタンを押します
2. マイコンシミュレータ（ISS）とwinAMSユニットが起動します
3. SystemSimulatorの「ツール」メニューから「オプション」を選択します
4. 下図の通り、トレースオプションを全てONにします【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

62

ガイオ 定期セミナー CM1

実習1-6：func1()テスト実行（続き）■ テストをSystemSimulator（デバッガ）で実行をします
1. winAMSユニットウインドウから「メッセージ」ウインドウを最大化します
2. マイコンシミュレータの「実行」メニューから「実行開始」を選択します

マイコンシミュレータ（ISS）

winAMSユニット【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

63

ガイオ 定期セミナー CM1

実習1-6：func1()テスト実行（続き）■ シミュレータを終了します
1. winAMSユニットのメッセージに「WinAMS：テストが終了しました」が表示されます
2. マイコンシミュレータ（ISS）の「ファイルメニュー」→「終了」を選択します
3. 終了確認ダイアログで「OK」を押します■ 結果CSVファイルを確認します
1. SSTManagerウインドウ左側の「テスト結果」ボタンを押してテスト結果を表示します

2. 「func1_data.csv」をダブルクリックします
3. 結果CSVファイルが開きます※入力CSVとファイル名は同一ですが、別のフォルダに生成されています。

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

64

ガイオ 定期セミナー CM1

実習1-7：func1()単体テスト結果の確認■ テスト結果を確認します– 出力変数「gb_result.data, gb_result.ret_code」に関数実行結果が入ります– 入力ファイルに期待値を設定すれば、この結果と照合して「OK/NG」をレポートします

入力データがそのままコピーされます

実行結果

期待値は設定していないので「チェックしていない」の意味【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

65

ガイオ 定期セミナー CM1

実習1-8：func1()カバレッジの確認■ パスカバレッジ結果を確認します1. 左側の「カバレッジ」ボタンを押します。
2. C0網羅率 「88%」が確認できます。
3. 「func1」をダブルクリックして カバレッジビューを表示します
4. 網羅率100%に不足しているテストケースを確認します
func1_data.csvを選択※必ずEXCELは閉じてから＜不足データ＞●input > 100 のケース
●modeが０～３以外（default）のケース
黄色の行が、テスト未実行の行※白の行(色なし)は、実行するアセンブルコードがない行

カバレッジ換算からは外されます【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

66

ガイオ 定期セミナー CM1

実習1-9：func1()再テスト■ 網羅率を100%にするために テストケースを追加して再テストします1. 「実習1-5」の入力データに下の２つのケースを追加します– 「テスト設定」で「func1_data.csv」を編集– ※前回の実行結果を期待値として設定
カバレッジを100%にする追加データ

期待値を入力※「99」は実行結果が異なる設定【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

67

ガイオ 定期セミナー CM1（参考）自動実行モードへの切り換え■ 実行モードの切り替えが可能– デバッガUIモード： デバッガGUIを使用してマニュアル操作– 自動実行モード： バックグラウンドで実行（操作不要で起動するだけで結果が表示される）
起動設定ビューOFF※常時ON

デバッガUIモード
この２つのオプションをONにすると、自動実行モードにON

注意：□自動テストを行う のオプションは常時ONにする
このオプションは、単体テスト自体のON/OFFを行うもの

UIは表示されず
バックグラウンド実行
自動実行モード【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

68

ガイオ 定期セミナー CM1

実習1-10：自動実行モードでfunc1再テスト■ 自動実行（UIを使用しない）モードで、func1を再テストします1. 「起動設定」ビューの「シミュレーション開始終了」の２つのオプションをONにします• 自動実行モードに切り替わります

2. 「シミュレータ起動ボタン」でテスト実行を再度行います※シミュレータ実行の前に、入力CSVファイルは必ず閉じて下さい。
3. 「実習1-8」のパスカバレッジの網羅率が「100%」になっていることを確認します【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

69

ガイオ 定期セミナー CM1（参考）CSVファイルにコメントを記載する方法■ CSVファイルにテスト項目などのコメントを記述することが可能– #COMMENT の列に「;」（セミコロン）を入れると その行はコメント扱い– テストケースに使用されている再右列の右側に「;」（セミコロン）を入れてコメント記載可能「;」（セミコロン）を入れると その行はコメント扱い

再右列の右側に「;」（セミコロン）
を入れてコメント記載可能【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

70

ガイオ 定期セミナー CM1（参考）：マイコンリセットからの単体テストへの動作■ マイコンシミュレータ(ISS)は 実マイコンと同じ手順で動作する– 各関数を単体で実行するためには、スタートアップルーチンを動作させる必要がある– スタックポインタ設定、グローバル変数初期化などの ｍａｉｎ（）実行前の動作
リセットベクタから実行開始させる処理①スタートアップルーチ
ンを実行※SP設定、初期化など②main()へ移動
単体テストの起点③main()は実行せず、テスト対象関数へ直接ジャンプスタートアップ
ルーチン:::
jmp _main
main(){@resetset reg pc=0x********

通常のマイコンは@resetコマンド
でリセットアドレスがセットされる

実行開始直後に停止する場合は、マニュアルで開始アドレスを設定

通常はmain関数の先頭アドレスでOK

アプリケーション
実行しない

評価対象関数④評価関数実行前にCSVからデータをセット

func1(){:::};スタートアップコマンドファイル

単体テストの起点を設定： 初期設定終了アドレス}⑤CSVファイルに設定されたテストデータをループ実行;スタートアップコマンドファイル

単体実行⑥評価関数実行後にCSVへデータを書き出し

func1 が 終 了 したら、そのまま次の関数へ

評価対象関数評価対象関数評価対象関数
func2()
func2()
func2()
{
{
{
:
:
:
:
:
:
:
:
:
}
}
}

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

71

ガイオ 定期セミナー CM1（参考）：マイコンシミュレータのデバッグ機能■ マイコンシミュレータのソースコードデバッグ機能を活用する– 単体テストで問題が発生した場合、ソースコードデバッグで検出が可能• 自動実行モードを外す：「シミュレーションを自動的に開始」をオフにする• 対象関数にブレークポイントを置く（注意：関数の先頭行にはブレークは設定不可）• ウオッチウインドウに変数をドラッグ＆ドロップで登録可能

自動実行モードを外すとデバッガGUIの使用が可能【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

72

ガイオ 定期セミナー CM1

実習2
ポインタ変数を持つ関数の単体テスト
ポインタの実体をカバレッジマスターの機能で自動割り当て【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

73

ガイオ 定期セミナー CM1

実習2-1：ポインタ変数を持つ関数の単体テスト■ 実習２は サンプルソースを使用して、ポインタ変数を持つ関数へのデータの与え方を学習します。
– サンプルソース（main.c）の func2()を単体テストします。
case 2:*gb_data_out= *data_in * 100;
break;
case 3:if( *data_in > 100 )*gb_data_out= 10000;
else*gb_data_out= *data_in *100;
break;
default:*gb_data_out= -1;}// 実習２） ポインタ変数引数の関数サンプル//
C0カバレッジを100%にする
char *gb_port1 ; // i/oポート入力
int *gb_data_out; // 結果
void func2( int mode, int *data_in ){if( *gb_port1 & 0x00000001 ) // 最下位ビットが１のとき{switch( mode){case 0:*gb_data_out= *data_in ;break;
case 1:*gb_data_out= *data_in * 10;
break;}
else{*gb_data_out= 0;}}【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

74

ガイオ 定期セミナー CM1（参考）ポインタ変数にはアドレスとテストケースが必要■ （例） char *gb_port1;– ①ポインタ変数gb_port1のアドレスを設定する– ②ポインタ変数の指す実体にテストケースを入れる
自習ではこの方法を使用

ポインタの自動割り付け機能を使用する方法①＄マーク → エリア割り当て（シミュレータにポインタを自動割付の機能がある）（参考）ポインタにアドレスを直接指定する方法①ポインタ変数を直接指定②添え字で実体を指定②添え字で実体を指定

ポインタに割り付ける実体の個数を入力※0を入力するとポインタはNULLになる

アドレスを直接入力②テストケースを設定※アドレス値の代わりに
シンボル名を使用可能【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

②テストケースを設定

75

ガイオ 定期セミナー CM1

実習2-2：func2()テスト用CSV雛形を作成■ テスト対象は 関数func2() です ※「実習2-1」のソースコードを参照■ func2()の入力データと出力データの変数名を確認します– 入力変数【3個】： char *gb_port1（グローバル ポインタ変数）,
int mode, int *data_in（引数）– 出力変数【1個】： int *gb_data_out;（グローバル ポインタ変数）■ モジュールテスト用CSV作成機能を使用して 入出力変数名を指定
1. 上部の「テストCSV作成」ボタンを押します2. 「モジュールテスト用CSV」を選択して「OK」を押します【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

76

ガイオ 定期セミナー CM1

実習2-2：func2()テスト用CSV雛形を作成（続）■ モジュールテスト用雛形作成機能で、テスト関数名・変数名などを作成
1. ファイル名「func2_data」、関数名「func2」を指定 （テストタイトルは任意）
2. 変数INPUT/OUTPUT ツリービューから 変数を選択して登録– ポインタ変数は、「エリア割り当て」を選択して、「実体の個数」を指定する変数を作成– ポインタ変数の「実体の値」を指定する変数を作成（例）char *gb_port1の場合
この変数は配列ではなく、１個のchar実体を持つポインタなので【１】エリア割り当てで「$gb_port1」を作成（このCSVではこの変数に、実体の個数を指定）【２】ポインタ添え字設定で0～0の添え字で、１個の実体を指定する
gb_port1[0]【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

$

77

ガイオ 定期セミナー CM1

実習2-2：func2()テスト用CSV雛形を作成（続）■ ポインタ変数は INPUT側に 「エリア割り当て」の変数を作成する– 【注意】 出力変数 *gb_data_out のエリア割り当ては、入力条件なので INPUT側に！

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

78

ガイオ 定期セミナー CM1

実習2-3：func2()雛形にテストデータを追加■ テストケースを追加します
1. $の付いた変数 $gb_port1, $@data_in, $gb_data_out には1を指定します
2. 今回は「期待値」を設定します

期待値$の付いた変数： 実体の個数【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

79

ガイオ 定期セミナー CM1

実習2-3：func2()テスト実行■ 実行のための設定（ポインタ割当てエリア設定）を追加します1. 「CSVファイル一覧」で「func2_data.csv」の左のチェックボックスをONにします2. 「ポインタ割り当てエリア設定」欄の「エリア設定をする」をONにします3. エリアに、「0x60000 ～ 0x6ffff」を指定します– 使用マイコンのメモリマップ上で、未使用の領域をアサインする

メモリマップの例
0x00000000

RAM
P.ROM
RAM

＄で割り当てる領域（今回は0x60000以降）

未使用

0xFFFFFFFF【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

80

ガイオ 定期セミナー CM1

実習2-3：func2()テスト実行（続き）■ テスト実行（シミュレータ起動）します

SSTManager– 自動実行モードで実行され結果が表示されます■ テスト結果（func2_data.csv）の確認を行います– 結果確認方法は、「実習1-6(続き)」 を参照– 結果CSV右側（9列目）がすべて「OK」の判定になります– ポインタのアドレスが解決され、実行できたことが確認できます【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

81

ガイオ 定期セミナー CM1【参考】文字列・数字列のCSVファイル指定■ 文字列データ ： ' ' （シングルクォーテーション）で囲む/*
文字列データ*/char outStr[64];void StringTest( int limit ){outStr[limit] = '¥0';}■ 数値列データ ： ｜ で区切る
– 評価対象の場合は、出力したい数値列の個数分－１の「｜」を期待値欄に入れる&

int ArrayTable[10];void ArrayTest( int index ){int i;if( index>10 ) index=10;
for( i=0; i<index; i++ ){ArrayTable[i] = 0;}}
【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

82

ガイオ 定期セミナー CM1【参考】構造体ポインタのメンバー変数設定■ 構造体ポインタのメンバー変数指定方法
 最初は、構造体ポインタは、ポインタ変数として表示されている
 構造体の実体を作成する必要あり 添え字[0]を指定して実体を作成すると、その下にメンバーが表示される

メンバーが表示される

ポインタ添え字設定で、添え字[0]の構造体の実体を作成【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

83

ガイオ 定期セミナー CM1（参考）：自動実行モードのマイコンシミュレータ■ 自動実行モード時には マイコンシミュレータは表示されない– 自動実行モード時にマイコンシミュレータが停止（ホールト）した際の対処方法• Windowsタスクバーから「L」マークのアイコンを右クリック• 「表示」メニューを選択• 高速モード時のマイコンシミュレータ「Lix」が表示される• ファイルメニューから「終了」を選択すると、SSTManagerへ戻ることが可能【注意】Windows強制終了は使用しない！

自動実行モード時

Windowsタスクバー

マイコンシミュレータ「Lix」「Lix」【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

84

ガイオ 定期セミナー CM1

実習3
スタブ機能を使用してサブ関数を置換
カバレッジマスターのスタブ関数置換機能でサブ関数コールを持つ関数をテスト【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

85

ガイオ 定期セミナー CM1（参考）サブ関数のＳＴＵＢ化について■ 単体テストのフェーズでは 関数を独立させて単体で評価する– 実物のサブ関数を使用すると、結合テストとなってしまう■ テスト対象関数とサブ関数の依存関係を無くすためにSTUBを作成– 下位関数の変更が、上位関数に影響しない様にする– テストの効率化、分業化を促進する
テスト対象関数void func( void ){ret = SubFunc( 10 );}×「置換」実行

カバレッジマスターのSTUB「置換」機能

サブ関数
int SubFunc( int value ){return ○×..;}
STUB関数
int AMSTB_SubFunc( int value ){return ○×..;}【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

86

ガイオ 定期セミナー CM1

実習3-1：スタブ機能でサブ関数を置換■ 実習３は スタブ機能を使用して サブ関数を置換します– サンプルソース（main.c）のfunc3()を使用します// 戻り値を返す関数（スタブする）
int func3_sub_read_io( int index )void func3( int enable, int mode ){int retval;{

if( enable ){// スタブを作成して 戻り値を自由に設定する
retval = func3_sub_read_io( mode );// 戻り値がdata_tableに依存して複雑
if( data_table[index]>0x7f ){return data_table[index];}
else{
return -data_table[index];}}

スタブ関数を作成

int AMSTB_func3_sub_read_io( int index )
}
else
{

{
static int ret;
return ret;}

この変数にCSVからデータ（戻り値）を指定できる様に
する

}

}

// 戻り値を使って分岐
switch( retval ){case 0:gb_result.data = 0;
break;
case 1:gb_result.data = 50;
break;
case 2:gb_result.data = 100;
break;
default:
gb_result.data = -1;}
gb_result.ret_code = TRUE;

gb_result.data = 0;
gb_result.ret_code = FALSE;【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

87

ガイオ 定期セミナー CM1

実習3-2: スタブの指定と作成■ スタブ設定で func3_sub_read_io()をスタブします
この関数のスタブ関数を作成して、呼び出し時に入れ替えて実行するように設定します
1. 「スタブ設定」のボタンを押します
2. func3_sub_read_io を選択して 「スタブ生成」を押します– スケルトンのスタブ関数「AMSTB_func3_sub_read_io」が作成されます– この関数は別ファイル（AMSTB_SrcFile.c）に作成されます【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

88ガイオ 定期セミナー CM1

実習3-3: スタブの指定と作成（続）■ スタブ関数を作成します
1. 作成された AMSTB_func3_sub_read_io()に、以下のコードを追加します。
– 関数内スタティック変数 「ret」 を、そのままリターン
2. ファイル（AMSTB_SrcFile.c）を保存します【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

89

ガイオ 定期セミナー CM1

実習3-4: スタブの指定と作成（続）■ スタブ関数のソースファイルをコンパイル＆リンクします
1. ガイオ開発環境「フレームワーク」を起動します– P.44を参照 「SAMP1.gxp」を開きます
2. ファイル管理ビューの「ソースファイル」を右クリックして「プロジェクトへファイルを登録」を選択します
3. 「AMSTB_SrcFile.c」を登録します
4. 「ビルドメニュー」から「ビルド」を選択してビルドします– 評価オブジェクトに 作成したスタブ部分がリンクされます※上は、ガイオ・テクノロジーのコンパイラを使用している場合です。
実行オブジェクトのコンパイル＆リンクの方法は、皆様がお使いの開発環境に依存します。
【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

90

ガイオ 定期セミナー CM1

実習3-5: func3テストCSVの雛形を作成■ func3()の入出力条件を確認します– 入力変数： 引数 int enable, int mode
• STUBの戻り値を設定する変数を入力変数に追加– 関数内スタティック ret– 出力（評価）変数• グローバル変数 gb_result.data, gb_result.ret_code【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

91

ガイオ 定期セミナー CM1

実習3-6: func3テストデータを入力■ C0を100%にするテストデータを設定します– @modeはSTUBでは使われないが、適当な値を設定する必要有り– ret には、戻り値を設定• switch文の条件を全て網羅する値を設定（参考）
テストで使用されない変数（分岐パスにより処理に係わらない変数）には、テスト仕様書で予め決めた値を設定（111など） ←データのレビュー工数を削減【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

92

ガイオ 定期セミナー CM1

実習3-7: スタブの指定、テスト実行■ スタブ関数に置換したい サブ関数のスイッチを設定します
1. func3_sub_read_io の行の置換ボックスをチェックします– これで、func3_sub_read_io()が呼ばれると、AMSTB_func3_sub_read_io()に自動的に置換されて実行されます※ テスト対象関数のコードを変更する必要はありません
2. テスト実行します。 実行方法は「実習1-6」を参照。

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

93ガイオ 定期セミナー CM1

実習3-8: スタブの指定、テスト実行（続）■ 実行結果を確認します
1. テスト結果の「func3_data.csv」を確認します

2. カバレッジビューで、スタブ関数が実行されていることを確認します。

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

94

ガイオ 定期セミナー CM1（参考）スタブ関数自動生成機能について■ 「入出力付スタブ生成」のボタンでスタブ関数を自動生成– スタブに自動実装される機能• 戻り値がある場合に、戻り値をCSVファイルで指定する機能• 渡された引数をCSVファイルのOUTPUTに出力する機能

変数：AMIN_return→CSVのINPUTに登録
変数：AMOUT_index→CSVのOUTPUTに登録自動生成される
スタブ関数

引数を結果CSVに出力
CSVの値を戻り値に返す【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

95

ガイオ 定期セミナー CM1（参考）CSV別スタブ 設定■ スタブ設定ビューの「置換」スイッチを使用せず、CSV毎にスタブ関数の置換状態を設定する方法– スタブ設定ビューの「置換」スイッチは、プロジェクト全体に有効なスイッチ「置換」OFF②置換したいサブ関数を登録①スタブ生成ボタン※CasePlayer2連携時
のみ有効③CSVファイルに登録される【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

96

ガイオ 定期セミナー CM1

プログラム解析ツール
CasePlayer2との連携機能(実習４の前に)【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

97

ガイオ 定期セミナー CM1

CasePlayer2との連携による拡張機能■ カバレッジ計測機能の拡張– C1カバレッジ計測（実コード実行による計測） ※C1計測にはCasePlayer2が必要– MC/DCカバレッジ計測（埋め込みコードによる計測）■ テストデータ設計機能の効率化– テスト対象関数の入出力変数を自動抽出– C1、MC/DC構造カバレッジ計測用 テストケース自動生成■ C++コード単体テストへの対応
評価関数

関数の構造を解析

データ自動作成など
データ
読み込み

解析

変数解析結果ファイル
ソースコード

各種チャート連携
変数ブラウジング
フローチャート作成
ソース解析ツール
CasePlayer2

カバレッジマスターwinAMS
テスト実行ツール「SSTManager」【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

98

ガイオ 定期セミナー CM1

対象関数の入出力変数の自動抽出機能
（標準機能）※ CasePlayer2との連携機能【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

99

ガイオ 定期セミナー CM1

対象関数の入出力変数の自動抽出機能■ 評価対象の関数が使用（参照/代入）している外部変数を自動抽出– 入力条件となる変数（引数、外部変数）を自動検索し コード解析工数を省力化
関数が参照している
外部変数（単体テストの入力変数）
関数が書き換えている
外部変数（単体テストの評価変数）

関数の引数リスト（単体テストの入力変数）※注意事項：
表示される変数はソースコードを解析した情報 → 仕様と一致しているかは確認の必要がある

入出力変数リスト
評価対象の関数を指定すると自動表示されるリストアップされた変数から評価に必要な変数をユーザーが選択・指定【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

100

ガイオ 定期セミナー CM1

C1/MCDC 計測用テストケース
自動生成機能
（標準機能）※ CasePlayer2との連携機能【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

101

ガイオ 定期セミナー CM1

C1カバレッジデータを自動生成■ 静的解析により各条件文の論理を成立させるテストデータを自動生成– 関数内の条件文を自動表示、 各条件文のTRUE/FALSEケースを自動生成// C1説明用サンプル
int gb_a, gb_b, gb_c, gb_d, gb_out;
char gb_unused1, gb_unused12;

C1カバレッジ モードでの 条件文解析結果

int func_c1_01( int code ){int return_value=FALSE;}

if( gb_a > 10 ){if( gb_b > 20 && gb_c > 30 ){gb_out = 0;}
else{
gb_out = -1;}
return_value = FALSE;}
else{
switch( code ){case 1:
gb_out = 1;
break;
case 2:gb_out = 2;
break;
case 3:gb_out = 3;
break;
default:
gb_out = -1;
break;}
return_value = FALSE;}
return return_value;

各々の条件文の TRUE/FALSE の各ケースを満たすために必要な変数を自動設定する【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

102

ガイオ 定期セミナー CM1

C1を満たすデータの組合せを自動生成■ 条件文のネスト構造を解析して 全てのパスを通るテストケースを生成– 各条件文（if,switchなど）に対して生成したデータの組み合わせを自動生成– 同じ分岐経路を通るデータ、同じ分岐条件は、重複生成しない– 必要最小限のデータ組み合わせを生成

C1のカバレッジを満たす入力データを自動生成

ここは期待値

実行結果の評価は、関数の詳細仕様を基に必ず行わなければならない↓
必ず発生する工数【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

103

ガイオ 定期セミナー CM1

生成したデータが評価する条件式をコメント表示■ CSVファイルに 生成したデータに対応する条件式と論理を表示可能– 生成されたテストベクターが 何を評価しているのかを明示【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

104

ガイオ 定期セミナー CM1

MC/DCカバレッジデータを自動生成■ MC/DCデータ作成のために 複合条件文に含まれる条件式を解析– 条件文をリストアップして、各条件文のTRUE/FALSEケースを自動生成
MCDCカバレッジ モードでの 複合条件文解析結果// MCDC説明用サンプル

int func_mcdc_01( int x, int y, int z ){//if( ( x>10 && y>20 ) || z>30 )
{
(1)
(2)
(3)
return TRUE;}
else{
return FALSE;}
return FALSE;}

各々の条件文の TRUE/FALSE の各ケースを満たすために必要な変数を自動設定する【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

105

ガイオ 定期セミナー CM1

MC/DC指針のデータを自動抽出■ 複合条件を解析して MC/DCカバレッジを満たす入力データを自動生成– MC/DCの指針に従い、全条件組み合わせ（All-Pair）からMC/DCデータを自動抽出
複合条件例

MCDCのカバレッジを満たす入力データを自動生成

if( ( x>10 && y>20 ) || z>30 )
(1)
(2)
(3)
＜MCDCのデータ抽出指針＞
他の条件式の真偽を固定して、１つの条件式の真偽を変化させたとき、全体の条件に変化があるものだけを実行する
条件式のTRUE/FALSEの全組み合わせから MCDCデータを抽出

条件式 (1)

F

F

F

F

T

T

T

T

条件式 (2)

F

F

T

T

F

F

T

T

条件式 (3)

F

T

F

T

F

T

F

T

If 全体論理

F

T

F

T

F

T

T

T

(3)

(3)
(1)

(2)
(1)(2)(2)【開示及び用途制限資料 ガイオ・テクノロジー株式会社】(1)

Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

(3)

106

ガイオ 定期セミナー CM1

MC/DC生成データが評価する論理条件を表示■ CSVファイルに 生成したデータと 対応する論理条件を表示– 生成されたテストベクターが 何を評価しているのかを明示【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

107

ガイオ 定期セミナー CM1

生成データの編集も自由に可能■ 解析情報より自動生成されるデータの追加削除も自由に可能– テスト指針に従って、境界値近傍のデータ、特異点データなどを追加– 自動生成するデータの属性（種類）も設定可能生成されるデータを編集可能

自動生成するデータのデフォルトでの種類（属性）も選択可能【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

108

ガイオ 定期セミナー CM1

C0/C1カバレッジ、入出力結果表示■ C0/C1カバレッジビュー– カバレッジ結果とテストデータを表示– 期待値と異なるデータセルを表示• 100?(200)→期待値が200だが結果は100– C0を満たさない未実行行を表示– C1を満たさない条件を明示– ★各行を通過するデータを解析しで表示• 未実行行のデータを追加する際の解析に非常に役立つ機能【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

109

ガイオ 定期セミナー CM1

ソース解析に役立つチャートリンク機能■ CasePlayer2が生成した各種チャート、変数参照リストへリンク– 面倒な設定やソースコードの修正追加なしで 簡単にチャートを生成– 入出力データ作成時のロジック解析、パス解析を効率化

CasePlayer2のソースコード表示

カバレッジマスターの変数設定画面

リンク

CasePlayer2のフローチャート表示【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

110

ガイオ 定期セミナー CM1

フローチャート連動■ フローチャートC0・C1カバレッジ表示– テスト実行パスをフローチャート上に表示して、ビジュアルに判断可能【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

111

ガイオ 定期セミナー CM1

実習４
CasePlayer2と連携した
C0/C1カバレッジ
テストデータ作成機能を使う【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

112

ガイオ 定期セミナー CM1

実習4-1：評価対象ソースを確認■ 実習４は CasePlayer2との連携で C0/C1カバレッジを満たす
テストデータを自動作成します– グローバル変数には未使用の物も含まれる（自動検索機能で使用中の変数を見つけ出す）
int gb_input;
int gb_output;
int gb_valA;
int gb_valB;
int gb_valC;
int gb_valD;
int gb_a, gb_b, gb_c, gb_d, gb_out;
char gb_unused1, gb_unused2;

case 2:gb_out = 2;
break;
case 3:gb_out = 3;
break;
default:
gb_out = -1;
break;

int func4( int code ){}int return_value=FALSE;
return_value = FALSE;
int i;}
if( gb_a > 10 ){// 下の条件式は、上の演算結果（gb_out）を使って比較
if( gb_b > 20 && gb_c > 30 )// しているので、動的に決まる境界値は静的解析できない{
gb_out = 0;if( gb_d == gb_out )}{else
gb_out = 4;{}
gb_out = -1;
else}{
return_value = FALSE;
gb_out = 5;
}
}
else
{
return return_value;
switch( code )}{case 1:
gb_out = 1;
break;【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

113

ガイオ 定期セミナー CM1

実習4-2：プロジェクト作成/言語選択■ CasePlayer2を起動し、プロジェクトを新規作成します
同時にC言語の種類を選択します
1. 「スタート」メニュー → 「CasePlayer2」→ 「caseviwer.exe」 を起動する

2. 「ファイル」メニュー → 「新規作成」→ 「プロジェクト」 を選択する
3. 「プロジェクト名」、「場所」を設定します
1. プロジェクト名：CP2
2. 場所：c:¥winAMS_CM1
4. 言語設定を選択します
他のオプションはそのまま
1. ANSI-C

で構いません(仕様書作成機能のオプ
ションのため、今回は使用しません)【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

114

ガイオ 定期セミナー CM1

実習4-3：ターゲットCPU及びコンパイラ固有の設定■ 解析するソースに含まれる方言に対応するための設定を行う
1. 「ターゲットCPU及びコンパイラ固有の設定」のボタンを押す
2. 使用しているマイコンの種別と、コンパイラを選択する
 クロスコンパイラ特有の記述（方言）に対応するための機能「Cオプションパラメータ」が自動設定される
 「Cオプションパラメータ」は、プロジェクト作成後、［設定］→［Cオプションパラメータ］で確認/変更/追加 可能

コンパイラの方言に対応する
ための、後述のCオプションパ
ラメータが自動設定される【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

115

ガイオ 定期セミナー CM1

実習4-4：プロジェクトに解析対象ソースを登録■ 解析対象のソースコード（main.c）をプロジェクトに登録します
1. 「OK」を押して、プロジェクトの新規作成ダイアログを閉じます。
CaseViewerが起動します。
2. CaseViewer のツリーのプロジェクト名「cp2」を右クリックします
3. 「ソースファイルの登録」 → 「ファイルから」 を選択します4. 「main.c」を選択します• C:¥winAMS_CM1¥target¥main.c
5. 「開く」を押して、main.cを登録します– CasePlayer2プロジェクトへソースが登録されます【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

116

ガイオ 定期セミナー CM1

実習4-5：カバレッジマスター連携の設定■ カバレッジマスターと連携するための必須オプションをONにします1. 「設定」タブの「仕様書生成」をダブルクリックします。
2. 以下のオプションをONにします。
– 詳細解析を行う– #define一覧（ブラウザ情報）を生成する– winAMS用プログラム解析情報を生成する※他のオプションは仕様書生成のオプションです3. 「OK」で閉じます。
– これで、CasePlayer2からカバレッジマスター向けの解析データが出力されるように設定されます【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

117

ガイオ 定期セミナー CM1

実習4-6：プリプロセッサ/Cオプションパラメータ設定■ CasePlayer2でソースを正しく解析するための設定– プリプロセッサ– 開発環境、コンパイラに設定しているものと同じにする［ヘッダファイルの検索パスの設定］• システムインクルードパス• ユーザーインクルードパス［#ifdefなどの切換指定をコンパイラに与えている場合］• #define値– Cオプションパラメータ– クロスコンパイラ特有の記述（方言）を正しく解析するための設定– プロジェクト作成時に「ターゲットCPU及びコンパイラ
固有の設定」で自動設定可能– 新規の解析設定（新規方言）を追加可能（参考）FAQに掲載：
http://www.gaio.co.jp/support/user/faq/winams/faq_D01_01.html【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

118

ガイオ 定期セミナー CM1

実習4-7：解析を実行■ 仕様書作成＆静的解析を実行します。
1. 「プロジェクト」メニューの「仕様書を生成」
を選択します。
2. 例えば、評価対象の関数func4()のフローチャートを表示してみます。
– 「仕様書」フォルダの「フローチャート」
を選択します。
– 「仕様書ファイル名」のリストから
func4.vchtをダブルクリックします。
これにより、静的解析結果がCP2.vproj ファイルに生成されますファイルパス： C:¥winAMS_CM1¥CP2Project【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

119ガイオ 定期セミナー CM1

実習4-8：CasePlayer2との連携を設定■ カバレッジマスターにCasePlayer2を連携するための設定をします
1. SSTManagerの「ファイル」メニューの、「プロジェクトの基本設定を変更」を選択します。
2. 表示されるダイアログで、CasePlayer2のプロジェクトファイルを設定しますC:¥winAMS_CM1¥CP2¥CP2.vproj
3. 「OK」を押して閉じます。
– これで、CasePlayer2での静的解析の結果が、カバレッジマスターで利用できる状態になります。

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

120

ガイオ 定期セミナー CM1

実習4-9：テストデータ作成■ 入出力変数自動検索機能を使って 変数を選択する
1. SSTManagerの「テストCSV作成」ボタン押して、「モジュールテスト用CSV」を選択する。
2. テストタイトル、ファイル名（func4_data）、関数名（func4）を設定する。
– 「入力変数」、「出力変数」のフォルダに、func4()が参照/代入するグローバル変数が自動的にリストアップされる。（←静的解析結果が参照されている）
3. 下図のように、INPUT/OUTPUTの変数を選択する

func4()が参照している
グローバル変数

func4()が書き換えている（代入している）
グローバル変数【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

121

ガイオ 定期セミナー CM1

実習4-10:テストデータ作成(続)■ 入力変数データ作成のモード– 「C1データ作成」モード： C1カバレッジ入力データ作成のためのモード• CasePlayer2解析情報により、C1を満たす最小限のデータを自動生成する• 各条件式ごとに、関連する変数の真偽を満たすデータを自動生成• 最小限のデータで、C1カバレッジを満たすことができる– 「MCDCデータ作成」モード： MCDCカバレッジ入力データ作成のためのモード• 上と同様にして、MCDCに準拠したデータを生成– 「マニュアル作成」モード： データカバレッジのためのデータを生成するモード• CasePlayer2解析情報を使用しない• 各変数に与えるデータは手動設定• データの組み合わせは「デシジョンテーブル」の手法により設定した「基本値」により、組み合わせが作成される– 「１行データ作成」モード： CSVの１行文のデータを作成するモード• 各変数には１つの値を設定可能• 組み合わせを考えず、単に１つのテストデータを作る機能※各モードは併用可能 ←各モードで作成したデータを１つのCSVファイルに追記可能【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

122

ガイオ 定期セミナー CM1

実習4-11：テストデータ作成エディタを起動■ ATDEditorを起動します1. テスト設定ビューで「func4_data.csv」を選択します
2. 右にある「データ入力」ボタンを押します
3. ATDEditorが起動します■ 「テストベクタ編集」のウインドウを表示します※表示されない場合は、「表示」メニューで選択
1. 右上のプルダウンから「C1データ作成」を選択します【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

123

ガイオ 定期セミナー CM1

実習4-12：生成されたテストベクタを確認■ 「条件毎」モード： func4()に含まれる条件文を確認する– 「編集」欄に、◎が付いている条件式は、解析によりデータを自動生成できたことを示す– 各条件式毎に、TRUE/FALSE になるデータを設定する– 最後の条件式「if(gb_d == gb_out)」は、自動生成ができなかったことを示している

自動生成ができなかったことを示している【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

124ガイオ 定期セミナー CM1

実習4-13：解析範囲外の条件を手動設定■ CasePlayer2で解析できない条件文のデータを自分で設定する
1. 条件文（gb_d==gb_out）の部分は「◎」が付かず、解析できないことを示している
2. 関連する変数（gb_d）にテストベクタを設定する– gb_dに「１」を設定しておけば、TRUE/FALSEの両方（C1カバレッジ）が満たせる

①条件式を
選択

③追加を押す②gb_dを選択④データに「1」を追加
⑤「1」をチェック【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

125

ガイオ 定期セミナー CM1

実習4-14：CSVデータファイルを自動生成■ C0/C1カバレッジを満たす最小限のテストベクタを自動生成
1. 「編集」メニュー →「設定して組み合わせ出力」を実行
2. 「組み合わせデータ出力」のダイアログで「OK」を押す。
－ 全てのチェックボックスをOFFにする

全てのチェック
ボックスをOFF【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

126

ガイオ 定期セミナー CM1

実習4-15：生成データでテスト実行■ CSVデータをファイルに保存してテスト実行する
1. 「CSVデータ編集」ウインドウを選択して、「ファイル」メニュー →「上書き保存」を選択
2. 「ファイル」メニュー →「アプリケーション終了」を選択• 「*.cviv」ファイル（作業状態データ）の保存を求められたら、保存しておく• Func4_data.csvが保存される
４.SSTManagerの「テスト設定」で、「func4_data.csv」のチェックボックスをONにする
5.「C1カバレッジ出力」をONに」する
6.「シミュレータ起動」で、テスト実行する。

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

127

ガイオ 定期セミナー CM1

実習4-16：入出力テスト結果を確認する■ 入出力テスト結果を確認
1. 「テスト結果」で、「func4_data.csv」をダブルクリックする－出力結果が確認できる【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

128

ガイオ 定期セミナー CM1

実習4-17：カバレッジ結果を確認する■ C0/C1カバレッジを確認する
1. 「カバレッジ」を押して、C0/C1が100%であることを確認する【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

129

ガイオ 定期セミナー CM1

実習4-18：100%にならないケースを試す■ カバレッジが100%にならないケースを確認してみる
1. 「テスト設定」で「func4_data.csv」をダブルクリックする
2. エクセルを操作し、1つ目のデータの#COMENT列に ;（セミコロン）を入れてマスクする
3. 「ファイル」メニュー →「上書き保存」を実行
4. テストを再実行する【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

130

ガイオ 定期セミナー CM1

実習4-19：C0/C1カバレッジを確認■ Func4_data.csvのカバレッジを確認

T（True）の論理が実行されていないことを示している

未実行行【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

131

ガイオ 定期セミナー CM1

テスト作業をより効率化する「加速オプション」（オプション機能）※ CasePlayer2との連携機能【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

132

ガイオ 定期セミナー CM1

加速オプションとは■ 構造カバレッジ（C1、MC/DC）計測を完全自動化するオプション− 関数を選択するだけで、テスト設計からカバレッジ結果出力までを自動化− ソースコードの静的解析により テストケースを生成＜自動化される工程＞• 関数入出力変数の自動設定 （テストCSV雛形自動作成）• C1、MC/DCテストデータ自動生成
関数を選ぶだけで• 単体テストの自動実行 （入出力テスト、カバレッジ計測）
直ぐに構造カバレッジ
結果が見られます！

＜自動化される工程＞
テスト対象
関数を選択

関数入出力変数の自動設定

C1、MC/DCテストデータ
自動生成

単体テストの自動実行と結果出力【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

133

ガイオ 定期セミナー CM1

加速オプションの利用手順■ テスト自動化の設定•••

自動抽出された入力変数に対する初期値生成するカバレッジデータの選択（C1 or MC/DC）
スタブ関数の使用切り替え（使用/不使用）■ テスト対象関数の選択•リストから対象関数を選択（Ctrlキーで複数選択可能）■ テスト自動化オプションの選択•

どの工程までを自動で行うかを選択可能【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

134

ガイオ 定期セミナー CM1（参考）加速オプション利用時の注意点■ 必要な準備： スタブ関数の事前作成− 関数のテストに必要なスタブ関数は、事前に作成しておく必要があります。
• スタブ関数の雛形作成• スタブ関数へのコード追加、編集• スタブ関数の追加ビルド＆リンク■ カバレッジ未達の場合のテストデータ追加編集− 自動実行結果でカバレッジ未達の場合は、出力されたテストデータを調整し、再テスト（従来の手動操作）を行う必要があります
スタブ関数
選択・作成

スタブ関数
編集

テストデータ追加編集

スタブ関数
追加ビルド

スタブ付き

オブジェクト

SSTManager
スタブ設定ビュー

ご利用の開発環境 またはSSTManager内蔵簡易エディタ

ご利用の開発環境【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

135

ガイオ 定期セミナー CM1

MC/DCカバレッジ測定機能（オプション機能）※ CasePlayer2との連携機能【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

136

ガイオ 定期セミナー CM1

MC/DCは条件式の個別評価を求められる■ MC/DCは 複合条件式に含まれる各条件式の個別評価を要求する
 複合条件式の中から１つの条件式に着目
 着目した条件式の論理のみを変化で、分岐の論理が変化するテストを行う
例： ( X and Y ) or Z : 条件式Xに着目した場合• Y,Zは変化させず、XのみをTRUE/FALSEに変化させた場合に分岐の論理が変化するテスト行う•（X, Y, Z） → （FALSE, TRUE, FALSE） と （TRUE, TRUE, FALSE）
FALSE

TRUE

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

137

ガイオ 定期セミナー CM1

MC/DC計測のためにはコード挿入が必須
 実コードそのままの状態では各条件式の動作論理を取得できない– 原理的に、複合条件に含まれる各条件式を個別に評価すること（TRUE/FALSEどちらの論理で実行されたかを知ること）はできない MC/DC計測用のフックコードを挿入した「埋め込みコード」で計測– 条件式をフック関数に引数として送り、フック関数側で実行論理をツールに出力する– 埋め込みコードは、CasePlayer2により、評価対象の関数から自動生成される

if( ( x>10 && y>20 ) || z>30 )←元の複合条件式

フックコードを挿入

if(Hook(Hook(x>10) && Hook(y>20) ) || Hook(z>30) )↑各条件式の論理をHook()関数に引数で送る
Hook()に渡された引数値から実行された論理を知ることができる【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

138

ガイオ 定期セミナー CM1

MC/DCカバレッジ測定機能：テスト品質を維持■ カバレッジマスターwinAMSは、
実コードによるテスト品質を維持したまま MC/DC計測が可能なツール
カバレッジマスターが実コードに忠実な
単体テストが可能な仕組み■ テスト実行結果（出力）は「実コード」実行結果から取得•

出力結果は ソースに手を加えない「実コード」から取得（従来の標準機能と同じ）■ カバレッジ結果はフックコードを挿入した「埋め込みコード」から取得•

論理的なカバレッジのみ、計測用フックコードを使って計測■ 「実コード」出力値と「埋め込みコード」出力値が一致することを確認••

MC/DC条件解析コードを追加しても、関数出力値に相違が無いことを確認
相違が無いことを持って MC/DCカバレッジ結果の確からしさを検証【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

139

ガイオ 定期セミナー CM1

MC/DCカバレッジ測定機能：テスト品質を維持（続）■ 「実コード」と「埋め込みコード」の両方のオブジェクトを同時実行– MCDC計測には、複合条件式を分解する解析コードを自動挿入し実行– 関数出力値、期待値評価には、製品実装と同じ「実コード」から取得
実コードビルド

MAIN
実行

評価対象の
ソースコードカバレッジ計測専用 ビルド

クロスコンパイラ
0110

製品実装時と同じ
最適化オプション
を使用可能

0010

SUB
実行

WinAMS_SPMC_C0();if((WinAMS_SPMC_C1("func_
mcdc_01",3),WinAMS_SPMC_Clr(),….

if( ( x>10 && y>20 ) || z>30 )製品と同じ
コンパイル条件

MC/DC計測用
コードを追加した
ソースコードカバレッジ計測
コード自動挿入CasePlayer2が実行

クロスコンパイラ
0110

製品搭載
実機コード

0010

カバレッジ取得のための実行コード

カバレッジマスター
winAMS
単体テスト実行カバレッジマスター
winAMS
単体テスト実行入力テストデータ

MC/DC計測用コードを正しく実行するために、最適化をOFFにすることを推奨【C0、C1カバレッジについて】
埋め込みコードを適用時：
C1カバレッジは、デフォルトで埋め込みコードから取得

一致する
ことを確認

出力値取得

最適化OFFでコンパイル

MC/DC取得コードからの出力値

MC/DC、C1、（C0)カバレッジ取得【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

C0カバレッジは、実コードから/埋め込みコードから 取得 を選
択可能

140

ガイオ 定期セミナー CM1

MC/DCカバレッジ測定機能：解析コード挿入イメージ■ 各条件式を「フック関数」に送るコードに変更 （コード挿入イメージ）
MC/DCカバレッジ 評価を行う 対象関数
int func_mcdc_01( int x, int y, int z ){if( ( x>10 && y>20 ) || z>30 ){return TRUE;
}
else
{
}
return FALSE;}

カバレッジ計測のために自動生成された フック関数挿入後の関数

コード挿入#line 252
int func_mcdc_01( int x, int y, int z ){if((WinAMS_SPMC_C1("func_mcdc_01",3),WinAMS_SPMC_Clr(3),WinAMS_SPM
C_Res("func_mcdc_01",1,( (WinAMS_SPMC_Exp(0,( x>10))&&WinAMS_SPMC_Exp(1,( y>20)) )||WinAMS_SPMC_Exp(2,( z>30))),3,3)) ){WinAMS_SPMC_C1("func_mcdc_01",4);return 1;}
else{#line 261
} WinAMS_SPMC_C1("func_mcdc_01",7);
return 0;}フック関数 （この関数が生成する情報をカバレッジマスターが読み取る）
BOOL WinAMS_SPMC_C1(WinAMS_SPMC_TFUNCNAME funcname,U4 blkID){#if defined(WinAMS_SPMC_DI) && defined(WinAMS_SPMC_EI)WinAMS_SPMC_DI();#endifif (WinAMS_SPMC_Lock == 0) {WinAMS_SPMC_Lock = 1;
#ifdef WinAMS_SPMC_CVT_FUNCNAME
WinAMS_SPMC_funcname = WinAMS_SPMC_CVT_FUNCNAME(funcname);#else
WinAMS_SPMC_funcname = funcname;::

BOOL WinAMS_SPMC_Exp(U2 expID,BOOL exp){
#if defined(WinAMS_SPMC_DI) &&defined(WinAMS_SPMC_EI)WinAMS_SPMC_DI();#endifif (WinAMS_SPMC_Lock == 0) {U2 nest;
WinAMS_SPMC_Lock = 1;
nest = WinAMS_SPMC_nest-1;
if (expID < WINAMS_SPMC_MCDC_MAXCONDCNT &&nest < WINAMS_SPMC_MCDC_MAXCONDNEST) {U1 amsbit = exp ? 0x3 : 0x2;

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

141

ガイオ 定期セミナー CM1

C0、C1、MC/DCカバレッジ計測結果表示
C0、C1カバレッジ （実機コードから取得）
MCDCカバレッジ結果 （フックコード付きから取得）

C1カバレッジ（実行分岐数）表示
切替

switch文のcase3が実行されていない→C1カバレッジNG

C0カバレッジ（各行の実行回数）

MCDCカバレッジ（t=TRUE f=FALSE）※最後の'gb_c>30' の条件文のFALSE
ケースが実行されていないことを示す
実行回数が0→C0カバレッジがNG【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

142

ガイオ 定期セミナー CM1※CM1 追加実習
MC/DCカバレッジ計測機能
環境作成
この実習は通常のセミナーには含まれません【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

143

ガイオ 定期セミナー CM1

MC/DC計測①: 環境作成 概要■ MC/DC計測のための埋め込みコード実行環境作成の流れ– 「埋め込みコード」を生成するためのビルド環境を、もう１つ作成する
1. CasePlayer2の機能を使用して、「実コード」開発環境をフォルダごと複製する。
2. 複製された開発環境のソースコードに、CasePlayer2がフックコードを埋め込む。
• CasePlayer2「MC/DC測定用コード生成」オプションがONであることを確認
3. CasePlayer2により生成されるフック関数の本体を含むソースファイルを開発環境に加える
4. 複製した環境でビルドし、実行可能なMC/DC計測用オブジェクトコードを作成する。

CasePlayer2②フックコード
埋め込み③フック関数の本体を開発環境へ追加①複製を作成「実コード」
ビルド環境

MC/DC計測専用
ビルド環境

c:¥winAMS_CM1¥target

計測用フック関数（winAMS_Spmc.c）c:¥winAMS_CM1¥mcdc¥target【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

144

ガイオ 定期セミナー CM1

MC/DC計測②: 埋め込みコードのフォルダを指定■ 埋め込みコードを実行するための環境を作成します
1. 「起動設定」ビューの「カバレッジ測定用オブジェクトビルド環境生成」ボタンを押します
2. 「カバレッジ測定用オブジェクトビルド環境フォルダの選択」ツリーで、「C:¥winAMS_CM1」の下に、新規作成ボタンで「mcdc」フォルダを作成します。
3. 「C:¥winAMS_CM1¥target」と、mcdcフォルダをクリックして、「登録」ボタンを押します。
4. 「環境コピー」ボタンを押すと、mcdcフォルダの中に、targetフォルダのコピーが作成されます。

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

145

ガイオ 定期セミナー CM1

MC/DC計測③: 埋め込みコードの種類を設定■ 埋め込みを行うカバレッジの種類を確認します
1. CasePlayer2の「プロジェクト」メニューから「カバレッジ測定用オブジェクトビルド環境生成」を選択します2. ダイアログの「埋め込みコードの設定」タブを選択します。
3. 「MC/DC測定用コードを生成」のオプションがONになっていることを確認します。

■ （参考）C0、C1カバレッジも「埋め込みコード」から取得する
 コンパイラの最適化による影響でC0、C1カバレッジが不完全となる場合に適用
 埋め込みコード適用時は、C1カバレッジはデフォルトで有効
C0カバレッジのみ埋め込みコード適用の有無を切り替え可能 MC/DCオプションがない場合でも使用可能【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

146

ガイオ 定期セミナー CM1

MC/DC計測④: 埋め込みを実行■ 複製したフォルダのソースファイルに フックコードを埋め込みます
1. CasePlayer2の「プロジェクト」メニューから「全仕様書生成」を選択します。
– 埋め込みコードが生成され、複製された環境のソースに書き込まれます– 計測用フック関数のファイルが、複製されたtargetフォルダに生成されます「全仕様書生成」
実行後
main.cに書き込まれた
埋め込みコード
計測用フック関数のファイル【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

147

ガイオ 定期セミナー CM1

MC/DC計測⑤: フック関数ソースを追加ビルド■ 計測用フック関数を開発環境（IDE）に追加してビルドします
1. 複製したtargetフォルダ内の「SAMP1.gxp」をダブルクリックして、フレームワークを起動します– C:¥winAMS_CM1¥mcdc¥target¥SAMP1.gxp– ※運用時には、ご利用中の開発環境（HEW、Softune、PM＋など）を利用
2. ツリーの「ソースファイル」を右クリックして、「プロジェクトへファイルを登録」を選択し、計測用フック関数のファイル「winAMS_Spmc.c」をプロジェクトへ追加します3. 「ビルド」メニューから「リビルド」を実行します【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

148

ガイオ 定期セミナー CM1（参考）スタブ関数ソースファイルの保存場所■ スタブ関数ソースは 通常、開発プロジェクトとは別管理されている
スタブ関数ソースは 単体テストのプロジェクトに管理される場合が多い– （１）開発環境、ソースコードの複製時にスタブ関数ソースは複製されない– （２）埋め込みコードのコンパイル環境にスタブ関数ソースを再設定する必要がある
元のコンパイル環境

埋め込みコードのコンパイル環境

複製
PJ

PJ

targetmdcd¥target
ビルド環境
から参照

（１）
パスが変わるため複製されたビルド環境からスタブ関数ソースが参照できない（２）
再設定
スタブ関数ソース?

UnitTest
単体テスト環境【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

149

ガイオ 定期セミナー CM1

MC/DC計測⑥: カバレッジ測定コードを指定■ 作成したMC/DC計測用オブジェクトをSSTManagerに登録します
1. SSTManagerの「カバレッジ測定コード設定」ボタンを押します
2. オブジェクトファイルの項目に、複製した埋め込みコードのフォルダに生成されたオブジェ
クトコードを指定します。 ※元のターゲット環境と間違えないようにして下さい！
– C:¥winAMS_CM1¥mcdc¥target¥obj¥SAMP1.xlo
3. スタートアップコマンドファイルの項目に、複製した埋め込みコードのフォルダに生成されたスタートアップコマンドを指定します。
C:¥winAMS_CM1¥mcdc¥target¥SS_STARTUP.com
4. 「すべてのメモリ領域をアサイン」をチェックします
5. 「OK」で完了します【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

150

ガイオ 定期セミナー CM1

MC/DC計測⑦: MC/DCカバレッジオプションをON■ SSTManagerにMC/DC測定の設定を追加します1. 「起動設定」ビューの「カバレッジ測定コード埋め込みオブジェクトファイル」をチェックします– これにより、埋め込みコードがシミュレータで実行されます
2. 「テスト設定」ビューの「MC/DCを出力する」をチェックします– これにより、MC/DC計測結果が出力されます– これでMC/DC計測の環境設定は終了です【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

151

ガイオ 定期セミナー CM1

MC/DC計測⑧: テスト実行■ MC/DC計測を実行して結果を確認します
1. 「テスト設定」のボタンを押します。
2. テストCSV一覧のタブで、「func4_data.csv」の実行ボックスをチェックします。
3. 「シミュレータ起動」ボタンを押します。

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

152

ガイオ 定期セミナー CM1

MC/DC計測⑨: 結果確認
■ テスト結果ビューに、func4()のテスト結果が表示されます 「一致」の○印： 「実コード」と「カバレッジ測定用コード」の出力変数の値が一致している→埋め込みコードにより、関数本来の分岐などの動作に影響を与えていないことを示す■ カバレッジ結果を確認
 func4()は C0、C1は100%でOKだが、MC/DCは未達で75%【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

153

ガイオ 定期セミナー CM1

MC/DC計測⑩: カバレッジビュー確認■ MC/DCが未達の箇所を確認
複合条件式 if( gb_b>20 && gb_c>30)のうち
gb_c>30の条件式のfalseの論理がテストされていない【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

154

ガイオ 定期セミナー CM1（参考）埋め込みコードサイズ増加への対応方法■ MC/DC計測のための埋め込みコードは 元のコードの数倍の容量になる– 計測用の埋め込みコードがマイコンのROM容量をオーバーしてしまう場合がある– 埋め込みコード生成対象のソースを制限して、プロジェクトを管理する必要がある– CasePlayer2の「埋め込みコードの設定」機能が利用可能• CasePlayer2 → [プロジェクトメニュー] → [カバレッジ測定用オブジェクトビルド環境生成]「埋め込みコードの設定」機能を利用した 埋め込みソースの制限による コードサイズの増加抑制＜プロジェクトを分割して 埋め込みコード量を制限＞＜実コード＞

マイコン

マイコン
file1.cのみに埋め込み

.c

OBJ

＜MC/DC計測用 埋め込みコード＞

OBJ

.c

マイコン

.c
MC/DC計測用のフックコードが埋め込まれる

.c

OBJ

OBJ

file2

.c

OBJ

マイコンのROM容量をオーバーしてしまいテストできない

.c

file3

.c

テスト
可能

テスト
可能

OBJ

マイコン

file3.cのみに埋め込み
元のコードの
数倍の容量

OBJ

マイコン

file2.cのみに埋め込み

.c
OBJ

file1

OBJ

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

OBJ

テスト
可能

155

ガイオ 定期セミナー CM1

MC/DCの意味とMC/DC未達の場合の対処法【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

156

ガイオ 定期セミナー CM1（参考）コントロールカバレッジ■ コントロール（実行制御に対する）カバレッジ
C0：ステートメント（命令）カバレッジ

C1：ブランチ（分岐）カバレッジ【指針】全ての実行文を１度実行すればOK【保証できる内容】
・コーディングしたが実行されない実行文はない
・存在してはいけない実行文はない【指針】全ての条件文の真/偽を実行すればOK【保証できる内容】
・存在してはいけない実行パスは存在しない
処理

C0では十分でない例

A=0
真

条件

真

条件

C1カバレッジ：

偽

偽
処理

処理

Ａ=1

C1では十分でない例

真

C0カバレッジ：
ソース行をマークして、
全て塗りつぶすフローチャートの全てのルートを塗りつぶす

X=Y/A
赤のパスには実行文がないので、
C0ではテストされない

条件Ｃ
X or (Y and Z)

処理Ａ

偽

処理Ｂ

複合条件では１つのTRUE/FALSEがテストされるのみ
全ての組合せがテストされる訳ではない【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

157

ガイオ 定期セミナー CM1（参考）コントロールカバレッジ（続）MC/DC：
全ての条件式のTRUE/FALSEの効果を確認する■ コントロール（実行制御に対する）カバレッジ （続き）
C2：コンディション（条件）カバレッジ

MC/DC：Modified Condition/Decision カバレッジ【指針】全ての条件文の条件式の組み合わせを１度実行すればOK【保証できる内容】
・存在してはいけない条件判定式の要素がないこと【指針】全ての条件文の条件式の組み合わせのうち、意味のある組み合わせを全て１度実行すればOK【保証できる内容】
・C2と同等の網羅内容（テストデータはC2より少ない）真真C2カバレッジ：
複合条件の全数組
合せをテストする

条件Ｃ（X and Y） or Z

処理Ａ

偽

条件Ｃ
（X and Y） or Z

偽
処理Ａ
処理Ｂ

全ての条件文の条件式の組み合わせを実行
条件式 X

0

0

0

0

1

1

1

1

条件式 Y

0

0

1

1

0

0

1

1

条件式 Z

0

1

0

1

0

1

0

1

条件要素に対する網羅性は100%だが、効果のないテストが含まれてしまう

処理Ｂ

他の条件式の真偽を固定して、１つの条件式の真偽を変化させたとき、全体の条件に変化があるものだけを実行する（↓色のついたデータ）
条件式 X

0

0

0

0

1

1

1

1

条件式 Y

0

0

1

1

0

0

1

1

条件式 Z

0

1

0

1

0

1

0

1

論理

F

T

F

T

F

T

T

T

２つのデータ組み合わせで、各条件式を評価→

Z

Y
X
Ｃ２の網羅性を維持して、テストパターン数を抑えることができる【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

158

ガイオ 定期セミナー CM1（参考）MC/DCテストケースの設計方法■ (例１) 論理演算の順序に従って、論理解析を行う
論理解析

テストケースの組合せ

A && B && C
T

T

T

F
F
F

x

x
x

A

B

C

論理

T

T

T

T

T

T

F

F

T

F

T/F

F

F

T/F T/F

F

Aの論理式をテストする
MC/DCテストケースの見つけ方
B、Cを固定したとき（B→True、C→True）
Aの論理を変化させた
とき、全体の論理が変化するテストケースを選択する--------B、Cの論理式も同様※ x は評価の必要が無い【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

159

ガイオ 定期セミナー CM1（参考） MC/DCテストケースの設計方法■ (例２) 論理演算の順序に従って、論理解析を行う
論理解析(A && B) | | C
T

T
F

F

x

テストケースの組合せ
A

B

C

論理

x

T

T

T/F

T

T

T

F

T

T

F

T

F

F

F

T

F

T/F

T

T

F

T/F

F

F

F
※ x は評価の必要が無い【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

Aの論理式をテストする
MC/DCテストケースの見つけ方
B、Cを固定したとき（B→True、C→False）
Aの論理を変化させた
とき、全体の論理が変化するテストケースを選択する--------B、Cの論理式も同様

160

ガイオ 定期セミナー CM1

MC/DCが未達の場合のデータレビュー方法１■ ATDEditorの各論理に対する生成データを確認する
各条件式に同じ変数が使われている場合、論理矛盾を起こす場合がある
int func4( int code ){int return_value=FALSE;
int i;
if( gb_a > 10 ){if( gb_b > 20 && gb_c > 30 ){// 処理
この条件式の}
MC/DCが未達の場合
else{
gb_out = -1;}
return_value = FALSE;
}
else
{

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

！

161

ガイオ 定期セミナー CM1

MC/DCが未達の場合のデータレビュー方法２■ EXCELで未達の条件式を評価するテストケースを見つける【レビューのフロー】

int func4( int code ){int return_value=FALSE;
int i;

MC/DCに基づいて、
条件式「gb_c>30」を評価するテ
ストデータは、if( gb_a > 10 ){if( gb_b > 20 && gb_c > 30 ){// 処理
この条件式の}
MC/DCが未達の場合
else{
gb_out = -1;}
return_value = FALSE;
}
else
{

↓
「gb_b > 20 」の論理を同じ（Ｔ）にして、「 gb_c>30 」の論理を変化させた時に、if文全体の論理が変化するデータを選択↓

この場合：
９行目： T&&T => T と
１１行目： T&&F => F となる↓
このデータをレビューして修正する↓

この場合、「 gb_c>30」の「f」の論
理がテストされていないため、 12
行目のデータ[32]が間違っている【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

162

ガイオ 定期セミナー CM1

C++コード 単体テスト機能（オプション機能）※ CasePlayer2との連携機能【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

163

ガイオ 定期セミナー CM1

C++に対応： 概要■ 実コードを使用したC++単体テストに対応– ※ C++コード対応は、オプション機能■ C++クラス内に定義されたメソッド（関数）の単体テストが可能– テスト対象クラスの構造をツリーに表示
class CClass{
public:CClass(){} // コンストラクタ~CClass(){} // デストラクタ

struct ST_PARAM

m_result;

void func1( int enable, int mode, int input ){/* 処理分岐 */if( enable ){switch( mode ) /* 4case */{case 0:// input代入
m_result.data = input;
break;
case 1:m_result.data = input * 10; // input * 10 代入
break;：：}// return code
m_result.ret_code = TRUE;}}
void func2( int mode, int *data_in );テスト対象メソッドや初期化に必要なコンストラクタ
をツリーから選択};【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

164

ガイオ 定期セミナー CM1

C++に対応： クラスオブジェクト生成■ テスト時に クラスの定義からクラスオブジェクトを自動生成可能– テスト時にクラスオブジェクトを自動生成可能– 静的オブジェクト内の関数（メソッド） を指定してテスト可能■ 初期化に必要なコンストラクタの実行を選択可能– テスト時にクラスオブジェクトを生成する場合は、コンストラクタの実行選択が可能• ※静的オブジェクトの場合は、コンストラクタの実行はコンパイラのコード展開に依存

クラスオブジェクトを自動生成

コンストラクタの実行を選択【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

165

ガイオ 定期セミナー CM1

C++に対応： C0/C1カバレッジ計測■ メソッドに対する入出力テスト、カバレッジ計測はCコードと同様に可能– ※MC/DCカバレッジ計測（オプション機能）はC++に未対応

入出力テスト結果

C0/C1カバレッジ計測【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

166

ガイオ 定期セミナー CM1※参考資料
カバレッジマスターの優位性と導入効果【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

167

ガイオ 定期セミナー CM1

単体テストツールの選定ポイント■ 単体テストツールの比較を行う際には、多くのお客様が以下の様な評価項目を設定しています
項目

必要条件

準備工数

製品開発ビルド環境をそのまま使えるか？ ソース変更は発生しないか？ テストドライバ作成の必要があるか？ スタブは自動生成可能か

カバレッジ機能

C0、C1、MC/DC、関数、コール カバレッジは計測可能か？
カバレッジ計測結果を容易にレポート出力できるか？

精度/信頼性実コードに忠実なテストが可能か？ エンディアン/ビットフィールド/アラインメント/ポインタサイズ/シフト演算 等

データ資産化CSVファイルのみでテストデータ管理が可能か？回帰テストが自動化できるか？

データ入力支援

構造カバレッジ計測のテストデータは自動生成可能か？ 生成される
テストデータの冗長性は低いか？

サポート体制開発メーカー直接のサポートが受けられるか？レスポンスは良いか？
導入時のレクチャ／セミナーは充実しているか？

【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

168

ガイオ 定期セミナー CM1

他社ツールとの比較とアドバンテージ■ ツール構成/特長の比較※各社ツールのWEBページ情報を基に作成 （作成日：2013年6月）
比較項目

カバレッジマスターwinAMS

他社ツール

計測方法

マイコンシミュレータ（ISS)で実コードをそのまま実行して単体テスト、カバレッジ測定

PCに接続したターゲットボード上で、関数を駆動するテ
ストドライバを実行し、測定結果をPCへ転送

ツール構成

単体テストアプリ、マイコンシミュレータ※全てのモジュールがソフトウエアのみ※常に安定動作する

単体テストアプリ、ターゲットボード
PCとの接続ケーブル、電源装置※ソフトツール、専用ハードウエアが必要※ノイズなど物理的な影響を考慮する必要あり

全てソフトウエアであるため保守性が高い

専用ハードウエアの保守が必要

製品開発のビルドをそのまま使用可能
作業は発生しない※デバッグ情報を付加してビルドするだけ

ターゲットボードに計測装置I/Fファームウエアの組み込みが必要、ターゲット毎にカスタマイズ（コンフィグレーション）を行う必要有り※計測装置I/F ファームウエア← 計測した情報をボードからPCへ転送する仕組み

テスト開始のリードタイムなし

専用HWコンフィギュレーションが必要

製品に搭載するコードと同じオブジェクト

テスト対象関数にフックコード（プローブ）を挿入したテス
ト専用ビルドを別途準備する必要あり

製品へ実装するコードと同一
最もターゲットに忠実な状態でテスト

製品へ実装するコードとは異なる
コードに挿入したフックコード（プローブ）による影響が避けられない

ISO26262認証

認証取得済み認証取得済みカバレッジ機能

C0, C1, MC/DC, 関数、コール

C0, C1, MC/DC, 関数、コール（関数、コールをサポートしないツールもある）

環境セットアップ（テスト準備作業）

テスト対象コード【開示及び用途制限資料 ガイオ・テクノロジー株式会社】

Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

169

ガイオ 定期セミナー CM1

ICEによる手作業が どのように改善されるか■ ICEを使用して、１関数６０分で単体テストを行っている場合を例にとると・・・
作業時間の内訳は・・– ソース解析＆テストデータ作成： ３０分– ICEによる手作業でのテスト実行： ３０分■ カバレッジマスターの導入により、初回のテストにおいては・・– ソース解析＆テストデータ作成： ３０分 ←同じ時間がかかる– カバレッジマスターで自動実行： 数秒 ←テストは自動化され作業工数はゼロ■ ２回目以降の反復テストでは– ソース解析＆テストデータ作成、テスト実行の作業工数もゼロになる
ICEによる手作業

カバレッジマスター導入の初回

テストデータ作成
３０分

テストデータ作成
３０分

３０分

導入後の反復テストでは・・
既存のテストデータを使用するためデータ作成工数はない

６０分
ICEによるテスト実行
３０分

テスト実行は数秒（ほぼゼロ）

５０％削減

作業工数
はゼロ

テスト実行は数秒（ほぼゼロ）【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

170

ガイオ 定期セミナー CM1

他社ISSを使用した場合との比較■ 他社（半導体メーカー純正）ISSを使用した単体テストとは– ISS（デバッガ）がサポートするスクリプト言語を駆使して単体テストを行う方法• 関数の呼び出し指定、変数に対するデータ設定を行うスクリプトを作成• テスト実行後に実行ログファイルを解析して、評価対象の変数の値を確認• テスト結果を表に記入（手作業）• 期待値との比較判定（手作業）– カバレッジをとることは困難、または膨大な手作業が必要• ステップ実行毎に、プリントしたソースコードをマーカーで塗りつぶす手作業となる
純正ISSを駆使した方法

カバレッジマスターによる自動テスト

テストデータ表作成

テストデータ表作成

テストスクリプト作成

テストスクリプト作成

テスト実行
ログ解析

手作業の
大半を
自動化

テスト実行
ログ解析

テスト結果を表に記入

テスト結果を表に記入

期待値との比較判定

期待値との比較判定【開示及び用途制限資料 ガイオ・テクノロジー株式会社】

Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

５０％削減

171

ガイオ 定期セミナー CM1※参考資料
テスト代行サービスについて【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

172

ガイオ 定期セミナー CM1

単体テスト代行サービスの概要■ ガイオの優位性を活かして単体テストを実施– 単体テストツールメーカとしてのツール知識の活用– コンパイラメーカとしてのプログラム知見の活用

コンパイラメーカ（プログラム知見）■ お客様に代わってテスト業務を完全代行– テスト作業のアウトソーシング– 第三者評価機関としての立場で品質評価■ カバレッジマスター導入の評価に利用可能

テストツールメーカ（ツール知見）テスト代行におけるガイオの優位性– 御社のソース（数関数）で 単体テストを代行– ツール導入後の実工数、成果物の検討などに利用
お客様
ガイオ
お打ち合わせお客様のソース・仕様書
テスト指針

G

ガイオ
テスト作業からレポート作成まで

G【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

173

ガイオ 定期セミナー CM1

単体テスト代行作業の全体イメージ■ モジュール単体テスト工程の全てをガイオへ業務委託– テスト作業の短期化と 品質向上を実現– カバレッジマスターwinAMSの テスト実施環境・データ一式、テストレポートを納品
作業の短期化
ソフト品質の向上

お客様
詳細（関数）仕様書

コーディングモジュール単体テスト

ガイオが代行

ツール知見
プログラム知見

ガイオへ
業務委託
詳細（関数）仕様書

納品

ソースコードカバレッジマスター
winAMS

納品物

障害
レポート

単体テスト仕様書

単体テスト報告書

テスト実施環境【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

174

ガイオ 定期セミナー CM1

単体テスト代行の流れ■ 最終納品までの流れと 各フェーズでの受け渡し書類– お見積もりはご提供頂くソースコード、ドキュメントにより決定
ファーストミーティング
テストの概要を打ち合わせ
・テスト指
針
・関数数
・納期

テスト指針
概要
仕様書

機密保持締結ソース開示のための機密保
持契約

ソースコード受領

見積書提出

見積り作成
用の対象
ソースを受
領
ソース、ドキュメント

機密保持契約書

作業終了/納品¥

テスト再実行環境（資産化できるデータ）

テスト指針
詳細
仕様書

見積書

作業開始

契約
ご発注

作業進捗表
モジュールテスト仕様書

モジュールテスト報告書

テスト実施環境【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

175

ガイオ 定期セミナー CM1

納品物：テスト指針書■ ご依頼元（お客様）との打ち合わせにより テストのゴールを決定– 仕様書から読み取れる仕様の動作確認の方法– ホワイトボックス的観点から カバレッジの指針、テストデータの与え方など• コーディングの人的ミスを発見するためのデータ作成指針【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

176

ガイオ 定期セミナー CM1

納品物：テスト仕様書とテストデータ■ テスト指針とテストデータの意図を明確化– カバレッジ指針（C0、C1、C2など）に従って、分岐に対するテストデータを作成– フローチャーﾄ上で、どの分岐パスを通過するデータかを明確化– 納品後のお客様のレビューを容易にするためのドキュメントを作成
フローチャート
入力データ

どの実行パスを通過する
データか表示テストデータ毎の実行パスを表示
カバレッジ指針に従った
テストデータの意味を色で識別【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

177

ガイオ 定期セミナー CM1

納品物：テスト結果報告書■ 単体テストの実行結果についてのドキュメント
単体テスト結果

実行結果の出力 ＆ 期待値との合否判定

カバレッジデータ

C0 / C1 カバレッジ結果のテキストレポート【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

178

ガイオ 定期セミナー CM1

納品物：障害報告書■ 単体テストで障害が発生した関数のドキュメント
障害発生関数サマリ

障害発生テスト結果報告書

各関数毎の単体テスト結果を一覧表でレポート
各関数毎の入出力結果（OK or NG）
期待値との照合結果レポート

障害レポート例：【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

179

ガイオ 定期セミナー CM1

Ｑ＆Ａ【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

180

ガイオ 定期セミナー CM1

END■ 最新情報はWEBサイトから

www.gaio.co.jp※会社名・商品名は各社の商標または登録商標です。
※本テキストの内容は、予告無く変更される場合があります。
※本書記載の誤りにより生ずる問題や損失に対して弊社は責任を負いません。
※本資料の無断転載、複写はお断りします。
ガイオ・テクノロジー株式会社営業部〒140-0002 東京都品川区東品川2-2-4
天王洲ファーストタワー25F
TEL.（03）4455-4767
Email info＠gaio.co.jp ・・ご質問はこちらまで【開示及び用途制限資料 ガイオ・テクノロジー株式会社】
Copyright © 2006-2014 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.

181