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