A Formal Study of Slicing for Multi-threaded Programs with JVM Concurrency Primitives

Previous work has shown that program slicing can be a useful step in model-checking software systems. We are interested in applying these techniques to construct models of multi-threaded Java programs. Past work does not address the concurrency primitives found in Java, nor does it provide the rigorous notions of slice correctness that are necessary for reasoning about programs with non-deterministic behaviour and potentially infinite computation traces. In this paper, we define the semantics of a simple multi-threaded language with concurrency primitives matching those found in the Java Virtual Machine, we propose a bisimulation-based notion of correctness for slicing in this setting, we identify notions of dependency that are relevant for slicing multi-threaded Java programs, and we use these dependencies to specify a program slicer for the language presented in the paper. Finally, we discuss how these dependencies can be refined to take into account common programming idioms of concurrent Java software.

[1]  Thomas Reps,et al.  Program Slicing for Design Automation: An Automatic Technique for Speeding-up Hardware Design, Simul , 1998 .

[2]  Thomas Ball,et al.  Slicing Programs with Arbitrary Control-flow , 1993, AADEBUG.

[3]  Jianjun Zhao,et al.  Slicing concurrent Java programs , 1999, Proceedings Seventh International Workshop on Program Comprehension.

[4]  Martin Wirsing,et al.  From Sequential to Multi-Threaded Java: An Event-Based Operational Semantics , 1997, AMAST.

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

[6]  Radu Iosif,et al.  Modeling and Validation of Java Multithreading Applications using SPIN , 1998 .

[7]  Jong-Deok Choi,et al.  Static slicing in the presence of goto statements , 1994, TOPL.

[8]  James C. Corbett,et al.  Constructing compact models of concurrent Java programs , 1998, ISSTA '98.

[9]  Matthew B. Dwyer,et al.  Staging Static Analyses Using Abstraction-Based Program Specialization , 1998, PLILP/ALP.

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

[11]  James C. Corbett,et al.  Slicing Multi-threaded Java Programs : A Case Study , 2000 .

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

[13]  David A. Schmidt,et al.  Program Analysis as Model Checking of Abstract Interpretations , 1998, SAS.

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

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

[16]  Kenneth L. McMillan,et al.  Symbolic model checking , 1992 .

[17]  Jingde Cheng,et al.  Static slicing of concurrent object-oriented programs , 1996, Proceedings of 20th International Computer Software and Applications Conference: COMPSAC '96.

[18]  Zhao Jianjun Slicing Concurrent Java Programs , 1999 .

[19]  Gerard J. Holzmann,et al.  The Model Checker SPIN , 1997, IEEE Trans. Software Eng..

[20]  Frank Yellin,et al.  Inside the Java Virtual Machine , 1997 .

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

[22]  Frank Yellin,et al.  The java virtual machine , 1996 .

[23]  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..

[24]  Jingde Cheng,et al.  Slicing Concurrent Programs - A Graph-Theoretical Approach , 1993, AADEBUG.