読者です 読者をやめる 読者になる 読者になる

組み込み開発へのテスト駆動開発の導入

ソフトウェア開発

 早速テスト駆動開発(以下TDD)について検討を始めましたが、やはり組み込みではいろいろ困難が伴いますね。

 一番大きな障壁は、ホスト上でのテスト環境の構築です。組み込みでのテストにおいて、ターゲットを伴ったテストは当然必要でしょうが、ターゲットが形になってからテストを始めるのは、遅すぎてとてもTDDとはいえません。そのためTDD導入にはまずターゲットに依存しないテスト環境が必要になります。しかしそのターゲット非依存のテスト環境の構築というのが難しい。

 ターゲット非依存のテスト環境としては、一般的なものとして2つ挙げられると思います。1つはターゲット非依存のコードを器用に抜き出して単体テストを行う、実機を伴わないテスト環境。もう1つはターゲットに近い実機環境で実現される、実機を伴うテスト環境です。

実機を伴わないテスト環境

 まず実機を伴わないテスト環境についてですが、なかなか簡単にいきません。エンプラ系等では大抵、開発環境上でコードをビルドし実行できるのに対し、組み込みではそれが困難であるためです(モデルベーステストや、システム記述言語で実現したモジュールテストは、実際のコードを書く訳ではないので、今回は除外します)。
 当然CUnitなどは一部を除いて使えませんし、開発環境がテスト不能なIDEに縛れらる場合もざらにあります。


 もちろん組み込み向けの実機非依存のテストツールもいくつか存在しますが、それらは問題を持っていることが多いです。
 例えば開発ツールというのは大抵海外製ですので、多くの製品がARMやAda、MISRA-Cといった欧米の需要に対応する一方で、ルネサスやESCRといった日本の需要にほとんど対応していないという問題があります(もちろんエンプラ系開発においても開発ツールは海外製が多いですが、実行環境などが世界規模でWindowsやLinuxなどに統一されているため、このような問題はあまり深刻化していないように感じます)。
 また製造業向け・メーカー向けの製品は、パッケージソフトであっても非常に強気な価格設定をしているものが多いという問題があります。一例を出すと、DoxygenSubversionと同等の機能を持つ製品に、1ライセンス50万、100万といった価格をつけるようなことが普通に行われています。シミュレータなどといった高度な機能が付けば、1ライセンス数百万なんて導入費用が発生します。組み込み向けツールは特定の実機環境に依存してしまうことが多いだけに、そのような高額な製品に対しては導入に慎重にならざるを得ません。


 上記のような理由から、組み込みの開発現場では、Visual C++などでテストベンチを作りそこにテスト対象をコピペしてテストしたり、ソースコードにテストベンチを含ませたりするような手法で、テストを代替しているのをよく見かけます。ただ可能なことは可能な手段ですが、色々ややこしいところもありますので、実施は開発者の熱意に依存することが多いです。


 次に実機を伴うテスト環境についてですが、結語まで少し長くなりそうなので、次回に回したいと思います。