スライド 1

アスペクト指向言語のための視点に
応じた編集を可能にするツール
千葉滋研究室
11M37063 大谷 晃司
1
オブジェクト指向言語での開発の限界
横断的関心事: モジュール間をまたがってしまう関心事


例: ロギング処理、図形の再描画処理、タイマー処理など
編集、つけ外しが困難


横断的関心事に対応した言語が必要
Shape
2
Rectangle
setX
setY
setHeight
setWidth
x代入
y代入
高さ代入
幅代入
GUI
GUI
GUI
GUI
Timer
Timer
Timer
Timer
アスペクト指向言語
横断的関心事をモジュールに分割



コードを織り込むことで元の処理を実現
編集、つけ外しが容易
Shape
Rectangle
setX
setY
setHeight
setWidth
x代入
y代入
高さ代入
幅代入
GUI
GUI
GUI
GUI
Timer
Timer
Timer
Timer
GUI
GUI
GUI
GUI
Timer
Timer
Timer
Timer
Repainter
Timer
3
問題: 視点によってはモジュール化出来ていない
setHeightメソッドの内容を編集したい時は?



結局ファイル間を横断している
ファイル間をまたがって編集する必要がある
全ての視点から理想的なモジュール化が出来ていない



言語機構のみでは限界がある
ツールによる支援が必要
Shape
Repainter
Timer
4
Rectangle
setX
setY
setHeight
setWidth
x代入
y代入
高さ代入
幅代入
GUI
GUI
GUI
GUI
Timer
Timer
Timer
Timer
提案: 編集を行いたい視点に応じたビュー
着目する関心事に関連する処理を集めて表示
ファイル間をまたがった編集を回避可能


拡張ビュー
Rectangle
setHeight
setWidth
高さ代入
幅代入
Repainter
GUI
GUI
Timer
Timer
5
Timer
Rectangle
setHeight
setWidth
高さ代入
幅代入
GUI
GUI
Timer
Timer
編集を行いたい視点に応じたビュー
Eclipseプラグインとして開発
対応言語はGluonJ [OOPSLA ’10]





Javaを拡張したアスペクト指向言語
リバイザとクラス継承を用いて織り込み
織り込みを行いたいメソッドをオーバーライド
アウトラインビューとエディタをサポート

6
拡張アウトラインビュー(クラス側)
織り込みの情報を階層的に表示



どのメソッドに織り込みが行われるかを表示
リバイザを織り込みを行う順番で上から列挙

リバイザ同士の衝突を回避可能
Rectangle
setHeight
setWidth
高さ代入
幅代入
GUI
GUI
Timer
Timer
Repainter
Timer
7
拡張アウトラインビュー(リバイザ側)
織り込む先のターゲットクラスを表示
リバイザを織り込みを行う順番で上から列挙



リバイザ同士の衝突
を回避可能
Shape
setX
setY
setHeight
setWidth
x代入
y代入
高さ代入
幅代入
GUI
8
Rectangle
Timer
Repainter
GUI
GUI
Timer
Timer
Timer
GUI
Timer
デモ
9
拡張エディタ

クラス側の視点



編集を行いたい箇所がファイルを横断
エディタによる支援が必要
リバイザ側の視点


編集を行いたい箇所が一つのファイルに集約
エディタによる支援
Shape
Rectangle
の必要性が低い
setX
setY
setWidth
setHeight
x代入
y代入
高さ代入
幅代入
GUI
GUI
GUI
GUI
Timer
Timer
Timer
Timer
Repainter
Timer
10
拡張エディタ

コードを集約するファイルを作成




11
一番最後に織り込みを行うリバイザのコードを貼り付け
織り込みを行う前のメソッドを呼ぶ箇所にコードを展開
複数のファイルのコードを一つのファイルに集約
ファイル毎に背景色を変えて区別
デモ
12
Withinメソッド

特定のクラス、メソッド内から呼び出された時のみ織り込み
リバイザ毎に指定
callerによってメソッドの挙動が変化


指定なし
Repainter
GUI
GUI
FigureEditorクラスの
mouseDraggedメソッド
を指定
Timer
Timer
13
Timer
FigureEditor
mouseDragged
…
Shape s;
int newX = …
…
s.setX(newX);
全てに織り込み
mouseClicked
…
Shape s;
int newX = …
…
s.setX(newX);
Shape
setX
setY
x代入
y代入
Withinメソッド

特定のクラス、メソッド内から呼び出された時のみ織り込み
リバイザ毎に指定
callerによってメソッドの挙動が変化


指定なし
Repainter
GUI
GUI
FigureEditorクラスの
mouseDraggedメソッド
を指定
Timer
Timer
14
Timer
FigureEditor
mouseDragged
…
Shape s;
int newX = …
…
s.setX(newX);
FigureEditorクラスの
mouseDraggedメソッド内
から呼び出された時に
のみ織り込み
mouseClicked
…
Shape s;
int newX = …
…
s.setX(newX);
Shape
setX
setY
x代入
y代入
Withinメソッドの対応(アウトラインビュー)

特定のクラス、メソッド内から呼び出された時のみ織り込み


callerによってメソッドの挙動が変化
Withinで指定されているクラス、メソッドを表示
クラス側
15
リバイザ側
Withinメソッドの対応(エディタ)

同名メソッドを複数表示


16
Withinで指定されたメソッドから呼び出された時の内容
それ以外から呼び出された時の内容
評価

JDTと比較して、本システムがどれだけ閲覧性を向上させる
かを評価

GluonJで開発したコンパイラを題材




拡張アウトラインビューの評価


総行数:1840行
クラスの数: 54個
リバイザの数: 24個
ある行動をする際に、どれだけの項目を閲覧する必要があるかを
評価
拡張エディタの評価

17
クラスのファイルを修正する際に、どれだけのプログラムを閲覧す
る必要があるかを行数を基準に評価
拡張アウトラインビューの評価

以下のシチュエーションに対してどれだけの項目を閲覧する
必要があるかを評価







(1.) リバイザ側から織り込み先のクラスを知りたい時
(2.) リバイザ側から同一のクラスに織り込みを行う別のリバイザを
知りたい時
(3.) リバイザ側からWithinで指定したクラスを知りたい時
(4.) クラス側からそのクラスに織り込みを行うリバイザを知りたい
時
JDTではパッケージエクスプローラから探索
本システムでは拡張アウトラインビューから探索
目的に応じて本システムが的確に表示を行えているかを評
価

18
既存のJavaアウトラインビューで表示される項目の数を計測
拡張アウトラインビューの評価結果と考察


JDTのパッケージエクスプローラーを用いた探索と比較して、
閲覧する項目を平均40%削減
既存アウトラインビューと比較して、本システムでは平均1.8
項目増加

19
ほぼ的確に求めている情報を表示出来ている
拡張エディタの評価

あるクラスに関連のあるファイルを修正する際に、どれだけ
のプログラムを閲覧する必要があるかを行数を基準に評価


20
JDTではクラスの行数とそのクラスに織り込みを行うリバイザの行
数の合計
本システムでは拡張エディタで作成したファイルの行数
拡張エディタの評価結果と考察


拡張エディタを用いることで、既存エディタよりも閲覧する必
要のあるコード行数を平均80%削減
リバイザが単一のクラスにのみ織り込みを行なっている
場合は20%程度削減

21
リバイザの
ファイルが大きい
ほど本システム
の有用性が高い
関連研究(1/2)

AJDT (+ AspectJ)




織り込みの情報を表示するツールが多数存在
アスペクトの衝突を知ることが出来ない
編集作業はファイル間をまたがって行う必要がある
AspectMaps [Fabryら ‘11]


織り込みの情報を色分けで表示
織り込みが行われる順番を重視


22
アスペクトの衝突を表示出来る
編集作業はファイル間をまたがって行う必要がある
関連研究(2/2)

KIDE [Kanazawaら ‘12]





着目する関心事に合わせて仮想的なファイルを作成
一つのファイルで編集作業を行うことが出来る
集めたい関心事を手動で定義する必要がある
アスペクト指向による開発を行うための支援がない
Code Bubbles [Andrewら ‘10]




23
bubbleを用いて、メソッド単位でプログラムを表示
複数のファイルの情報を一画面に表示
関心事を集める為の支援がない
アスペクト指向による開発を行うための支援がない
まとめとfuture work

まとめ




future work


視点に応じた編集を可能にするツールの提案
GluonJのツールとして実装
ツールの評価
他のアスペクト指向言語で実装
これまでの活動


24
PPL 2011 ポスター発表
日本ソフトウェア科学会第28回大会 口頭発表