Science of Design
The purpose of this research was to attempt to formalize the informal notion of design quality. With a background in automated theorem proving, I conjectured that an automated tool would be able to infer better properties of a program that had a good design than of an equivalent program with more questionable design. This idea also resonated with my experience as a professional programming, since I often found that the best designs were the ones that were easier to understand. So with help from grant NSF CNS-0613919 (and many thanks to the NSF, which is not responsible for any errors in our part) we proceeded to explore this question with Nadya Kuzmina, a very talented Ph.D. student. Her Ph.D. thesis included the development of dynamic and static analysis tools to extract the design of small Java programs. In short, our results show that the tools do a better job of extracting the design of programs that are designed well. For a fuller description, including copies of publications, look at Nadya's archived web page.
At its height, this research project was a collaboration between four faculty members, two Ph.D. students, and two undergraduate students in my department. However, after Nadya's graduation this research project became dormant. There are many interesting questions that remain open, and it is possible that they will be explored by future students.