All ETDs from UAB

Advisory Committee Chair

Peter M Pirkelbauer

Advisory Committee Members

Steven J Bethard

Marjan Mernik

Anthony Skjellum

Alan Sprague

Document Type


Date of Award


Degree Name by School

Doctor of Philosophy (PhD) College of Arts and Sciences


Since the widespread adoption of multi-core architectures at the turn of the millennium, parallel and concurrent programming paradigms, such as multi-threaded programming, have been advanced to enable programmers to take advantage of this abundance of computational resources. However, the need for speed has also given new life to ancient evils, namely concurrency bugs. The term concurrency bug, broadly speaking, refers to any bug that arises due to improper or inadequate synchronization of threads in their use of shared resources. These include deadlocks, race conditions, and atomicity violations. Model checking has proven to be a powerful and versatile approach to the task. The model-checking problem can be summarized as such: given a state-transition graph of a system and a specification, prove that the system conforms to or "models" that specification. Directed model checking systems explore states in an order determined by a heuristic function. While a powerful tool, there exists a dangerous and persistent problem that is heretofore unaddressed in the literature regarding model checking heuristics. Heuristics require design, selection, and parametrization, and the strength of our state space search hinges upon the strength of our priors, that is, the useful assertions that we can make about the behavior of a program to guide that process. Much of the research on model checking heuristics has yielded techniques that artificially inflate performance by inviting unreasonable amounts of hidden technical debt. The amassing of this debt negatively impacts the usability of directed model checking as a verification strategy. We call this the problem of priors. To solve the problem of priors and to improve upon the scalability and reliability of directed model checking, we can incorporate foreign analyses into the model checking process through a combination of hybridized and distributed search. This work offers three contributions: (1) an investigation into the use of source-to-source instrumentation to distill priors into forms that can be leveraged by the model checker, (2) a novel multiobjective formalism for expressing heuristics that exploit those priors, and (3) new methodologies for rigorously testing and verifying the effectiveness of such approaches. As an object lesson, we consider the problem of improving data race detection in Java programs using the Java Pathfinder model checker, though the tools and techniques described in this dissertation have broad applications.