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

Slides:



Advertisements
Similar presentations
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也. 講義計画(あくまで予定) 第 1 回 プログラミング言語の種類と歴史 第 2 回 eclipse の基本操作 第 3 回 eclipse のデバッグ機能 第 4 回 構造化プログラミングの復習 第 5 回 演習 第 6 回 構造化指向からオブジェクト指向へ.
Advertisements

関心事指向アーキテクチャモデリング環 境 Concern-oriented Architecture Modeling Environment 九州工業大学大学院情報工学府 情報科学専攻 鵜林研究室 M1 佐藤 友紀 1.
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
シーケンス図の生成のための実行履歴圧縮手法
情報理工学部 情報システム工学科 ラシキアゼミ3年 H 岡田 貴大
Dynamic AOPと その実装手法について
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
情報伝播によるオブジェクト指向プログラム理解支援の提案
AspectScope によるアスペクトとクラスのつながりの視覚化
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
効率的なJava Dynamic AOPシステムを実現する Just-in-Time weaver
アスペクト指向プログラミングと Dependency Injection の融合
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
アスペクト指向の 分散化支援ツール 西澤無我、千葉滋 東京工業大学 SPA summer 2002, Hakone.
暗黙的に型付けされる構造体の Java言語への導入
関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
アスペクト指向言語による 例外処理の記述方法の改善
シーケンス図を用いて実行履歴を可視化するデバッグ環境の試作
Java Bytecode Modification and Applet Security
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
デバッガ dbx の使い方.
Javaプログラムの変更を支援する 影響波及解析システム
AspectScope による アスペクト指向プログラ ミングの支援
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
動的データ依存関係解析を用いた Javaプログラムスライス手法
既存Javaプログラム向け 分散化支援システムの開発
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
Recoveryアドバイスをもつ アスペクト指向システム
コードクローンの動作を比較するためのコードクローン周辺コードの解析
クラスのインターフェース やその振る舞いに及ぼすアスペクトの影響の解析と可視化
アスペクト指向言語のための 独立性の高いパッケージシステム
アスペクト指向言語のための 独立性の高いパッケージシステム
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
ソフトウェア保守のための コードクローン情報検索ツール
Java における 先進的リフレクション技術
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
契約による クラスとアスペクト間の 影響解析
Javaバーチャルマシンを利用した 動的依存関係解析手法の提案
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
コーディングパターンの あいまい検索の提案と実装
JAVAバイトコードにおける データ依存解析手法の提案と実装
アルゴリズムとプログラミング (Algorithms and Programming)
静的情報と動的情報を用いた Javaプログラムスライス計算法
分散 Java プログラムのための アスペクト指向言語
Josh : バイトコードレベルでのJava用 Aspect Weaver
統合開発環境によって表現された 言語機構によるコードのモジュール化
IDE を活用した言語機構に頼らないコード再利用のためのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
アスペクト指向プログラミングの 動的プログラムスライスへの応用
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
統合開発環境のための プログラミング言語拡張 フレームワーク
開発者との対話を活かした 横断的構造の表現
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
プログラム理解のための 付加注釈 DocumentTag の提案
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

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

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

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

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

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日 修士論文発表会

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日 修士論文発表会

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日 修士論文発表会

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

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

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

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

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日 修士論文発表会

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(){ 4 x = 10; 5 … 6 x = 20; 7 } 8 void run2(){ 9 x = 30; 10 … 11 } 12} 2005年2月6日 修士論文発表会

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

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

指定した 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日 修士論文発表会

指定した 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日 修士論文発表会

指定した 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日 修士論文発表会

指定した 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日 修士論文発表会

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日 修士論文発表会

指定した 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日 修士論文発表会

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

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

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

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

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

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