The course project will allow you to get some hands-on experience. For the project, you will explore some research question related to program analysis/optimization. The project will be done in teams of 2 to 3. In exceptional cases, you may work by yourself, but you have to talk to me about it beforehand. A project proposal will be due a few weeks into the class, and there will be several milestones along the way, to make sure that you are making good progress. A project report will be due at the end of the quarter. You will also give two presentations on your project: one short presentation at the midway point in the quarter, and a final project presentation at the end of the quarter. If there is any way of incorporating your current research into the course project, I encourage you to do so.
You can find a list of infrastructure to use here.
Nothing to hand in.
Write a one page description of what you want to do in the project. The proposal should at least include the following:
For each group, one group member should send me the project proposal
Each group will give a 10 to 15 minute presentation giving an overview of their project, and any results they may already have.
Each group will give a 10 to 15 minute presentation on the final results from their project. This will be done sometime during finals week, at some date that works for all the students in the class.
Here is a list of infrastructures that you can use for your project. This list was adapted from John Regehr's course on program analysis. This table also shows some sample project ideas which I've copied from his course.
|tool and home page||implemented in||analyzes||analysis type||documentation?||example projects|
|CCured||OCaml using CIL||C||enforces type-safe execution||good enough|
|CIL||OCaml||ANSI C, gcc, Microsoft C||typechecking, provides infrastructure for other analyses||good enough|
|cXprop||OCaml using CIL||C||context and path insensitive dataflow with pluggable domains, pretty good pointer analysis, and concurrency analysis specific to interrupt-driven software||no||
|gcc||C||C, C++, Java||optimizing compiler||minimal|
|Jikes RVM||Java||Java bytecode||not a static analyzer; performs analysis while JITing||??|
|LLVM||C++||C, C++||optimizing compiler||good|
|Locksmith||OCaml using CIL||C with pthreads||context sensitive lockset||minimal||see doc/notes.txt in the source distribution|
|ProGuard||Java||Java bytecode||optimizing compiler and obfuscator||??||add intervals or another abstract domain that is more interesting than constants|
|Saturn||OCaml using CIL, analysis are written in CLP||C||path, flow, and context sensitive summary-based analysis||good|
|Soot||Java||Java bytecode||optimizing compiler||??|
|Sparse||C||C||typechecking, random bugfinding||no|
|valgrind||C||x86 and PPC object code||not a static analyzer; performs analysis while JITing||??|