netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2006-01-11 [長年日記] ▲
_ [VolumeDeskbar] 1.0.4 の設定ダイアログ ▲
コマンドボタンが Windows XP スタイルじゃなくなったのか,と報告をいただいたので,少し調べてみたら,PCによって微妙に「設定」グループボックスが表示されなかったり,XP スタイルじゃなくなったりするらしい.開発環境のPCでは分からなかったのだけど.
愉快な問題なので,もしかしたら設定ダイアログのウィンドウリソースが破損しているのかな,と思ってクリーンビルド(Delphiの「再構築」)したらいちおう直った.
テスト用プロジェクト(ボリューム調節のバーをタスクバー上ではなく,普通のウィンドウ上に出す)側の中間コンパイル結果ファイルが悪さをしていた可能性が考えられる.
_ [論文] クラスの使い方の実行時情報からの抽出 ▲
Salah, M., Denton, T., Mancoridis, S., Shokoufandeh, A. and Vokolos, F. I.: Scenariographer: A Tool for Reverse Engineering Class Usage Scenarios from Method Invocation Sequences.
Proceedings of the 21st International Conference on Software Maintenance (ICSM 2005), pp.155-164, Budapest, Hungary, September 2005.
プログラムの実行履歴(各オブジェクトへのメソッド呼び出しの履歴9から,そのクラスの使い方を探してこようというもの.インタフェース記述でメソッドの呼び出し順序の解説なんかを書こうという動きもあるし,この手の研究が最近流行っている気がする.
「メソッド呼び出し列」の集合から,その中のメソッド列群を代表するような "canonical set" を選び出し,他のメソッド列は canonical set の各要素のどれに属するかを分類する(canonical set の1要素に代表されるメソッド列の集合を canonical group と呼ぶ).で,1つのcanonical group に属するメソッド列たちに対して,それらを簡潔に表現するような正規表現を見つけてくる.ユーザには,あるクラスに対する典型的なメソッド呼び出し列を表現した正規表現の集合が出力として与えられることになる.
canonical set を計算するところは,各メソッド列を頂点として,他のメソッド列との類似度を重みとした完全グラフを作ったとき,その中から頂点集合 V を,「V に含まれる頂点同士の辺の重みの総和ができるだけ小さく,V と V の外部にある頂点をつなぐ辺の重みの総和ができるだけ大きくなるように」選び出すという最適化問題になる.これに対して,類似度には edit-distance を使って,既存の近似アルゴリズムを適用している.
canonical set が決まると,他のメソッド呼び出し列は,一番類似度の高い(同じ類似度が複数あればそれらすべての)canonical group に分類され,あとはそこに正規表現での近似処理が適用される.
適用実験では,正規表現クラスとソケットクラスに対して適用しており,正規表現のほうは,match してから isMatch を何回か呼び出す,というそれっぽい出力が得られている.ソケットのほうはある部分列(getLocalAddress/getLocalPort/getPort/getInetAddress)が繰り返し登場するパターンが出力されていたが,実はソケットへの入出力を行うストリームクラスが,これらのパターンを作り出していたらしい.このような特定クラスからの関与が,自動的に判別されてから情報が出力されるなら,そこそこ便利な手法かもしれない.