Abstract
We address the problem of testing atomicity of composed concurrent operations. Concurrent libraries help programmers exploit parallel hardware by providing scalable concurrent operations with the illusion that each operation is executed atomically. However, client code often needs to compose atomic operations in such a way that the resulting composite operation is also atomic while preserving scalability. We present a novel technique for testing the atomicity of client code composing scalable concurrent operations. The challenge in testing this kind of client code is that a bug may occur very rarely and only on a particular interleaving with a specific thread configuration. Our technique is based on modular testing of client code in the presence of an adversarial environment; we use commutativity specifications to drastically reduce the number of executions explored to detect a bug. We implemented our approach in a tool called COLT, and evaluated its effectiveness on a range of 51 realworld concurrent Java programs. Using COLT, we found 56 atomicity violations in Apache Tomcat, Cassandra, MyFaces Trinidad, and other applications. Categories and Subject Descriptors D.2.5 [Testing and Debugging]; D.1.3 [Concurrent Programming] General Terms Verification.
Original language | English |
---|---|
Pages (from-to) | 51-64 |
Number of pages | 14 |
Journal | ACM SIGPLAN Notices |
Volume | 46 |
Issue number | 10 |
DOIs | |
State | Published - Oct 2011 |
Keywords
- Collections
- Composed operations
- Concurrency
- Linearizability
- Testing