Constructing Accurate Application Call Graphs For Java To Model Library Callbacks

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 to generate more accurate application call graphs for Java. A new data reachability algorithm is proposed and fine-tuned to resolve library callbacks accurately. Compared to a simple algorithm that generates an application call graph by traversing the whole-programcall graph, the fine-tuned data reachability algorithm results in fewer spurious callback edges. In experiments with the spec jvm98 benchmarks, the new algorithm shows a significant reduction in the number of spurious callback edges over the simple algorithm: on average, the number of callback edges is reduced by 74.97%, amounting to overall 64.43% edge reduction for the generated application call graphs.

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

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

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

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

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

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

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

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

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

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

[11]  B. Ryder,et al.  A Semantics-Based Definition For Interclass Test Dependence , 2022 .

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

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

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

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

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