Presentation is loading. Please wait.

Presentation is loading. Please wait.

統合開発環境のための アスペクト指向システム

Similar presentations


Presentation on theme: "統合開発環境のための アスペクト指向システム"— Presentation transcript:

1 統合開発環境のための アスペクト指向システム
千葉研究室 薄井 義行 2005年2月6日 修士論文発表会

2 ソフトウェア開発 トレース デバッグ テスト 開発 リリース 変数の値を出力しバグのおおよその位置を特定 バグの詳細な位置を特定し修正
テストコードの実行 トレース デバッグ テスト 開発 リリース 2005年2月6日 修士論文発表会

3 一時的なコードの追加 トレース、デバッグコード テスト用コード 変数の値を出力 さまざまな位置に追加 例外発生時の動作をテスト
例外を投げるコード トレースコード テスト用コード プログラム デバッグコード 2005年2月6日 修士論文発表会

4 テスト、デバッグコード記述の問題点 テスト、デバッグの度にソースコードを変更 ソースコードの可読性が低下
誤って追加コードの周辺を変更する危険性 ソースコードの可読性が低下 テスト、デバッグコードはプログラム本来の機能に無関係 コードの追加位置を一ヶ所ずつ指定するしかない 例: 変数 x への代入位置全て 手間がかかる 入れ忘れの可能性 2005年2月6日 修士論文発表会

5 Advice: System.out.println(x)
Bugdel の提案 アスペクト指向を利用してテスト、デバッグコードを追加 アスペクト指向 Pointcut: コードの追加位置 Advice: 追加するコード テスト、デバッグコードの 分離 追加コードの実行位置を まとめて指定 統合開発環境 Eclipse のプラグイン テスト、デバッグに特化 したアスペクト指向 AspectJ と異なるデザイン クラスのモジュール性を 緩める class A{ int x; void run1(){ x = 10; … x = 20; } void run2(){ x = 30; … } } Bugdelにより指定 Pointcut: x へのアクセス位置 Advice: System.out.println(x) 2005年2月6日 修士論文発表会

6 AspectJ vs Bugdel AspectJ (汎用) Bugdel (テスト、デバッグ用) ユーザインターフェイス テキストベース
GUI Pointcut 指定子 get, set, call, execution, handler… get, set, call, execution, handler… Line, AllLines Advice リフレクション (thisJoinPoint) リフレクション (thisJoinPoint) ローカル変数へのアクセス ビルトメソッド 順番に話します 2005年2月6日 修士論文発表会

7 AspectJ vs Bugdel AspectJ (汎用) Bugdel (テスト、デバッグ用) ユーザインターフェイス テキストベース
GUI Pointcut 指定子 get, set, call, execution, handler… get, set, call, execution, handler… Line, AllLines Advice リフレクション (thisJoinPoint) リフレクション (thisJoinPoint) ローカル変数へのアクセス ビルトメソッド 2005年2月6日 修士論文発表会

8 Bugdel の GUI Bugdel エディタ ソースコード ブラウザ Bugdel ビュー 2005年2月6日 修士論文発表会

9 GUI による pointcut の指定 (1/2)
AspectJ set(int Point.y) execution(void Point.setX(int)) Bugdel Advice ダイアログ エディタ上に候補を表示 2005年2月6日 修士論文発表会

10 GUI による pointcut の指定 (2/2)
ソースコードブラウザ ソースコード (クラス、メソッド、フィールド) の構成をツリー表示 検索を行いながら pointcut を指定 検索クエリとpointcut の指定 メソッドの検索結果 アニメーション サブタイプの 検索結果 2005年2月6日 修士論文発表会

11 AspectJ vs Bugdel AspectJ (汎用) Bugdel (テスト、デバッグ用) ユーザインターフェイス テキストベース
GUI Pointcut 指定子 get, set, call, execution, handler… get, set, call, execution, handler… Line, AllLines Advice リフレクション (thisJoinPoint) リフレクション (thisJoinPoint) ローカル変数へのアクセス ビルトメソッド 2005年2月6日 修士論文発表会

12 Line, AllLines pointcut
Line pointcut ソースコードの行番号を指定 エディタ上の行番号をクリック クラスのモジュール性を壊すがデバッグには有用 行番号はメソッドの実装に依存 AllLines pointcut メソッド内すべての行番号を指定 ステップ実行のエミュレートのため 2005年2月6日 修士論文発表会

13 AspectJ vs Bugdel AspectJ (汎用) Bugdel (テスト、デバッグ用) ユーザインターフェイス テキストベース
GUI Pointcut 指定子 get, set, call, execution, handler… get, set, call, execution, handler… Line, AllLines Advice リフレクション (thisJoinPoint) リフレクション (thisJoinPoint) ローカル変数へのアクセス ビルトメソッド 2005年2月6日 修士論文発表会

14 Bugdel の advice (1/2) (ローカル変数へのアクセス)
Advice から joinpoint に存在するローカル変数へのアクセスを許可 クラスのモジュール性を壊すがデバッグには有用 ローカル変数はメソッドの実装に依存 Advice class Server{ void run(){ int counter = 10; service();   … } Pointcut : service() メソッドの呼び出し Advice ボディ: System.out.println(counter); AspectJ では counter へのアクセスを不許可 2005年2月6日 修士論文発表会

15 Bugdel の advice (2/2) リフレクション thisJoinPoint.line
リフレクション  コードの実行位置 (joinpoint) に応じて設定 thisJoinPoint.line ソースコードの行番号 thisJoinPoint.filePath ソースコードのファイルパス thisJoinPoint.variables 変数の一覧 ビルトインメソッド bugdel.Bugdel.jump(int line) 特定の行番号へジャンプ (C言語の goto 文) bugdel.Bugdel.openEditor(..) 1class A{ 2 int x; 3 void run1(){ x = 10; … x = 20; 7 } 8 void run2(){ x = 30; … 11 } 12} 2005年2月6日 修士論文発表会

16 応用例:ブレイクポイントのエミュレート デバッグモード (JPDA) の無い JVM 上で実現 例: サードパーティが作成した JVM
2005年2月6日 修士論文発表会

17 AllLines pointcut を使ったステップ実行
メソッドの入口 MethodExecution (before) メソッドの出口 MethodExecution (after) フィールド参照 FieldGet フィールド代入 FieldSet ソースの行番号 Line ステップ実行 AllLines 2005年2月6日 修士論文発表会

18 指定した advice String file = thisJoinPoint.filePath; int line = thisJoinPoint.line; bugdel.Bugdel.openEditor("localhost",5555,file,line); System.err.println(thisJoinPoint.location); Object[][] vs = thisJoinPoint.variables; bugdel.Bugdel.printVariables(vs); javax.swing.JOptionPane.showMessageDialog(null,"OK?"); 上から説明 2005年2月6日 修士論文発表会

19 指定した advice (1/4) String file = thisJoinPoint.filePath; int line = thisJoinPoint.line; bugdel.Bugdel.openEditor("localhost",5555,file,line); System.err.println(thisJoinPoint.location); Object[][] vs = thisJoinPoint.variables; bugdel.Bugdel.printVariables(vs); javax.swing.JOptionPane.showMessageDialog(null,"OK?"); ソースコードを Bugdel エディタで開きハイライト表示 1. openEditor(..) メソッドの呼び出し JVM 2. ファイル名、行番号を送信 3.ソースファイルを開きハイライト表示 Eclipse&Bugdel 2005年2月6日 修士論文発表会

20 指定した advice (2/4) String file = thisJoinPoint.filePath; int line = thisJoinPoint.line; bugdel.Bugdel.openEditor("localhost",5555,file,line); System.err.println(thisJoinPoint.location); Object[][] vs = thisJoinPoint.variables; bugdel.Bugdel.printVariables(vs); javax.swing.JOptionPane.showMessageDialog(null,"OK?"); ソースコードの位置情報をコンソールに出力 2005年2月6日 修士論文発表会

21 指定した advice (3/4) String file = thisJoinPoint.filePath; int line = thisJoinPoint.line; bugdel.Bugdel.openEditor("localhost",5555,file,line); System.err.println(thisJoinPoint.location); Object[][] vs = thisJoinPoint.variables; bugdel.Bugdel.printVariables(vs); javax.swing.JOptionPane.showMessageDialog(null,"OK?"); コード実行位置に存在する 変数一覧をコンソールへ出力 2005年2月6日 修士論文発表会

22 bugdel.Bugdel.printVariables メソッドの概要
変数一覧を表示 thisJoinPoint.variables Object[][] 型 Joinpoint に存在するローカル変数とクラスフィールドの一覧 各変数の名前、値、型、アクセス修飾子 bugdel.Bugdel.printVariables メソッドの概要 Object[][] v = thisJoinPoint.variables; for(int i=0; i<v.length; i++){ System.err.print(v[i][0]+”=“+v[i][1]+”,”); } 2005年2月6日 修士論文発表会

23 指定した advice (4/4) String file = thisJoinPoint.filePath; int line = thisJoinPoint.line; bugdel.Bugdel.openEditor("localhost",5555,file,line); System.err.println(thisJoinPoint.location); Object[][] vs = thisJoinPoint.variables; bugdel.Bugdel.printVariables(vs); javax.swing.JOptionPane.showMessageDialog(null,"OK?"); OK ボタンが押されるまで スレッドを停止させる 2005年2月6日 修士論文発表会

24 関連研究 1 AspectJ/AJDT, JBoss AOP Bugdel 汎用的なアスペクト指向システム クラスのモジュール性
テスト、デバッグ専用のアスペクト指向 モジュール性よりもテスト、デバッグの有用性 Line pointcut, AllLines pointcut Joinpoint に存在するローカル変数へのアクセス bugdel.Bugdel.jump(..) 2005年2月6日 修士論文発表会

25 関連研究 2 従来のデバッガ (JPDA) Bugdel 主な用途 ブレイクポイント (実行を止める)
トレース (実行を止めない) ブレイクポイントのエミュレート JVM の デバッグモード (JVM の改良) 必要 不必要 ブレイクポイントの指定 インタラクティブ(動的) コンパイル (Weave) 時 2005年2月6日 修士論文発表会

26 発表リスト 発表論文 口答発表、ポスター発表
Bugdel: An Aspect-Oriented Debugging System, First Asian Workshop on AOSD, In Proc. of APSEC2005, IEEE press, pp , アスペクト指向を利用してデバッグコードを挿入できるソフトウェア開発環境, コンピュータソフトウェア, vol.22, no.3, pp , ソフトウェア科学会, 2005 アスペクト指向を利用してデバッグコードを挿入できるソフトウェア開発環境, 日本ソフトウェア科学会第21回大会, 口答発表、ポスター発表 第17回 コンピュータシステム・シンポジウム 第4回SPAサマーワークショップ, Fourth International Conference on Aspect-Oriented Software Development, 第8回SPAワークショップ, AOPワークショップ, 第3回SPAサマーワークショップ, (口答発表) 第299回, Programming Tools and Techniques, (口答発表) 第7回SPAワークショップ, 2005年2月6日 修士論文発表会

27 Bugdelの配布 オープンソース・ソフトウェア (CPL ライセンス) として公開
SuperJEngine® のデバッガミドルウェアとして採用 日立ソフトウェアエンジニアリング (株) が開発 J2ME 実行環境 DCT (クラス群) を利用したコードを Bugdel によりクラスファイルに追加 2005年2月6日 修士論文発表会

28 報道 「日立ソフト,東工大のアスペクト指向ツールを組み込み Java デバッグ製品に応用」, Tech-On!,日経BP, 2006年1月24日 「東工大が開発した AOP オープンソース・ソフト,日立ソフトが Java 開発環境に採用」, IT Pro 日経BP, 2005年5月20日 2005年2月6日 修士論文発表会

29 まとめ Bugdel を提案 統合開発環境 Eclipse のプラグイン テスト、デバッグに特化したアスペクト指向システム
GUI を利用した pointcut の指定 テスト、デバッグに特化したアスペクト指向システム Line pointcut, AllLines pointcut Joinpoint に存在するローカル変数へのアクセス thisJoinPoint.varables bugdel.Bugdel.openEditor(..) ブレイクポイントのエミュレート デバッグモードの無い JVM 上で実現 2005年2月6日 修士論文発表会


Download ppt "統合開発環境のための アスペクト指向システム"

Similar presentations


Ads by Google