.logbook

学んだことを書き綴る、言わば航海日誌です。

ETロボコンでも使える単体テストフレームワーク

これは、ETロボコン Advent Calendar 2014 - Adventarの 8日目のエントリーです。

単体テストの必要性

ETロボコンに限らず、作成したS/Wはテストを行う必要があります。人間がプログラムを書いている以上、S/Wには誤りが混在しうるためです。

では、ETロボコンに参加しているチームはどのようにテストを行っているのでしょうか?私がこれまで目にした限りでは、残念ながら「実機に載せて動かしてみる」が最も多かったと感じています。実は、筆者が選手としてETロボコンに参加している時も、その方法をとっていました。

しかし、実機にプログラムをロードして動かすにはそれなりの時間がかかりますし、動かした結果バグを検出できるとは限りません。このため、もっと機械的にかつ効率良くバグを検出するために、単体テストを自動化すべきです。

尚、本記事で取り上げる単体テストとは下記URLで解説されているものを想定しています。「単体テストをよく知らない」という人は一読ください。

単体テスト(ユニットテスト)とは|検証の種類-単体テスト(ユニットテスト)|テクマトリックス株式会社

フレームワークとは

単体テストを行う際、フレームワークを使うと便利です。フレームワークを使わないと、ドライバやスタブを全て自分で作成しなければならず、面倒です。

フレームワークを使うと、

  • テストコードのみ作成すればよい
  • テストの実施、結果集計を行ってくれる
  • テストの結果判定が楽になる(アサートマクロ)

といったメリットがあります。

C言語用のフレームワーク

PCUnitを推します。

理由

  • C言語かつ組込みS/W向けのテストフレームワークで、動作が軽い
  • Mock関数の作成に対応している点も他のフレームワークと比べて優位性あり
  • 日本語の解説がわかりやすく、初めて使う場合でも困らない

C++用のフレームワーク

GoogleTestを推します。

googletest - Google C++ Testing Framework - Google Project Hosting

理由

  • GoogleMockと合わせて使うことで、Mockを導入しやすい
  • 日本語のドキュメントが充実している

テストフレームワークについて詳しく知りたい人へ

組込みS/Wにおけるユニットテストについて解説した本といえば、これですね。

最近ではこんな記事も出ていました。

おわりに

機会があれば、「ロボコン用の単体テスト環境を構築する方法」を記事にしたいと思っています。(環境構築は長くなるので、本記事ではここまでで(^_^;))

また、他チームの方で「うちはこんな方法で試験しているよ」という情報あれば、ぜひぜひ教えていただきたいです。

大会本番で「あわわわわわ、こんなところにバグがぁぁぁぁ」なんてことのないように、しっかりとテストしましょう。