POPL '02 Proceedings of the 29th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Replay and Testing for Concurrent Programs
IEEE Software
ECOOP '01 Proceedings of the 15th European Conference on Object-Oriented Programming
Use of Sequencing Constraints for Specifying, Testing, and Debugging Concurrent Programs
Proceedings of the 1994 International Conference on Parallel and Distributed Systems
Tool Support for Testing Concurrent Java Components
IEEE Transactions on Software Engineering
A Concurrency Test Tool for Java Monitors
Proceedings of the 16th IEEE international conference on Automated software engineering
Synthesis of interface specifications for Java classes
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Mop: an efficient and generic runtime verification framework
Proceedings of the 22nd annual ACM SIGPLAN conference on Object-oriented programming systems and applications
Unit testing concurrent software
Proceedings of the twenty-second IEEE/ACM international conference on Automated software engineering
Improving Automated Testing of Multi-threaded Software
ICST '08 Proceedings of the 2008 International Conference on Software Testing, Verification, and Validation
ConcJUnit: unit testing for concurrent programs
PPPJ '09 Proceedings of the 7th International Conference on Principles and Practice of Programming in Java
DETERMIN: inferring likely deterministic specifications of multithreaded programs
Proceedings of the 32nd ACM/IEEE International Conference on Software Engineering - Volume 1
IMUnit: improved multithreaded unit testing
Proceedings of the 3rd International Workshop on Multicore Software Engineering
LEAP: lightweight deterministic multi-processor replay of concurrent java programs
Proceedings of the eighteenth ACM SIGSOFT international symposium on Foundations of software engineering
Mining parametric specifications
Proceedings of the 33rd International Conference on Software Engineering
Change-aware preemption prioritization
Proceedings of the 2011 International Symposium on Software Testing and Analysis
An overview of the MOP runtime verification framework
International Journal on Software Tools for Technology Transfer (STTT) - Runtime Verification
Proceedings of the 17th ACM SIGPLAN symposium on Principles and Practice of Parallel Programming
Fully automatic and precise detection of thread safety violations
Proceedings of the 33rd ACM SIGPLAN conference on Programming Language Design and Implementation
Finding errors in multithreaded GUI applications
Proceedings of the 2012 International Symposium on Software Testing and Analysis
CONCURRIT: testing concurrent programs with programmable state-space exploration
HotPar'12 Proceedings of the 4th USENIX conference on Hot Topics in Parallelism
Maple: a coverage-driven testing tool for multithreaded programs
Proceedings of the ACM international conference on Object oriented programming systems languages and applications
CONCURRIT: a domain specific language for reproducing concurrency bugs
Proceedings of the 34th ACM SIGPLAN conference on Programming language design and implementation
EnforceMOP: a runtime property enforcement system for multithreaded programs
Proceedings of the 2013 International Symposium on Software Testing and Analysis
Selective mutation testing for concurrent code
Proceedings of the 2013 International Symposium on Software Testing and Analysis
Trace driven dynamic deadlock detection and reproduction
Proceedings of the 19th ACM SIGPLAN symposium on Principles and practice of parallel programming
Hi-index | 0.00 |
Multithreaded code is notoriously hard to develop and test. A multithreaded test exercises the code under test with two or more threads. Each test execution follows some schedule/interleaving of the multiple threads, and different schedules can give different results. Developers often want to enforce a particular schedule for test execution, and to do so, they use time delays (Thread.sleep in Java). Unfortunately, this approach can produce false positives or negatives, and can result in unnecessarily long testing time. This paper presents IMUnit, a novel approach to specifying and executing schedules for multithreaded tests. We introduce a new language that allows explicit specification of schedules as orderings on events encountered during test execution. We present a tool that automatically instruments the code to control test execution to follow the specified schedule, and a tool that helps developers migrate their legacy, sleep-based tests into event-based tests in IMUnit. The migration tool uses novel techniques for inferring events and schedules from the executions of sleep-based tests. We describe our experience in migrating over 200 tests. The inference techniques have high precision and recall of over 75%, and IMUnit reduces testing time compared to sleep-based tests on average 3.39x.