Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RL78向けテストハーネスをGDBスクリプトで作ろうとした話
Search
ken551
October 20, 2023
Technology
0
110
RL78向けテストハーネスをGDBスクリプトで作ろうとした話
2023/10/15 Okayama Revengers LT大会で発表
ken551
October 20, 2023
Tweet
Share
More Decks by ken551
See All by ken551
gdb+Pythonの自作テストハーネスに関数コールの機能を入れた話
ken551
0
59
簡易ラズピコオシロを改造して簡易フリスクオシロを作った話
ken551
0
470
Other Decks in Technology
See All in Technology
AIエージェント最前線! Amazon Bedrock、Amazon Q、そしてMCPを使いこなそう
minorun365
PRO
15
5.4k
Witchcraft for Memory
pocke
1
470
2年でここまで成長!AWSで育てたAI Slack botの軌跡
iwamot
PRO
4
770
Windows 11 で AWS Documentation MCP Server 接続実践/practical-aws-documentation-mcp-server-connection-on-windows-11
emiki
0
1k
rubygem開発で鍛える設計力
joker1007
2
220
Leveraging Open-Source Tools for Creating 3D Tiles in the Urban Environment
simboss
PRO
0
100
Tech-Verse 2025 Keynote
lycorptech_jp
PRO
0
430
BrainPadプログラミングコンテスト記念LT会2025_社内イベント&問題解説
brainpadpr
1
170
「良さそう」と「とても良い」の間には 「良さそうだがホンマか」がたくさんある / 2025.07.01 LLM品質Night
smiyawaki0820
1
280
PHPでWebブラウザのレンダリングエンジンを実装する
dip_tech
PRO
0
210
第9回情シス転職ミートアップ_テックタッチ株式会社
forester3003
0
250
生成AIで小説を書くためにプロンプトの制約や原則について学ぶ / prompt-engineering-for-ai-fiction
nwiizo
4
2.5k
Featured
See All Featured
Optimizing for Happiness
mojombo
379
70k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.4k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
The Pragmatic Product Professional
lauravandoore
35
6.7k
Six Lessons from altMBA
skipperchong
28
3.9k
Building a Modern Day E-commerce SEO Strategy
aleyda
42
7.3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
124
52k
Statistics for Hackers
jakevdp
799
220k
The Language of Interfaces
destraynor
158
25k
KATA
mclloyd
30
14k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
930
Transcript
RL78向けテストハーネスを GDBスクリプトで作ろうとした話 祐源 英俊
自己紹介 @祐源 英俊(ゆうげん ひでとし) • 95年生まれ(28歳) • 学生時代は組込みシステムを中心に勉強 • 電子部品事業部で組込みソフト開発
(組込みエンジニアとしては3年目) • 趣味:車、音楽、電子工作 こういう→ アイコンに してます
この発表は・・・
この発表は・・・ こういう仕事で
この発表は これによって
この発表は こうなったので
この発表は こんな感じの本を読んで
この発表は こういうものに対して
この発表は・・・ これを準備すると
この発表は・・・ こうなるように!がんばっている、というお話です
目次 • 背景・目的と目標 • 作ったもの • 苦労した点 • 今後の課題
目次 • 背景・目的と目標 • 作ったもの • 苦労した点 • 今後の課題
背景 • 本を読んで、TDDで業務改善できるのでは?と思い立つ • TDD的な思考→練習で習得可能 • 自動テスト等ツール的な恩恵→導入が難しい • 新たな環境構築が必要 •
テストハーネス埋め込みによるバイナリ変更 →上記課題が解消できれば職場でも使えるのでは? https://www.oreilly.co.jp/books/9784873116143/
目的・目標 目的:TDDや自動テストの良さを職場でアピールしたい 目標: • ビルド時にテストケースを自動で実施する • 検証漏れを減らし、バグ・デグレを早期に発見したい • 導入済みの自動テストツール:目的にはやや不向き •
バイナリ変更や追加環境が必要ないようにする • 導入障壁を大きく下げられる • あくまで補助的なツールとして使えることを目指す
目次 • 背景・目的と目標 • 作ったもの • 苦労した点 • 今後の課題
作ったもの • ビルドで自動実行する、なんちゃってテストハーネス • Renesas RL78ファミリマイコンが(とりあえず)対象 • e2studio付属のgdbを使用 →インストールとスクリプトの準備でOK •
ビルド後のステップでgdbを実行 →ビルド実行で自動テストが走る • 実行結果のOK/NGをe2studioに返す →テストNGはビルドエラーとして表示 https://github.com/ken551/gdb_testHarness_RL78
作ったもの • こんな感じでテストケースを作成します (例:LEDの点滅切り替えをするtoggleLed(id)関数をtest
作ったもの • テスト用のdefineとend的なものをマクロで作成 • 可読性の(微妙な)向上 • テスト件数の集計、結果出力が可能 • setup, teardownも入れ込める(未実装)
ユーザが作成するテストケース テストハーネス(マクロ)
作ったもの • バグを検出する
作ったもの
目次 • 背景・目的と目標 • 作ったもの • 苦労した点 • 今後の課題
苦労した点 • 引数・返値が全く扱えない!! • gdbのcall機能だと関数の実行がまともに扱えない • 引数が渡せない(引数に応じた振る舞いの変化がない) • 返値が返ってこない(意味不明な値が結果として返る) •
スタック領域が全く変化しない(関数呼び出しでスタック積むのでは?) • そもそも裏で何やってんの? 引数・返値なしの関数しか使えないのはさすがに困る
苦労した点 • おそらく、call実施時にgdbがダミーフレームを使うのでは? • なんかそれっぽい解説あり(確信はなし) ax bc … pc 実際のフレーム
実際のフレーム ダミーフレーム Call実施 実際のフレーム (変更なし) ダミーフレーム (削除) Call終了 コピー こっちをさわる
苦労した点 • RL78では、基本的に引数・返値はレジスタで渡す →引数・返値が全部捨てられているのでは? 関数呼び出し仕様 | V8.07.00 | RL78 9.1
関数呼び出しインタフェース より
苦労した点 • 無理やり実現した(uint_8を受けてuint_8を返す関数) • Aレジスタにテストケース引数を格納 • スタックポインタにリターンアドレス (main関数)を格納 • PCをテスト対象の関数に変えて実行
(シンボルからアドレスが入る) • Aレジスタの実行結果を結果として返す
苦労した点 • 引数・返値が関係する関数もめでたく実行
• Pythonスクリプトで引数・返値の判別は可能そう 苦労した点
• Pythonスクリプトで引数・返値の判別は可能そう 苦労した点 Pythonで全部作ればよくね?
目次 • 背景・目的と目標 • 作ったもの • 苦労した点 • 今後の課題
今後の課題 • 引数の渡し方ごとにスクリプトを作成する必要あり →(作る側が)めっちゃめんどくさいのでは? • IDEが定義するペリフェラルレジスタのマクロは使えない →(使う側が)めっちゃめんどくさいのでは? • 構造体は対応が難しい →(作る側・使う側双方が)めっちゃめんどくさいのでは?
• スタブ・モックは実現できる?
今後の課題 • 引数の渡し方ごとにスクリプトを作成する必要あり →(作る側が)めっちゃめんどくさいのでは? • IDEが定義するペリフェラルレジスタのマクロは使えない →(使う側が)めっちゃめんどくさいのでは? • 構造体は対応が難しい →(作る側・使う側双方が)めっちゃめんどくさいのでは?
• スタブ・モックは実現できる? もっといい手法があれば教えてください・・・・・・