Explaining Intermittent Concurrent Bugs by Minimizing Scheduling Noise

A noise maker is a tool for testing multi-threaded programs. It seeds shared memory accesses and synchronization events (concurrent events) with conditional context switches and timeouts during runtime, in order to increase the likelihood that a concurrent bug manifests itself. However, an instrumented program with many seeded events may not be useful for debugging; events have been seeded all over the source code and provide almost no information regarding the bug. We argue that for many bug patterns only a few relevant context switches are critical for the bug. Based on the observation that bugs involve only a small set of critical events, we develop a randomized algorithm to reduce the scheduling noise and discover these events related to the bug. To evaluate the effectiveness of our approach, we experiment with debugging of industrial code, known open source code software, and programs representing known concurrent bugs. Our results demonstrate that this simple technique is in many cases very powerful, and significantly helps the user locating and understanding concurrent bugs.

[1]  Yaniv Eytani Concurrent Java Test Generation as a Search Problem , 2006, Electron. Notes Theor. Comput. Sci..

[2]  Rajeev Alur,et al.  A Temporal Logic of Nested Calls and Returns , 2004, TACAS.

[3]  Stephen N. Freund,et al.  Atomizer: a dynamic atomicity checker for multithreaded programs , 2004, 18th International Parallel and Distributed Processing Symposium, 2004. Proceedings..

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

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

[6]  Klaus Havelund,et al.  SPIN Model Checking and Software Verification , 2000, Lecture Notes in Computer Science.

[7]  Jakob Rehof,et al.  Context-Bounded Model Checking of Concurrent Software , 2005, TACAS.

[8]  Jong-Deok Choi,et al.  Isolating failure-inducing thread schedules , 2002, ISSTA '02.

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

[10]  Armin Biere,et al.  High‐level data races , 2003, Softw. Test. Verification Reliab..

[11]  Serdar Tasiran,et al.  A Novel Test Coverage Metric for Concurrently-Accessed Software Components , 2005, FATES.

[12]  Yosi Ben-Asher,et al.  Heuristics for finding concurrent bugs , 2003, Proceedings International Parallel and Distributed Processing Symposium.

[13]  Alan Bundy,et al.  Constructing Induction Rules for Deductive Synthesis Proofs , 2006, CLASE.

[14]  Andreas Zeller,et al.  Simplifying and Isolating Failure-Inducing Input , 2002, IEEE Trans. Software Eng..

[15]  Eitan Farchi,et al.  Applications of synchronization coverage , 2005, PPoPP.

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

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

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

[19]  Gul Agha,et al.  Automated Testing of Multithreaded Programs Using Race-Detection and Flipping , 2006 .

[20]  Klaus Havelund,et al.  Model checking JAVA programs using JAVA PathFinder , 2000, International Journal on Software Tools for Technology Transfer.

[21]  Armin Biere,et al.  Using Block-Local Atomicity to Detect Stale-Value Concurrency Errors , 2004, ATVA.

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

[23]  Matthew B. Dwyer,et al.  Finding feasible abstract counter-examples , 2003, International Journal on Software Tools for Technology Transfer.

[24]  Shmuel Ur,et al.  Compiling a benchmark of documented multi-threaded bugs , 2004, 18th International Parallel and Distributed Processing Symposium, 2004. Proceedings..

[25]  Alexandre Petrenko,et al.  Antipattern-based detection of deficiencies in Java multithreaded software , 2004 .

[26]  Alexandre Petrenko,et al.  Antipattern-based detection of deficiencies in Java multithreaded software , 2004, Fourth International Conference onQuality Software, 2004. QSIC 2004. Proceedings..

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

[28]  Michael I. Jordan,et al.  Bug isolation via remote program sampling , 2003, PLDI.

[29]  Barton P. Miller,et al.  Detecting Data Races in Parallel Program Executions , 1989 .

[30]  Brian Nielsen,et al.  Formal Approaches to Software Testing, 4th International Workshop, FATES 2004, Linz, Austria, September 21, 2004, Revised Selected Papers , 2005, FATES.

[31]  Yosi Ben-Asher,et al.  Producing scheduling that causes concurrent programs to fail , 2006, PADTAD '06.

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

[33]  Lori L. Pollock,et al.  All-du-path coverage for parallel programs , 1998, ISSTA '98.

[34]  Jong-Deok Choi,et al.  Escape analysis for Java , 1999, OOPSLA '99.

[35]  Klaus Havelund,et al.  Using Runtime Analysis to Guide Model Checking of Java Programs , 2013, SPIN.

[36]  Orna Grumberg,et al.  Bounded Model Checking of Concurrent Programs , 2005, CAV.

[37]  Jong-Deok Choi,et al.  Deterministic replay of Java multithreaded applications , 1998, SPDT '98.

[38]  Klaus Havelund,et al.  Towards a framework and a benchmark for testing tools for multi‐threaded programs , 2007, Concurr. Comput. Pract. Exp..

[39]  Klaus Havelund,et al.  Dynamic Deadlock Analysis of Multi-threaded Programs , 2005, Haifa Verification Conference.