netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2006-10-26 [長年日記] ▲
_ [論文] プログラム実行履歴からオブジェクトのステート図を抽出する ▲
Valentin Dallmeier, Christian Lindig, Andrzej Wasylkowski, Andreas Zeller: Mining Object Behavior with ADABU.
Proceedings of WODA 2006, pp.17-23.
状態遷移はメソッド呼び出しによって引き起こされるのだから,メソッド呼び出しによってラベル付けされる状態遷移図を実行履歴から抽出してしまおう,という論文.
状態遷移のラベルは状態変更を起こすメソッド群(mutator)とする一方で,状態のほうは状態監視用のメソッド群(inspector)の戻り値によって定義している.inspector メソッドの条件は,引数なし,戻り値が void で,副作用を持たないこと.
プログラムの監視方式はかなり単純.mutetaor メソッドの中身をすべてtry-finallyでくくって,finallyの中でinspectorをすべて呼び出し状態を記録している.
inspector によって int 型などを返されると状態数が大変なことになるので,整数値の範囲などを抽出して(dynamic invariant detection などの手法),abstract state として状態数を減らして,それらを mutator メソッドで接続することでモデルを作成する.
動的抽出なので,モデル上に,何回その遷移が起きたかを表示することで,一般的なパスとそうでないパスを明示したりできる.
関連研究としてはインタフェース抽出,dynamic invariant detection 他.けっこう挙げられているので,文献読みの基点としてもよさそう.
監視用のメソッドがある程度用意されていないと動かないかなとも思ったけれど,AspectJのインタータイプ宣言とかを使って監視用インタフェースを勝手に追加して,データ記録もアスペクトとして実装すれば,けっこう簡単に既存システムに組み込んで使えそう.状態の抽象化部分を何とか実装できればという条件付きだけど.