Arduinoスケッチ固有のコードスメルの定義と検出
卒業論文, 大阪大学
概要: 安価で手軽な組込みシステム用マイコンボードプラットフォームとして,Arduinoが普及している.Arduino は小型マイコンと入出力ポートを備えたワンボードマイコンの一種であり,センサを用いた外界変化の感知や,アクチュエータを用いた外界への作用が容易に実現できる.ハードウェアとソフトウェアの両方がオープンソースであり,また安価かつ手軽という特性から,学習現場での活用のみならず,商用デバイスの試作にも広く用いられている.
Arduino ボードの制御に用いられる Arduino スケッチの記述においては,スケッチ固有のミスが避けられない.このスケッチは Arduino 言語と呼ばれる C++ のラッパー言語により記述される.スケッチでは Arduino 操作に特化した様々な関数が利用可能であるが,その利用の際には新たなライブラリや API の習得と同様,一定の難しさが発生する.また,Arduino 制御は根本的にリアルタイムシステムの制御であるという特性からも,典型的なバッチ処理とはその制御の考えが大幅に異なる.具体的には,ループ制御や割り込み制御が必要であり,その適切な制御のためには Arduino が搭載するマイコン(Atmel AVR や Arm Cortex-M4)の仕様に対する理解も必要となる.
多くのプログラミング言語では,開発者が陥りがちな典型的なミスを表す概念としてコードスメルが定義されている.スメルはソースコード中に含まれる保守性や可読性に繋がる問題の兆候であり,リファクタリング等の改善作業によって解消されるべきとされている.C や Java,JavaScript などの言語ではスメルの定義や検出方法が多数提案されている.これらのスメル検出ツールを用いることで,各種言語における典型的な誤りを自動検出することが可能となる.
本研究では,Arduino スケッチに対する典型的なミスの低減を目指して,Arduino 言語に特化したコードスメル(Arduino スメル)の定義とその自動検出に取り組む.Arduino スメルの定義においては,Arduino 公式が公開しているリファレンスの記載内容,および初学者が作成した複数の Arduino スケッチから典型ミスを洗い出す.スメルの自動検出にはスケッチの抽象構文木に対する部分木マッチングを
用いる.結果として 7 種類の Arduino スメルを発見・定義し,Web 上に公開されている実際のスケッチ331 個から合計 1,609 個のスメルの自動検出に成功した.
@mastersthesis{忠谷晃佑2024,
author = {忠谷 晃佑},
title = {Arduinoスケッチ固有のコードスメルの定義と検出},
school = {大阪大学},
type = {Bachelor's Thesis},
year = {2024},
month = {feb}
}