関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装 理学部 情報科学科 06_06464 金澤 圭 指導教員 千葉 滋
repaint() ではなく repaint(Screen) に変更したい・・・。 大規模ソフトウェア開発の問題点 ファイル間をまたがった編集が必要 規模が大きくなればなるほど、編集が煩雑&ミスが増加 class Polygon ex. Shape { … void setXPoint(int x){ this.xpoint = x; Screen.repaint(); } } Polygon Line … Shape Rectangle class Rectangle ex. Shape { … void setWidth(double w){ this.width = w; class Circle ex. Shape { … void setRadius(double r){ this.radius = r; Circle 、 repaint() ではなく repaint(Screen) に変更したい・・・。
統合開発環境(IDE)の機能を用いた編集の問題点 巨大ディスプレイを用いても難しい ウィンドウ切り替えによる効率の低下 ユーザーは編集作業に集中できない
提案:関心事ごとに視点を切り替えられる IDE 複数ファイルにまたがる編集を一つのウィンドウで行える 関心事をエディタ上に抽出 抽出元のファイルに編集結果を反映 Repainter /* FROM Rectangle */ void setWidth(double w){ … Screen.repaint(); } /* FROM Circle */ void setRadius(double r){ class Polygon ex. Shape { … void setXPoint(int x){ this.xpoint = x; Screen.repaint(); } } class Rectangle ex. Shape { … void setWidth(double w){ this.width = w; class Circle ex. Shape { … void setRadius(double r){ this.radius = r; Editor
本システムを用いた編集デモ
関心事の抽出方法 抽出条件 抽出条件の絞り込み あるメソッドを呼び出しているメソッド全部 あるメソッドがオーバーライドしているメソッド全部 抽出メソッドを指定する パッケージ単位、クラス単位 Repainter /* FROM Rectangle */ void setWidth(double w){ … Screen.repaint(); } graphics /* FROM Circle */ void setRadius(double r){ … Screen.repaint(); } Rectangle Circle /* FROM Polygon */ void setXPoint(int x){ … Screen.repaint(); } awt Polygon
編集途中で抽出したメソッドを変更する 視点の微調整を行う機構 抽出メソッドを追加できる 関心のなくなったメソッドを除去 Repainter /* FROM Rectangle */ void setWidth(double w){ … Screen.repaint(); } /* -> setWidth */ void hoge(…){ … rect.setWidth(…); } /* FROM Polygon */ void setXPoint(int x){ … Screen.repaint(); }
repaint() の代わりにupdate() にしたい… Eclipseプラグインとして実装 約3000行 抽出元ファイルとの同期 ドキュメントリスナを用い、編集を感知 キー入力のoffsetを利用し編集対象を特定 IDocumentのreplaceメソッドを用いる repaint() の代わりにupdate() にしたい… 編集があった! Listener Repainter File class Rectangle { … void setWidth(…){ … Screen.repaint(); } setWidth @Rectangle j: 167-218 n: 2-53 void setWidth(…){ … Screen.repaint(); } event.offset is 48 void setWidth(…){ … Screen.update(); } repaint() update() void setRadius(…){ … Screen.repaint(); } setRadius @Circle … class Circle { … } File
関連技術:アスペクト指向 横断的関心事を1つのモジュールに分離できる 異なる視点に切り替えることはできない アスペクトにまとめるとクラスの視点からは見られない Aspect
関連研究 Fluid-AOP [Hon ら ‘07] Mylar [Kersten ら ‘05] アスペクト指向の利点を IDE によって生み出す 本提案手法は Fluid-AOP に基づく アスペクトを実際に定義しなくてはならない Mylar [Kersten ら ‘05] タスクごとにモジュール化 モジュール化の指標は degree-of-interest(DOI) に基づく DOI が高いものを優先的にビューア上に表示させる エディタ上に特別な機能はない
まとめと今後の課題 まとめ 今後の課題 関心事ごとに関連するメソッドを集めた編集ウィンドウを作成 できる統合開発環境の提案 生成した編集ウィンドウと通常のクラスを表示するウィンドウを切り 替え可能 Eclipse プラグインとして実装 今後の課題 複数の編集ウィンドウを同時に利用できるようにする プログラマに本システムを用いてもらい評価を行う