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
66
簡易ラズピコオシロを改造して簡易フリスクオシロを作った話
ken551
0
600
Other Decks in Technology
See All in Technology
Agent Skils
dip_tech
PRO
0
130
1,000 にも届く AWS Organizations 組織のポリシー運用をちゃんとしたい、という話
kazzpapa3
0
180
AIエージェントに必要なのはデータではなく文脈だった/ai-agent-context-graph-mybest
jonnojun
1
250
SREチームをどう作り、どう育てるか ― Findy横断SREのマネジメント
rvirus0817
0
350
AWS DevOps Agent x ECS on Fargate検証 / AWS DevOps Agent x ECS on Fargate
kinunori
2
190
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
93k
顧客との商談議事録をみんなで読んで顧客解像度を上げよう
shibayu36
0
330
Context Engineeringの取り組み
nutslove
0
380
pool.ntp.orgに ⾃宅サーバーで 参加してみたら...
tanyorg
0
1.2k
ブロックテーマ、WordPress でウェブサイトをつくるということ / 2026.02.07 Gifu WordPress Meetup
torounit
0
200
生成AIを活用した音声文字起こしシステムの2つの構築パターンについて
miu_crescent
PRO
3
220
Claude Code for NOT Programming
kawaguti
PRO
1
110
Featured
See All Featured
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
210
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.2k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.3k
Paper Plane
katiecoart
PRO
0
46k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.6k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.7k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
200
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.3k
Why Our Code Smells
bkeepers
PRO
340
58k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
Rails Girls Zürich Keynote
gr2m
96
14k
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が定義するペリフェラルレジスタのマクロは使えない →(使う側が)めっちゃめんどくさいのでは? • 構造体は対応が難しい →(作る側・使う側双方が)めっちゃめんどくさいのでは?
• スタブ・モックは実現できる? もっといい手法があれば教えてください・・・・・・