Debugging
My primary research interest is on software debugging. More precisely, when
a software fault manifests itself as a failure, I want to develop automated
techniques to help decide the root cause of the failure. I am interested in
automated debugging for general programs, distributed systems, and parallel systems.
In the past, I have also done the following work on debugging. [ICSM07]
Failure Indexing: A Dynamic Slicing Based Approach; [PLDI07]Towards Locating Execution Omission Errors; [PLDI06]Pruning Dynamic Slices With Confidence; [ICSE06]Locating Faults Through Automated Predicate Switching; [ASE05]Locating Faulty Code Using Failure-Inducing Chops;
Dynamic Program Analysis
Substantial of my research efforts are spent on developing novel primitives
to better analyze program executions. My recent favorite is [PLDI08] Execution Indexing, which is a technique that provides a canonical
representation for execution points. It allows aligning corresponding points
across multiple executions. A sample application is in concurrent execution,
if a breakpoint is set at a particular point, it is unlikely the re-execution
will stop at the desired point due to non-determinism. Indexing identifies
the corresponding point.
Another interesting primitive is [FSE06] Execution Fast Forwarding, which can fast forward the replay of an execution by skipping un-interesting part.
Scientific Data Validation
Recently, I started working on helping scientists validate their data processing results. The motivation is that scientific data processing has uncertainty
such as input uncertainty, resulting in unreliable results. Our recent
progress is [VLDB07] Lineage Tracing .