JavaPDG: A New Platform for Program Dependence Analysis

Dependence analysis is a fundamental technique for program understanding and is widely used in software testing and debugging. However, there are a limited number of analysis tools available despite a wide range of research work in this field. In this paper, we present JavaPDG1, a static analyzer for Java bytecode, which is capable of producing various graphical representations such as the system dependence graph, procedure dependence graph, control flow graph and call graph. As a program-dependence-graph based analyzer, JavaPDG performs both intra- and inter-procedural dependence analysis, and enables researchers to apply a wide range of program analysis techniques that rely on dependence analysis. JavaPDG provides a graphical viewer to browse and analyze the various graphs and a convenient JSON based serialization format.

[1]  Spiros Mancoridis,et al.  Static Security Analysis Based on Input-Related Software Faults , 2009, 2009 13th European Conference on Software Maintenance and Reengineering.

[2]  Paul Anderson,et al.  Software Inspection Using CodeSurfer , 2001 .

[3]  David A. Padua,et al.  Dependence graphs and compiler optimizations , 1981, POPL '81.

[4]  Mithun Acharya,et al.  Impact Analysis of Configuration Changes for Test Case Selection , 2011, 2011 IEEE 22nd International Symposium on Software Reliability Engineering.

[5]  David W. Binkley,et al.  Program slicing , 2008, 2008 Frontiers of Software Maintenance.

[6]  Donglin Liang,et al.  Slicing objects using system dependence graphs , 1998, Proceedings. International Conference on Software Maintenance (Cat. No. 98CB36272).

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

[8]  M. Eliantonio,et al.  Private Parties and the Annulment Procedure: Can the Gap in the European System of Judicial Protection Be Closed? , 2010 .

[9]  Susan Horwitz,et al.  Using Slicing to Identify Duplication in Source Code , 2001, SAS.

[10]  Philip S. Yu,et al.  GPLAG: detection of software plagiarism by program dependence graph analysis , 2006, KDD '06.

[11]  Frank Tip,et al.  A survey of program slicing techniques , 1994, J. Program. Lang..

[12]  Jianjun Zhao APPLYING PROGRAM DEPENDENCE ANALYSIS TO JAVA SOFTWARE , 2007 .

[13]  Mithun Acharya,et al.  Practical change impact analysis based on static program slicing for industrial software systems , 2011, 2011 33rd International Conference on Software Engineering (ICSE).

[14]  Shijie Zhang,et al.  Propagating Bug Fixes with Fast Subgraph Matching , 2010, 2010 IEEE 21st International Symposium on Software Reliability Engineering.

[15]  Andy Podgurski,et al.  The Probabilistic Program Dependence Graph and Its Application to Fault Diagnosis , 2008, IEEE Transactions on Software Engineering.

[16]  Joe D. Warren,et al.  The program dependence graph and its use in optimization , 1987, TOPL.

[17]  Jiong Yang,et al.  Discovering Neglected Conditions in Software by Mining Dependence Graphs , 2008, IEEE Transactions on Software Engineering.

[18]  Martin Odersky,et al.  An Overview of the Scala Programming Language , 2004 .

[19]  Vivek Sarkar,et al.  Dependence Analysis for Java , 1999, LCPC.

[20]  Lars Ole Andersen,et al.  Program Analysis and Specialization for the C Programming Language , 2005 .

[21]  Andreas Zeller,et al.  Efficient unit test case minimization , 2007, ASE '07.

[22]  Feng Cao,et al.  MFL: Method-Level Fault Localization with Causal Inference , 2013, 2013 IEEE Sixth International Conference on Software Testing, Verification and Validation.

[23]  Jiong Yang,et al.  Finding what's not there: a new approach to revealing neglected conditions in software , 2007, ISSTA '07.

[24]  Neil Walkinshaw,et al.  The Java system dependence graph , 2003, Proceedings Third IEEE International Workshop on Source Code Analysis and Manipulation.

[25]  John Hatcliff,et al.  Kaveri: Delivering the Indus Java Program Slicer to Eclipse , 2005, FASE.

[26]  Joseph Robert Horgan,et al.  Dynamic program slicing , 1990, PLDI '90.

[27]  Jianjun Zhao Dependence analysis of Java bytecode , 2000, Proceedings 24th Annual International Computer Software and Applications Conference. COMPSAC2000.

[28]  Andy Podgurski,et al.  Extending static analysis by mining project-specific rules , 2012, 2012 34th International Conference on Software Engineering (ICSE).

[29]  Andy Podgurski,et al.  Algorithms and tool support for dynamic information flow analysis , 2009, Inf. Softw. Technol..

[30]  Steven S. Muchnick,et al.  Advanced Compiler Design and Implementation , 1997 .

[31]  Rich Hickey,et al.  The Clojure programming language , 2008, DLS '08.

[32]  Andy Podgurski,et al.  Automated Support for Propagating Bug Fixes , 2008, 2008 19th International Symposium on Software Reliability Engineering (ISSRE).

[33]  Laurie Hendren,et al.  Jimple: Simplifying Java Bytecode for Analyses and Transformations , 1998 .

[34]  David Grove,et al.  Call graph construction in object-oriented languages , 1997, OOPSLA '97.

[35]  Jens Krinke,et al.  Identifying similar code with program dependence graphs , 2001, Proceedings Eighth Working Conference on Reverse Engineering.

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

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