The trend towards multicore processors and graphic processing units is increasing the need for software that can take advantage of parallelism and concurrency. Unfortunately, concurrent programs have proven to be much more difficult to write and debug than sequential software. This is because concurrent programs often exhibit incorrect behaviors due to unintended interference among multiple threads. Such concurrency bugs are often difficult to find because they typically happen under very specific thread interleavings.
Testing and debugging are important phases of the software development process that help to improve software quality, reliability, and safety. For sequential software, software developers effectively use testing and debugging techniques in practice. Unfortunately, testing and debugging become notoriously difficult for concurrent programs compared to their sequential counterparts. This project investigates automated testing and debugging techniques that can not only find bugs in concurrent programs automatically and quickly, but also help to simplify and pinpoint the cause of bugs. The proposed techniques will combine practical methods, such as testing, and mathematically rigorous techniques, such as model checking and program analysis. The project will immediately benefit the software industry, where testing and bug fixing consume more than half of the total software development cost.