kide: 開発環境による     オブジェクト指向言語での...

21
Kide: 開開開開開開開 開開開開開開開開開開開開 開開開開開開開開開開開開 開 13 開開開開開開開開開開開開開開開開開開開開開開開開開開開PPL2011 開開開開開開 開開 開 開開 開開 開開 開

Upload: anastasia-sutton

Post on 01-Jan-2016

56 views

Category:

Documents


4 download

DESCRIPTION

第 13 回プログラミングおよびプログラミング言語ワークショップ( PPL2011 ). Kide: 開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援. 東京工業大学 金澤 圭 堀江 倫大 千葉 滋. プログラミング言語を用いたモジュール化. 言語機構により、ファイル単位に機能を分割 例 . オブジェクト指向 クラス単位、継承. 関心事 A. A 関連の機能. B 関連の機能. int x. char c. int x. char c. int x. bar(..). hoge (..). - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

Kide: 開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

第 13 回プログラミングおよびプログラミング言語ワークショップ( PPL2011 )

東京工業大学 金澤 圭 堀江 倫大 千葉 滋

Page 2: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

2

プログラミング言語を用いたモジュール化 言語機構により、ファイル単位に機能を分割

例 . オブジェクト指向 クラス単位、継承

B 関連の機能

hoge(..)

int x

hoge(..)

int x

bar(..)

char c

入力

ソート

出力

入力

ソート

出力

同期

出力

hoge(..)

int x

bar(..)

char c

入力

ソート

出力

同期

出力

関心事 A

A 関連の機能

Page 3: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

3

オブジェクト指向言語を用いたモジュール化の例 描画エディタを関心事(機能)ごとにモジュール化 見方によってはモジュール化されていない

横断的関心事

Shape Circle Rectangle

setX(x)

setY(y)

int x int y

setRadius(r)

int r

setWidth(w)

int w

setHeight(h)

int h

r Log

x 代入

描画

w Log

y 代入

描画

r 代入

描画

w 代入

描画

h 代入

描画

Shape

Circle Rectangle

h Log

Page 4: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

アスペクト指向( AOP ) ファイル間をまたがって実装された関心事を

アスペクトモジュールに分離できる AspectJ による図形エディタの実装

Shape Circle Rectangle

setX(x)

setY(y)

int x int y

setRadius(r)

int r

setWidth(w)

int w

setHeight(h)

int h

r Log

x 代入

描画

w Log

y 代入

描画

r 代入

描画

w 代入

描画

h 代入

描画

Logging

Repainter

描画

r Log

h Log

4

w Logh Log

Page 5: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

5

言語機構によるモジュール化の問題点 複数の関心事に属すプログラム断片の扱いに困る

AOP は部分的な解である (言語の習得)

Shape Circle Rectangle

setX(x)

setY(y)

int x int y

setRadius(r)

int r

setWidth(w)

int w

setHeight(h)

int h

r Log

x 代入

描画

w Log

y 代入

描画

r 代入

描画

w 代入

描画

h 代入

描画

h Log

Logging

Repainter

描画

r Logw Logh Log

Page 6: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

6

提案 : Kide on IDE ( 統合開発環境 ) 対話的なプログラムのモジュール化を支援

対話的な切り替えにより、常に最適な視点で編集可能 メソッドをグループ化

ドキュメントのモジュール化 プログラムと文書とをまたがる擬似的なモジュールも生

成可Circle

setRadius(r)

int r

Log

r 代入

描画

Rectangle

setWidth(w)

int w

setHeight(h)

int h

Log

w 代入

描画

h 代入

描画

KideEditor Readme

..

これはRectangle クラスの説

明 ..

これはsetWidth()

の説明 ..

Repainter setRadius(..)

Concern View

setWidth(..)

Logging setRadius(..)

setHeight(..)

setWidth(..)

setRadius(r)

Log

r 代入

描画

setWidth(w)

Log

w 代入

描画

これはsetWidth()

の説明 ..setWidth(w)

Log

w 代入

描画

setRadius(r)

Log

r 代入

描画

setWidth(w)

Log

w 代入

描画

setHeight(h)

描画

h 代入

Page 7: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

7

Kide の関心事の定義方法 GUI を用いて定義する

Page 8: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

関心事の一括定義 呼び出し関係 メソッドのオーバーライド関係

8

Page 9: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

9

定義した関心事の使用方法 Concern ビューアから Kide エディタを起動 関心事に対して一括修正

メソッドの冒頭、(メソッドの最後 / return 文の前)

Page 10: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

10

ドキュメントのモジュール化 プログラムと文書とをまたがる擬似的なモジュール

も生成可能 Readme のようなチュートリアル、レビューシート

Page 11: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

11

Kide を用いたソフトウェア開発例 保守改良時の開発ワークフロー

課題の報告、検討、修正サイクル

Javassist の開発に Kide を用いるなら メモリ消費量が大きすぎるとの不具合報告

情報破棄を実行する prune メソッドを追加 prune メソッドを実行した後は、クラス定義の変更を許さな

いクラス定義を変更するメソッドの冒頭に checkModify メソッドの追加

コードレビュー

開発・テス

設計レビュー

プラン

Page 12: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

12

Kide を用いた開発・テスト 情報破棄を実行する prune メソッドの追加

pruning という関心事を定義し、一覧表示で確認

12

Review

..

JASSIST-28に関する修正は以下の通り

JASSIST-29…

pruning toBytecode(..)

Concern View

prune(..)

needCheckModify addMethod(..)

..

remMethod(..) setName(..) setModifiers(..) ..

CtClassType

addMethod

method

追加remMetho

d

method

除去

CtClass

setName

name代入

setModifiers

setFlag

@ pruning

toBytecodeclass file

書込prune

prune

filed代入

prune

開発・ テスト

設計レビュー

プラン

Page 13: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

13

Kide を用いた開発・テスト クラス定義を変更するメソッドの冒頭に

checkModify メソッドの追加 関心事 needCheckModfy を定義し、 checkModify

メソッドを一斉挿入

CtClassType

addMethod

method

追加

checkModify

remMethod

method

除去

checkModify

CtClass

setName

name代入

checkModify

setModifiers

setFlag

checkModify

Review

..

JASSIST-28に関する修正は以下の通り

JASSIST-29…

pruning toBytecode(..)

Concern View

prune(..)

needCheckModify addMethod(..)

..

remMethod(..) setName(..) setModifiers(..) ..

開発・ テスト

設計レビュー

プラン

Page 14: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

14

開発・ テスト

設計レビュー

プラン

Kide を用いたコードレビュー プログラムの断片を利用した報告書の作成

Review

..

JASSIST-28に関する修正は以下の通り

JASSIST-29…

@ review

prune

filed代入

prune

addMethod

method

追加

checkModify

remMethod

method

除去

checkModify

JASSIST-28に関する修正は以下の通り

pruning toBytecode(..)

Concern View

prune(..)

needCheckModify addMethod(..)

..

remMethod(..) setName(..) setModifiers(..) ..

CtClassType

addMethod

method

追加

checkModify

remMethod

method

除去

checkModify

CtClass

setName

name代入

checkModify

setModifiers

setFlag

checkModify

Page 15: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

15

AOP 言語を使う場合 ModifyChecking アスペクトを別のソースファイル

に定義 閲覧性は向上する checkModify メソッドを呼び出している側の可読性は

低下

AOP 言語ではポイントカットを使用し、関心事を定義 開発者は AOP 言語特有の文法を覚える必要 コードが正しい場所に織り込まれているかの確認が困難

プログラムと文書の両方にまたがる関心事は対応不可

Page 16: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

16

Kide が有用な場合 /AOP 言語が有用な場合 Kide

保守改良時に用いる際に有用性が高い

AOP 言語 ソフトウェア開発が始まったばかりの段階で、横断的関

心事を捉えられ、アスペクトとして実装することを決定できるのであれば有用性が高い

Page 17: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

17

言語機構によるモジュール化支援

class Shape {.. int x, y; void setX(..) { this.x = x; Screen.repaint(); }..}

関連研究 : アスペクト指向

class Circle ext. Shape { int r; void setR(..) { this.r = r; Screen.repaint(); }}

class Rectangle ext. Shape { .. void setWidth(..) {.. Screen.repaint(); } void setHeight(..) {.. Screen.repaint(); }}

aspect Repainter {    after():execution(void set*(..)) {      Screen.repaint();    } }

Page 18: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

18

関連研究 : 開発環境の機構によるモジュール化 AJDT(+ AspectJ)

織り込まれるアドバイスを IDE が表示 AspectJ の可読性の問題を解消

編集作業はファイル間を行き来する必要がある

Fluid AOP [Hon ら’ 07] アスペクト指向の利点を IDE によって生み出す

3種類の Editable Viewer AOP の知識が多少必要である

Page 19: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

19

関連研究 : 開発環境の機構によるモジュール化 Code Bubbles

bubble としてプログラム断片を表示、細かい粒度での編集可

多くの関心事を定義するための支援がない AOP の利点を提供することを目的としていない

コードの一括挿入などの機能はない

Colored IDE エディタ上で Feature ごとに色を付ける AST に対して Feature を関連付ける 言語に依存する

Page 20: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

20

関連研究 : 開発環境の機構によるモジュール化 Mylar [Kersten ら ‘ 05]

タスクごとにモジュール化 モジュール化の指標は degree-of-interest(DOI) に基づく DOI が高いものを優先的にビューア上に表示させる

エディタ上に特別な機能はない

Page 21: Kide:  開発環境による     オブジェクト指向言語での           アスペクト指向開発の支援

21

まとめと今後の課題 まとめ

OOP の開発環境で AOP の利点を提供し、プログラムの対話的なモジュール化を支援する Kide を提案し、 Eclipse プラグインとして実装を行った。 一度決めたプログラム分割とは異なる視点からの編集が可能 異なる言語間、異なる文書間にまたがる関心事もモジュール化

可 IDE として提供し、特別な知識を習得する必要がない

今後の課題 評価を行う 一括挿入機能の強化 UI をより直感的にする