2004年04月02日
シミュレータを利用したカバレッジ自動テストで、組み込みソフト品質を改善、保証する
GAIO CLUB 特集
GAIO CLUB【2004/4月号】
シミュレータを利用したカバレッジ自動テストで組み込みソフト品質を改善、保証する
カバレッジテスト用ツール「winAMS」を利用した網羅テストとは
システムは小さなモジュールの集まり
システムと呼ばれるものは何でも、より小さな単位のモジュールの組み合わせで出来ています。組み込みソフトウエアの場合でも、全体のシステムは、小さな関数、タスクなどのモジュールの組み合わせで成り立っています。
組み込みソフトの品質保証は、まず、このモジュールの動作をテストして、動作保証をすることから始まります。
ソフトモジュール品質保証とは
ソフトウエアの末端の関数モジュールのほとんどは、与えられた入力に対して出力を返す入出力動作を行っています。例えば、メカ、モーター制御の関数モジュールの場合、センサーからの入力データに対してフィルタリング演算を行い、適切な出力値を返すようなモジュールが多くあります。この場合、考えられる全ての入力値に対して、その出力値が正しくなることを確認出来れば、この関数モジュールは100%保証できることになります。
これは、考えられる入力の全てを網羅して関数を設計しているかと言う観点から、その関数の品質を保証することになります。 組み込みソフトの場合、入力イベントに対して一定の動作を行ういわゆるイベントドリブン型のシステムが多く、上の様な純粋な数値演算モジュールばかりではありませんが、この部分はシステム動作として切り分けを行い、まずは入出力関係が明確なモジュールから品質保証を行うことがポイントとなります。
コードパス・条件分岐のテスト
入出力関係が明確な末端の関数モジュールの動作が保証されれば、次はこの関数モジュールを呼び出す実行経路、条件ロジックのテストとなります。これは、考えられる全ての条件に対して、ソースコード上のコードを正しく通過しているかに焦点を置いたテストとなります。これは一般に「パスカバレッジ」と呼ばれています。
カバレッジとは
カバレッジとは「Coverage」のことであり、語源としては「適用範囲」と言う意味になります。ソフトウエアの分野でカバレッジと言えば、ソフトウエアのテスト範囲、すなわちテストをどのくらい行ったかの指標を示す言葉として用いられています。
組み込みソフト開発では、通常C言語を用いたソースコードで開発されており、この中に含まれるif文やswitch文などによる条件分岐によって作られるコードパス(ソース上の実行経路)を、どのくらい網羅してテストしたかが、ソフトの品質を保証する1つの指標となります。
カバレッジテストの定義
フトウエア設計の分野で一般的に言われるカバレッジは、C0、C1、C2の呼称で、次のように定義されています。
C0:命令カバレッジ
これは、ステートメントカバレッジと呼ばれ、コード内の全てのステートメント(ソース行)を少なくとも1回はテストした場合を言います。ソースコード上の全ての行を1度は正しく通過したことを保証しますが、条件文による通過経路の組み合わせなどについては対象外としており、例えば関数Cについて、関数Aから分岐して実行された場合は正しいが、関数Bから分岐して実行された場合には間違った動作をすると言うような事例は保証できません。
C1:分岐カバレッジ
これは、ブランチカバレッジと呼ばれ、コード内の条件を設定して、その分岐を少なくとも1回はテストした場合に当たります。分岐による経路の組み合わせ全てを対象としてテストするもので、C0の例に上げた関数ABCの分岐経路全てを保証するものです。しかし、分岐条件設定については対象外としており、全ての分岐条件を保証するものではありません。
C2:条件カバレッジ
これは、コンディションカバレッジと呼ばれ、C1の分岐カバレッジにおいて、分岐時の全ての条件を網羅してテストするものです。例えば、if( a ¦¦ (b&&c) )の分岐があった場合に、C1カバレッジでは、a=0とa=1の場合だけを実行すれば、if文の真偽2通りの分岐は網羅できることになり、bとcはテスト条件から外れる可能性もあります。C2では、条件として取り得るケースの全てを網羅してテストする、最も厳しいテストとなります。
シミュレータ環境でカバレッジテストを自動化する
カバレッジの定義は概ね前述の様になりますが、実際にこのカバレッジテストを行うためには、全ての実行条件を入力として用意することになり、人手でのテストでは、非常に大きな工数がかかることは容易に想像できると思います。
また、パスカバレッジテストについては、ソフトウエアの構造や具体的なソースコードの中身が分からなければ、全ての命令、分岐を通過するテストを行うことは出来ないため、統合テストやシステムテストのような、いわゆる「ブラックボックステスト」では行うことが出来ません
このようなことから、ソースコードデバッグをPC上の仮想環境で行うことができる「シミュレータ」は、人手がかからない自動カバレッジテストの手段として注目されています。
カバレッジテスト用シミュレータ「winAMS」
ガイオのシミュレータ製品の1つである「winAMS」は、マイコン命令セットシミュレータ(ISS)に、カバレッジテストに必要なデータの入出力機能を追加した、カバレッジテスト用シミュレータです。全ての機能がパッケージ化されており、評価対象のソースコードとテストデータさえあれば、直ぐにテストを始めていただけます。マイコンシミュレータには、実際の組み込みマイコンのアーキテクチャ、命令コードをそのままシミュレーションする高精度シミュレータ「System-G」が使用されており、演算精度などは、実マイコンと完全に整合性をとることが出来ます。
CSVによるデータ入力テストの自動化も可能
データ入出力には汎用的なCSV形式のテキストファイルを使用し、入力データとして、テスト対象の関数名、データを入力する変数名とデータ、出力変数名と期待値を入れておくだけで、自動的にテストを行い、期待値との相違をレポートします。これにより、関数のモジュール試験を完全に自動化することができます。
また、テストに使用したCSVファイルのデータで、ソースコード上のどこを通過したかを赤く色付けするソースカバレッジ機能も備わっています。