アスペクト指向を利用して デバッグコードを挿入できる ソフトウェア開発環境 情報科学科 千葉研究室 00-0348-7 薄井 義行 1 デバッグとは • ソフトウェア内のバグの発見、修正 –高品質なソフトウェアの実現 • ソースコードに直接デバッグコードを挿入 –ログ出力(プリント文) •プログラム全体から バグの位置を特定 •サーバサイドプログ ラミング –アサーション public class A{ int n = 10; void run(){ System.out.println(n); if(…){ System.out.println(“exec if”); … } ... 2 デバッグコード挿入の問題点 • デバッグのためだけにソースコードを変更 – デバッグが終われば手動で削除が必要 • 取り忘れがあると、ソフトウェアの実行時に不要な処理 – アサーション を使うと、ソースコードの可読性が低下 • プログラムの機能に無関係 • 対象となる位置を一ヶ所ずつ指定するしかない – 例: 変数xに値を代入している位置全てにプリント文を 入れたい – 簡単な作業だが、手間がかかる 3 GUIによるデバッグ環境 Bugdel の提案 • アスペクト指向プログラミング(AOP)に 基づいたデバッグコード挿入 – ソースコードに手を加える必要が無い – デバッグコード挿入する位置をまとめて指定 – 行番号を指定してコード挿入することも可能 • GUI(マウス操作) でコード挿入位置を指定 – 統合開発環境であるEclipse上にプラグインとし て実現 4 Bugdelによるコード挿入指定 • Pointcut – AOPの用語 – コード挿入位置を 指定するもの ソースコード class A{ int n; void run(){ n = 10; … n = 20; … n = 30; } – フィールド代入 – フィールド参照 – メソッド呼び出し – コンストラクタ実行 – 例外ハンドラ実行 など – Bugdelは行番号 指定も可能 Bugdelを 使って指定 pointcut フィールドnに代入 している位置 挿入するコード System.out.println(n) デバッグコードを含む 実行コード 5 デモ 6 実装 • Eclipse上へプラグインとして実装 – 標準的なエディタ機能 – Javaソースコード解析機能 • 行単位pointcutの情報の保存 – Eclipseのリソースマーカー機能を使用 – ソースコードが変更された場合も適切に更新 • デバッグコードの挿入をバイトコード編集で実 現 – クラスライブラリJavassistを利用 7 関連研究 -デバッガとしてのAJDT との相違 • AJDT/AspectJ – 汎用的なAOP • 挿入コードのモジュール化、整合性を重視 – テキストベースでPointcutを記述 • 複雑なpointcut指定が可能 • Bugdel – デバッグに特化したAOP • Pointcut位置でさまざまなデータにアクセスできる – ローカル変数、メソッドの引数など • 行番号によるpointcut指定 – GUIでPointcutを指定 • 指定が容易 8 まとめと今後の課題 • まとめ – AOPを利用してデバッグコード挿入を行える ソフトウェア開発環境Bugdelを提案 • デバッグコードとソースコードを分離して記述 • GUIでpointcutを指定 • デバッグに特化したAOP – コード挿入位置をまとめて指定 – Pointcut位置でさまざまなデータにアクセスできる – 行単位のpointcut • 今後の課題 – and(&&),or(||)によるpointcutの連結機能の追加 アイコンの洗練 – デバッグコード内変数のサポートソースコードの洗練 – Bugdelの洗練、公開 9
© Copyright 2024 ExpyDoc