[修士論文] 命令型スクリプタブルデバッグ環境の実現

2/4 に小林研M2の平ノ内さんが修士論文の発表を行いました.

論文題目:命令型スクリプタブルデバッグ環境の実現
論文概要:

デバッグは時間のかかる作業であり、その効率化は重要である。デバッグの工程において開発者は何度も同じ作業を繰り返すことがあり、これを解決する方法の 1 つにスクリプタブルデバッガ (SD) がある。 SD とは、スクリプトに従って動作するデバッガであり、デバッグの手順を記述することで作業を自動化できる。既存の SD においては、観測対象プログラムにおけるメソッドの入退出や変数値の変更といった何らかのイベントが発生したときに行う処理をスクリプトに記述する。本論文ではこのような SD をリアクティブ型 SDと呼ぶ。リアクティブ型 SD では、デバッガの行う処理をイベント毎に宣言的に記述する必要があるため、初期化処理や過去の観測結果の履歴を利用する処理などが書きづらい、処理のタイミングをユーザは指定できないため、副作用のある式の実行順序が定まらないといった欠点がある。また、 SD では観測を行った後に観測結果を加工することができるという利点があるが、そのための複雑なスクリプトをユーザ自身が記述する必要があり手間がかかる。
本論文では、これらの既存 SD の欠点を補うような新しいスタイルの SD を提案する。第 1 に、リアクティブ型 SD では記述が難しい処理があるという問題に対応するため、この欠点を分析し、リアクティブ型 SDの欠点の要因を説明する。そして、この要因を解消するために、デバッガが行う動作をそのままの順序でスクリプトに記述する命令型 SD というものを提案する。第 2 に、観測結果の加工のための記述に手間がかかるという問題に対応するため、提案する SD のインタフェースには仮想ファイルシステムを用いる。これは、デバッグ操作の一部に外部ツールを利用することでユーザの記述を削減することが目的で、汎用的なファイルシステムをインタフェースとすることで、多くの外部ツールとの連携が可能になる。
提案手法をもとに、 Java 言語を対象とした命令型 SD 環境「 ImperSD 」を実装した。 ImperSD では、スクリプト言語としてデバッグ対象言語と同じ Java 言語を採用し、 SD の機能を実現する API を提供する。また、実行環境には JShell を用いることで、 REPL をサポートしている。仮想ファイルシステムインタフェースの実装には我々が以前提案し改良を続けているツールである MewdFS を用いた。 ImperSD を用いて実際にデバッグを行い既存 SD と比較することで評価を行い、提案 SD の得失を確認した。