1 / 20

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

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

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. アーキテクチャ設計と実装をつなぐインターフェース機構Archfaceアーキテクチャ設計と実装をつなぐインターフェース機構Archface Archface: An Interface Mechanism for Bridging a Gap between Architectural Design and Implementation 九州工業大学大学院 情報工学府 野村潤鵜林尚靖

  2. 概要 • ソフトウェア開発においてアーキテクチャ設計は重要な役割を担う • 頑強性 • 信頼性 • 保守性 Architecture • しかし、難しい課題もある • 設計者の意図との整合性を保つ • アーキテクチャデザインを正しく実装につなげる • 変更や修正による設計と実装のギャップをなくす public class Subject{
private Vector observers = new Vector(); private String state = “”;
public void addObserver(Observero){ … }
public void removeObserver(Observero){ … }
public void notify(){
Iteratori = observers.iterator();
while(i.hasNext() ){
Observers o = (Observer)i.next();
o.update(this);
}
} public void setState(Strings){ state = s; } public String getState() {return state; }
} Archface Program Code • Archfaceによって設計と実装をつなぐ Bug

  3. 目次 • アーキテクチャ設計の課題 • Archface • Archface for Java • 議論と関連研究 • まとめと今後の課題

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

  5. アーキテクチャ設計と実装のギャップ アーキテクチャデザイン (Observerパターン) Subjectの状態がsetState()により変更されると notify()によってObserverへ通知 setState()が呼ばれた後にはnotify()が呼ばれる public class Subject { private String state = ""; public String getState() { return state; } … } Bug public void setState(Strings) { state = s; } プログラムコード notifyの処理を行っていない

  6. 設計の詳細化では解決できない 一つの解決策としては… 完全なコードを生成 public class Subject{
private Vector observers = new Vector(); private String state = “”;
public void addObserver(Observero){ … }
public void removeObserver(Observero){ … }
public void notify(){
Iteratori = observers.iterator();
while(i.hasNext() ){
Observers o = (Observer)i.next();
o.update(this);
}
} public void setState(Strings){ state = s; } public String getState() {return state; }
} Detailed Model Descriptions Program Code 詳細設計モデルを生成 しかし、アーキテクチャ設計は抽象的でなければならない

  7. 解決すべき課題 • アーキテクチャ設計の抽象度 • 抽象度が高すぎるとコードとの乖離が大きくなる • 抽象度が低すぎると実装との差異が無くなる • 設計からコードへの洗練 • 設計の意図を正確にプログラム実装に反映させる • 設計とコードの同期 • 設計に変更があった場合、コードを修正 • コードに変更があった場合、設計を修正

  8. 2.Archface ( = Architecture + Interface) 8

  9. アプローチ:インターフェースとしてアーキテクチャを記述するアプローチ:インターフェースとしてアーキテクチャを記述する • Archface: アーキテクチャをインターフェースに記述し、 実装時にインプリメントすることで、 アーキテクチャを実装へ正確に引き継ぐ Architecture • コンポーネントインターフェース • コンポーネントの仕様を公開 • コネクタインターフェース • コンポーネントの連結を定義 ADLとプログラミング言語の両方の性質を持つ public class Subject{
private Vector observers = new Vector(); private String state = “”;
public void addObserver(Observero){ … }
public void removeObserver(Observero){ … }
public void notify(){
Iteratori = observers.iterator();
while(i.hasNext() ){
Observers o = (Observer)i.next();
o.update(this);
}
} public void setState(Strings){ state = s; } public String getState() {return state; }
} Archface ●アーキテクチャを記述 =ADL Program Code ●インターフェースとして機能 =プログラミング言語

  10. Archfaceによるアーキテクチャ設計:協調動作が表現できるArchfaceによるアーキテクチャ設計:協調動作が表現できる • 対象:Component-and-Connector アーキテクチャ • 支援内容:プログラムポイントの公開、連結、協調動作の定義 Subject Observer • コンポーネントの定義 setState × • プログラムポイントの公開 × cflow getState updateState cflow × ※プログラムポイント=プログラム上の実行点(OOPにおけるメソッド実行点) • ポートによるコンポーネントの連結 × × notifyObservers update • コントロールフローによるコンポーネント間の協調動作 出力ポート:プログラムポイントの出力 入力ポート:プログラムポイントの入力 10

  11. モデル基盤:AOP、3部モデリングフレームワークを応用モデル基盤:AOP、3部モデリングフレームワークを応用 2つの関心事とコーディネーションの 3要素から構成される Join point Three-part Modeling Framework [Masuhara, et al. 2003]

  12. 3.Archface for Java 12

  13. ADLとしてのArchface:アーキテクチャ記述=ポートとコネクタの定義ADLとしてのArchface:アーキテクチャ記述=ポートとコネクタの定義 Observerパターン Subject Observer setState実行後にそのコントロールフロー下でupdateを実行する setState cflow getState updateState cflow コンポーネント インターフェース [Port update] pointcut update(): execution(void update()); ※updateメソッドの実行点を出力ポートとして公開 notifyObservers update [Port notifyObservers] pointcutnotifyObservers() : cflow(execution(voidsetState(Strings))) && call(void notify()); ※setStateを実行し、そのコントロールフロー下でnotifyを呼び出す点を 入力ポートとして公開 [Connection] connects notifyChange (port1 :cSubject.notifyObservers, port2 :cObserver.update){ around() void :port1 { port2.proceed(); } } ※notifyObserversとupdateの2つのポートを連結 ADL コネクタ インターフェース

  14. プログラムインターフェースとしてのArchface:Archfaceの実装=プログラムポイントの公開とフローの遵守プログラムインターフェースとしてのArchface:Archfaceの実装=プログラムポイントの公開とフローの遵守 Archface (プログラムインターフェース) プログラムコード (プログラムポイントを公開するように実装) × プログラムポイント setStateを公開している コンパイルエラーにより通知=アーキテクチャに沿う実装を保証 Implement setStateからnotifyに到達する過程は問わない  =Archfaceには実装が含まれない

  15. 4.議論と関連研究 15

  16. Archfaceによる課題の解決 • アーキテクチャ設計の抽象度 • インターフェースとしてアーキテクチャをカプセル化 • 設計からコードへの洗練 • インターフェースに沿ったコーディング • 設計とコードの同期 • インターフェースを通じた設計とコードの同期

  17. 関連研究 • 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] • アーキテクチャデザインと実装の共進化

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

  19. まとめと今後の課題 • Archface: • アーキテクチャ設計とプログラム実装をつなぐインターフェース機構 • プログラムポイントのコーディネーションをインターフェースに記述 • ADLとプログラミング言語の両方の性質を持つ • 今後の課題 • 他のアーキテクチャ記述(データフロー、イベントトレースなど) • それに基づくポイントカットの導入

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

More Related