Automatic construction of accurate application call graph with library call abstraction for Java: Research Articles

Call graphs are widely used to represent calling relationships among methods. However, there is not much interest in calling relationships among library methods in many software engineering applications, such as program understanding and testing, especially when the library is very big and the calling relationships are not trivial. This paper explores approaches for generating more accurate application call graphs for Java. A new data reachability algorithm is proposed and fine tuned to resolve library callbacks accurately. Compared with an algorithm that resolves library callbacks by traversing the whole-program call graph, the fine-tuned data reachability algorithm results in fewer spurious callback edges. In empirical studies, the new algorithm shows a significant reduction in the number of spurious callback edges. On the basis of the new algorithm, a library abstraction can be calculated automatically and applied in amortized slicing and dataflow testing. Copyright © 2007 John Wiley & Sons, Ltd.

[1]  John Hatcliff,et al.  Slicing concurrent Java programs using Indus and Kaveri , 2007, International Journal on Software Tools for Technology Transfer.

[2]  Jong-Deok Choi,et al.  Stack allocation and synchronization optimizations for Java using escape analysis , 2003, TOPL.

[3]  Ondrej Lhoták,et al.  Context-Sensitive Points-to Analysis: Is It Worth It? , 2006, CC.

[4]  David W. Binkley,et al.  Interprocedural slicing using dependence graphs , 1990, TOPL.

[5]  Laurie Hendren,et al.  Soot---a java optimization framework , 1999 .

[6]  Chen Fu,et al.  Robustness testing of Java server applications , 2005, IEEE Transactions on Software Engineering.

[7]  Atanas Rountev,et al.  Static and dynamic analysis of call chains in java , 2004, ISSTA '04.

[8]  Barbara G. Ryder,et al.  Points-to analysis for Java using annotated constraints , 2001, OOPSLA '01.

[9]  Ondrej Lhoták,et al.  Scaling Java Points-to Analysis Using SPARK , 2003, CC.

[10]  Barbara G. Ryder,et al.  Parameterized object sensitivity for points-to analysis for Java , 2005, TSEM.

[11]  Lori L. Pollock,et al.  Characterization and automatic identification of type infeasible call chains , 2002, Inf. Softw. Technol..

[12]  Barbara G. Ryder,et al.  Constructing Accurate Application Call Graphs For Java To Model Library Callbacks , 2006, 2006 Sixth IEEE International Workshop on Source Code Analysis and Manipulation.

[13]  Rajiv Gupta,et al.  Refining data flow information using infeasible paths , 1997, ESEC '97/FSE-5.

[14]  Jens Palsberg,et al.  Scalable propagation-based call graph construction algorithms , 2000, OOPSLA '00.

[15]  David Grove,et al.  A framework for call graph construction algorithms , 2001, TOPL.

[16]  Olin Shivers,et al.  Control-flow analysis of higher-order languages of taming lambda , 1991 .

[17]  Mark David Weiser,et al.  Program slices: formal, psychological, and practical investigations of an automatic program abstraction method , 1979 .

[18]  Michael L. Scott,et al.  Programming Language Pragmatics , 1999 .

[19]  Barbara G. Ryder Dimensions of Precision in Reference Analysis of Object-Oriented Programming Languages , 2003, CC.

[20]  Michael Hind,et al.  Pointer analysis: haven't we solved this problem yet? , 2001, PASTE '01.

[21]  Elaine J. Weyuker,et al.  Selecting Software Test Data Using Data Flow Information , 1985, IEEE Transactions on Software Engineering.