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
62
簡易ラズピコオシロを改造して簡易フリスクオシロを作った話
ken551
0
510
Other Decks in Technology
See All in Technology
要件定義・デザインフェーズでもAIを活用して、コミュニケーションの密度を高める
kazukihayase
0
120
現場で効くClaude Code ─ 最新動向と企業導入
takaakikakei
1
260
Automating Web Accessibility Testing with AI Agents
maminami373
0
1.3k
【NoMapsTECH 2025】AI Edge Computing Workshop
akit37
0
220
データ分析エージェント Socrates の育て方
na0
5
530
Platform開発が先行する Platform Engineeringの違和感
kintotechdev
4
580
roppongirb_20250911
igaiga
1
240
TS-S205_昨年対比2倍以上の機能追加を実現するデータ基盤プロジェクトでのAI活用について
kaz3284
1
210
250905 大吉祥寺.pm 2025 前夜祭 「プログラミングに出会って20年、『今』が1番楽しい」
msykd
PRO
1
980
Aurora DSQLはサーバーレスアーキテクチャの常識を変えるのか
iwatatomoya
1
1.1k
AI時代を生き抜くエンジニアキャリアの築き方 (AI-Native 時代、エンジニアという道は 「最大の挑戦の場」となる) / Building an Engineering Career to Thrive in the Age of AI (In the AI-Native Era, the Path of Engineering Becomes the Ultimate Arena of Challenge)
jeongjaesoon
0
220
Webアプリケーションにオブザーバビリティを実装するRust入門ガイド
nwiizo
7
860
Featured
See All Featured
Statistics for Hackers
jakevdp
799
220k
Building an army of robots
kneath
306
46k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
850
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
13k
The Language of Interfaces
destraynor
161
25k
The Pragmatic Product Professional
lauravandoore
36
6.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Writing Fast Ruby
sferik
628
62k
Rails Girls Zürich Keynote
gr2m
95
14k
Java REST API Framework Comparison - PWX 2021
mraible
33
8.8k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
34
6k
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が定義するペリフェラルレジスタのマクロは使えない →(使う側が)めっちゃめんどくさいのでは? • 構造体は対応が難しい →(作る側・使う側双方が)めっちゃめんどくさいのでは?
• スタブ・モックは実現できる? もっといい手法があれば教えてください・・・・・・