関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装

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

オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也. 講義計画(あくまで予定) 第 1 回 プログラミング言語の種類と歴史 第 2 回 eclipse の基本操作 第 3 回 eclipse のデバッグ機能 第 4 回 構造化プログラミングの復習 第 5 回 演習 第 6 回 構造化指向からオブジェクト指向へ.
ソフトウェア工学 知能情報学部 新田直也. オブジェクト指向パラダイムと は  オブジェクト指向言語の発展に伴って形成され てきたソフトウェア開発上の概念.オブジェク ト指向分析,オブジェクト指向設計など,プロ グラミング以外の工程でも用いられる.  ソフトウェアを処理や関数ではなくオブジェク.
関心事指向アーキテクチャモデリング環 境 Concern-oriented Architecture Modeling Environment 九州工業大学大学院情報工学府 情報科学専攻 鵜林研究室 M1 佐藤 友紀 1.
Web アプリをユーザー毎に カスタマイズ可能にする AOP フレームワーク
Javaのための暗黙的に型定義される構造体
情報伝播によるオブジェクト指向プログラム理解支援の提案
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
AspectScope によるアスペクトとクラスのつながりの視覚化
リファクタリングのための 変更波及解析を利用した テスト支援ツールの提案
同期的にアドバイスを活性化できる分散動的アスペクト指向システム
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
ユーザ毎にカスタマイズ可能な Web アプリケーション用のフレームワークの実装
アスペクト指向プログラミングを用いたIDSオフロード
アスペクト指向プログラミングと Dependency Injection の融合
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
川口真司 松下誠 井上克郎 大阪大学大学院情報科学研究科
過負荷時の分散ソフトウェアの 性能劣化を改善する スケジューリングの提案
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
ソフトウェア工学 知能情報学部 新田直也.
細かい粒度で コードの再利用を可能とする メソッド内メソッドと その効率の良い実装方法の提案
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
暗黙的に型付けされる構造体の Java言語への導入
セキュリティ機構のオフロードを考慮した 仮想マシンのスケジューリング
オブジェクト指向 プログラミング 第二回 知能情報学部 新田直也.
理学部 情報科学科 指導教官 千葉 滋 助教授 学籍番号 03_03686 内河 綾
統合開発環境のための アスペクト指向システム
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
Javaプログラムの変更を支援する 影響波及解析システム
AspectScope による アスペクト指向プログラ ミングの支援
アスペクト指向に基づく 拡張可能な MDAモデルコンパイラ
演習1 : インターフェイスを使ってみよう 「10人の客(乗用車、バイク、ストーブのいずれかランダムに決定)に1~100(L)の給油をするガソリンスタンドをシミュレートする実行クラス : RefuelSimulation」を作成する。給油の際には、どの種類の客が何リットル給油したか出力すること。 実行結果例.
横断的関心事に対応したオブジェクト指向言語GluonJとその織り込み関係の可視化ツール
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
クラスのインターフェース やその振る舞いに及ぼすアスペクトの影響の解析と可視化
ソフトウェア制作論 平成30年11月21日.
アスペクト指向言語のための 独立性の高いパッケージシステム
アプリケーション依存の先読みが可能なO/Rマッピングツール
アスペクト指向言語のための 独立性の高いパッケージシステム
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
dcNavi: デバッグ方法をアドバイス する関心事指向リポジトリナビゲータ
コードクローン分類の詳細化に基づく 集約パターンの提案と評価
プログラムの織り込み関係を可視化するアウトラインビューの提案と実装
コーディングパターンの あいまい検索の提案と実装
マイグレーションを支援する分散集合オブジェクト
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
ソフトウェア工学 知能情報学部 新田直也.
オブジェクト指向言語論 第十二回 知能情報学部 新田直也.
分散 Java プログラムのための アスペクト指向言語
統合開発環境によって表現された 言語機構によるコードのモジュール化
IDE を活用した言語機構に頼らないコード再利用のためのモジュール化
同期処理のモジュール化を 可能にする アスペクト指向言語
保守請負時を対象とした 労力見積のためのメトリクスの提案
「マイグレーションを支援する分散集合オブジェクト」
アスペクト指向言語のための視点に応じた編集を可能にするツール
プログラムの差分記述を 容易に行うための レイヤー機構付きIDEの提案
メソッドの同時更新履歴を用いたクラスの機能別分類法
ユビキタスコンピューティングの ための ハンドオーバー機能付きRMIの実装
状況に応じて適切な 例外処理が行なえる アスペクト指向分散環境実験の 支援ツール
プログラム分散化のための アスペクト指向言語
ソースコードの編集状況に応じた ソフトウェア部品の自動推薦システム
統合開発環境のための プログラミング言語拡張 フレームワーク
開発者との対話を活かした 横断的構造の表現
コードクローン解析に基づく デザインパターン適用候補の検出手法
オブジェクト指向言語における セキュリティ解析アルゴリズムの提案と実現
プログラム理解のための 付加注釈 DocumentTag の提案
GluonJ を用いたビジネスロジックからのデータベースアクセスの分離
Josh : バイトコードレベルでのJava用 Aspect Weaver
Presentation transcript:

関心事ごとに視点を切り替えて プログラムを編集できる 統合開発環境の提案と実装 理学部 情報科学科 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 プラグインとして実装 今後の課題 複数の編集ウィンドウを同時に利用できるようにする プログラマに本システムを用いてもらい評価を行う