A classification of concurrency failures in Java components

The Java programming language supports concurrency. Concurrent programs are hard to test due to their inherent non-determinism. This paper presents a classification of concurrency failures that is based on a model of Java concurrency. The model and failure classification is used to justify coverage of synchronization primitives of concurrent components. This is achieved by constructing concurrency flow graphs for each method call. A producer-consumer monitor is used to demonstrate how the approach can be used to measure coverage of concurrency primitives and thereby assist in determining test sequences for deterministic execution.

[1]  Matthew B. Dwyer,et al.  Using the Bandera Tool Set to Model-Check Properties of Concurrent Java Software , 2001, CONCUR.

[2]  Kazuo Ushijima,et al.  Test-case generation for concurrent programs with the testing criteria using interaction sequences , 1999, Proceedings Sixth Asia Pacific Software Engineering Conference (ASPEC'99) (Cat. No.PR00509).

[3]  George S. Avrunin,et al.  Data flow analysis for checking properties of concurrent Java programs , 1999, Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).

[4]  Per Brinch Hansen,et al.  Reproducible testing of monitors , 1978, Softw. Pract. Exp..

[5]  Paul A. Strooper,et al.  Testing Java monitors through deterministic execution , 2001, Proceedings 2001 Australian Software Engineering Conference.

[6]  Klaus Havelund,et al.  Java PathFinder, A Translator from Java to Promela , 1999, SPIN.

[7]  Eitan Farchi,et al.  Multithreaded Java program test generation , 2001, JGI '01.

[8]  Ken Arnold,et al.  The Java Programming Language , 1996 .

[9]  Guy L. Steele,et al.  The Java Language Specification , 1996 .

[10]  Michael Burrows,et al.  Eraser: a dynamic data race detector for multithreaded programs , 1997, TOCS.

[11]  Giorgio Delzanno,et al.  Towards the Automated Verification of Multithreaded Java Programs , 2002, TACAS.

[12]  Max Mühlhäuser Special Issues in Object-Oriented Programming , 1997 .

[13]  James L. Peterson,et al.  Petri Nets , 1977, CSUR.

[14]  Jong-Deok Choi,et al.  Efficient and precise datarace detection for multithreaded object-oriented programs , 2002, PLDI '02.

[15]  Daniel Hoffman,et al.  A concurrency test tool for Java monitors , 2001, Proceedings 16th Annual International Conference on Automated Software Engineering (ASE 2001).

[16]  Gregory R. Andrews,et al.  Concurrent programming - principles and practice , 1991 .

[17]  Scott D. Stoller,et al.  Testing Concurrent Java Programs using Randomized Scheduling , 2002, RV@FLoC.

[18]  Kuo-Chung Tai,et al.  Design of a toolset for dynamic analysis of concurrent Java programs , 1998, Proceedings. 6th International Workshop on Program Comprehension. IWPC'98 (Cat. No.98TB100242).

[19]  R. M. Pitblado,et al.  A Modified Hazop Methodology For Safety Critical System Assessment , 1993 .

[20]  Klaus Havelund,et al.  Model Checking Programs , 2004, Automated Software Engineering.

[21]  Daniel Hoffman,et al.  Tool Support for Testing Java Monitors , 2001 .

[22]  Lori A. Clarke,et al.  Data flow analysis of concurrent systems that use the rendezvous model of synchronization , 1991, TAV4.

[23]  Armin Biere,et al.  Applying static analysis to large-scale, multi-threaded Java programs , 2001, Proceedings 2001 Australian Software Engineering Conference.

[24]  Richard N. Taylor,et al.  Structural Testing of Concurrent Programs , 1992, IEEE Trans. Software Eng..

[25]  K. Beck,et al.  Extreme Programming Explained , 2002 .