Help us understand the problem. What is going on with this article?

テスト駆動開発による組み込みプログラミングをgoogletestでやる

More than 1 year has passed since last update.

はじめに

Amazon.co.jp: テスト駆動開発による組み込みプログラミング ―C言語とオブジェクト指向で学ぶアジャイルな設計

本記事は、上記書籍を使って学習を始める人が、環境構築で躓かないようにしたい、という主旨のシリーズ第1弾です。

私は組込みシステム開発をしており、C言語をメインに使っています。
この本に出合う前は、コードを修正するたび、クロスビルドして、ターゲットボードにバイナリをコピーして動作確認をしていました。ハードウェアはチーム人員に対して十分な量がないため、他のメンバーがハードウェアを使っているときは、動作確認できず、開発が滞ることも多かったです。

今年の2月に、この本に出会い、書かれていることを業務でも実践するようになりました。
結果として、私の開発スタイルがガラっと変わりました。デュアルターゲットのビルド環境を整え、ハードウェアがなくても、ホスト上でユニットテストベースの開発を行えるようになり、自動ユニットテストにより、ちょっとしたミスがすぐに見つかるようになりました。
自分の書いたコードの品質にも少しだけ自身が持てるようになってきました。

今や、新しく追加する機能は、全てTDDで開発し、既存箇所にも時間を見つけてテストを書き、容赦ないリファクタリングを続けています。
コードは改修を重ねるたびに、より読みやすく、良い設計に進化していると感じています。

本書では、テスティングフレームワークとして、UnityとCppUnitが紹介されています。
そのままやるのも芸がないと考えたのと、本書を勉強する上で後述する躓きがあったため、今回、googletestを使ってすぐに本書の勉強が始められるソースコードを公開することにしました。

ビルドツールにはAutotoolsを使っています。そのため、公開しているソースコードは、クロスコンパイラでそのままクロスビルドすることが可能です。
googletestは、インストールなしで動作するので、クロスビルドしたバイナリをターゲットボードにポンっと置けば、ターゲットボード上でユニットテストが動きます。

学習する上で躓いたこと

本書を読み進めながら、Unity, CppUnitを使って写経しようとしましたが、恥かしながら、環境構築で躓きました…。(何で躓いたか、もう忘れてしまったのですが、なんだかんだで1日くらい格闘していたと思います)
また、公開されているサンプルコードでは、ビルドスクリプトが(自分にとっては)複雑で、自分でちょっと拡張したい、ということが簡単にはできませんでした。
ちょっとしたことなのですが、学びたいこと以外のところで躓くと、学習意欲が削がれやすいです。

組込み業界入りたての人でも、自分でファイル追加して、写経できるような環境を考えて、作ってみました。

ソースコード

ソースコードは以下です。
https://github.com/tomoyuki-nakabayashi/TDDforEmbeddedC

4章終了時点のプロダクトコードとテストコードを公開しています。
git, gcc, autotoolsがインストールされていれば、1分以内にテストが実行できます。

本書を最初から写経したい方は、src/LedDriver.c, src/LedDriver.h, test/LedDriverTest.cppの中身を削除して下さい。

ソースファイルの追加

自分でソースファイルを追加して、色々試してみたい場合には、下記ファイルの該当箇所にファイル名を追加して下さい。
TDDforEmbeddedC/test/Makefile.am

test_sources = \
  TestMain.cpp \
  LedDriverTest.cpp
target_sources = \
  $(top_srcdir)/src/LedDriver.c
gtest_SOURCES = $(test_sources) $(target_sources)

テストダブルとmock

本書の7章以降では、テストダブルとmockの話が掲載されています。
残りの内容に関しても、写経を簡単に始められる環境を整備しました。

テスト駆動開発による組み込みプログラミングをgoogletestでやる8章
テスト駆動開発による組み込みプログラミング~モック&フラッシュドライバ編~
テスト駆動開発による組み込みプログラミングをgoogletestでやる~SOLIDな設計編~

追記

CMakeに対応しました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした