配布資料ダイジェスト版PDF

組込みソフト不具合検出のための単体
テストと実機レス仮想検証
ガイオ・テクノロジー(株)
検証・テスト事業部
嶋田 卓尚 ・ 沼田 幸治 ・ 速水 正人
TU-5
Copyright © 2008 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.
1
コーディングにおけるソフト品質向上の施策
 Cの構文規約の設定
コーディングの自由度を制限することで不具合を出しやすい記述を抑制
 ソースコードレビュー(クロスチェック)の実施
開発者個人に依存したミスや 単純な思い違いが無いかを確認
 モジュール単体テストの実施
動的テストにより、レビューでは漏れてしまう不具合を検出
詳細設計
構文規約
TU-5
単体テスト
コーディング
開発者個人に依存する
不具合の抑制と検出
ソースコードレビュー
Copyright © 2008 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.
2
結合/システムテストで発見される不具合例
 仕様面の不具合
仕様(ハードウェア仕様/製品仕様等)に規定された動作との不一致
<例>仕様書の読み違いなど
 性能面の不具合
パフォーマンス的に処理が追いつかない
<例>時間的制約に処理が追いつかないなど
 排他制御の不具合
システム的デッドロック
<例>タスクのお見合い状態など
 割り込みの不具合
多重割り込みや割り込み禁止処理の不具合
<例>多重割り込みが発生した場合のプライオリティ設定の不具合など
 メモリ系不具合
メモリリーク、メモリアクセスエラー、スタックオーバーフロー
<例>メモリの解放忘れなど
TU-5
Copyright © 2008 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.
3
ソフトウェアには不具合があることを前提に
プログラムは思った通りに動くのではなく、書いた通りに動く
⇒不具合が絶対に無いと断言することはできない
⇒不具合が無いことを確認することも重要
「過去、動作実績があるソフトだから大丈夫」は本当に大丈夫?
・実績のあるモジュールを移植した場合でも不具合は発生
−上位/下位モジュールとの関係が崩れる
・MPUの処理系に依存して動作が変わることで不具合が発生
−int型変数、アライメント、ビット処理、キャスト
TU-5
Copyright © 2008 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.
4
単体テストの重要性
• ソフトウェア開発プロセスの中で最大の作業
規模
→ 本来は、そのはず。(だが、実際は軽視)
• 品質保証の最初の工程
→ 開発の手戻りをなくす
→ 障害検出が遅れるほどコストは高くなる
→ 開発者が楽をする(後になればなるほど大変)
障害原因の多くは単体テストで検出できる単純な問題である。
障害原因の多くは単体テストで検出できる単純な問題である。
単体テストを確実に実施すれば、損害を招く確率は下がる。
単体テストを確実に実施すれば、損害を招く確率は下がる。
TU-5
Copyright © 2008 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.
5
ソースコードレビュー
• コーディング後に実施する
– 短時間に集中すること。最大でも2時間程度
– 参加者は不具合を見つけ出すことだけに専念
• 事前の準備が肝
– 参加者は事前に資料(仕様書・ソース)を熟読すること
– 不具合と思われる個所を洗い出しておくこと
• 不具合箇所を発表する場であること
– 他の参加者はこれを元にさらなる不具合の検出に専念すること
しっかりとしたコードレビューであれば
単体テストは正しさを確認するだけである。
はず
TU-5
Copyright © 2008 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.
6
単体テストには指針設定が重要
• 単体テスト実施内容を標準化するための部署内での取り決め
– 変数レンジ、データ範囲に対するカバレッジ、データ設定の方法
– コントロールパスに対してどのカバレッジでOKとするか
• この指針により個人に依存しない標準的なソフト品質判断が可能
単体テスト実施の前に
指針を決めて おこう!
TU-5
Copyright © 2008 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.
7
テストしやすいプログラム
● 小さい
● 入出力変数が少ない
● 子関数が少ない
● 制御の分岐が少ない (if ∼ else, for, …)
● 制御のネストが浅い (if ∼ else, for, …)
● 制御の条件が複雑でない
メトリクスの種類
内容
説明
行数
一般的にはコメント行を含む総数。条件コンパイル(#if等)により対象外となる部分は
含まないが、測定ツールにより違いがあり、条件コンパイルによる対象外の部分でも
コメント以外の部分をステップ数としてカウントされることがある。
この値は、機能的に同じであれば小さい方が良いと判断される。
凝集度
同じ機能や情報は1つのモジュールに集約されていることが望ましいという考え方に
基づき、機能や処理に関連する関数や変数がどれだけ同じ部分に集まっているかを
測定する値。
関連情報が分散しているとブログラムわかり難く、仕様変更時の不具合混入の原因
になるので、凝集度が高いほど良いと判断される。
Couplings
結合度
凝集度とは逆の指標で、呼び出し関係にあるモジュールの結び付きの強さを表す。
結合度が高い状態ではモジュール間の依存度が高く、仕様変更時の作業が困難に
なり、結合度は低いほど良いと判断される。
Complexity
複雑度
例えば、if文のネストが深い等のような記述の複雑さを表す指標。
複雑度は低いほど良いと判断される。
LOC
(Line Of Code)
LCOM
(Lack Of Cohesion Of
Methods)
TU-5
プログラムの複雑度を測る
ソフトウェア・メトリクスという指針
Copyright © 2008 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.
8
仮想検証シミュレータとは
• システムシミュレータをベースにシステム全体
を仮想化し、組込みソフトを検証する環境
– 制御対象は、他のモデリングツールでモデリング
され、それとシステムシミュレータを連携させて、
全体をシミュレーションすることが多い
– システムの異常系を検証するために、異常状態
を作り出す機能等も有する
TU-5
Copyright © 2008 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.
9
ECUシミュレーションモデル例 (4)
• MATLAB/Simulinkの自動車パワーウインドウモデルをシステムシミュレー
タが制御
– MATLAB/Simulinkでモデリングしたモデルを仮想HWとして利用
– MATLAB/SimulinkのS-Functionブロックを通じてシステムシミュレータと接続
S-Functionブロック
I/O
割り
込み
MATLAB/Simulinkに
接続されたア ニメータ
TU-5
Copyright © 2008 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.
10
OA機器・プリンタ仮想搬送路シミュレータ
• ソフト技術者向け仮想搬送路シミュレータ
– プリンタシステムなどの搬送路制御ソフト検証用シミュレータ
– ソフト技術者が搬送路モデルを容易に構築可能
Microsoft Visioで作成した
2Dの紙搬送メカ構成図
ソフト技術者が紙搬送
仮想メカモデルを作成可能
3Dイメージに自動変換され
メカ動作シミュレーション
連携
動作
ソフト技術者
開発した
ターゲット
ソース
システムシミュレータにより制御ソフトを検
証・デバッグ
TU-5
Copyright © 2008 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.
11
仮想の世界でシステム開発
マイコン
シミュレータ
モータ屋さん
+
組込
ソフト
(電磁界モ デル)
ソフト屋さん
ツール屋さん
電気回路
L1 _V AL UE = 10 mH
L2 _V AL UE = 0. 1 66mH
TX1
L oa d
D1
L1
1
D1 N 493 3
制御屋さん
+
コントローラ
Plant
Vin
D C = 13 0
モータ
C3
0. 1u
D2
2
D1 N 493 3
OUT
20u H
C1 4
2 00u
5
R1
130
+
ZX
X1
1
Re fe ren ce -
Vl oad
DC= 1
2
3
0
C2
0 .5 n
Q1
R ref
1
Rf
100 Meg
0
0
0
0
2 N 654 7/ TO
R2
1 00
V sw
0
0
0
D3
D 1N 49 33
機構
0
T R AN = pu ls e(0 1 5u 0. 05u 0. 05u 12. 5u 25u )
回路屋さん
仮想ECU1
仮想ECU2
機構解析屋さん
仮想ECU3
システム屋さん
「モデルの交換でシステムを構築・検証」の世界へ
TU-5
Copyright © 2008 GAIO TECHNOLOGY CO., LTD. ALL RIGHTS RESERVED.
12