6.8K Views
September 22, 22
スライド概要
社内勉強会向け資料です。
TDD概要・テストフレームワーク(CppUTest)選定理由・マイコンボードにCppUTestを組込みTDDしたことを書きました。
組込みソフトウェアエンジニア。 技術バックボーンはC言語・ベアメタル。 CQ EVカートのオーナーで、ハード・ソフトウェアの改造を通じて自身のスキルアップを日々考え中・・・。 LAPRASポートフォリオ: https://lapras.com/public/k-abe GitHub: http://github.com/grace2riku Qiita: https://qiita.com/juraruming Zenn: https://zenn.dev/k_abe よろしくね。
組み込みソフトウェア基礎 【連続講座 #5】テスト駆動開発 はじめ の一歩 2022/9/22 パーソルテクノロジースタッフ株式会社 阿部耕二 [email protected]
目次 • 自己紹介 • 参加者一言コメント • 講座開催の背景・目的 • 本日のテーマ【テスト駆動開発 はじめの一歩】 • TDD学習の参考 • 参加者感想 • 次回予告 2
自己紹介 • 阿部 耕二(あべ こうじ) • 技術本部 機電技術部 首都圏2G • [email protected] • 医療機器開発 • 組込みソフトウェア開発。C言語、ベアメタルの開発業務経験がほとんど。 • LAPRASポートフォリオ:https://lapras.com/public/k-abe • twitter: @juraruming 3
参加者一言コメント ご自由に一言コメントいただけますとありがたいです。 例) お名前 例) 今回の講座に期待すること 例) お仕事内容(話せる範囲で) 例) ソフトウェア開発担当工程(要求仕様の定義?設計?実装?テスト?) 4
講座開催の背景・目的 • なにかテーマを決めて、ソフトウェア開発の上流工程から下流工程まで 説明する講座を開催し、スキルアップを図る。 ■要求仕様の理解 資料・記事 ■要求仕様の仕様化 資料・記事 ■設計 ●概要 資料・記事 ●詳細 資料・記事 ■TDD ●#1 テスト駆動開発はじめの一歩 ★いまここ ●#2 LEDドライバ(ホストPC編) ●#3 LEDドライバ(ターゲット編) ●#4 ●#5 5
講座開催の背景・目的 テーマ: 【既存組込み製品(CQ EVカート)の マイコンを移植する】 6
講座開催の背景・目的 テーマ:【既存組込み製品のマイコンを移植する】 対象装置:CQ EVカート 背景: ・講師が持っており、対象装置のドメイン知識を理解している。 ・ソフトウェアの構造を理解している。 ・対象装置のマイコンが新規採用非推奨品になった。 ⇛学習・スキルアップのため別マイコンに移植してみよう!!! 7
本日のテーマ 【テスト駆動開発 はじめの一歩】 • テスト駆動開発とは? • 環境構築 • テストを書いてみる 8
本日のテーマ 【テスト駆動開発 はじめの一歩】 • テスト駆動開発とは? • 環境構築 • テストを書いてみる 9
【テスト駆動開発 はじめの一歩】 • テスト駆動開発とは? 文字とおりテストでソフトウェア開発を駆動していく。 テストが開発の起点となる。 実装→テストではなく、テスト→実装の順番で開発を進める。 ・【テスト駆動】してどうする? テストを書いてより良い設計を導くことがTDDの目指すところ。 10
【テスト駆動開発 はじめの一歩】 ▪テスト駆動開発とは? ●テスト駆動開発をやるモチベーション ・デグレードが少なくなる。 ・リファクタリングでコードが綺麗になる。 ・開発者の不安が少なくなる(なくなりはしないと思う)。 11
【テスト駆動開発 はじめの一歩】 ▪テスト駆動開発とは? ●【組込み】でテスト駆動開発をやるモチベーション ・ハードウェアがなくてもテストができる。 ・ハードウェア・ソフトウェアの不具合要因切り分けが明確になる。 ハードウェア起因もしくはターゲットマイコンのプラットフォーム起因 (リンクしているライブラリのバグなど)の切り分け 12
【テスト駆動開発 はじめの一歩】 ▪テスト駆動開発とは? ●私がTDDを学びはじめた動機 ・組込み製品の派生開発(既存機種のバージョンアップ)でデグレードが 多く発生。 →既存機能が正しく動くことを保証しながらも新機能を組み込むノウハ ウを学びたかった。 13
【テスト駆動開発 はじめの一歩】 ▪テスト駆動開発とは? ●私がTDDを学んだ感想 ・素直に楽しい。 ・TDDのサイクル(レッド→グリーン→リファクタリング)を回すのが楽しい。 ・テストを書いてテストが成功したときの快感。 ・安心できる。 ・コードが成長していく実感が得られる。 ・コードが綺麗に保たれている実感がある。 14
【テスト駆動開発 はじめの一歩】 ▪テスト駆動開発とは? ●組込みでTDDを推進していくうえでの課題 ・TDD開始前の戦略立案(どこまでTDDを使うのか) ・テストが難しい領域(例. 組込み装置の画面系)でのTDD活用 ・良い設計を導くためのTDD活用 現状はテストフレームワークを使いテストを書き、TDDのサイクルを回せるよ うになったという状況。 TDDを使った良い設計の例はTDD学習の参考 4, 5が参考になる。 15
本日のテーマ 【テスト駆動開発 はじめの一歩】 • テスト駆動開発とは? • 環境構築 • テストを書いてみる 16
【テスト駆動開発 はじめの一歩】 ▪環境構築 ●テストフレームワークの選択 ・Unity ・CppUTest ・Google Test TDD学習の参考 1の本で多く説明されている, マイコンにも組込み可能なテス トフレームワークのCppUTestとした。 ホスト環境でのみTDDするのだったらGoogle Test推しの声が多い気がする。 17
【テスト駆動開発 はじめの一歩】 ▪環境構築 ●ターゲットマイコンの選定 STマイクロエレクトロニクスのSTM32マイコンボード【NUCLEOF446RE】に決めた。 ・STM32F446RET6 64ピン ・Arm Cortex-M4コア 180MHz ・フラッシュ: 512Kbyte ・SRAM: 128Kbyte ・Arm Mbed対応 18
【テスト駆動開発 はじめの一歩】 ▪環境構築 ●ターゲットマイコンの選定理由 ・テーマ:【既存組込み製品(CQ EVカート)のマイコンを移植する】では モーター制御用をおこなう。 該当マイコンボードに搭載されているマイコンはモーター制御用のタイ マー機能を持っていたため。 ・他のSTM32マイコンボードより多く使ったことがあり慣れていた。 19
本日のテーマ 【テスト駆動開発 はじめの一歩】 • テスト駆動開発とは? • 環境構築 • テストを書いてみる 20
【テスト駆動開発 はじめの一歩】 ▪テストを書いてみる ●TDDのステップ ・テストを書く。 ・テスト失敗を確認する(レッド)。 ・テスト成功させるためのプロダクトコードを書く。 ・テスト成功を確認する(グリーン)。 ・テスト成功したままソースコードを綺麗する(リファクタリング) 21
【テスト駆動開発 はじめの一歩】 ▪テストを書いてみる ★TDDサイクルを回してみるデモ TDD学習の参考 1の本 LEDドライバーのテスト対象にする。 テストコード: テスト対象のプロダクトコード LEDドライバ LedDriver.c, LedDriver.h CppUTestの書き方で テストを書く LedDriverTest.cpp main関数: テスト実行 RunAllTests.cpp 22
【テスト駆動開発 はじめの一歩】 ▪テストを書いてみる ターゲットボードでTDDしてみた話 STM32CubeIDEにCppUTestを環境構築し、STM32マイコンでTDDす る githubはこちら。 ポイント: ・RAMでテスト実行(ROM書き換え時間、書き換え回数考慮) ・統合開発環境のみでテスト可能(シリアルターミナル不要) ・CppUTestのメモリ使用量 23
TDD学習の参考 1. テスト駆動開発による組み込みプログラミング 2. [動画で解説]和田卓人の“テスト駆動開発”講座 記事一覧 3. 『テスト駆動開発による組み込みプログラミング』を読んで学んだこと 4. TDDによるマイコンのLチカ開発(1) 5. TDDによるマイコンのLチカ開発(2)(完) 24
参加者感想 • 是非とも講座の感想を一言お願いします。 25
次回予告 次回は【10/31(木) 19:30〜20:30】で開催予定です。 【連続講座 #6】テスト駆動開発#2 LEDドライバ(ホストPC編) ホストPCでTDDしたいと考えています。 参加の方、是非ともよろしくおねがいします。 26
参考【テーマの前提説明】 • テーマの前提説明 【CQ EVカート】とは??? ・動画1: 走行中 ・動画2: 基板を拡大 過去に書いた技術書(EV カート 始めるモ ル ース開発)をベースに説明します。 記載箇所:【第1章 EVカートとは何か】 ベ デ で 27
参考【テーマの前提説明】 • テーマの前提説明 テーマ:【既存組込み製品のマイコンを移植する】は次の前提とする。 ・派生開発(既にある装置でマイコンのみ変更) ・ハードウェアあり。電気的仕様確認OK。 ・旧マイコンでのソフトウェア資産あり。※GitHub, 資料 の各リンク ・個人開発(お仕事にも適用できるエッセンスはあるかと思います) 28
終わり ご静聴ありがとう ございました。 29