Ongoing Research

Automated metamorphic testing
We seek to automate metamorphic testing of applications, particularly those without test oracles (i.e., for which you cannot know the correct output for arbitrary input, such as machine learning apps or simulation software). Our approaches allow for checking of metamorphic properties at runtime, using the real input from actual executions. However, the checks are conducted in parallel (for performance reasons), and any side effects are hidden from the user.

I am also interested in: mutation analysis; code readability and understandability; Android testing utilities; CS outreach programs.


Past Software Testing Projects

In vivo testing
In vivo testing is a testing approach in which an application's tests are executed while the program is running in the deployment environment (the field), as opposed to in the development and testing environments (the lab). The thought is that an application running in the field is more likely to encounter states that were not anticipated prior to release, or could not have been tested due to various constraints (e.g. time).

This project is designed to develop proof-of-concept collaboration facilities suitable for inclusion in geWorkbench, a stand-alone tool used by researchers in computational biology. Such facilities include social networking, chatting, an expert finder utility, and workflow assistance.


Past Computer Science Education Projects

In this project, we are seeking to learn about introductory-level students' programming activities by observing how they work when completing homework assignments. We do this by capturing such data like compilation errors, amount of time spent on an assignment, etc., then reporting the data back to a central repository where it can be mined and analyzed.

Backstop is a tool that helps novice Java programmers comprehend some of the complicated error messages provided by the Java Virtual Machine. Whereas there has been much work in creating easy-to-understand compiler messages, little work has been done in the area of runtime errors. Backstop has been designed to produce a simpler error message that attempts to explain the cause of a runtime error, and how to fix it.