Slicing concurrent Java programs using Indus and Kaveri

Program slicing is a program analysis and transformation technique that has been successfully used in a wide range of applications including program comprehension, debugging, maintenance, testing, and verification. However, there are only few fully featured implementations of program slicing that are available for industrial applications or academic research. In particular, very little tool support exists for slicing programs written in modern object-oriented languages such as Java, C#, or C++. In this paper, we present Indus—a robust framework for analyzing and slicing concurrent Java programs, and Kaveri—a feature-rich Eclipse-based GUI front end for Indus slicing. For Indus, we describe the underlying tool architecture, analysis components, and program dependence capabilities required for slicing. In addition, we present a collection of advanced features useful for effective slicing of Java programs including calling-context sensitive slicing, scoped slicing, control slicing, and chopping. For Kaveri, we discuss the design goals and basic capabilities of the graphical facilities integrated into a Java development environment to present the slicing information. This paper is an extended version of a tool demonstration paper presented at the International Conference on Fundamental Aspects of Software Engineering (FASE 2005). Thus, the paper highlights tool capabilities and engineering issues and refers the reader to other papers for technical details.

[1]  Lynette I. Millett,et al.  Slicing Promela and its Applications to Model Checking, Simulation, and Protocol Understanding , 2002 .

[2]  John Hatcliff,et al.  Pruning Interference and Ready Dependence for Slicing Concurrent Java Programs , 2004, CC.

[3]  Jens Krinke,et al.  Static slicing of threaded programs , 1998, PASTE '98.

[4]  Matthew B. Dwyer,et al.  Bandera: extracting finite-state models from Java source code , 2000, Proceedings of the 2000 International Conference on Software Engineering. ICSE 2000 the New Millennium.

[5]  Matthew B. Dwyer,et al.  Evaluating the Effectiveness of Slicing for Model Reduction of Concurrent Object-Oriented Programs , 2006, TACAS.

[6]  David W. Binkley,et al.  Semantics Guided Regression Test Cost Reduction , 1997, IEEE Trans. Software Eng..

[7]  Jens Krinke,et al.  Advanced slicing of sequential and concurrent programs , 2003, 20th IEEE International Conference on Software Maintenance, 2004. Proceedings..

[8]  Matthew B. Dwyer,et al.  Slicing Software for Model Construction , 2000, High. Order Symb. Comput..

[9]  Jean Utke,et al.  Control flow reversal for adjoint code generation , 2004 .

[10]  Erik Ruf,et al.  Effective synchronization removal for Java , 2000, PLDI '00.

[11]  David S. Rosenblum,et al.  Automated Generation of Context-Aware Tests , 2007, 29th International Conference on Software Engineering (ICSE'07).

[12]  Karl J. Ottenstein,et al.  The program dependence graph in a software development environment , 1984, SDE 1.

[13]  John Hatcliff,et al.  Scalable and accurate approaches for program dependence analysis, slicing, and verification of concurrent object oriented programs , 2006 .

[14]  Phil Pfeiffer,et al.  Dependence analysis for pointer variables , 1989, PLDI '89.

[15]  David W. Binkley,et al.  Interprocedural slicing using dependence graphs , 1988, SIGP.

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

[17]  Lori A. Clarke,et al.  A Formal Model of Program Dependences and Its Implications for Software Testing, Debugging, and Maintenance , 1990, IEEE Trans. Software Eng..

[18]  Jens Krinke,et al.  Context-sensitive slicing of concurrent programs , 2003, ESEC/FSE-11.

[19]  Matthew B. Dwyer,et al.  Controlling factors in evaluating path-sensitive error detection techniques , 2006, SIGSOFT '06/FSE-14.

[20]  Jens Krinke Context-sensitivity matters, but context does not , 2004, Source Code Analysis and Manipulation, Fourth IEEE International Workshop on.

[21]  Jens Krinke,et al.  Barrier slicing and chopping , 2003, Proceedings Third IEEE International Workshop on Source Code Analysis and Manipulation.

[22]  James C. Corbett,et al.  A Formal Study of Slicing for Multi-threaded Programs with JVM Concurrency Primitives , 1999, SAS.

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

[24]  John Hatcliff,et al.  Enabling Efficient Partial Order Reductions for Model Checking Object-Oriented Programs Using Static Calculation of Program Dependences , 2007 .

[25]  Venkatesh Prasad Ranganath,et al.  OBJECT-FLOW ANALYSIS FOR OPTIMIZING FINITE-STATE MODELS OF JAVA SOFTWARE , 2002 .

[26]  Thomas A. Henzinger,et al.  Lazy abstraction , 2002, POPL '02.

[27]  Frank Tip,et al.  Chianti: a tool for change impact analysis of java programs , 2004, OOPSLA.

[28]  Donglin Liang,et al.  Efficient Computation of Parameterized Pointer Information for Interprocedural Analyses , 2001, SAS.

[29]  Sumit Kumar,et al.  Better Slicing of Programs with Jumps and Switches , 2002, FASE.

[30]  Gregor Snelting,et al.  An improved slicer for Java , 2004, PASTE.

[31]  W. Visser,et al.  Second Generation of a Java Model Checker , 2000 .

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

[33]  Mangala Gowri Nanda,et al.  Slicing concurrent programs , 2000, ISSTA '00.

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