SlideShare une entreprise Scribd logo
SWEST25 2023/9/1 セッションS2
【テストからより良い組込みソフトウェア開発を考える】
パーソルクロステクノロジー株式会社
第1技術開発本部 第4設計部 設計2課 阿部耕二
2023 @juraruming
目次
自己紹介
TDDを学ぼうと思った背景
理想のテスト体制について考える
組込みでTDDするうえでの課題
組込みでTDDする際のTips
テストに注目し、より良い組込みソフトウェア開発を考える
参考資料
2
自己紹介
名前: 阿部 耕二(あべ こうじ)
所属: パーソルクロステクノロジー株式会社
第1技術開発本部第4設計部設計2課
医療機器の組込みソフトウェア開発。C言語。
趣味: 宇宙開発(リーマンサットプロジェクト広報メンバー)
LAPRASポートフォリオ: https://lapras.com/public/k-abe
Twitter: @juraruming
テストからより良い組込みソフトウェア開発を考える
2023 @juraruming 3
TDDを学ぼうと思った背景
昨年度、医療機器のバージョンアップで新機能の追加のたびに既存
機能が動かなくなるデグレードが多く発生した。
繰り返されるデグレードの課題解決の案として、テスト駆動開発
(TDD)の学習をはじめた。
学んだこと、実験したことを共有します。何かお役にたてばと思い
ます。
テストからより良い組込みソフトウェア開発を考える
4
理想のテスト体制について考える
現在のテスト体制
実機を使ったテストがテストのメインになっている。
テストに工数がかかる。
機材の準備、テスト環境の構築
-> なにか良い手はないか?と思っていた
テストからより良い組込みソフトウェア開発を考える 〜理想のテスト体制について考える〜
5
こちらの動画を見てテスト体制の理想、進む方向が明確になった。
参考資料1:
「サバンナ便り〜自動テストに関する連載で得られた知見のまと
め〜」t_wada(和田卓人)
理想のテスト体制で目指すところはピラミッド型。
アイスクリームコーン型のテスト体制から脱却しピラミッド型へ近
づきたい!!!
テストからより良い組込みソフトウェア開発を考える 〜理想のテスト体制について考える〜
6
参考資料2より引用
7
参考資料2より引用。開発者のマシンで行うテストはコスト・忠実性
が低い。速度が早いという特徴がある。
8
組込みでTDDするうえでの課題
クロス環境
ホスト環境、ターゲット環境
なにをホストでテストし、なにをターゲットでテストするか?
ホスト環境とターゲット環境の違い
コンパイラ、コンパイラの制約、不具合
リンクするライブラリ、ライブラリの制約、不具合
アーキテクチャ(型のサイズ、エンディアン)
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDするうえでの課題〜
9
テスト環境の制約(テストフレームワーク)
ターゲット環境ではマイコンリソースにより使えるテストフレーム
ワークが限られる。
マイコンではつぎの選択肢になることが多い感触
Unity
CppUTest
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDするうえでの課題〜
10
テスト環境の制約(テスト実行環境)
TDDは
RED⇨GREEN⇨リファクタリング
のサイクルを早く・リズムよく回すことが望ましい。
ターゲット環境(マイコン)はホスト環境に比べてマシンパワーが貧
弱。
テストコードのダウンロードに時間がかかる
FlashROMの書き換え回数が気になる
などなど、組込みソフトウェア開発特有の課題がつきまとう。
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDするうえでの課題〜
11
そんな課題がある組込みソフトウェア開発でTDDをするには?
なにをホスト環境でやり、なにをターゲット環境でやるのかテスト
戦略・組織の方針が重要と感じた。
ターゲット環境でリズムよくTDDをするための方法として、
RAMでテストコードをダウンロード・テストする、などがある。
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDするうえでの課題〜
12
組込みでTDDする際のTips
TDDの学び、実験で得たTipsを共有します。
1. ターゲットの統合開発環境でTDDする例
2. NTShellでテスト環境を整える
3. テストを学びのツールとして使う
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDする際のTips〜
13
1. ターゲットの統合開発環境でTDDする例
STM32マイコンの統合開発環境(以降STM32CubeIDE)にC/C++のテス
トフレームワーク(CppUTest)を環境構築した例
STM32CubeIDEにCppUTestを環境構築し、STM32マイコンでTDDす
る
評価ボード: STMicroelectronics NUCLEO-F446RE
CppUTestはライブラリ化しリンクした(v3.8にて確認。最新はv4.0)
ITMでSTM32CubeIDEのSWV ITM Data Consoleにテスト結果を表
示する
RAMでテストを実行する
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDする際のTips〜
14
STM32マイコンの統合開発環境(以降STM32CubeIDE)にC/C++のテス
トフレームワーク(CppUTest)を環境構築した例
評価ボードNUCLEO-F446RE ハードウェアスペック
STM32F446RET6 64ピン
Arm Cortex-M4コア180MHz
フラッシュ: 512Kbyte
SRAM: 128Kbyte
Arm Mbed対応
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDする際のTips〜
15
STM32マイコンの統合開発環境(以降STM32CubeIDE)にC/C++のテス
トフレームワーク(CppUTest)を環境構築した例
確認できたこと
STM32CubeIDEの中でTDDができた。
CppUTestのテスト失敗・成功が期待とおりに動作していることを
確認した。
ITMでテスト結果を表示することができた。
STM32CubeIDE以外にシリアルコンソールなどのツールも不要。
他のSTMicroelectronics評価ボードでも同様にTDD環境を構築可能な
はず(未確認)。
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDする際のTips〜
16
STM32マイコンの統合開発環
境(以降STM32CubeIDE)に
C/C++のテストフレームワーク
(CppUTest)を環境構築した例
参考)メモリ使用量
RAM使用量は79.10%となっ
た(128KBのうち101.24KB
を使用)。
テストからより良い組込みソフトウェア開発を考える
17
2. NTShellでテスト環境を整える
前述の【1. STM32マイコンの統合開発環境(以降STM32CubeIDE)に
C/C++のテストフレームワーク(CppUTest)を環境構築した例】ではテ
ストを任意のタイミングで実行することができなかった。
そこでシリアルコンソールからのコマンドをトリガにして、軽量シェ
ル(NTShell)経由でテストを実行できる環境を作った。
STM32CubeIDEにCppUTestを環境構築し、STM32マイコンでTDDす
る(2) ~シリアル通信でCppUTestを実行する~
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDする際のTips〜
18
NTShellとは?
組込み向けの軽量なシェル。
Natural Tiny Shell (NT-Shell)
NTShellを使うことで容易にシェル、シェル経由で実行するコマンド
を実現できる。
今回はcpputestというコマンド名でCppUTestを使ったテスト機能を
組み込んだ。
>help
help :This is a description text string for help command.
info :This is a description text string for info command.
read_userbutton :User button B1 reads.
write_led :Write to LED LD2.
cpputest :Exec CppUTest.
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDする際のTips〜
19
使用方法
シリアルコンソールに接続
し、コマンド名称をタイプ
し、エンターキーを押下す
る。
>cpputest
..
../Core/Src/test_src.cpp:10: error: Failure in TEST(FirstTestGroup, FirstTest)
FAIL: FirstTestGroup, FirstTest
.
Errors (1 failures, 3 tests, 3 ran, 3 checks, 0 ignored, 0 filtered out, 0 ms)
テストからより良い組込みソフトウェア開発を考える
20
使用方法2
CppUTestのオプションをそのまま使える。下記は【-v】オプションを
指定し、テストの詳細を表示している。
どのテストを実行しているか明確になった。
>cpputest -v
TEST(FirstTestGroup, IntSize) - 0 ms
TEST(FirstTestGroup, SecondTest) - 0 ms
TEST(FirstTestGroup, FirstTest)
../Core/Src/test_src.cpp:10: error: Failure in TEST(FirstTestGroup, FirstTest)
FAIL: FirstTestGroup, FirstTest
- 0 ms
Errors (1 failures, 3 tests, 3 ran, 3 checks, 0 ignored, 0 filtered out, 0 ms)
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDする際のTips〜
21
使用方法3
CppUTestのオプションの一部を紹介する。
cpputest -v -r3
テストをn回繰り返すオプションは-rn。実行回数で挙動が変わるこ
と・または変わらないことをテストする時などに使えそう。
cpputest -gFirstTestGroup -nFirstTest
-gxxxにはテストグループ名、-nxxxにはテスト名を指定する。指定
テストグループの指定テストを実行する。テストグループの任意の
テストだけを実行したいときに使えそう。
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDする際のTips〜
22
3. テストを学びのツールとして使う
もしTDDをプロダクトコードのテストのみに使っていたらもったいな
い。
つぎの用途にTDDを使った事例を紹介する。
1. プログラミング言語の学習としてTDDを使う
2. ライブラリの挙動を確認する
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDする際のTips〜
23
1. プログラミング言語の学習としてTDDを使う
C++のデフォルト引数の動作を学習するテスト
プログラミング言語の学習にTDDを使うのも有効かと思う。
C++のデフォルト引数の動作を学習するテスト
デフォルト引数の学習用コードの定義
#ifndef __DEFAULT_ARGUMENT_H
#define __DEFAULT_ARGUMENT_H
int defargtest_add(int a = 1, int b = 2);
#endif
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDする際のTips〜
24
// デフォルト引数を使わない
TEST(CppLerningTestGroup, defaultArgumentNone)
{
LONGS_EQUAL(7, defargtest_add(3, 4));
}
// 第1引数のみデフォルト引数 -> コンパイルエラー
//TEST(CppLerningTestGroup, defaultArgument_arg1)
//{
// LONGS_EQUAL(4, defargtest_add(, 3));
//}
// 第2引数のみデフォルト引数
TEST(CppLerningTestGroup, defaultArgument_arg2)
{
LONGS_EQUAL(2, defargtest_add(0));
}
// 第1, 2引数ともにデフォルト引数
TEST(CppLerningTestGroup, defaultArgument_arg1_2)
{
LONGS_EQUAL(3, defargtest_add());
}
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDする際のTips〜
2023 @juraruming 25
1. プログラミング言語の学習としてTDDを使う
今回は例としてC++のデフォルト引数の動きを確認するテストだっ
た。プログラミング言語の学習をするテストや組込みソフトウェアの
特徴的な動作をテストを書いて確認することは学習としても良いと思
う。
ポインタのアドレス演算
CPUのint型のサイズ
エンディアンの確認
初期値付き変数コピー、0クリア領域の0クリア
その他
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDする際のTips〜
26
2. ライブラリの挙動を確認する
ライブラリで動作に確認が持てない場合などはテストで確認する。
今回は2038年問題の対応状況を確認する目的のテストを書き、確認
した。
2038年問題確認用テストコード
【テスト実施の背景】
以前、仕事でファイルシステムのミドルウェアが組み込まれたソフト
ウェアを確認した時に2038年問題に対応していなかった。ドキュメン
トを見ると2038年問題対応のマクロがデフォルト無効でビルドされて
いた。STM32CubeIDEの対応はどうなっているか気になったのでテス
トしてみた。
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDする際のTips〜
27
#include "CppUTest/TestHarness.h"
#include <time.h>
#include <string.h>
#include "2038.h"
TEST_GROUP(FutureProblemTestGroup)
{
};
TEST(FutureProblemTestGroup, pre2038problem)
{
char date_str[256];
memset(date_str, 0x00, sizeof(date_str));
time_t tmr = 2147483647; /* UTC:2038/01/19 03:14:07 日本(UTC+9): 2038/01/19 12:14:07 */
get_date_string(tmr, date_str, sizeof(date_str));
STRCMP_EQUAL("2038/01/19 03:14:07", date_str);
}
TEST(FutureProblemTestGroup, 2038problem)
{
char date_str[256];
memset(date_str, 0x00, sizeof(date_str));
time_t tmr = 2147483647; /* UTC:2038/01/19 03:14:07 日本(UTC+9): 2038/01/19 12:14:07 */
tmr += 1; /* UTC:1901/12/13 20:45:52 日本(UTC+9): 1901/12/14 05:45:52 */
get_date_string(tmr, date_str, sizeof(date_str));
// STRCMP_EQUAL("1901/12/13 20:45:52", date_str); // このテストは失敗することを確認した
STRCMP_EQUAL("2038/01/19 03:14:08", date_str); // テスト成功: 2038年問題対応済みであることがわかった
}
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDする際のTips〜
28
テストの結果、2038年問題に対応していることがわかった。
今思えばtime_tの型を調べれば早く2038年問題に対応しているかわ
かりますね
テストからより良い組込みソフトウェア開発を考える 〜組込みでTDDする際のTips〜
29
テストに注目し、より良い組込みソフ
トウェア開発を考える
1. テストのための時間を捻出する
2. テストをしやすくする便利なツールを使う
3. クラウド環境(Arm Virtual Hardware)でテストする
4. テストをデグレード発見レーダーとして使う
5. テストを資産とする
6. ChatGPTを使ってテストする
7. テストからより良い設計を導く
テストからより良い組込みソフトウェア開発を考える
30
1. テストのための時間を捻出する
時間がないからテストできない。
→考えればつぎの例のように時間を捻出できることもある。
テストからより良い組込みソフトウェア開発を考える
31
32
前ページの電車内デバッグの例はネタだが、
開発現場でも考えれば時間を捻出できるポイントはあるかもしれな
い。
テストからより良い組込みソフトウェア開発を考える
33
2. テストをしやすくする便利なツールを使う
1. NTShell
2. GoogleTestとFake Function FrameworkによるTOPPERSアプリケー
ションの単体テスト自動化
3. FFF(Fake Function Framework)
4. サニタイザ
5. FTDIデバイスMPSSE
テストからより良い組込みソフトウェア開発を考える
34
1. NTShell
NTShellでテスト環境を整えるでも紹介した軽量シェル
Natural Tiny Shell (NT-Shell)
ターゲットでテストをしたいとき、テストのコマンドを受けつける窓
口にしている。
容易に組み込むことができるので重宝している。
個人的に大好きなOSS。
テストからより良い組込みソフトウェア開発を考える
35
2. GoogleTestとFake Function FrameworkによるTOPPERSアプリケー
ションの単体テスト自動化
2022 第12回TOPPERS活用アイデア・アプリケーション開発コンテス
ト活用アイデア部門銀賞のアイデア
TOPPERS活用アイデア・アプリケーション開発コンテスト
コンテスト応募資料
教材コンテンツ
GoogleTestとFFF(Fake Function Framework)で実機不要な自動単
体テスト環境を構築できる。
テストからより良い組込みソフトウェア開発を考える
36
3. FFF(Fake Function Framework)
FFFのことは【GoogleTestとFake Function Frameworkによる
TOPPERSアプリケーションの単体テスト自動化(以降、単体テスト自
動化)】で知った。
単体テスト自動化はGoogleTestとFFFを組み合わせて、TOPPERSアプ
リケーションをテストしていたがFFFはベアメタルなシステムにも使え
る。
スタブをつくったりテストしやすくなるためのいろいろな機能がある
のでFFFのGitHubのREADMEを読んでみることを薦める。
FFF
テストからより良い組込みソフトウェア開発を考える
37
4. サニタイザ
組込み装置の実機確認を行うと時間がかかる。
テスト工数は実機確認よりも前の早い段階で不具合が見つけらればも
増加しない。
たとえば、コンパイル時に不具合がみつけられれば実機確認よりもテ
ストのコストが安くなる。
そういった場合は
アドレスサニタイザ
リークサニタイザ
を使い、メモリに関するエラーがないかチェックするのも良い。
テストからより良い組込みソフトウェア開発を考える
38
5. FTDIデバイスMPSSE
I2C・SPIのI/Fをもつセンサーからデータ取得し動作するシステムがあ
るとする。センサーを制御するマイコン部分のハードウェアがないか
ら動作確認が進められない、というケースがあるかもしれない。
FTDI社のMPSSEケーブルがあればPCとセンサーを接続しセンサーの
制御プログラム動作確認を進めることが可能。
ソフトウェアのツールだけではなく、ハードウェアのツールも効果的
に使えばテスト工数を減らす場合がある。
FTDI社のMPSSEケーブル:
https://ftdichip.com/product-category/products/cables/usb-mpsse-
spi-i2c-jtag-master-cable-series/
テストからより良い組込みソフトウェア開発を考える
39
3. クラウド環境(Arm Virtual Hardware)で
テストする
Arm Virtual Hardwareというクラウドの開発環境がある。
クラウドで開発することで
実機レス
CIのサイクル回す
など従来の実機を使ったテストと比べてメリットがありそう。
テストからより良い組込みソフトウェア開発を考える
40
4. テストをデグレード発見レーダーとして使う
冒頭話したTDD学習のきっかけはデグレードに困っていたため。
もしTDDの環境が整備されており、新機能実装時に前に成功していた
テストが失敗すればデグレードに早く気づき、テスト工数を減らすこ
とができていた。
テストを蓄積し、活用していくことでデグレードを早期に発見するレ
ーダーのような役割を果たすことができる。
テストからより良い組込みソフトウェア開発を考える
41
5. テストを資産とする
テストを蓄積することでデグレード発見レーダーになる、と書いた。
そのほかにもテストが資産となること例について考えた。
例えば出荷テストプログラムをTDDで使ったテストをベースにして書
く、などに使えるかもしれない。
TDDでテストした観点で出荷用テストプログラムを書けば、1から出
荷用テストプログラムを書くよりも早く、確実なプログラムになりそ
う。
テストからより良い組込みソフトウェア開発を考える
42
6. ChatGPTを使って
テストする
ChatGPTを使ったソフトウェ
ア開発・TDDについて言及し
ている書籍を購入したので共
有する。
ソフトウェア開発にChatGPT
は使えるのか?
――設計からコーディングまで
AIの限界を探る
小野哲 著
テストからより良い組込みソフトウェア開発を考える
43
【5-2 TDDによるテストからの実装】でChatGPT(本ではGPT-4を使
用)でTDDを試行していた(コードはPython)。
テストコード、関数の入出力仕様をプロンプトに入力し、テストケ
ースを満たすコード生成を依頼する。
生成されたコードを見て、他のコード生成を依頼する
何度でも爆速でコードを生成してくれる。
テストをパスするコードを生成してくれたらリファクタリングを依
頼する
まさにTDDのプロセスをChatGPTで回していた。
気になった方は確認してみては如何でしょうか?
私も読書だけでプロンプトはまだ試せていないので確認します
テストからより良い組込みソフトウェア開発を考える
44
7. テストからより良い設計を導く
TDDをはじめてみると楽しい。
TDDのレッド→グリーン→リファクタリングをリズムよく回せた時は
特に楽しく、快感。
でもふと思う。
テストすることが目的だったのか?、と。
TDDはその名のとおりテストから駆動する開発手法だった。
何を駆動するかというと【良い設計】。
テストしやすい構造は良い設計といえる。
テストからより良い組込みソフトウェア開発を考える
45
組込みでTDDをおこなう際の定番本【テスト駆動開発による組み込み
プログラミング】でも後半は設計原則SOLIDに触れている。
良いテストを書き、
良い設計を駆動・導き出し、
高凝集・疎結合な構造のソフトウェアをつくる。
そのような構造のソフトウェアは変更しやすく、流用もしやすい。
チーム、組織、会社によい資産となりビジネスの競争力が高まる。
アイスクリーム型のテスト体制からピラミッド型のテスト体制に以降
していけばテスト工数の削減、エンジニアの労働時間削減で成長のた
めの学習時間創出にもつながる。
テストからより良い組込みソフトウェア開発を考える
46
時間の創出はエンジニアの幸福度UPにもつながる。
これからもテストに注目し、より良い組み込みソフトウェア開発を考
えていきます。
テストからより良い組込みソフトウェア開発を考える
47
ご清聴ありがとうございました
テストからより良い組込みソフトウェア開発を考える
48
宣伝です。
テストしやすいソフトウェアは良い設計、ということで設計(SOLID
原則)について学ぶ勉強会を開催しています。
もしよければ一緒に学びませんか?
次回は9/28(木) 20:45-21:45 Xのスペースで下記で開催予定です。
ソフトウェア設計原則【SOLID】を学ぶ#3 依存性逆転の原則
お待ちしています
こちらは先日開催した勉強会です。
ソフトウェア設計原則【SOLID】を学ぶ#2 インターフェース分離の原
則
テストからより良い組込みソフトウェア開発を考える
49
参考資料
1. youtube: 「サバンナ便り〜自動テストに関する連載で得られた知見
のまとめ〜」t_wada(和田卓人)
2. speakerdeck: サバンナ便り〜自動テストに関する連載で得られた知
見のまとめ(2023年5月版)
3. STM32CubeIDEにCppUTestを環境構築し、STM32マイコンでTDD
する
4. STM32CubeIDEにCppUTestを環境構築し、STM32マイコンでTDD
する(2) ~シリアル通信でCppUTestを実行する~
テストからより良い組込みソフトウェア開発を考える
50
5. ソフトウェア開発にChatGPTは使えるのか?
――設計からコーディングまでAIの限界を探る
小野哲 著
6. テスト駆動開発による組み込みプログラミング
―C言語とオブジェクト指向で学ぶアジャイルな設計
James W. Grenning 著、蛸島昭之 監訳、笹井崇司 訳
テストからより良い組込みソフトウェア開発を考える
51

Contenu connexe

Similaire à テストからより良い組込みソフトウェア開発を考える.pdf

Fitnesse を用いたテストの効率化について
Fitnesse を用いたテストの効率化についてFitnesse を用いたテストの効率化について
Fitnesse を用いたテストの効率化についてtecopark
 
テスト駆動開発入門 - C4K Meetup#2
テスト駆動開発入門 - C4K Meetup#2テスト駆動開発入門 - C4K Meetup#2
テスト駆動開発入門 - C4K Meetup#2
Masashi Shibata
 
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
de:code 2017
 
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
makopi 23
 
Ti dd force09
Ti dd force09Ti dd force09
Ti dd force09
Makoto SAKAI
 
研究を基にしたオープンソース開発チェックポイント
研究を基にしたオープンソース開発チェックポイント研究を基にしたオープンソース開発チェックポイント
研究を基にしたオープンソース開発チェックポイント
Recruit Technologies
 
Androidアプリケーション開発中級研修 前編
Androidアプリケーション開発中級研修 前編Androidアプリケーション開発中級研修 前編
Androidアプリケーション開発中級研修 前編
株式会社 NTTテクノクロス
 
Androidテスティング実践 基礎編
Androidテスティング実践 基礎編Androidテスティング実践 基礎編
Androidテスティング実践 基礎編
株式会社 NTTテクノクロス
 
CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料
Yasui Tsutomu
 
Trat_sprint7
Trat_sprint7Trat_sprint7
Trat_sprint7
tratwakate
 
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
UnityTechnologiesJapan002
 
TDD for Embedded C -5章-
TDD for Embedded C -5章-TDD for Embedded C -5章-
TDD for Embedded C -5章-
Yudai Hashimoto
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
Kazuaki Ishizaki
 
Androidテスティング実践3 ユニットテスト・CI編
Androidテスティング実践3 ユニットテスト・CI編Androidテスティング実践3 ユニットテスト・CI編
Androidテスティング実践3 ユニットテスト・CI編
株式会社 NTTテクノクロス
 
Jubatus分類器の活用テクニック
Jubatus分類器の活用テクニックJubatus分類器の活用テクニック
Jubatus分類器の活用テクニック
JubatusOfficial
 
言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析pocketberserker
 
使い捨て python コードの書き方
使い捨て python コードの書き方使い捨て python コードの書き方
使い捨て python コードの書き方
Sho Shimauchi
 
20151029 ヒカラボ講演資料
20151029 ヒカラボ講演資料20151029 ヒカラボ講演資料
20151029 ヒカラボ講演資料
Daisuke Ando
 
株式会社waja 安藤様 登壇資料
株式会社waja 安藤様 登壇資料株式会社waja 安藤様 登壇資料
株式会社waja 安藤様 登壇資料
leverages_event
 

Similaire à テストからより良い組込みソフトウェア開発を考える.pdf (20)

Fitnesse を用いたテストの効率化について
Fitnesse を用いたテストの効率化についてFitnesse を用いたテストの効率化について
Fitnesse を用いたテストの効率化について
 
wankuma #28
wankuma #28wankuma #28
wankuma #28
 
テスト駆動開発入門 - C4K Meetup#2
テスト駆動開発入門 - C4K Meetup#2テスト駆動開発入門 - C4K Meetup#2
テスト駆動開発入門 - C4K Meetup#2
 
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
[AI08] 深層学習フレームワーク Chainer × Microsoft で広がる応用
 
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
『はじめてのClojure』勉強会#3 第7章:テスト、テスト、テスト
 
Ti dd force09
Ti dd force09Ti dd force09
Ti dd force09
 
研究を基にしたオープンソース開発チェックポイント
研究を基にしたオープンソース開発チェックポイント研究を基にしたオープンソース開発チェックポイント
研究を基にしたオープンソース開発チェックポイント
 
Androidアプリケーション開発中級研修 前編
Androidアプリケーション開発中級研修 前編Androidアプリケーション開発中級研修 前編
Androidアプリケーション開発中級研修 前編
 
Androidテスティング実践 基礎編
Androidテスティング実践 基礎編Androidテスティング実践 基礎編
Androidテスティング実践 基礎編
 
CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料CodeZineAcademy TDD実践講座PR資料
CodeZineAcademy TDD実践講座PR資料
 
Trat_sprint7
Trat_sprint7Trat_sprint7
Trat_sprint7
 
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
 
TDD for Embedded C -5章-
TDD for Embedded C -5章-TDD for Embedded C -5章-
TDD for Embedded C -5章-
 
20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf20221226_TITECH_lecture_ishizaki_public.pdf
20221226_TITECH_lecture_ishizaki_public.pdf
 
Androidテスティング実践3 ユニットテスト・CI編
Androidテスティング実践3 ユニットテスト・CI編Androidテスティング実践3 ユニットテスト・CI編
Androidテスティング実践3 ユニットテスト・CI編
 
Jubatus分類器の活用テクニック
Jubatus分類器の活用テクニックJubatus分類器の活用テクニック
Jubatus分類器の活用テクニック
 
言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析言語差異によるTDDプロセスへの影響度の解析
言語差異によるTDDプロセスへの影響度の解析
 
使い捨て python コードの書き方
使い捨て python コードの書き方使い捨て python コードの書き方
使い捨て python コードの書き方
 
20151029 ヒカラボ講演資料
20151029 ヒカラボ講演資料20151029 ヒカラボ講演資料
20151029 ヒカラボ講演資料
 
株式会社waja 安藤様 登壇資料
株式会社waja 安藤様 登壇資料株式会社waja 安藤様 登壇資料
株式会社waja 安藤様 登壇資料
 

Plus de 耕二 阿部

猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222
猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222
猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222
耕二 阿部
 
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
耕二 阿部
 
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdf
耕二 阿部
 
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
耕二 阿部
 
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdf
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdfSWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdf
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdf
耕二 阿部
 
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
耕二 阿部
 
ソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdf
ソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdfソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdf
ソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdf
耕二 阿部
 
20210830 rust入学式
20210830 rust入学式20210830 rust入学式
20210830 rust入学式
耕二 阿部
 
Arduinoでモーター制御ロジックを実装した話
Arduinoでモーター制御ロジックを実装した話Arduinoでモーター制御ロジックを実装した話
Arduinoでモーター制御ロジックを実装した話
耕二 阿部
 
Rust初心者がArduinoをLチカしてみた
Rust初心者がArduinoをLチカしてみたRust初心者がArduinoをLチカしてみた
Rust初心者がArduinoをLチカしてみた
耕二 阿部
 
はじめてのブラシレスモータ制御
はじめてのブラシレスモータ制御はじめてのブラシレスモータ制御
はじめてのブラシレスモータ制御
耕二 阿部
 
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
耕二 阿部
 
モデルベース開発勉強会
モデルベース開発勉強会モデルベース開発勉強会
モデルベース開発勉強会
耕二 阿部
 
EVミニカート、技術交流&ミニセミナ 発表資料
EVミニカート、技術交流&ミニセミナ 発表資料EVミニカート、技術交流&ミニセミナ 発表資料
EVミニカート、技術交流&ミニセミナ 発表資料
耕二 阿部
 
AWSとEVカートで走行データを可視化
AWSとEVカートで走行データを可視化AWSとEVカートで走行データを可視化
AWSとEVカートで走行データを可視化
耕二 阿部
 

Plus de 耕二 阿部 (15)

猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222
猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222
猫の日開催!ねこIoTLT vol.9(Spresense猫モーラー🐈)_20240222
 
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
ソフトウェア設計原則【SOLID】を学ぶ #5 リスコフの置換原則
 
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #4 開放閉鎖の原則.pdf
 
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #3 依存性逆転の原則.pdf
 
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdf
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdfSWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdf
SWEST25_EmbLT_NervesとSpresenseをHostIFで通信してみた.pdf
 
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdfソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
ソフトウェア設計原則【SOLID】を学ぶ #2 インターフェイス分離の原則.pdf
 
ソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdf
ソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdfソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdf
ソフトウェア設計原則【SOLID】を学ぶ #1 単一責務の原則(single-responsibility principle).pdf
 
20210830 rust入学式
20210830 rust入学式20210830 rust入学式
20210830 rust入学式
 
Arduinoでモーター制御ロジックを実装した話
Arduinoでモーター制御ロジックを実装した話Arduinoでモーター制御ロジックを実装した話
Arduinoでモーター制御ロジックを実装した話
 
Rust初心者がArduinoをLチカしてみた
Rust初心者がArduinoをLチカしてみたRust初心者がArduinoをLチカしてみた
Rust初心者がArduinoをLチカしてみた
 
はじめてのブラシレスモータ制御
はじめてのブラシレスモータ制御はじめてのブラシレスモータ制御
はじめてのブラシレスモータ制御
 
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
20201029 モデルベース開発モーター制御編~C言語とSimulinkの文法記述を比較する~
 
モデルベース開発勉強会
モデルベース開発勉強会モデルベース開発勉強会
モデルベース開発勉強会
 
EVミニカート、技術交流&ミニセミナ 発表資料
EVミニカート、技術交流&ミニセミナ 発表資料EVミニカート、技術交流&ミニセミナ 発表資料
EVミニカート、技術交流&ミニセミナ 発表資料
 
AWSとEVカートで走行データを可視化
AWSとEVカートで走行データを可視化AWSとEVカートで走行データを可視化
AWSとEVカートで走行データを可視化
 

Dernier

Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
嶋 是一 (Yoshikazu SHIMA)
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
azuma satoshi
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
Osaka University
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
osamut
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 

Dernier (7)

Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 

テストからより良い組込みソフトウェア開発を考える.pdf