«前の日(02-27) 最新 次の日(02-29)» 追記

netail.net

自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.

最近のお知らせ (古いものはこちら)


2003-02-28 古い日記からの変換データ

_ AspectJ

AspectJの,SourceLocation.getFileName が返す形式をどうすべきか,という話が AspectJ-dev に投稿されていた.クラスファイルには Foo.java という感じで,生成ディレクトリの名前が入っていないので(当然だが),バイトコードへのアスペクト結合処理の途中で,今まで getFileName が返していたようなフルパス名を埋め込むことができない,というもの.パッケージ名をディレクトリ階層にして先頭に付けるか,コンパイラに weave 作業しているパス情報を渡すか,と色々考えている様子.

でも,よく考えてみれば,バイトコード中にそのファイルのフルパス名が入っているっていうのは反則に近くて,ファイル移動したら再コンパイルしないといけない.個人的には,パッケージ階層を含めた相対パス形式,つまり foo/bar/Foo.java のような形式で返ってこないかなーと期待しているが,どうなるだろうか.

_ 書類

髪を切りに行こうか,とか考えて支度していたら,事務手続きのための書類作成に研究室に呼び出された.以前提出した勤務日の報告書類で,祝日にも仕事をしていることになっていたらしい.間違えた原因は,その日がちょうど修論提出の前日だったので,みんな作業していたせいで祝日という感覚がまったくなかったせいだろうか…….


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つのレイヤーへの分類結果をメトリクスとみなしてクラスタリングみたいなことをすると何か出てきたりするかも?