netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2005-02-28 古い日記からの変換データ [長年日記] ▲
_ [論文]クラスの階層構造の識別 ▲
Stephane Ducasse and Michele Lanza:The Class Blueprint: Visually Supporting the Understanding of Classes.IEEE Transactions on Software Engineering,Vol.31, No.1, January 2005.
Class Blueprint は,1つのクラスのメンバーを初期化用,インタフェース,内部実装用,アクセサ,属性という5種類のレイヤーに分類して,相互に呼び出し関係を接続したもの.
分類にはヒューリスティックとして,名前に "init" を含んでいたり,そんなメソッドを呼び出しているようなメソッドは初期化用である,private インタフェースだったりクラス内のほかのメソッドから呼ばれているようなメソッドは内部実装用である,というような,わりと経験的に妥当っぽい基準で分類している.
メンバーの種類もスーパークラスの同じメソッドを呼んでいたら Extend でまったく書き換えていたら Override で特定の呼び出しパターンをしていたら Delegate で,といったように経験的に分類し,色づけして配置すると,Blueprint が1枚出来上がるらしい.
Blueprint が複数枚出てくると,特定のレイヤーが大きいとか,小さな機能を実装したクラスだとか,定数を定義するクラスだとかいったように,可視化した内容からクラスの傾向をつかむことができる.また,継承木単位で Blueprints を接続して理解するということも可能になる.
静的解析だけでがんばっていて,さすがにクラス間の接続などは行っていない.単一クラスの傾向をつかむという意味ではけっこう面白い.(あんまりクラス間で Blueprints を接続すると 役に立たない複雑な図が生成されそう)5つのレイヤーへの分類結果をメトリクスとみなしてクラスタリングみたいなことをすると何か出てきたりするかも?