netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2002-10-07 古い日記からの変換データ ▲
2004-10-07 古い日記からの変換データ ▲
_ [論文]Fan-Inベースのアスペクト抽出 ▲
Marius Marin, Arie van Deursen, Leon Moonen:Identifying Aspects using Fan-In Analysis.WCRE 2004, to appear.
各メソッドがいくつのメソッドから呼ばれているかをあらわすFan-In の数値でクラスをランキングして,上位のもののうち,Setter/Getter/Utility クラスを除去した結果がアスペクトの候補としてよさそう,という論文.
Setter/Getter は基本的にシグネチャベースでフィルタしていて,いちおう実装も少しはチェックしているらしい.Utility としては toString などのメソッド名フィルタと,*Utils のようなクラス名ベースのフィルタを使っている.このあたり,少し経験的な手法ではある.
ロギングなどのあちこちにコーディングされた「大きなfootprintを持つ」アスペクトに対しては有効だが,デザインパターンの個別の実装みたいに小さなfootprintのものは見つけられなかったりする.
シンプルなわりには効いているという気はする.false positive も negative も出てくるが,コードクローン分析と組み合わせたりして使おうと考えているみたい.
_ [論文]インタフェース実装のアスペクトへの移行 ▲
Paolo Tonella, Mariano Ceccato:Migrating Interface Implementations to Aspects.Proceedings of ICSM2004, pp.220-229.
スライシングのセッションと重なってたのでチェックしないままになっていた論文.
Java で使われる *able インタフェース,呼び出し関係でグループ化したら同じクラスの他のメソッドと一緒には使われないもの,同じクラスの他のメソッドから呼ばれていないので分離しても問題ないもの,などをアスペクトとして分離してみたという話.
Java における「アスペクトっぽいもの」を重点的に取り出してみたら,実は java.util や java.awt などにたくさんその手のクラスが含まれていて,それらをアスペクトに分離するとコード行数で約10%,クラス図上での依存辺の数にして約36%減少した,とかいった実験.
呼び出し関係グラフを作ったときに同じクラス中にあるメソッドなのに同一のクラスタには含まれないものがある,というのが面白いところ.評価としてもクラス間の依存関係なんかを使っているのは今までの単なる行ベースの方法より好感が持てる.
2005-10-07 ▲
_ [論文]lexical chain を使ったアスペクトマイニング ▲
David Shepherd, Tom Tourwe, Lori Pollock: Using Language Clues to Discover Crosscutting Concerns.
Proceedings of Workshop on Modeling and Analysis of Concerns in Software (MACS 2005), St. Louis, MO, USA, May 2005.
lexical chain というのは,意味的に関連した言葉の集合(closeとendとlastとか,confirmとcheckとか)らしい.計算方法自体は既出のものを使って,ソースコードのコメントやフィールド名,メソッド名を取ってきて単語単位に切り分け,関連を持つ言葉同士をグルーピングして,その言葉が複数のクラスに含まれているようなら横断的関心事に関連する可能性があるのではないか,といっている.
実験では,57000の単語から700個の chains を得ているが,とりあえずそれらを手で調べた結果,出力された chain のうち,depth と shallowest のようにクラスとしては直接表現されていないような言葉のグループであったり,様々な形式(複数形とか過去形とか)で多数の場所に言葉が出現している,といった特徴を持っているものについては,有用な情報を含んでいることが多いようだと筆者らは判断している.
他の(関数のfan-inなどで当たりを付ける)手法と組み合わせれば役立つかもしれない.欠点は,単語間の意味的な距離を算出する方法にコストがえらくかかるらしいこと(重複を排除した単語数に比例).