スライド 1

アスペクト指向を利用して
デバッグコードを挿入できる
ソフトウェア開発環境
情報科学科 千葉研究室
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