Application-Only Call Graph Construction

Since call graphs are an essential starting point for all inter-procedural analyses, many tools and frameworks have been developed to generate the call graph of a given program. The majority of these tools focus on generating the call graph of the whole program (i.e., both the application and the libraries that the application depends on). A popular compromise to the excessive cost of building a call graph for the whole program is to ignore all the effects of the library code and any calls the library makes back into the application. This results in potential unsoundness in the generated call graph and therefore in any analysis that uses it. In this paper, we present Cgc, a tool that generates a sound call graph for the application part of a program without analyzing the code of the library.

[1]  Laurie J. Hendren,et al.  *J: a tool for dynamic analysis of Java programs , 2003, OOPSLA '03.

[2]  Barbara G. Ryder,et al.  Automatic construction of accurate application call graph with library call abstraction for Java , 2007, J. Softw. Maintenance Res. Pract..

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

[4]  Laurie J. Hendren,et al.  Optimizing Java Bytecode Using the Soot Framework: Is It Feasible? , 2000, CC.

[5]  Gagan Agrawal,et al.  Evaluating a Demand Driven Technique for Call Graph Construction , 2002, CC.

[6]  Ondrej Lhoták,et al.  Comparing call graphs , 2007, PASTE '07.

[7]  Mira Mezini,et al.  Taming reflection: Aiding static analysis in the presence of reflection and custom class loaders , 2011, 2011 33rd International Conference on Software Engineering (ICSE).

[8]  Jong-Deok Choi,et al.  A framework for interprocedural optimization in the presence of dynamic class loading , 2000, PLDI '00.

[9]  Jan Vitek,et al.  Flexible Alias Protection , 1998, ECOOP.

[10]  Barbara G. Ryder,et al.  Data-flow analysis of program fragments , 1999, ESEC/FSE-7.

[11]  Yannis Smaragdakis,et al.  Strictly declarative specification of sophisticated points-to analyses , 2009, OOPSLA.

[12]  Barbara G. Ryder,et al.  Automatic construction of accurate application call graph with library call abstraction for Java: Research Articles , 2007 .

[13]  Barbara G. Ryder,et al.  Fragment class analysis for testing of polymorphism in Java software , 2004, IEEE Transactions on Software Engineering.

[14]  Martin Trapp,et al.  An Approach to Improve Locality Using Sandwich Types , 1998, Types in Compilation.

[15]  Laurie J. Hendren,et al.  Practical virtual method call resolution for Java , 2000, OOPSLA '00.

[16]  Frank Yellin,et al.  The Java Virtual Machine Specification , 1996 .

[17]  Barbara G. Ryder,et al.  Relevant context inference , 1999, POPL '99.

[18]  Peter Müller,et al.  Universes: Lightweight Ownership for JML , 2005, J. Object Technol..

[19]  James Noble,et al.  Ownership types for flexible alias protection , 1998, OOPSLA '98.

[20]  Xavier Leroy,et al.  Types in Compilation , 1998, Lecture Notes in Computer Science.

[21]  Frank Tip,et al.  Practical extraction techniques for Java , 2002, TOPL.

[22]  Martin Odersky,et al.  A Statically Safe Alternative to Virtual Types , 1998, ECOOP.

[23]  Jan Vitek,et al.  Confined types in Java , 2001, Softw. Pract. Exp..

[24]  Jens Palsberg,et al.  Type-based confinement , 2006, J. Funct. Program..

[25]  Sergiu M. Dascalu,et al.  Unit-level test adequacy criteria for visual dataflow languages and a testing methodology , 2008, TSEM.

[26]  David F. Bacon,et al.  Fast static analysis of C++ virtual function calls , 1996, OOPSLA '96.

[27]  David Grove,et al.  Optimization of Object-Oriented Programs Using Static Class Hierarchy Analysis , 1995, ECOOP.

[28]  David Notkin,et al.  Identifying program, test, and environmental changes that affect behaviour , 2011, 2011 33rd International Conference on Software Engineering (ICSE).

[29]  Ondrej Lhoták,et al.  Evaluating the benefits of context-sensitive points-to analysis using a BDD-based implementation , 2008, TSEM.

[30]  Jan Vitek,et al.  Confined types , 1999, OOPSLA '99.

[31]  Jens Palsberg,et al.  Encapsulating objects with confined types , 2001, OOPSLA 2001.

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

[33]  Amer Diwan,et al.  The DaCapo benchmarks: java benchmarking development and analysis , 2006, OOPSLA '06.