netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2006-01-15 [長年日記] ▲
_ [論文] Micro Patterns=クラス単位の実装コードのパターン ▲
Gil, J. and Marman, I.: Micro Patterns in Java Code. [ACM site]
Proceedings of the 20th annual ACM SIGPLAN Conference on Object Oriented Programming Systems Languages and Applications (OOPSLA2005), pp.97-116, San Diego, CA, USA., October 2005.
デザインパターンよりも実装に近いレベルでのパターンについて,ソースコードを分析してカタログを作ってみたという論文.設計の良し悪しの判断は難しいので,まず設計の違いについて調べてみる,といったことを言っている.
デザインパターンでは自動的なパターンの適用・認識が困難であることを踏まえて,Micro Pattern の特徴は,機械的に判定できるように定義してあること.たとえば「メンバーを持たないインタフェース」のように,属性,型名,メソッドのシグネチャなどから決定する.また,1つのモジュール単位で,パターンにマッチするかどうかを判定できるようになっている.
Micro Pattern を共通の語彙として使うといった使い方はデザインパターンと同じだが,Micro Pattern はそれぞれ,特定の設計問題に対する解法というわけではなく,もっと一般的な道具のようだ,とも述べている.
どんなパターンがあるか,なんかいずれ使うかもしれないのでいちおう日本語版っぽいものを作ってみた.
統計調査では,JDKやTomcat,Antなどを集めてきて,それらの中から各クラスがどの micro pattern に該当するかを調べている.統計によって,言語による制約ではなくちゃんと設計から生じたものであることを確認し,また,1つの仕様に対して,違う実装でも同じパターンを使っている傾向があることを確認している.
結果として,約75%のモジュールは少なくとも1つのmicro patternに該当する.登場回数では,Sink,Stateless,Implementor,Overrider,Pure Type の5つで約58%を占めた.
一方で,パターンごとの条件は排他的ではないので,2個以上のパターンに属するものも数多く,最大では6個のパターンに該当していたらしい.同じパターン群に属したクラスは互いに構造的に類似していたようで,Canopy/Restricted Creation/Overrider/Sink/Functional Object/Data Manager の6個セットに該当した12個のクラスとか,Joiner/Pure Type/Stateless/Sinkにマッチした30個のクラスの例が挙げられていた.ある意味では,これらのパターンの組で,1つのパターンを定義しているといえる.
その他の調査としては,パターン群への分類の偏りを調べて,そこから得られる情報量を計算しており,定義したパターンによる分類には意味があることを確認していたり,複数の JRE ライブラリを比較して,パターンの出現率が同じ傾向であることを確認していたりする.