Download presentation
Presentation is loading. Please wait.
Published byあおい ちゅうか Modified 約 8 年前
1
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University メソッド呼び出しパターンとして 現れる 横断的関心事の特徴評価 井上研究室 B4 三宅達也
2
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 2 研究背景 アスペクト指向プログラミング( AOP ) 横断的関心事 メソッド呼び出しパターン
3
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 3 研究背景 ~アスペクト指向プログラミング( AOP )~ 新たなモジュール単位「アスペクト」を導 入 アスペクトを利用し、より理想的なモ ジュール構造を実現 保守性、再利用性などが向上 クラス1 クラス 2 アスペクト ロギング例外処理
4
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 4 研究背景 ~横断的関心事~ 複数のモジュールにまたがって実装さ れる機能 保守性,再利用性などを悪化させる ロギング 例外処理 ロギング 例外処理 クラス1クラス 2
5
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 5 横断的関心事の例 Class cls1 { void method1 ( ) { logging.message(); } Class cls1 { void method1 ( ) { logging.message(); } Class Logging { public void message( ) { System.out.println(“start”); } Class Logging { public void message( ) { System.out.println(“start”); } Class cls2 { void method2 ( ) { logging.message(); } Class cls2 { void method2 ( ) { logging.message(); } Class cls1 { void method1 ( ) { logging.message( “meth1” ); } Class cls1 { void method1 ( ) { logging.message( “meth1” ); } Class cls2 { void method2 ( ) { logging.message( “meth2” ); } Class cls2 { void method2 ( ) { logging.message( “meth2” ); } Class Logging { public void message( String s ) { System.out.println(s); } Class Logging { public void message( String s ) { System.out.println(s); } メソッドの開始時 にメッセージを 表示するメソッド 本来は Logging クラ スにまとめてしまい たい コンパイ ルエラー
6
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 6 研究背景 ~横断的関心事~ 複数のモジュールにまたがって実装さ れる機能 保守性,再利用性などを悪化させる ロギン グ 例外処理 ロギン グ 例外処理 クラス1クラス 2 アスペクト ロギング アスペクト 例外処理
7
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 7 研究背景 ~メソッド呼び出しパターン ~ ソースコードに頻繁に出現する構造のよく 似たコード記述 特定の機能を実現するメソッド群は出現順 序が決まっている 以下の情報を含んでいる 実現したい処理に必要な関数群 関連のある関数の呼び出し順 関数の引数や返り値の扱い方
8
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 8 メソッド呼び出しパターンの例 Public void circle ( ) { double res; LineData ld = input ( ); boolean c = ld.check( ); if ( c ) { int r = ld.getRadius( ); res = Math.pow ( r,2 ); res = res * Math.PI; output ( res ); } Public void triangle ( ) { double res; LineData ld = input ( ); boolean c = ld.check( ); int h = ld.getHeight( ); int b = ld.hetBottom( ); if ( c ) { res = b * h / 2; output ( res ); } 辺の長さを 読み込む 求めた面積 を出力 長さの例外 チェック メソッド呼び出しパ ターン input( ) LineData.check( ); if output; }
9
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 9 本研究の目的 注目した特長 横断的関心事 特定の機能に関するコードが複数個所に分散 メソッド呼び出しパターン 複数個所に存在する同種の機能を実現するコードに 出現 目的 横断的関心事とメソッド呼び出しパターンの関 連性を調査する
10
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 10 メソッド呼び出しパターン抽出 既存の手法を採用 [1] ソースコードの特徴抽出 特徴シーケンスの生成 Sequential pattern mining PrefixSpan アルゴリズムを採用 Java で書かれたプログラムを対象としたツールを 実装 [1] 中山崇,松下誠,井上克郎, ” ソースコードの差分を用いた関数呼び出しパター ン抽出法の提 案 ” ,情報処理学会研究報告, Vol.2006 , No.35 , 2006-SE-151 , pp.49–56 , 2006
11
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 11 実験概要 実験対象 JHotDraw 図形描画アプリケーション 総行数 : 約 18000 行 抽出したパターン 出現回数 : 4 回以上 パターン数 : 49 種類 抽出時間 : 11 秒 評価方法 抽出したパターンが横断的関心事と関連しているかどうかを評価 他の文献でアスペクト化すべきであるとされている横断的関心事を参考に評価 評価基準 パターンの長さ パターンの出現回数 パターンが出現するクラス数
12
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 12 調査結果 機能に関連したパターン 27 パターン 横断的であるパターン : 24 パターン 横断的でないパターン : 3 パターン 機能に関連していないパターン 22 パターン
13
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 13 抽出されたメソッド呼び出しパターンの例 (機能に関連しているパターン) org.jhotdraw.standard. PasteCommand public void execute() { super.execute(); Point lastClick = view().lastClick(); FigureSelection selection = (FigureSelection)Clipboard.getClipboard().getConten; if (selection != null) { setUndoActivity(createUndoActivity()); getUndoActivity().setAffectedFigures( (FigureEnumerator)selection.getData(StandardFigureSelection.TYPE)); if (!getUndoActivity().getAffectedFigures().hasNextFigure()) { setUndoActivity(null); return; } Rectangle r = getBounds(getUndoActivity().getAffectedFigures()); view().clearSelection(); FigureEnumeration fe = insertFigures(getUndoActivity().getAffectedFigures() getUndoActivity().setAffectedFigures(fe); view().checkDamage(); } org.jhotdraw.standard.SendToBackCommand public void execute() { super.execute(); setUndoActivity(createUndoActivity()); getUndoActivity().setAffectedFigures(view().selectionZOrdered()); FigureEnumeration fe = getUndoActivity().getAffectedFigures(); while (fe.hasNextFigure()) { view().drawing().sendToBack(fe.nextFigure()); } view().checkDamage(); } メソッド呼び出しパターン AbstractCommand.execute() AbstractCommand.setUndoActivity() AbstractCommand.getUndoActivity() Undoable.setAffectedFigures() AbstractCommand.getUndoActivity() Undoable.getAffectedFigures() FigureEnumeration.hasNextFigure() AbstractCommand.view() DrawingView.checkDamage() 実行コマンドがビューに与えた 影響をチェックするためのパ ターン (アスペクト候補) 実行コマンド取り消しのための 情報を保存するためのパターン (アスペクト候補 ) コマンド実行 実行コマンド取り消し のための情報を保存 実行コマンドの処理 実行コマンドがビュー に与えた影響をチェッ ク
14
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 14 org.jhotdraw.standard.StandardDrawingView public void addAll(Collection figures) { FigureEnumeration fe = new FigureEnumerator(figures); while (fe.hasNextFigure()) { add(fe.nextFigure()); } 抽出されたメソッド呼び出しパターンの例 (機能に関連していないパターン) org.jhotdraw.standard.CompositeFigure public FigureEnumeration figures(Rectangle viewRectangle) { if (_theQuadTree != null) { FigureEnumeration fe = _theQuadTree.getAllWithin(new Bounds(viewRectangle( List l2 = CollectionsFactory.current().createList(); while (fe.hasNextFigure()) { Figure f = fe.nextFigure(); //int z = fFigures.indexOf(f); l2.add(new OrderedFigureElement(f, f.getZValue())); } ・ } メソッド呼び出しパターン (出現回数 59 ) FigureEnumeration.hasNextFigure() while FigureEnumeration.nextFigure() } 繰り返し分の制御に 関連するパターン (アスペクトの候補 とはいい難い) 集合がまだ要素を 持っているかどうか チェック 集合の 次の要素を取 得
15
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 15 調査結果 長いパターン なんらかの機能に関連しているものが多い 出現回数が多いパターン 何らかの機能に関連しているパターンと関連していないパターンが混在 出現するクラス数が 1 のパターン 横断的でないパターンを示す パターンの長さ 987654 機能に関連している ものの割合 2251710 機能に関連している ものの割合 100 % 71 % 33 % 50 % 45 % 出現回数 592619151211 機能に関連しているも の 0/11/10/1 1/2
16
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 16 結果と考察 パターン長が長いものほどアスペクトにす べき横断的関心事に関連しているものが多 い パターン長が長いほどパターンが出現するメ ソッドの機能とパターンが実現する機能が一致 する可能性が高くなる 同様の機能を実現しているメソッドが複数存在する 複数の横断的関心事が同じ順序で実行されてい る箇所が長いパターンとして出現する
17
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 17 抽出されたメソッド呼び出しパターンの例 (機能に関連しているパターン) org.jhotdraw.standard. PasteCommand public void execute() { super.execute(); Point lastClick = view().lastClick(); FigureSelection selection = (FigureSelection)Clipboard.getClipboard().getConten; if (selection != null) { setUndoActivity(createUndoActivity()); getUndoActivity().setAffectedFigures( (FigureEnumerator)selection.getData(StandardFigureSelection.TYPE)); if (!getUndoActivity().getAffectedFigures().hasNextFigure()) { setUndoActivity(null); return; } Rectangle r = getBounds(getUndoActivity().getAffectedFigures()); view().clearSelection(); FigureEnumeration fe = insertFigures(getUndoActivity().getAffectedFigures() getUndoActivity().setAffectedFigures(fe); view().checkDamage(); } org.jhotdraw.standard.SendToBackCommand public void execute() { super.execute(); setUndoActivity(createUndoActivity()); getUndoActivity().setAffectedFigures(view().selectionZOrdered()); FigureEnumeration fe = getUndoActivity().getAffectedFigures(); while (fe.hasNextFigure()) { view().drawing().sendToBack(fe.nextFigure()); } view().checkDamage(); } メソッド呼び出しパターン AbstractCommand.execute() AbstractCommand.setUndoActivity() AbstractCommand.getUndoActivity() Undoable.setAffectedFigures() AbstractCommand.getUndoActivity() Undoable.getAffectedFigures() FigureEnumeration.hasNextFigure() AbstractCommand.view() DrawingView.checkDamage() 実行コマンドがビューに与えた 影響をチェックするためのパ ターン (アスペクト候補) 実行コマンド取り消しのための 情報を保存するためのパターン (アスペクト候補 ) コマンド実行 実行コマンド取り消し のための情報を保存 実行コマンドの処理 実行コマンドがビュー に与えた影響をチェッ ク
18
Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 18 まとめと今後の課題 メソッド呼び出しパターンとアスペクトにすべき 横断的関心事の関連を調査 パターンが長いほど横断的関心事との関連が強い 出現回数はアスペクトを用いたコード書き換えの効果を 示すと考えられる 今後の課題 他の対象で同じ実験を行う 本研究で得られた実験結果は JHotDraw 特有の特徴から得られた 結果である可能性がある 本研究で得られた結果を応用し、アスペクトに関連した パターンのみを抽出する手法の考案
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.