ppt - 研究室

Download Report

Transcript ppt - 研究室

デザインパターンインスタンスの分類と
デザインパターンカタログの拡張
信州大学工学系研究科
情報工学専攻 海尻・海谷研究室
05TA573E
増田 俊介
発表内容




研究の背景
用語
研究の目的
研究の構成





デザインパターンインスタンス抽出分類
エボリューションパターン
対応付け
問題点・考察
結論
研究の背景

システムは仕様変更等により、変わっていく
(Evolution)。


デザインパターン(DP)を適用したシステムでは、
Evolutionは大きく2種類に分けられる



変化の種類は無数にある。
DPが想定する変更
DPが想定していない変更
DPが想定していない変更についても調査すること
で、システムの変更を行う際に参考となる情報を得
ることができるのでは?
用語

デザインパターン


DPインスタンス


保守性・再利用性を高めるための、OOPにおけ
る設計方法
デザインパターンの1実装
DPエボリューション

DPインスタンスの変更
用語注釈「エボリューション」

「エボリューション」について

あるシステムがどう変化するか
システムA
Evolution
Evolution
t
用語注釈「エボリューション」

本研究の「エボリューション」

DPを中心に、多様なシステムから比較
System X
Evolution
System Y
Evolution
System Z
Evolution
Observerパターンの例

モーニングコールシステム
人その1
時計オブジェクト
「明日の朝起こして」
「朝ですよ」
人その2
「明日の朝起こして」
「朝ですよ」
Observerパターンの例

モーニングコールシステム
Observer
Subject
Subscribe
Update
Observer
Subscribe
Update
Observerパターンの例

DPが想定した変更
Observer
Subject
Observerパターンの例

DPが想定しない変更
時計オブジェクト
「レビュー前に叩き起こして」?
???
研究の目的




DPインスタンスを抽出分類し、そのバリエー
ションを調査する。
DPインスタンスのバリエーションからDPエボ
リューションのパターンを考察する
取りうるDPエボリューションについて、その動
機・背景を推測する。
上記をデザインパターンカタログに追加し、シ
ステム変更時に閲覧し、参考にできるように
する。
DPインスタンス抽出


ObserverパターンのDPインスタンスを探す。
探し方


ソースコードのテキスト検索エンジンを使う
メリット



短時間で大量の例を探すことができる
既存サービスを利用すれば利用側はシステム投資が不要
デメリット

無関係な検索結果

検索結果の重複(別バージョン、同バージョンだが別々の場所に
保存されている)など
DPインスタンス抽出

Google Code Search
Googleによる、
ソースコード検索エンジン
•正規表現をキーワード
•言語の指定
•ライセンスの指定
が可能
他に、Kodersなどもある。
抽出されたインスタンス(例)
ざっと数千件
(たくさん)
どうやって分類?
DPモデル
と比較
※実際に比較したのは
10件程度
DPインスタンス分類

DPモデルと比較する

DPの仕様をUMLで表
現したもの。

クラス図を作るためのク
ラス図
名称、実装の詳細などを
捨てることができる
DPインスタンスとDPモデル
DPインスタンスバリエーション



抽出したDPインスタン
スを比較し、インスタン
スバリエーションのリス
トを作る。
インスタンスごとに、
「違う点」を個別にリスト
アップ
DPモデルにおける「多
重度」の変化も含まれ
る。
Observerクラスの抽象クラス化・インタフェース化
Observerクラスでの、Updateメソッドの増加・減少
ObsreverクラスにおけるUpdateメソッドの、引数にSubjectを含める
か・含めないか
Subjectクラスの抽象クラス化・インタフェース化
Subjectクラスでの、SubjectStateの増加・減少
Subjectクラスで、ObserverのAttachを、コンストラクタで行うか・メ
ソッドで行うか。
Observerが自力でSubjectにAttachされるか、外部クラスが
ObserverをSubjectにAttachするか
ObserverとSubjectの関係が、1対1か、多対1か、1対多か。
バリエーション例

ObserverとSubjectの関係
XXXObserver
1
XXXSubject
1
AttachXXX
XXXObserver
1
1
1
YYYObserver
1
XYSubject
AttachXXX
AttachYYY
DPエボリューションパターンの考察


DPインスタンスバリエーションを生み出すソース
コードの変更
単独・複数でインスタンスバリエーションを生み出す。
抽象クラスの増加・減少
Updateメソッドの増加・減少
ObserverのUpdateメソッドにSubjectを引数とする・しない
SubjectStateの増加・減少
コンストラクタによる関連の作成か、メソッドによる関連の作成
ChangeManagerの導入
ObserverとSubjectの関係が、多対1か、1対多か
対応付けとDPカタログの拡張
マトリックスの各項の考察をDPカタログに追加する
DPエボリューション例(1/3)

エボリューションパターン


インスタンスバリエーション


抽象クラスの増加・減少
Updateメソッドの増加・減少
エボリューションの背景として予想されるもの

親クラスあるいは子クラスへのUpdateメソッドの
移動
DPエボリューション例(2/3)

エボリューションパターン


インスタンスバリエーション


コンストラクタによる関連の作成、または、メソッド
による関連の作成
Subjectにて、ObjectのAttachがコンストラクタで実
装される、または、メソッドとして実装される
エボリューションの背景として予想されるもの

ObserverとSubjectの関係が、不変的なものか、
動的に変化するものか。
DPエボリューション例(3/3)

エボリューションパターン


インスタンスバリエーション


ChangeManagerの導入
Objectは、Subjectに自力でAttachするか、あるい
は、外部クラスがAttachするか。
エボリューションの背景として予想されるもの

より柔軟なObserverとSubjectの関係

デザインパターンにすでに記載されている。
問題点・考察(1/3)

DPインスタンスの抽出
テキスト検索のデメリット(既述)
 関連するクラスの発見が困難


子クラス・実装クラス


“extends .*Observer” などとして探す。
DPは、ホットスポットにおいてクラス間の結合度を下
げる。


コメントを参照する
周辺のクラスを眺めてみる。
問題点・考察(2/3)

DPインスタンスバリエーション


なにが同一で、何が異なるか?

今回は目でみて判断

検索エンジンをAPI化し、既存のDP認識ツールと連結
すればより再現性の高いバリエーションのリストアップ
が可能ではないか。
動的側面について

オブジェクト間のシーケンスのような動的構造を考慮
すれば、より多くのインスタンスバリエーションが得ら
れるのではないか。
問題点・考察(3/3)

DPエボリューションの考察、カタログ追加

個人の知識・経験による考察

より幅広い視点を取り込む仕組みを期待したい。

ソースコード検索エンジン、ソースコード管理システム、
変更履歴、変更要求とのトレースなどの情報をリンクし、
動的にデザインパターンカタログが更新されるような
仕組み
結論

具体的・現実的なソースコードを利用し、デザ
インパターンカタログを拡張する方法を確認
することができた。

ソースコード検索エンジンである「Google Code
Search」を利用し、多くのデザインパターンインスタ
ンスを抽出することができた。

その結果、デザインパターンエボリューションにつ
いてもリストアップすることができた。
Questions?