Javaのテストに関する興味深い論文

前にナナメ読みしていたが、最近真面目に読んで、結構感心した論文。Javaユニットテストの際のカバレージによるメトリクスを、より精密に計測するための方式の提案とその評価

A. Routntev, et al,"Fragment Calss Analysis for Testing of Polymorphism in Java Software", IEEE trans. on Software Engineering, Vol 30, No.6, June 2004.


オブジェクト指向言語におけるテストカバレージの計測に関しては、あるクラス/インタフェース型のインスタンスのメソッドを呼び出す場合のポリモーフィズム機構ゆえの実際の呼び出しコードの多様性を、どの程度正確に見積もるかが問題となっていた。
また、その目的で使えそうな「静的なコールグラフ導出アルゴリズム」は、昔からたくさんあるのだが、どれも、mainメソッドを起点として解析するため、mainメソッドを持たないクラスに対するテストの目的には使えなかった。
というのが背景だ。

で、この論文の気に入った点は3つある。
まず、イデア。つまり「mainメソッドを持たないクラスを入力するとコールグラフ導出の起点となりえるmainメソッドつきのクラスを機械的に導出すればいいじゃんって」思いついた点。こういうアイデアは、意外に出ない。

次に、方式における割り切り。提案する方式を、計算量の少ないflow-insensitiveなコールグラフ導出アルゴリズムに対してのみの方式に限定したこと。一般にflow-sensitiveなアルゴリズムの方が正確なのだが、これに対応しようとすると、あっという間にNP-hardになって、まともに使えそうに無い。で、正確性を捨ててflow-insensitiveに絞ったこと。 そして、その割り切りにより、flow-insensitiveなアルゴリズムであるからこそ可能で、かつ高速な方式を示していること。 面倒なので具体的な内容は書かないが、ここに気づくと、この論文がすごいことがわかる。

三点目に、評価。きっちりやって、flow-insensitiveでも、それなりに正確な結果が出ることを示している。評価をきっちりやっているということ自身とともに、これってflow-sensitiveなアルゴリズム、具体的に言えば、CHA、RTA、0-CFA、Andersen-style analysisをすべて実装して評価したらしい。俺何か、0-CFAだけ作ろうとした時点で、難しくて挫折したぞ。

というわけで、久しぶりにexcitingな論文を読んだ。
特に「割り切り」って最近好きだ。何でも実直に調査して正確に確実にやればいいというより、こういう傾向や特徴があるんだから、割り切ってこうすればいいのよ的な発想こそ、研究というか人間生活一般を捉えても、「考えて、ぽっとアイデアが生まれる時の喜び」にあたるんじゃないかな

ところで、この論文はICSE'03で優秀論文か何かになって、IEEE Trans.に推薦されて掲載されたみたいだけど、IEEE Trans.に掲載されるためには、このレベルのものを書かないといけないわけね。 俺だったら、すべて指導つきでも1年じゃできんなこれ。
今日、「実現可能な目標設定をせな」と挑戦紙面談で言われたが、今年も無理そうだ。