アーキテクチャ設計と実装をつなぐ インターフェース機構 archface

20
Archface Archface: An Interface Mechanism for Bridging a Gap between Architectural Design and Implementation 1

Upload: danielle-briggs

Post on 03-Jan-2016

33 views

Category:

Documents


1 download

DESCRIPTION

アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface. Archface : An Interface Mechanism for Bridging a Gap between Architectural Design and Implementation. 九州工業大学大学院 情報工学府 野村 潤 鵜林 尚靖. 概要. ソフトウェア開発において アーキテクチャ設計は重要な役割を担う 頑強性 信頼性 保守性. Architecture. しかし 、難しい課題もある 設計者の意図との整合性を保つ アーキテクチャデザインを正しく実装に つなげる - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

アーキテクチャ設計と実装をつなぐインターフェース機構 Archface

Archface: An Interface Mechanism for Bridging a Gap between Architectural Design and Implementation

九州工業大学大学院 情報工学府 野村 潤 鵜林 尚靖

1

Page 2: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

概要 ソフトウェア開発において

アーキテクチャ設計は重要な役割を担う 頑強性 信頼性 保守性

public class Subject{    private Vector observers = new Vector(); private String state = “”;      public void addObserver(Observer o){ … }    public void removeObserver(Observer o){ … }    public void notify(){      Iterator i = observers.iterator();      while(i.hasNext() ){        Observers o = (Observer)i.next();        o.update( this );      }    } public void setState(String s){ state = s; } public String getState() {return state; }}

Progra

m Code

Archite

cture

Archface

しかし、難しい課題もある 設計者の意図との整合性を保つ アーキテクチャデザインを正しく実装に

つなげる 変更や修正による設計と実装のギャップ

をなくす Archface によって設計と実装をつなぐ

Bug 2

Page 3: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

目次

1. アーキテクチャ設計の課題

2. Archface

3. Archface for Java

4. 議論と関連研究

5. まとめと今後の課題

3

Page 4: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

4

1 .アーキテクチャ設計の課題4

Page 5: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

Subject の状態が setState() により変更されるとnotify() によって Observer へ通知

アーキテクチャ設計と実装のギャップ

5

public class Subject { private String state = ""; public String getState() { return state; } … }

アーキテクチャデザイン(Observerパターン )

プログラムコード

Bug

setState() が呼ばれた後にはnotify() が呼ばれる

public void setState(String s) { state = s; }

notify の処理を行っていない

Page 6: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

設計の詳細化では解決できない

6

Detaile

d

Model

Descriptions

完全なコードを生成

詳細設計モデルを生成

しかし、アーキテクチャ設計は抽象的でなければならない

一つの解決策としては…

public class Subject{    private Vector observers = new Vector(); private String state = “”;      public void addObserver(Observer o){ … }    public void removeObserver(Observer o){ … }    public void notify(){      Iterator i = observers.iterator();      while(i.hasNext() ){        Observers o = (Observer)i.next();        o.update( this );      }    } public void setState(String s){ state = s; } public String getState() {return state; }}

Progra

m Code

Page 7: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

解決すべき課題 アーキテクチャ設計の抽象度

抽象度が高すぎるとコードとの乖離が大きくなる 抽象度が低すぎると実装との差異が無くなる

7

設計からコードへの洗練 設計の意図を正確にプログラム実装に反映させる

設計とコードの同期 設計に変更があった場合、コードを修正 コードに変更があった場合、設計を修正

Page 8: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

8

2 . Archface ( = Architecture + Interface)

8

Page 9: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

アプローチ:インターフェースとしてアーキテクチャを記述する

Archface:アーキテクチャをインターフェースに記述し、実装時にインプリメントすることで、アーキテクチャを実装へ正確に引き継ぐ

9

public class Subject{    private Vector observers = new Vector(); private String state = “”;      public void addObserver(Observer o){ … }    public void removeObserver(Observer o){ … }    public void notify(){      Iterator i = observers.iterator();      while(i.hasNext() ){        Observers o = (Observer)i.next();        o.update( this );      }    } public void setState(String s){ state = s; } public String getState() {return state; }}

Progra

m Code

Archite

cture

Archface

ADL とプログラミング言語の両方の性質を持つコンポーネントインターフェース• コンポーネントの仕様を公開

コネクタインターフェース• コンポーネントの連結を定義

● アーキテクチャを記述= ADL

● インターフェースとして機能=プログラミング言語

Page 10: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

Archface によるアーキテクチャ設計:協調動作が表現できる

対象: Component-and-Connector アーキテクチャ

支援内容:プログラムポイントの公開、連結、協調動作の定義

1010

Observer

cflowupdateState

notifyObservers

setState

cflow

Subject

プログラムポイントの公開

ポートによるコンポーネントの連結

コントロールフローによるコンポーネント間の協調動作

getState

update

コンポーネントの定義

※ プログラムポイント=プログラム上の実行点( OOP におけるメソッド実行点)

出力ポート:プログラムポイントの出力

入力ポート:プログラムポイントの入力

××

×

×

×

Page 11: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

モデル基盤:AOP 、3部モデリングフレームワークを応用

11

Join point

Three-part Modeling Framework

[Masuhara, et al. 2003]

2つの関心事とコーディネーションの3要素から構成される

Page 12: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

12

3 . Archface for Java

12

Page 13: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

Observer

cflowupdateState

notifyObservers

setState

cflow

Subject

getState

update

ADL としての Archface :アーキテクチャ記述=ポートとコネクタの定義

13

Observer パターン

ADL[Port notifyObservers]pointcut notifyObservers() : cflow(execution(void setState(String s))) && call(void notify());

※setState を実行し、そのコントロールフロー下で notify を呼び出す点を入力ポートとして公開

[Port update]pointcut update():execution(void update());

※update メソッドの実行点を出力ポートとして公開

[Connection]connects notifyChange (port1 :cSubject.notifyObservers, port2 :cObserver.update){ around() void :port1 { port2.proceed(); }}

※notifyObservers と update の2つのポートを連結

コンポーネントインターフェース

コネクタインターフェース

setState 実行後にそのコントロールフロー下で update を実行する

Page 14: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

プログラムインターフェースとしての Archface :Archface の実装=プログラムポイントの公開とフローの遵守

14

Archface(プログラムインターフェース )

Implement

プログラムコード(プログラムポイントを公開するように実装 )

プログラムポイントsetState を公開している

setState から notify に到達する過程は問わない = Archface には実装が含まれない

×コンパイルエラーにより通知 =アーキテクチャに沿う実装を保証

Page 15: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

15

4 .議論と関連研究15

Page 16: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

Archface による課題の解決

1) アーキテクチャ設計の抽象度 インターフェースとしてアーキテクチャをカプセル化

2) 設計からコードへの洗練 インターフェースに沿ったコーディング

3) 設計とコードの同期 インターフェースを通じた設計とコードの同期

16

Page 17: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

関連研究

ArchJava [Aldrich, J. 2002] アーキテクチャとプログラム実装を統合 実装がアーキテクチャ制約と適合することを保証

Design pattern implementation in Java and AspectJ [Hannemann, J. 2002] アーキテクチャを抽象クラス間の協調動作として記述 AspectJ を用いてデザインパターンをアスペクトとして分離

Co-evolution between design and implementation [D'Hondt, T. 2001] アーキテクチャデザインと実装の共進化

17

Page 18: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

18

5 .まとめと今後の課題18

Page 19: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

まとめと今後の課題

Archface : アーキテクチャ設計とプログラム実装をつなぐ

インターフェース機構 プログラムポイントのコーディネーションをインターフェー

スに記述 ADL とプログラミング言語の両方の性質を持つ

今後の課題 他のアーキテクチャ記述(データフロー、イベントトレー

スなど) それに基づくポイントカットの導入

19

Page 20: アーキテクチャ設計と実装をつなぐ インターフェース機構 Archface

20

ご清聴ありがとうございました

20