netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2006-01-12 [長年日記] ▲
_ [論文] 相互依存したプログラム要素の発見方法 ▲
Binkley, D. and Harman, M.: Lcoating Dependence Clusters and Dependence Pollution.
Proceedings of the 21th International Conference on Software Maintenance (ICSM 2005), pp.177-186, Budapest, Hungary, September 2005.
プログラムの中に,相互依存するような要素群があると,保守が難しくなる.
依存関係はプログラムスライスによって調べることができるが,相互依存関係を持った要素の数が多いかどうか(問題かどうか)を判断するのは難しい.
そこで,相互依存した頂点から計算したスライスはまったく等しくなり,従ってスライスのサイズも等しくなるという性質を使う.
各頂点から計算したプログラムスライスを,横軸にサイズ順に並べて,縦軸にサイズをとると,突然サイズが大きくなり,しかもサイズが等しいようなスライスの固まりが可視化できる.そのような形が現れたら,そこはまったく同じスライス(相互依存関係を持った頂点群)が並んでいるのではないか,と開発者は判断できる.必ずしもサイズが同じ=スライスが等しいとは限らないが,ほぼ一致することを実験的に確認している.
このような相互依存したコードの固まりを Dependence Pollution と呼び,それをリファクタリングすることで,スライスサイズを減らせる(影響の量を減らし,回帰テストなどのコストを下げられる)と主張しており,ケーススタディとして様々なプログラムに対して適用し,実際に問題のありそうな部分を調べてリファクタリングすることでスライスサイズの平均値を大きく減らせる例などを示している.
グラフの中で,ループした要素を見つけたいというときに,そこからたどり着けるノードの数でソートすれば楽,という発想は,何か他でも使えるかもしれない.