Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
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
65
簡易ラズピコオシロを改造して簡易フリスクオシロを作った話
ken551
0
560
Other Decks in Technology
See All in Technology
20251218_AIを活用した開発生産性向上の全社的な取り組みの進め方について / How to proceed with company-wide initiatives to improve development productivity using AI
yayoi_dd
0
460
ウェルネス SaaS × AI、1,000万ユーザーを支える 業界特化 AI プロダクト開発への道のり
hacomono
PRO
0
310
Database イノベーショントークを振り返る/reinvent-2025-database-innovation-talk-recap
emiki
0
250
AWS Security Agentの紹介/introducing-aws-security-agent
tomoki10
0
360
Oracle Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
0
270
Amazon Bedrock Knowledge Bases × メタデータ活用で実現する検証可能な RAG 設計
tomoaki25
6
1.7k
マイクロサービスへの5年間 ぶっちゃけ何をしてどうなったか
joker1007
17
7.3k
シニアソフトウェアエンジニアになるためには
kworkdev
PRO
3
210
Amazon Connect アップデート! AIエージェントにMCPツールを設定してみた!
ysuzuki
0
110
AWSの新機能をフル活用した「re:Inventエージェント」開発秘話
minorun365
2
220
MLflowダイエット大作戦
lycorptech_jp
PRO
1
150
【U/Day Tokyo 2025】Cygames流 最新スマートフォンゲームの技術設計 〜『Shadowverse: Worlds Beyond』におけるアーキテクチャ再設計の挑戦~
cygames
PRO
2
1k
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
54
7.9k
Java REST API Framework Comparison - PWX 2021
mraible
34
9k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Un-Boring Meetings
codingconduct
0
160
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.1k
Evolving SEO for Evolving Search Engines
ryanjones
0
72
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
64
So, you think you're a good person
axbom
PRO
0
1.8k
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
0
390
Technical Leadership for Architectural Decision Making
baasie
0
180
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
37
2.7k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
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が定義するペリフェラルレジスタのマクロは使えない →(使う側が)めっちゃめんどくさいのでは? • 構造体は対応が難しい →(作る側・使う側双方が)めっちゃめんどくさいのでは?
• スタブ・モックは実現できる? もっといい手法があれば教えてください・・・・・・