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?