2005年02月06日
組み込み開発用モジュール単体・カバレッジテストツール「カバレッジマスター winAMS」がSTUB機能をサポート!
GAIO CLUB 特集
GAIO CLUB【2005/2月号】
組み込み開発用モジュール単体・カバレッジテストツール「カバレッジマスターwinAMS」がSTUB機能をサポート!
~ マイコンシミュレータ(ISS)ならではの高精度テストを実現 ~
注目を集めるモジュール単体テストパスカバレッジテスト
組み込み機器のソフトウエア実装量は、近年増え続けており、ソフトウエアの品質を保証することは、大きな課題となっています。
自動車業界でのソフト開発では、古くから、ソフトウエアの品質を定量的に図る基準の1つである「モジュール単体テスト」、「パスカバレッジテスト」が取り入れられています。これは、関数、タスクなどの小機能単位に、データの入出力テストを行うのが一般的な手法です。
ソフトを構成する最小単位である個々の関数の動作が保証されていれば、関数を組み合わせてできるシステムの問題を最小限にできるばかりか、予期せぬ不具合が発生した場合でも、問題点の切り分けが容易になります。
テストにかかる膨大な工数
特にモジュール単体テストは、膨大な数の関数の評価の繰り返しになるため、実際に行うのは、膨大な工数を強いることになります。現在の多くのテスト手法では、実際のターゲット上で、ICEデバッガの機能を使って、手作業でテストが行われているのが実情です。
ソフトウエア開発の現場では、日々、バグに対するソースコードの改変が行われており、一度モジュールテストを行った後で、ソースコードが改変された場合でも、再度モジュールテストを行うことは、工数や時間の制約のために実施できない場合が多く、一部のモジュールの改変による影響をテストし切れないまま、製品がリリースされてしまうケースが少なくありません。
テストの自動化にシミュレータが有効
モジュール単体テストの膨大な工数を削減する1つの方法が、「シミュレータ」の利用です。シミュレータはマイコン動作の全てをソフトウエアで動作させるため、ファイルシステムを利用したテストデータの入力や、実行結果の記録などが容易に行えます。
テストの工程をバッチ処理の様にシナリオ化しておくことで、全テストを自動化することができます。また、ソースの改変毎に同じテストを繰り返す用途には、非常に向いています。
組み込みシステム専用のモジュール単体テスト環境
ガイオは、組み込みシステムの検証に特化したモジュール単体テスト専用ツール、「カバレッジマスターwinAMS」を提供しています。このツールは、マイコンシミュレータ(ISS)で実際のマイコンのオブジェクトコードを実行し、これに対して入力データを与えて入出力テストを行う仕組みとなっています。
コードの論理的なロジックのみを検証するのでなく、実際のターゲット上で実行されたことを想定した、より精度の高いモジュールテストを行うことが可能です。
カバレッジテストに関しても、組み込みマイコンでは、最適化オプションを使用した場合や、コンパイルスイッチの指定により、生成されるコードが異なることが多く、万一のコンパイラの不具合などによって、実行コードに誤りがあるような場合でも、実際のオブジェクトコードを実行するISSにより、容易に不具合を発見できます。
CSVファイルで変数に対する入力データを指定
カバレッジマスターでは、オブジェクトコードの任意の変数、引数に対して、CSVファイルから入力データを渡すことができます。また、CSVファイルから評価を行いたい任意の変数を指定するだけで、関数テスト実行後に出力値をCSVファイルで出力します。
ポインタ変数、引数にも対応
-
関数の引数が、ポインタである場合でも、CSVファイルで入力変数名を指定する際に、「$」の記号を付けるだけで、テスト用に指定したメモリ領域に自動的にポインタ変数の実体を割り付け、CSVに指定した数値を入力値としてテストを行います。
-
カバレッジ実行結果を分かりやすく表示
-
カバレッジマスターでは、モジュール単体テスト実行後、入力したデータによるパスカバレッジを分かりやすく表示します。C0カバレッジの基準である、テストされたソース行の割合を%で表示し、テストされなかったソース行を色分け表示します。各入力データによる実行パスの表示も容易に行えるため、ソース上の条件分岐において、どのデータによりテストが行われたのかを容易に把握することができます。
-
関数のネストに対処するSTUB
モジュール単体テストは、関数1つに対して、その入出力評価を行いますが、実際のソースコードでは、関数からさらに下層の関数を呼び出すことが多く、テスト対象の関数の切り分けが問題となります。さらに、呼び出された下層の関数が、ハードウエアからの応答を待つような場合、実際のハードウエアと接続されない検証環境では、関数の動作がロックしてしまいます。
この様な場合、一般に「STUB」(スタブ)を使って、仮の関数を作成し、仮の応答結果を戻すことで、テストが行われています。しかしながら、このSTUBを仕掛けるためには、実際のソースを書き換えなければならず、関数の数が多い場合、この管理が非常に大変です。
STUB管理・実行機能を搭載
カバレッジマスターには、STUB関数を作成、管理する機能が搭載されています。オブジェクトコードを指定すると、含まれる関数の一覧が表示され、チェックボックスをONにするだけで、その関数がSTUB関数に置き換わります。テストのために、呼び出し側のコードを変更する必要はありません。STUB関数が未作成の場合には、スケルトンコードが生成されます。チェックボックスをOFFにすれば、いつでもSTUB関数を無効にすることができます。
作成したSTUB関数は1つのファイルに管理され、テスト時には、実際のコードと同じコンパイラでコード化され、リンクされます。カバレッジマスターのISSでの実行時には、このコードは特別に指定した別のメモリ領域に置くことができるため、実際のコード領域と競合することはありません。