Project Suggestions

Software evolution study for C programs. ASTdiff is a tool comparing ASTs of two programs written in C (available as part of Ginseng). We have used ASTdiff to analyze evolution of several large project such as the Linux kernel, Apache, OpenSSH, etc., over a long time (several years). The goal of this project would be to extend ASTdiff to gather more information about programs (e.g., software engineering metrics) and/or run ASTdiff on more programs over longer release histories.

Skills required: You will be running ASTdiff on large C source code bases, so you need to be reasonably familiar with C and ready to adjust the building infrastructure (e.g., Makefile). If you choose to extend ASTdiff, you should be familiar (or willing to become familiar) with the OCaml programming language.

Suggested reading: Understanding Source Code Evolution Using Abstract Syntax Tree Matching


Software evolution tool and study for C++ programs. This project essentially is similar to the above: take some programs written in C++ and analyze their release histories by comparing the ASTs of succesive releases. There is no tool that can compare C++ programs at the AST level (that I know of). The students will have to find such a tool, or write one, and the run it on sizable C++ programs with long histories (e.g., Mozilla).

Skills required: You need to be familiar with C++ and ready to adjust the building infrastructure (e.g., Makefile).


Dynamic Software Updating. Software systems are imperfect, so software updates are a fact of life. While typical software updates require stopping and restarting the program in question, many systems cannot afford to halt service, or would prefer not to. Dynamic software updating (DSU) addresses this difficulty by permitting programs to be updated while they run. We have developed a DSU compiler for C programs that makes programs updateable, and so far we have had good experience using it (Ginseng). There are two project-sized ideas that could be explored here:
Design snippetsDesign Snippets (created by Vibha Sazawal) are "scoped design representations intended for use in the context of code that  help software engineers reason about ease of change as they modify existing programs. They are co-displayed with code in Eclipse."  The idea of this project is to look at design snippets for several open-source programs and their succesive versions, and try to find out features that makes programs easier or harder to evolve.

Skills required: You will use Java and Eclipse.
Suggested reading: A study of evolution in the presence of source-derived partial design representations



Schema evolution. Implement and/or study schema evolution in databases. This can be an implementation project (e.g., support on-the-fly schema evolution without having to shut down the DBMS) or a more theoretical project (e.g., formalize schema updates and prove that a schema update does not break stored procedures).

Skills required: If you decide to do do some implementation, you will probably have to modify an open-source DBMS, e.g., MySQL.
Suggested reading: Schema Evolution in Database Systems-An Annotated Bibliography , A Survey of Schema Versioning Issues for Database Systems