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

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
関心事指向アーキテクチャモデリング環 境 Concern-oriented Architecture Modeling Environment 九州工業大学大学院情報工学府 情報科学専攻 鵜林研究室 M1 佐藤 友紀 1.
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
情報伝播によるオブジェクト指向プログラム理解支援の提案
AspectScope によるアスペクトとクラスのつながりの視覚化
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
遠隔ポイントカット - 分散アスペクト指向プログラミング のための言語機構
MPIによる行列積計算 情報論理工学研究室 渡邉伊織 情報論理工学研究室 渡邉伊織です。
AOP言語への 織り込みインターフェイスの導入 A Weaving-Interface for AOP Languages
ソースコードの変更履歴における メトリクス値の変化を用いた ソフトウェアの特性分析
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
ソフトウェア工学 知能情報学部 新田直也.
コードクローンに含まれるメソッド呼び出しの 変更度合の分析
コードクローンに含まれるメソッド呼び出しの 変更度合の調査
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
関数の変更履歴と呼出し関係に基づいた開発履歴理解支援システムの実現
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
統合開発環境のための アスペクト指向システム
オブジェクト指向プログラムにおける エイリアス解析手法の提案と実現
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
重複コードと非重複コードにおける 修正頻度の比較
AspectScope による アスペクト指向プログラ ミングの支援
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
コードクローン検出ツールを用いた ソースコード分析システムの試作と プログラミング演習への適用
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
既存Javaプログラム向け 分散化支援システムの開発
豊富な情報を基にした pointcut を記述できるアスペクト指向言語
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
クラスのインターフェース やその振る舞いに及ぼすアスペクトの影響の解析と可視化
アスペクト指向言語のための 独立性の高いパッケージシステム
アプリケーション依存の先読みが可能なO/Rマッピングツール
プログラム理解におけるThin sliceの 統計的調査による有用性評価
アスペクト指向言語のための 独立性の高いパッケージシステム
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
ソフトウェア保守のための コードクローン情報検索ツール
コードクローンの理解支援を目的としたコードクローン周辺コードの解析
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
アルゴリズムとプログラミング (Algorithms and Programming)
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
分散 Java プログラムのための アスペクト指向言語
Josh : バイトコードレベルでのJava用 Aspect Weaver
統合開発環境によって表現された 言語機構によるコードのモジュール化
IDE を活用した言語機構に頼らないコード再利用のためのモジュール化
保守請負時を対象とした 労力見積のためのメトリクスの提案
「マイグレーションを支援する分散集合オブジェクト」
様々なAOPメカニズムをモデル化する パラメータ化インタプリタ
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
プログラム分散化のための アスペクト指向言語
統合開発環境のための プログラミング言語拡張 フレームワーク
開発者との対話を活かした 横断的構造の表現
エイリアス関係を考慮した Javaプログラム用静的スライシングツール
プログラムの一時停止時に 将来の実行情報を提供するデバッガ
異種セグメント端末による 分散型仮想LAN構築機構の設計と実装
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
コードクローン解析に基づく デザインパターン適用候補の検出手法
関数の変更履歴と呼び出し関係に 基づいた開発履歴理解支援システム
プログラム理解のための 付加注釈 DocumentTag の提案
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

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

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

アスペクト指向言語 横断的関心事をモジュールに分割 コードを織り込むことで元の処理を実現 編集、つけ外しが容易 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

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

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

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

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

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

デモ 9

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

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

デモ

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

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

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] 織り込みの情報を表示するツールが多数存在 アスペクトの衝突を知ることが出来ない 編集作業はファイル間をまたがって行う必要がある AspectMaps [Fabryら ‘11] 織り込みの情報を色分けで表示 織り込みが行われる順番を重視 アスペクトの衝突を表示出来る 22

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

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