CSE 503: Software Engineering: Program Analysis

Winter 2010

Meetings: MW 10:30-11:50, room MGH 238

Lecturer: Michael Ernst

TA: Todd Schiller

Software is becoming ever more complex and difficult to understand, at the same time as it is used ever more pervasively. It is hopeless to understand how software systems work (or why they do not work!) without automated assistance. Programmers need tool assistance during design, implementation, testing, debugging, and modification ("maintenance"). This graduate seminar will investigate a variety of program analysis techniques that address these software engineering tasks.

Static analysis topics include abstract interpretation (dataflow), type systems (including inference and non-standard type systems), model checking, decision procedures (SAT, BDDs, etc.), theorem-proving. Dynamic analysis topics include testing, fault isolation (debugging), model inference, and visualization. While the course focuses on the design and implementation of program analysis tools, the material will be useful to anyone who wishes to improve his or her programming or understand the state of the art.

Students will read classic and current technical papers, lead one in-class discussion, and actively participate in other discussions. The heart of the class is a team research project. Sample projects will be provided, but students are also free to propose their own, particularly ones motivated by their own problems experienced while programming. Examples include proposing and evaluating a fundamental new technique; developing and assessing new algorithms to replace currently-used ones; translating a methodology to a new problem domain; evaluation of proposed techniques (for instance, via a user study); and applying known techniques to new problem domains, such as operating systems, networks, embedded systems, security, biology, aerospace, etc.

Note: In many years CSE 503 is a broad course that covers all aspects of software development. This year's offering is more narrow but deeper, and can be repeated by people who have already taken CSE 503 in the past.

Prerequisites: none. A compiler or programming language course is helpful but not required. Motivated undergraduates are welcome.