$30 off During Our Annual Pro Sale. View Details »
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
コンテキスト情報を活用し個社最適化されたAI Agentを実現する4つのポイント
kworkdev
PRO
1
1.8k
ESXi のAIOps だ!2025冬
unnowataru
0
140
Kiro を用いたペアプロのススメ
taikis
3
1.1k
AIBuildersDay_track_A_iidaxs
iidaxs
3
660
Amazon Connect アップデート! AIエージェントにMCPツールを設定してみた!
ysuzuki
0
120
今年のデータ・ML系アップデートと気になるアプデのご紹介
nayuts
1
610
ExpoのインダストリーブースでみたAWSが見せる製造業の未来
hamadakoji
0
180
ZOZOの独自性を生み出す「似合う4大要素」の開発サイクル
zozotech
PRO
0
100
20251218_AIを活用した開発生産性向上の全社的な取り組みの進め方について / How to proceed with company-wide initiatives to improve development productivity using AI
yayoi_dd
0
470
AWSインフルエンサーへの道 / load of AWS Influencer
whisaiyo
0
180
1人1サービス開発しているチームでのClaudeCodeの使い方
noayaoshiro
2
520
ActiveJobUpdates
igaiga
1
280
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
For a Future-Friendly Web
brad_frost
180
10k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
0
940
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
286
14k
The Invisible Side of Design
smashingmag
302
51k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
0
40
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
0
170
YesSQL, Process and Tooling at Scale
rocio
174
15k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
1
260
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
61
47k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
140
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が定義するペリフェラルレジスタのマクロは使えない →(使う側が)めっちゃめんどくさいのでは? • 構造体は対応が難しい →(作る側・使う側双方が)めっちゃめんどくさいのでは?
• スタブ・モックは実現できる? もっといい手法があれば教えてください・・・・・・