プログラムの織り込み関係を可視化 するアウトラインビューの提案と実装 理学部 情報科学科 07_05108 大谷 晃司 指導教員 千葉 滋 1 オブジェクト指向を用いたソフトウェア開発の問題点 関心事ごとにモジュール化する事が出来ない 図形エディタの再描画処理、タイマー処理など 横断的関心事がクラス間をまたがってしまう Shape 2 Rectangle setX setY setHeight setWidth 代入 代入 代入 代入 GUI GUI GUI GUI Timer Timer Timer Timer アスペクト指向言語で分離 1/3 GluonJ クラス機構の拡張だけでアスペクト指向を実現 横断的関心事を一つのモジュール(リバイザ)にまとめる Shape Repainter setX setY 代入 代入 GUI GUI Rectangle Timer setX Timer setWidth 代入 代入 GUI GUI @Reviser ShapeRepainter class Repainter{ @Reviser setX setY static class ShapeRepainter ex. Shape{ void setX(int x){ super.setX(x); Screen.repaint(); RectangleRepainter } @Reviser static setHeight setWidth class RectRepainter ex. Rectangle{ ... Timer 3 Timer } } アスペクト指向言語で分離 2/3 GluonJ クラス機構の拡張だけでアスペクト指向を実現 横断的関心事を一つのモジュール(リバイザ)にまとめる @Reviserを用いてプログラムの織り込み class Shape{ @Reviser class Repainter{ void setX(int x){ @Reviser this.xPos = x; static class ShapeRepainter ex. Shape{ // Screen.repaint(); void setX(int x){ } class Rectangle ex.Shape{ ... super.setX(x); ... } Screen.repaint(); void setWidth(int w){ 差分を一つの } this. width = w; モジュールにまとめる @Reviser static // Screen.repaint(); class RectRepainter ex. Rectangle{ } ... ... ... } 4 } } アスペクト指向言語で分離 3/3 それぞれの横断的関心事をモジュールに分離 Repainter GUI GUI Shape Timer Timer Timer ShapeRepainter setX setY GUI GUI Shape setX setY 代入 代入 Timer Shape Repainter 5 ShapeTimer setX setY Timer Timer 問題:既存のアウトラインビューでは情報不足 分離させたモジュールの情報を知ることが出来ない Repainter GUI Shape Timer Timer GUI Timer ShapeRepainter setX setY GUI GUI Shape setX setY 代入 代入 Timer Shape Repainter 6 ShapeTimer setX setY Timer Timer 提案:視点に応じて関連する織り込み情報を提供する アウトラインビュー 織り込みの情報をそれぞれの視点に応じて提供 Repainter GUI Shape Timer Timer GUI Timer ShapeRepainter setX setY GUI GUI Shape setX setY 代入 代入 Timer Shape Repainter 7 ShapeTimer setX setY Timer Timer Shapeから見たアウトラインビュー メソッドの織り込みの順序を階層表示 織り込みの情報をそれぞれの視点に応じて提供 織り込みが行われるクラス (Shape)のアウトラインビュー 織り込みが行われるメソッド (Shapeクラスのsetメソッド) 最初に織り込みを行うメソッド (RepainterリバイザのGUI処理) 二番目に織り込みを行うメソッド (Timerリバイザのタイマー処理) 8 Repainterから見たアウトラインビュー メソッドの織り込みの順序を階層表示 織り込みの情報をそれぞれの視点に応じて提供 織り込みを行うリバイザ (Repainter)のアウトラインビュー 織り込みが行われるメソッド (Shapeクラスのsetメソッド) 最初に織り込みを行うメソッド (RepainterリバイザのGUI処理) 9 二番目に織り込みを行うメソッド (Timerリバイザのタイマー処理) 現在の実装 Eclipseプラグインとして開発 10 Eclipseのコードを読んだ量:約10000行 コード量:約2000行 JDT(Java Development Tools)のアウトラインビューを拡張 実行時に織り込みが行われるメソッドを列挙 織り込み順のあいまいさ検出 織り込み順で全体の挙動が変わる @Require 各リバイザの織り込み順の優先順位を指定 本システムが検出 @Reviser @Require(Timer.class) class Repainter { … Timerを先に適用 優先順位を指定しない } エラー箇所を 色を変えて表示 11 @Reviser @Require(Repainter.class) class Timer { … 矛盾 Repainterを先に適用 優先順位を指定しない } 順序があいまい デモ 実際に本システムを実装したアウトラインビューをお見 せします 12 関連研究 AJDT(AspectJ Development Tools)[The Eclipse Foundation] AspectJ開発を支援するツール アスペクトの視点から、他のアスペクトの情報を知ることがで Shape きない Repainter setX GUI Shape Timer Timer 代入 setY ShapeRepainter 代入 setX setY GUI Code Bubbles[Andrew ら ‘10] 13 視点によって表示する内容を変更 エディタ(bubble)で表示 GUI GUI Timer まとめと今後の課題 まとめ プログラムの織り込み関係を表示するアウトラインビュー 視点に応じて切り替える Eclipseプラグインとして開発 今後の課題 GluonJ開発を支援するツールとして完成 評価 14 実際に使用してもらい、ビューの切り替えを行う回数を調べる
© Copyright 2024 ExpyDoc