17-754 (Analysis of Software Artifacts)
(This PhD course is cross-listed with the MSE course, 17-654.)
Analysis is the systematic examination of an artifact to determine its properties. This course will focus on analysis of software artifacts--primarily code, but also including analysis of designs, architectures, and test suites. We will focus on functional properties, but also cover non-functional properties like performance and security. In order to illustrate core analysis concepts in some depth, the course will center on static program analysis; however, the course will also include a breadth of techniques such as testing, model checking, theorem proving, dynamic analysis, and type systems.
Concern for realistic and economical application of analysis will also be evident in a bias towards analyses that are scalable and incremental. The course emphasizes the fundamental similarities between analyses (in their mechanism and power) to teach the students the limitations and scope of the analyses, rather than the distinctions that arose historically (static vs. dynamic, code vs. spec). The course will balance theoretical discussions with lab exercises in which students will apply the ideas they are learning to real artifacts.
After completing this course, students will:
* know what kinds of analyses are available and how to use them
* understand their scope and power, when they can be applied and what conclusions can be drawn from their results
* have a grasp of fundamental notions sufficient to evaluate new kinds of analysis when they are developed
* have some experience selecting and writing analyses for a real piece of software, applying them and interpreting the results
In addition, Ph.D. students taking the 17-754 version of the course will gain a broad overview of the analysis research literature and in-depth knowledge of a particular sub-area through a course project.