Department of Computer Science, Graduate School of Information Science & Technology, Osaka University メソッド呼び出しパターンとして 現れる 横断的関心事の特徴評価 井上研究室 B4 三宅達也.

Slides:



Advertisements
Similar presentations
Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 1 ソフトウェア部品推薦のための.
Advertisements

Software Engineering Laboratory, Department of Computer Science, Graduate School of Information Science and Technology, Osaka University 保守支援を目的とした コードクローン情報検索ツール.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
シーケンス図の生成のための実行履歴圧縮手法
XHTML構文検証手法における スクリプト要素の静的解析アルゴリズム
シーケンシャルパターンマイニングに基づくオブジェクト指向プログラムのための 欠陥検出手法
Myoungkyu Song and Eli Tilevich 発表者: 石尾 隆(大阪大学)
情報伝播によるオブジェクト指向プログラム理解支援の提案
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
分散処理を用いた大規模ソフトウェアに対するコーディングパターン検出ツール
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
アイテムセットマイニングを利用した コードクローン分析作業の効率向上
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
類似するコーディングパターンの 利用状況調査ツールの提案
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
JAVA入門後期⑩ 情報処理試験例題解説.
アルゴリズムとプログラミング (Algorithms and Programming)
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十一回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
リファクタリング中に生じる コンパイルエラーの自動解消手法
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
動的スライスを用いたバグ修正前後の実行系列の差分検出手法
変数のデータフローを考慮した API利用コード例の検索 井上研究室 竹之内 啓太.
Javaプログラムの変更を支援する 影響波及解析システム
AspectScope による アスペクト指向プログラ ミングの支援
プログラム動作理解支援を目的とした オブジェクトの振舞いの同値分割手法
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
コードクローンの動作を比較するためのコードクローン周辺コードの解析
ソースコード縮退による ソースコード理解 神谷年洋 科学技術振興事業団 さきがけ研究21 オブジェクト指向シンポジウム2003.
コードクローン検出に基づくデザイン パターン適用支援手法の提案と実現
クラスのインターフェース やその振る舞いに及ぼすアスペクトの影響の解析と可視化
プログラム理解におけるThin sliceの 統計的調査による有用性評価
バイトコードを単位とするJavaスライスシステムの試作
オブジェクト指向 プログラミング 第十ニ回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
コード片に共通した特性を自動抽出する ソースコード閲覧ツールの試作
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
○ 後藤 祥1,吉田 則裕2 ,井岡 正和1 ,井上 克郎1 1大阪大学 2奈良先端科学技術大学院大学
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
既存ソフトウェア中の 頻出コード片を用いた コード補完手法の提案
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
コーディングパターンの あいまい検索の提案と実装
オブジェクトの協調動作を用いた オブジェクト指向プログラム実行履歴分割手法
オブジェクト指向 プログラミング 第八回 知能情報学部 新田直也.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
メソッド呼び出しパターンとして現れる横断的関心事の検出
統合開発環境によって表現された 言語機構によるコードのモジュール化
プログラムスライスを用いた凝集度メトリクスに基づく 類似メソッド集約候補の順位付け手法
設計情報の再利用を目的とした UML図の自動推薦ツール
「マイグレーションを支援する分散集合オブジェクト」
アスペクト指向言語のための視点に応じた編集を可能にするツール
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案と実装
ソースコードの差分を用いた関数呼び出し パターンの抽出手法の提案
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
オープンソースソフトウェアに対する コーディングパターン分析の適用
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
開発者との対話を活かした 横断的構造の表現
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
コードクローン解析に基づく デザインパターン適用候補の検出手法
回帰テストにおける実行系列の差分の効率的な検出手法
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
プログラム理解のための 付加注釈 DocumentTag の提案
プログラム依存グラフを用いた ソースコードのパターン違反検出法
Presentation transcript:

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University メソッド呼び出しパターンとして 現れる 横断的関心事の特徴評価 井上研究室 B4 三宅達也

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 2 研究背景 アスペクト指向プログラミング( AOP ) 横断的関心事 メソッド呼び出しパターン

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 3 研究背景 ~アスペクト指向プログラミング( AOP )~ 新たなモジュール単位「アスペクト」を導 入 アスペクトを利用し、より理想的なモ ジュール構造を実現 保守性、再利用性などが向上 クラス1 クラス 2 アスペクト ロギング例外処理

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 4 研究背景 ~横断的関心事~ 複数のモジュールにまたがって実装さ れる機能 保守性,再利用性などを悪化させる ロギング 例外処理 ロギング 例外処理 クラス1クラス 2

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 クラ スにまとめてしまい たい コンパイ ルエラー

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 6 研究背景 ~横断的関心事~ 複数のモジュールにまたがって実装さ れる機能 保守性,再利用性などを悪化させる ロギン グ 例外処理 ロギン グ 例外処理 クラス1クラス 2 アスペクト ロギング アスペクト 例外処理

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 7 研究背景 ~メソッド呼び出しパターン ~ ソースコードに頻繁に出現する構造のよく 似たコード記述 特定の機能を実現するメソッド群は出現順 序が決まっている 以下の情報を含んでいる  実現したい処理に必要な関数群  関連のある関数の呼び出し順  関数の引数や返り値の扱い方

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; }

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 9 本研究の目的 注目した特長  横断的関心事 特定の機能に関するコードが複数個所に分散  メソッド呼び出しパターン 複数個所に存在する同種の機能を実現するコードに 出現 目的  横断的関心事とメソッド呼び出しパターンの関 連性を調査する

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

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 11 実験概要 実験対象  JHotDraw 図形描画アプリケーション 総行数 : 約 行 抽出したパターン  出現回数 : 4 回以上  パターン数 : 49 種類  抽出時間 : 11 秒 評価方法  抽出したパターンが横断的関心事と関連しているかどうかを評価 他の文献でアスペクト化すべきであるとされている横断的関心事を参考に評価 評価基準  パターンの長さ  パターンの出現回数  パターンが出現するクラス数

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 12 調査結果 機能に関連したパターン  27 パターン 横断的であるパターン : 24 パターン 横断的でないパターン : 3 パターン 機能に関連していないパターン  22 パターン

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() 実行コマンドがビューに与えた 影響をチェックするためのパ ターン (アスペクト候補) 実行コマンド取り消しのための 情報を保存するためのパターン (アスペクト候補 ) コマンド実行 実行コマンド取り消し のための情報を保存 実行コマンドの処理 実行コマンドがビュー に与えた影響をチェッ ク

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() } 繰り返し分の制御に 関連するパターン (アスペクトの候補 とはいい難い) 集合がまだ要素を 持っているかどうか チェック 集合の 次の要素を取 得

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 15 調査結果 長いパターン  なんらかの機能に関連しているものが多い 出現回数が多いパターン  何らかの機能に関連しているパターンと関連していないパターンが混在 出現するクラス数が 1 のパターン  横断的でないパターンを示す パターンの長さ 機能に関連している ものの割合 2251710 機能に関連している ものの割合 100 % 71 % 33 % 50 % 45 % 出現回数 機能に関連しているも の 0/11/10/1 1/2

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 16 結果と考察 パターン長が長いものほどアスペクトにす べき横断的関心事に関連しているものが多 い  パターン長が長いほどパターンが出現するメ ソッドの機能とパターンが実現する機能が一致 する可能性が高くなる 同様の機能を実現しているメソッドが複数存在する  複数の横断的関心事が同じ順序で実行されてい る箇所が長いパターンとして出現する

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() 実行コマンドがビューに与えた 影響をチェックするためのパ ターン (アスペクト候補) 実行コマンド取り消しのための 情報を保存するためのパターン (アスペクト候補 ) コマンド実行 実行コマンド取り消し のための情報を保存 実行コマンドの処理 実行コマンドがビュー に与えた影響をチェッ ク

Department of Computer Science, Graduate School of Information Science & Technology, Osaka University 卒業論文発表会 2007/02/27 18 まとめと今後の課題 メソッド呼び出しパターンとアスペクトにすべき 横断的関心事の関連を調査  パターンが長いほど横断的関心事との関連が強い  出現回数はアスペクトを用いたコード書き換えの効果を 示すと考えられる 今後の課題  他の対象で同じ実験を行う 本研究で得られた実験結果は JHotDraw 特有の特徴から得られた 結果である可能性がある  本研究で得られた結果を応用し、アスペクトに関連した パターンのみを抽出する手法の考案