Presentation is loading. Please wait.

Presentation is loading. Please wait.

アスペクト指向言語のための視点に応じた編集を可能にするツール

Similar presentations


Presentation on theme: "アスペクト指向言語のための視点に応じた編集を可能にするツール"— Presentation transcript:

1 アスペクト指向言語のための視点に応じた編集を可能にするツール
千葉滋研究室 11M37063 大谷 晃司

2 オブジェクト指向言語での開発の限界 横断的関心事: モジュール間をまたがってしまう関心事 編集、つけ外しが困難
例: ロギング処理、図形の再描画処理、タイマー処理など 編集、つけ外しが困難 横断的関心事に対応した言語が必要 Rectangle setHeight setWidth 高さ代入 幅代入 Shape setX setY x代入 y代入 GUI Timer

3 アスペクト指向言語 横断的関心事をモジュールに分割 コードを織り込むことで元の処理を実現 編集、つけ外しが容易 Shape setX
setY x代入 y代入 Rectangle setHeight setWidth 高さ代入 幅代入 GUI GUI GUI GUI Timer Timer Timer Timer Repainter GUI GUI GUI GUI Timer Timer Timer Timer Timer

4 問題: 視点によってはモジュール化出来ていない
setHeightメソッドの内容を編集したい時は? 結局ファイル間を横断している ファイル間をまたがって編集する必要がある 全ての視点から理想的なモジュール化が出来ていない 言語機構のみでは限界がある ツールによる支援が必要 Rectangle setHeight setWidth 幅代入 Shape setX setY x代入 y代入 高さ代入 Repainter GUI GUI Timer Timer

5 提案: 編集を行いたい視点に応じたビュー 着目する関心事に関連する処理を集めて表示 ファイル間をまたがった編集を回避可能 拡張ビュー
Rectangle setHeight setWidth Rectangle 高さ代入 幅代入 setHeight setWidth 高さ代入 幅代入 GUI Timer Repainter GUI GUI Timer Timer Timer

6 編集を行いたい視点に応じたビュー Eclipseプラグインとして開発 対応言語はGluonJ [OOPSLA ’10]
Javaを拡張したアスペクト指向言語 リバイザとクラス継承を用いて織り込み 織り込みを行いたいメソッドをオーバーライド アウトラインビューとエディタをサポート

7 拡張アウトラインビュー(クラス側) 織り込みの情報を階層的に表示 どのメソッドに織り込みが行われるかを表示
リバイザを織り込みを行う順番で上から列挙 リバイザ同士の衝突を回避可能 Rectangle setHeight setWidth 高さ代入 幅代入 Repainter GUI GUI Timer Timer Timer 7

8 拡張アウトラインビュー(リバイザ側) 織り込む先のターゲットクラスを表示 リバイザを織り込みを行う順番で上から列挙
リバイザ同士の衝突 を回避可能 Shape Shape Rectangle Rectangle setX setY setHeight setWidth x代入 y代入 高さ代入 幅代入 Repainter GUI GUI GUI GUI Timer Timer Timer Timer Timer 8

9 デモ 9

10 拡張エディタ クラス側の視点 リバイザ側の視点 編集を行いたい箇所がファイルを横断 エディタによる支援が必要
編集を行いたい箇所が一つのファイルに集約 エディタによる支援 の必要性が低い Shape Rectangle setX setY setHeight setWidth x代入 y代入 高さ代入 幅代入 Repainter GUI GUI GUI GUI Timer Timer Timer Timer Timer

11 拡張エディタ コードを集約するファイルを作成 一番最後に織り込みを行うリバイザのコードを貼り付け
織り込みを行う前のメソッドを呼ぶ箇所にコードを展開 複数のファイルのコードを一つのファイルに集約 ファイル毎に背景色を変えて区別

12 デモ

13 FigureEditorクラスのmouseDraggedメソッドを指定
Withinメソッド 特定のクラス、メソッド内から呼び出された時のみ織り込み リバイザ毎に指定 callerによってメソッドの挙動が変化 FigureEditor Shape s; int newX = … s.setX(newX); mouseDragged mouseClicked Repainter GUI 指定なし Timer FigureEditorクラスのmouseDraggedメソッドを指定 全てに織り込み Shape setX setY x代入 y代入 13

14 Withinメソッド 特定のクラス、メソッド内から呼び出された時のみ織り込み リバイザ毎に指定 callerによってメソッドの挙動が変化 …
FigureEditor Shape s; int newX = … s.setX(newX); mouseDragged mouseClicked Repainter GUI 指定なし Timer FigureEditorクラスのmouseDraggedメソッドを指定 Shape setX setY x代入 y代入 FigureEditorクラスのmouseDraggedメソッド内 から呼び出された時に のみ織り込み 14

15 Withinメソッドの対応(アウトラインビュー)
特定のクラス、メソッド内から呼び出された時のみ織り込み callerによってメソッドの挙動が変化 Withinで指定されているクラス、メソッドを表示 クラス側 リバイザ側 15

16 Withinメソッドの対応(エディタ) 同名メソッドを複数表示 Withinで指定されたメソッドから呼び出された時の内容
それ以外から呼び出された時の内容 16

17 評価 JDTと比較して、本システムがどれだけ閲覧性を向上させる かを評価 拡張アウトラインビューの評価 拡張エディタの評価
GluonJで開発したコンパイラを題材 総行数:1840行 クラスの数: 54個 リバイザの数: 24個 拡張アウトラインビューの評価 ある行動をする際に、どれだけの項目を閲覧する必要があるかを 評価 拡張エディタの評価 クラスのファイルを修正する際に、どれだけのプログラムを閲覧す る必要があるかを行数を基準に評価 17

18 拡張アウトラインビューの評価 以下のシチュエーションに対してどれだけの項目を閲覧する 必要があるかを評価
(1.) リバイザ側から織り込み先のクラスを知りたい時 (2.) リバイザ側から同一のクラスに織り込みを行う別のリバイザを 知りたい時 (3.) リバイザ側からWithinで指定したクラスを知りたい時 (4.) クラス側からそのクラスに織り込みを行うリバイザを知りたい 時 JDTではパッケージエクスプローラから探索 本システムでは拡張アウトラインビューから探索 目的に応じて本システムが的確に表示を行えているかを評 価 既存のJavaアウトラインビューで表示される項目の数を計測 18

19 拡張アウトラインビューの評価結果と考察 JDTのパッケージエクスプローラーを用いた探索と比較して、 閲覧する項目を平均40%削減
既存アウトラインビューと比較して、本システムでは平均1.8 項目増加 ほぼ的確に求めている情報を表示出来ている 19

20 拡張エディタの評価 あるクラスに関連のあるファイルを修正する際に、どれだけ のプログラムを閲覧する必要があるかを行数を基準に評価
JDTではクラスの行数とそのクラスに織り込みを行うリバイザの行 数の合計 本システムでは拡張エディタで作成したファイルの行数 20

21 拡張エディタの評価結果と考察 拡張エディタを用いることで、既存エディタよりも閲覧する必 要のあるコード行数を平均80%削減
リバイザが単一のクラスにのみ織り込みを行なっている 場合は20%程度削減 リバイザの ファイルが大きい ほど本システム の有用性が高い 21

22 関連研究(1/2) AJDT (+ AspectJ) AspectMaps [Fabryら ‘11]
織り込みの情報を表示するツールが多数存在 アスペクトの衝突を知ることが出来ない 編集作業はファイル間をまたがって行う必要がある AspectMaps [Fabryら ‘11] 織り込みの情報を色分けで表示 織り込みが行われる順番を重視 アスペクトの衝突を表示出来る 22

23 関連研究(2/2) KIDE [Kanazawaら ‘12] Code Bubbles [Andrewら ‘10]
着目する関心事に合わせて仮想的なファイルを作成 一つのファイルで編集作業を行うことが出来る 集めたい関心事を手動で定義する必要がある アスペクト指向による開発を行うための支援がない Code Bubbles [Andrewら ‘10] bubbleを用いて、メソッド単位でプログラムを表示 複数のファイルの情報を一画面に表示 関心事を集める為の支援がない 関連研究 23

24 まとめとfuture work まとめ future work これまでの活動 視点に応じた編集を可能にするツールの提案
GluonJのツールとして実装 ツールの評価 future work 他のアスペクト指向言語で実装 これまでの活動 PPL 2011 ポスター発表 日本ソフトウェア科学会第28回大会 口頭発表 24


Download ppt "アスペクト指向言語のための視点に応じた編集を可能にするツール"

Similar presentations


Ads by Google