ソフトウエアのテスト自動化を進めよう

ソフトウエアのテスト自動化を進めよう
テスト工程の自動化でソフトウエアの品質を保証する
シミュレータを応用して カバレッジ網羅率の向上を考える
不具合を残してしまう
実機でのブラックボックステスト
市場で不具合が出ないのは
運が良いだけではないですか?
シミュレータを使用して、 ホワイトボック
ステストを進めることが、 ソフトウエアの
品質向上に、 ダイレクトにつながります。
多くの製品開発のソ
全てをテストしていな
フト検 証 工 程 で は 、
い製品を市場に出荷し
試作した製品モデル
てしまうと言 うことは、
を手に、 大所帯のデ
「運が悪ければ」市場
バッグチームが実際に
で不具合が発生してし
ガイオの立場からご紹介できる範囲の
操作して、 不具合を
まうと言うことです。 市
実例として、 ガイオがリリースしているク
見つける作業が行わ
場で不具合が出ていないケースでも、 単
ロスコンパイラ製品の品質保証の手法を
れています。これは一般に 「
ブラックボッ
に「
運が良いだけ」ではないでしょうか?
ご紹介します。
クステスト」と言われています。 ハードウ
例外処理も含めたソフトウエアの実行経
皆様の開発する組み込みソフトとは明ら
エアを操作してその場で起こる現象をデ
路を全てテストできれば、 このような運を
かに分野が異なりますが、 クロスコンパイ
バッグしているわけですから、 ソフトウエ
天に任せるような話はなくなり、 ソフトウエ
ラ製品もソフトウエアであり、 この品質を
アが持つ実行パスのうち、正常動作系の
アの品質を保証できることになるのです。
どのように保証しているかは、 組み込み
パスに重点が置かれたデバッグになって
います。
しかしながら、 どんなに人数を注ぎ込
んでデバッグしても、 市場で不具合が見
つかるケースは多くあります。
これは、 実機によるブラックボックステス
トでは、 テストできないケースがあると言
うことです。 不具合の多くは、 正常動作
系ではなく、 例外動作系にあると言われ
ています。
ソフトウエアの例外処理部分がテストさ
れていれば、 このような不具合は起こら
ない訳ですが、 実機による正常動作系
に偏ったブラックボックステストでは、 例
外処理を起こすことができないため、 テ
ストパターンから漏れてしまうのです。
?
4
GAIO CLUB
ガイオのクロスコンパイラ製品の
品質保証の例
ソフトのテスト手法へつながる所も多くあ
ソフトウエアの品質を高めるには
ると思います。
実機でのテストでき
自動化されたテスト工程
ない例外処理をテスト
する方法の1つが 「
シ
クロスコンパイラに限らず、 ガイオのク
ミュレータ」による動
ロス製品のテスト工程は、 完全に自動化
作検証です。 シミュ
されています。もちろん、コンパイラ開発
レータは、 マイコン自
当初は自動化されたテストシステムはあり
身の動作や、 外的なハードウエアの振る
ませんでした。このテストシステムは、20
舞いなどをソフトウエアで実現するため、
数年に渡りコンパイラを供給し続けてきた
例外動作を起こしたり、 ソフトウエアをモ
ことから生まれた資産、 ノウハウに他なり
ジュール単位に動作させたりすることがで
ません。
きます。
自動化する前のテスト方法とは、 テスト
ハードウエアの試作モデルのように、 ソ
用のCソースを用意し、 これを開発した
フトウエアが ROM に実装されたブラック
ばかりのコンパイラでコンパイルし、 生
ボックステストでは出来ないことが、 簡単
成したオブジェクトをブレッドボードで実行
に行えるようになります。
し、 実行結果が期待値通りになるかを、
ソースコードレベルで、 関数、 タスクな
目視で確認すると言うものでした。 新し
どのモジュールが見える形で行うテストの
いマイコン用のコンパイラを新規開発した
ことを 「
ホワイトボックステスト」と呼んでい
場合、 テストだけで、 約 12 人月の工数
ます。
がかかっていました。
現在では、この一連のテスト作業を、シ
業から解放されるため、 バグフィックスの
化を行うことができます。
ミュレータを用いて自動化しており、新規
作業や、 ソフト更新、 デバッグの作業を
特に、 実機を使ったデバッグでは決し
のコンパイラを開発した場合でも、 1週
行うことができます。
て出来ない、 関数、 タスクと言ったモ
間1台の PC を回しっ放しにするだけで、
テスト用のソースコードは、 20 年来書き
ジュール単位でのカバレッジテストや、 if
自動的にテスト結果を出力するようなシス
貯めたものであり、 コンパイラ品質を確認
文が深くネストした複雑な条件分岐を含
テムになっています。
するためのガイオの資産となっています。
むソフトの実行パスカバレッジなども、 そ
工数から見れば、 自動化システムの導
まれに、 この自動テストをパスしたコンパ
の条件を故意に起こすシナリオをシミュ
入で、 1/50 の工数で、 しかも確実なテ
イラでも不具合が見つかることがあり、 こ
レータに設定するだけで、 容易にテスト
ストが可能になったわけです。
れは、 新しいテストパターンとして、 テス
することができます。
ト用ソースコードに順次追加しています。
ソフト開発過程において、 ソフトウエア
自動テストの仕組み
右の図は、 コンパイラ開発のフロー図
です。 開発した新しいマイコン用のコン
パイラ・アセンブラをテストするステップ
は、 まず、 資産化されたテストデータ、
すなわちテスト用のソースコードを開発し
たコンパイラでコンパイルし、 オブジェク
トコードを生成します。
を修正 ・更新した場合、 前のバージョン
組み込みソフト検証での自動化
いわゆる 「
レベルダウン」に対する保証
組み込みソフトの検証においても、 シ
テストなどは、 自動化テストにより、 同じ
ミュレータを使用してソフトウエアの実行
シナリオをシミュレータにかけるだけです
ができる環境が整えば、 ガイオのコンパ
ので、 非常に効率的にソフトウエアの品
イラテストの場合と同様に、 テストの自動
質を保つことができます。
ガイオのコンパイラ自動テストのフロー
次に、 このオブジェクトコードをシミュ
レータで実行します。 しかしながら、 新
しいマイコンのコンパイラを開発している
では動いていた機能が動かなってしまう、
組み込みソフト自動テスト運用例
テスト用のソースコード
(テストデータ資産)
必要に応じて
テストパターンを追加
開発した組み込みソフト
ソースコード
*.c
時点では、 当然そのマイコン用のシミュ
*.c
組み込みソフト
開発者
レータも完成しておらず、 同時並行か、
開発したクロスコンパイラ
先行して開発されています。
テスト用のソースコードには、 printf()文
に相当するものが入っており、 実行結果
言語処理クロス
コンパイラ
アセンブラ
開発したアセンブラ
コンパイラ
開発者
必要に応じて
テストパターンを追加
をログファイルに出力できるようになって
います。
実行オブジェクト
実行オブジェクト
全てのテスト用ソースコード(
数千ファイ
ル)をバッチファイルで一括処理して、ロ
グファイルを作成します。 コンパイラには
多くのコンパイラオプションがありますの
で、 これを変えながら、 繰り返しテストを
シミュレータ
開発者
開発したシミュレータ(ISS)
全てのパスを実行
するシナリオデータ
シミュレータ(winAMSなど)
することになります。 この工程には、 PC
実行結果を
printf()出力
を回しっ放しで 1 週間以上かかります。
出力されたログファイルの結果を、期待
値ファイルと比較して、期待値と食い違う
部分をレポートする仕組みとなっていま
す。 期待値ファイルは、 1から作成して
*.l
og
シミュレータ
実行結果ログ
expect
.l
og
期待値データ
比較ツール
*.l
og
シミュレータ
実行結果ログ
expect
.l
og
期待値データ
比較ツール
いるわけではなく、 既に品質が保証を終
えたマイコンのコンパイラで作成されたロ
グファイルを活用しています。
テスト結果
テスト結果
コンパイラとシミュレータを同時開発して
いますので、テスト結果がNGとなった場
ソフトウエアの効率的な品質保証は テストの自動化で行えます
合、 両方の開発者に情報をフィードバッ
ガイオ ・テクノロジー 開発部 浅野 昌尚
クして、 開発担当同士で原因の切り分け
弊社のクロスコンパイラもソフトウエアの1つですが、多種多様なCプログラムに対
を行っています。
して正しいオブジェクトを生成する必要があるため、 品質保証のためのテストパ
ターンは、膨大な量になります。現在は、テストの自動化を進め、無人でテスト
テスト期間中は、 開発者はテストの作
処理を行える環境を構築し、効率的な製品開発を行っています。
GAIO CLUB
5