Michael D. Ernst is an Associate Professor in the MIT Department of Electrical Engineering & Computer Science, and is a member of MIT's Computer Science & Artificial Intelligence Lab (CSAIL).
His research aims to make software more reliable, more secure, and easier (and more fun!) to produce. His technical interests are primarily in software engineering, including static and dynamic program analysis, testing, security, type theory, programming language design, and verification.
Ernst was previously a lecturer in the Rice University computer science department and a researcher at Microsoft Research. He holds a Ph.D. in Computer Science and Engineering from the University of Washington.
We present a technique that improves random test generation by
incorporating feedback obtained from executing test inputs as they are
created. Our technique builds inputs incrementally by randomly selecting
a method call to apply and finding arguments from among
previously-constructed inputs. As soon as an input is built, it is
executed and checked against a set of contracts and filters. The result
of the execution determines whether the input is redundant, illegal,
contract-violating, or useful for generating more inputs. The technique
outputs a test suite consisting of unit tests for the classes under
test. Passing tests can be used to ensure that code contracts are
preserved across program changes; failing tests (that violate one or
more contract) point to potential errors that should be corrected.
Our experimental results indicate that feedback-directed random test
generation can outperform systematic and undirected random test
generation, in terms of coverage and error detection. On four small but
nontrivial data structures (used previously in the literature), our
technique achieves higher or equal block and predicate coverage than
model checking (with and without abstraction) and undirected random
generation. On 14 large, widely-used libraries (comprising 780KLOC),
feedback-directed random test generation finds many previously-unknown
errors, not found by either model checking or undirected random
generation.