---
title: 組み込みソフトウェア基礎_【連続講座 #5】テスト駆動開発 はじめの一歩_221124_connpass_event_slide
tags:  #tdd  
author: [k-abe@組み込みソフトウェアの人](https://convert.docswell.com/user/juraruming)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/VJP98YWLE8.jpg?width=480
description: 2022/11/24に開催したイベント(#5 【連続イベント】組込みソフトウェア基礎 TDD #1 はじめの一歩 概要・環境構築)の資料です。 https://k-abe.connpass.com/event/264592/
published: November 24, 22
canonical: https://convert.docswell.com/s/juraruming/5RVGRZ-2022-11-24-212247
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/VJP98YWLE8.jpg)

組み込みソフトウェア基礎
【連続講座 #5】テスト駆動開発 はじめの一歩
2022/11/24 Connpassイベント版
2022/11/24
パーソルテクノロジースタッフ株式会社
阿部耕二 koji.abe@persol.co.jp


# Page. 2

![Page Image](https://bcdn.docswell.com/page/2EVMNG86EQ.jpg)

自己紹介 1
▪パーソルテクノロジースタッフ株式会社
技術本部 機電技術部 首都圏2G 阿部 耕二（あべ こうじ）
▪医療機器開発
・組込みソフトウェア開発。
・C言語、ベアメタルの開発業務経験がほとんど。
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/57GGK8527L.jpg)

自己紹介 2
▪技術書を書いて技術書典13に参加したり、
▪マイコンのコンテスト(※)に参加したり、
※SPRESENSE™ 活用コンテスト
組込みソフトウェア開発が好きなおじさんです。
よろしくお願いします。
▪LAPRASポートフォリオ：https://lapras.com/public/k-abe
3
▪twitter: @juraruming


# Page. 4

![Page Image](https://bcdn.docswell.com/page/4EQXN9Z97P.jpg)

目次
• 講座開催の背景・目的
• 本日のテーマ【テスト駆動開発 はじめの一歩】
• TDD学習の参考
• QA
• まとめ
• 次回予告
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/KJ46GXDR71.jpg)

講座開催の背景・目的
• なにかテーマを決めて、ソフトウェア開発の上流工程から下流工程まで
説明する講座を開催し、スキルアップを図る。
■要求仕様の理解 資料・記事
■要求仕様の仕様化 資料・記事
■設計
●概要 資料・記事
●詳細 資料・記事
■TDD
●#1 テスト駆動開発はじめの一歩 ★いまここ
●#2 LEDドライバ(ホストPC編)
●#3 LEDドライバ(ターゲット編)
●#4
●#5
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/LE1VDNZV7G.jpg)

講座開催の背景・目的
テーマ：
【既存組込み製品(CQ EVカート)の
マイコンを移植する】
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/GEWLY49372.jpg)

講座開催の背景・目的
テーマ：【既存組込み製品のマイコンを移植する】
対象装置：CQ EVカート
背景：
・講師が持っており、対象装置のドメイン知識を理解している。
・ソフトウェアの構造を理解している。
・対象装置のマイコンが新規採用非推奨品になった。
⇛学習・スキルアップのため別マイコンに移植してみよう!!!
7


# Page. 8

![Page Image](https://bcdn.docswell.com/page/47ZMX29GE3.jpg)

本日のテーマ
【テスト駆動開発 はじめの一歩】
• テスト駆動開発とは?
• 環境構築
• テストを書いてみる
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/YJ6N4VKQJV.jpg)

本日のテーマ
【テスト駆動開発 はじめの一歩】
• テスト駆動開発とは?
• 環境構築
• テストを書いてみる
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/GJ55QDP2J4.jpg)

【テスト駆動開発 はじめの一歩】
• テスト駆動開発とは?
文字とおりテストでソフトウェア開発を駆動していく。
テストが開発の起点となる。
実装→テストではなく、テスト→実装の順番で開発を進める。
・【テスト駆動】してどうする?
テストを書いてより良い設計を導くことがTDDの目指すところ。
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/LE3NVM31E5.jpg)

【テスト駆動開発 はじめの一歩】
▪テスト駆動開発とは?
●テスト駆動開発をやるモチベーション
・デグレードが少なくなる。
・リファクタリングでコードが綺麗になる。
・開発者の不安が少なくなる(なくなりはしないと思う)。
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/8EDW864K7G.jpg)

【テスト駆動開発 はじめの一歩】
▪テスト駆動開発とは?
●【組込み】でテスト駆動開発をやるモチベーション
・ハードウェアがなくてもテストができる。
・ハードウェア・ソフトウェアの不具合要因切り分けが明確になる。
ハードウェア起因もしくはターゲットマイコンのプラットフォーム起因
(リンクしているライブラリのバグなど)の切り分け
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/V7P98YM3J8.jpg)

【テスト駆動開発 はじめの一歩】
▪テスト駆動開発とは?
●私がTDDを学びはじめた動機
・組込み製品の派生開発（既存機種のバージョンアップ）でデグレードが
多く発生。
→既存機能が正しく動くことを保証しながらも新機能を組み込むノウハ
ウを学びたかった。
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/2JVMNG9NJQ.jpg)

【テスト駆動開発 はじめの一歩】
▪テスト駆動開発とは?
●私がTDDを学んだ感想
・素直に楽しい。
・TDDのサイクル(レッド→グリーン→リファクタリング)を回すのが楽しい。
・テストを書いてテストが成功したときの快感。
・安心できる。
・コードが成長していく実感が得られる。
・コードが綺麗に保たれている実感がある。
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/5EGGK8Z5EL.jpg)

【テスト駆動開発 はじめの一歩】
▪テスト駆動開発とは?
●組込みでTDDを推進していくうえでの課題
・TDD開始前の戦略立案(どこまでTDDを使うのか)
・テストが難しい領域(例. 組込み装置の画面系)でのTDD活用
・良い設計を導くためのTDD活用
現状はテストフレームワークを使いテストを書き、TDDのサイクルを回せるよ
うになったという状況。
TDDを使った良い設計の例はTDD学習の参考 4, 5が参考になる。
15


# Page. 16

![Page Image](https://bcdn.docswell.com/page/4JQXN9LLEP.jpg)

本日のテーマ
【テスト駆動開発 はじめの一歩】
• テスト駆動開発とは?
• 環境構築
• テストを書いてみる
16


# Page. 17

![Page Image](https://bcdn.docswell.com/page/K746GXD5E1.jpg)

【テスト駆動開発 はじめの一歩】
▪環境構築
●テストフレームワークの選択
・Unity
・CppUTest
・Google Test
TDD学習の参考 1の本で多く説明されている, マイコンにも組込み可能なテス
トフレームワークのCppUTestとした。
ホスト環境でのみTDDするのだったらGoogle Test推しの声が多い気がする。
17


# Page. 18

![Page Image](https://bcdn.docswell.com/page/LJ1VDNZ2EG.jpg)

【テスト駆動開発 はじめの一歩】
▪環境構築
●ターゲットマイコンの選定
STマイクロエレクトロニクスのSTM32マイコンボード【NUCLEOF446RE】に決めた。
・STM32F446RET6 64ピン
・Arm Cortex-M4コア 180MHz
・フラッシュ: 512Kbyte
・SRAM: 128Kbyte
・Arm Mbed対応
18


# Page. 19

![Page Image](https://bcdn.docswell.com/page/GJWLY492E2.jpg)

【テスト駆動開発 はじめの一歩】
▪環境構築
●ターゲットマイコンの選定理由
・テーマ：【既存組込み製品(CQ EVカート)のマイコンを移植する】では
モーター制御をおこなう。
該当マイコンボードに搭載されているマイコンはモーター制御用のタイ
マー機能を持っていたため。
・他のSTM32マイコンボードより多く使ったことがあり慣れていた。
19


# Page. 20

![Page Image](https://bcdn.docswell.com/page/4EZMX294J3.jpg)

本日のテーマ
【テスト駆動開発 はじめの一歩】
• テスト駆動開発とは?
• 環境構築
• テストを書いてみる
20


# Page. 21

![Page Image](https://bcdn.docswell.com/page/Y76N4VKG7V.jpg)

【テスト駆動開発 はじめの一歩】
▪テストを書いてみる
●TDDのステップ
・テストを書く。
・テスト失敗を確認する(レッド)。
・テスト成功させるためのプロダクトコードを書く。
・テスト成功を確認する(グリーン)。
・テスト成功したままソースコードを綺麗する(リファクタリング)
21


# Page. 22

![Page Image](https://bcdn.docswell.com/page/G755QDPX74.jpg)

【テスト駆動開発 はじめの一歩】
▪テストを書いてみる
★TDDサイクルを回してみるデモ
TDD学習の参考 1の本 LEDドライバーのテスト対象にする。
テストコード：
テスト対象のプロダクトコード
LEDドライバ
LedDriver.c, LedDriver.h
CppUTestの書き方で
テストを書く
LedDriverTest.cpp
main関数：
テスト実行
RunAllTests.cpp
22


# Page. 23

![Page Image](https://bcdn.docswell.com/page/9J2NP86QER.jpg)

【テスト駆動開発 はじめの一歩】
▪テストを書いてみる
ターゲットボードでTDDしてみた話
STM32CubeIDEにCppUTestを環境構築し、STM32マイコンでTDDす
る
githubはこちら。
ポイント：
・RAMでテスト実行(ROM書き換え時間、書き換え回数考慮)
・統合開発環境のみでテスト可能(シリアルターミナル不要)
・CppUTestのメモリ使用量
23


# Page. 24

![Page Image](https://bcdn.docswell.com/page/DEYP569YEM.jpg)

TDD学習の参考
1. テスト駆動開発による組み込みプログラミング
2. ［動画で解説］和田卓人の“テスト駆動開発”講座 記事一覧
3. 『テスト駆動開発による組み込みプログラミング』を読んで学んだこと
4. TDDによるマイコンのLチカ開発(1)
5. TDDによるマイコンのLチカ開発(2)(完)
24


# Page. 25

![Page Image](https://bcdn.docswell.com/page/VJN5NZLR78.jpg)

QA
• ご質問、気になったことあれば共有をお願いします。
25


# Page. 26

![Page Image](https://bcdn.docswell.com/page/YE9YRZ4ZJ3.jpg)

まとめ
▪ いろいろ書きましたがTDDのステップに則りまずは手を動かして体感してみる、がTDDを理解するはじめ
の一歩かなと思います。
●TDDのステップ(再掲)
・テストを書く。
・テスト失敗を確認する(レッド)。
・テスト成功させるためのプロダクトコードを書く。
・テスト成功を確認する(グリーン)。
・テスト成功したままソースコードを綺麗する(リファクタリング)
26


# Page. 27

![Page Image](https://bcdn.docswell.com/page/GE86W1VY7D.jpg)

次回予告
次回は【12/22(木) 19:30〜20:15】で開催予定です。
【連続講座 #6】テスト駆動開発#2 LEDドライバ(ホストPC編)
ホストPCでTDDしたいと考えています。
参加の方、是非ともよろしくおねがいします。
27


# Page. 28

![Page Image](https://bcdn.docswell.com/page/LEL9NQ59JR.jpg)

参考【テーマの前提説明】
• テーマの前提説明
【CQ EVカート】とは???
・動画1: 走行中
・動画2: 基板を拡大
過去に書いた技術書(EV カート 始めるモ ル ース開発)をベースに説明します。
記載箇所：【第1章 EVカートとは何か】
ベ
デ
で
28


# Page. 29

![Page Image](https://bcdn.docswell.com/page/4JMZX13VEW.jpg)

参考【テーマの前提説明】
• テーマの前提説明
テーマ：【既存組込み製品のマイコンを移植する】は次の前提とする。
・派生開発(既にある装置でマイコンのみ変更)
・ハードウェアあり。電気的仕様確認OK。
・旧マイコンでのソフトウェア資産あり。※GitHub, 資料 の各リンク
・個人開発(お仕事にも適用できるエッセンスはあるかと思います)
29


# Page. 30

![Page Image](https://bcdn.docswell.com/page/PJR6NLQW79.jpg)

終わり
ご静聴ありがとう
ございました。
30


