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?