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:
- The compiler introduces a number of performance overheads to
support DSU, notably various levels of indirection. We believe a
number of these overheads could be eliminated through novel compiler
optimizations. Supporting these
would basically be adding a phase or two to our multi-phase compiler,
which uses the CIL analysis framework (written in OCaml).
Skills required: You should be familiar (or willing to
become
familiar) with the OCaml programming language
Suggested reading: Practical
Dynamic Software Updating for C
- So far we have experimented with using Ginseng on open
source user-level
servers. However, operating systems are an even more attractive target
for dynamic updating. In this project you will explore applying
Ginseng, or techniques introduced in Ginseng (e.g., it static analyses)
to permit dynamic updates to commodity OS kernels such as Linux or xBSD.
Skills required: This would be more appropriate as a
two-person project.
You should be familiar with C and be ready to get you hands dirty with
kernel code.
Suggested reading: Ksplice: An
automatic system for rebootless kernel security updates
Design snippets. Design
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