Mutation-based exploration of a method for verifying concurrent Java components

Summary form only given. The Java programming language supports concurrency. Concurrent programs are harder to verify than their sequential counterparts due to their inherent nondeterminism and a number of specific concurrency problems such as interference and deadlock. In previous work, we proposed a method for verifying concurrent Java components based on a mix of code inspection, static analysis tools, and the ConAn testing tool. The method was derived from an analysis of concurrency failures in Java components, but was not applied in practice. In this paper, we explore the method by applying it to an implementation of the well-known readers-writers problem and a number of mutants of that implementation. We only apply it to a single, well-known example, and so we do not attempt to draw any general conclusions about the applicability or effectiveness of the method. However, the exploration does point out several strengths and weaknesses in the method, which enable us to fine-tune the method before we carry out a more formal evaluation on other, more realistic components.

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

[2]  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).

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

[4]  Marc Roper,et al.  Practical Code Inspection Techniques for Object-Oriented Systems: An Experimental Comparison , 2003, IEEE Softw..

[5]  X. Cai,et al.  Control of nondeterminism in testing distributed multithreaded programs , 2000, Proceedings First Asia-Pacific Conference on Quality Software.

[6]  Michael E. Fagan Design and Code Inspections to Reduce Errors in Program Development , 1976, IBM Syst. J..

[7]  Sung-Eun Choi,et al.  A study of common pitfalls in simple multi-threaded programs , 2000, SIGCSE '00.

[8]  David Hovemeyer,et al.  Finding bugs is easy , 2004, SIGP.

[9]  Paul A. Strooper,et al.  A classification of concurrency failures in Java components , 2003, Proceedings International Parallel and Distributed Processing Symposium.

[10]  Eitan Farchi,et al.  Concurrent bug patterns and how to test them , 2003, Proceedings International Parallel and Distributed Processing Symposium.

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

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

[13]  Peter J. Middleton,et al.  Software Inspection , 1994, J. Inf. Technol..

[14]  Daniel Hoffman,et al.  Tool Support for Testing Concurrent Java Components , 2003, IEEE Trans. Software Eng..

[15]  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).

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

[17]  Paul A. Strooper,et al.  Viewpoint-Based Testing of Concurrent Components , 2004, IFM.

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

[19]  Clemens A. Szyperski,et al.  Component software - beyond object-oriented programming , 2002 .

[20]  James C. Corbett,et al.  Bandera: extracting finite-state models from Java source code , 2000, ICSE.

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

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

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

[24]  Brad Long,et al.  Modelling Java concurrency with Object-Z , 2003, First International Conference onSoftware Engineering and Formal Methods, 2003.Proceedings..

[25]  Richard N. Taylor,et al.  Combining Static Concurrency Analysis with Symbolic Execution , 1988, IEEE Trans. Software Eng..

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