ETロボコンでも使える単体テストフレームワーク
これは、ETロボコン Advent Calendar 2014 - Adventarの 8日目のエントリーです。
単体テストの必要性
ETロボコンに限らず、作成したS/Wはテストを行う必要があります。人間がプログラムを書いている以上、S/Wには誤りが混在しうるためです。
では、ETロボコンに参加しているチームはどのようにテストを行っているのでしょうか?私がこれまで目にした限りでは、残念ながら「実機に載せて動かしてみる」が最も多かったと感じています。実は、筆者が選手としてETロボコンに参加している時も、その方法をとっていました。
しかし、実機にプログラムをロードして動かすにはそれなりの時間がかかりますし、動かした結果バグを検出できるとは限りません。このため、もっと機械的にかつ効率良くバグを検出するために、単体テストを自動化すべきです。
尚、本記事で取り上げる単体テストとは下記URLで解説されているものを想定しています。「単体テストをよく知らない」という人は一読ください。
単体テスト(ユニットテスト)とは|検証の種類-単体テスト(ユニットテスト)|テクマトリックス株式会社
フレームワークとは
単体テストを行う際、フレームワークを使うと便利です。フレームワークを使わないと、ドライバやスタブを全て自分で作成しなければならず、面倒です。
フレームワークを使うと、
- テストコードのみ作成すればよい
- テストの実施、結果集計を行ってくれる
- テストの結果判定が楽になる(アサートマクロ)
といったメリットがあります。
C言語用のフレームワーク
PCUnitを推します。
理由
C++用のフレームワーク
GoogleTestを推します。
googletest - Google C++ Testing Framework - Google Project Hosting
理由
- GoogleMockと合わせて使うことで、Mockを導入しやすい
- 日本語のドキュメントが充実している
テストフレームワークについて詳しく知りたい人へ
組込みS/Wにおけるユニットテストについて解説した本といえば、これですね。
テスト駆動開発による組み込みプログラミング ―C言語とオブジェクト指向で学ぶアジャイルな設計
- 作者: James W. Grenning,蛸島昭之(監訳),笹井崇司
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/04/24
- メディア: 大型本
- この商品を含むブログ (12件) を見る
最近ではこんな記事も出ていました。
おわりに
機会があれば、「ロボコン用の単体テスト環境を構築する方法」を記事にしたいと思っています。(環境構築は長くなるので、本記事ではここまでで(^_^;))
また、他チームの方で「うちはこんな方法で試験しているよ」という情報あれば、ぜひぜひ教えていただきたいです。
大会本番で「あわわわわわ、こんなところにバグがぁぁぁぁ」なんてことのないように、しっかりとテストしましょう。