Section 1, Fall 2009
Mon/Wed/Fri, 2:30 pm – 3:45 pm *
room 1325, Computer Science Building
This class is intended to introduce students to current research topics in software engineering.
Students should be familiar with the basics of programming languages and program representation. An undergraduate compiler class should provide the necessary background. A graduate level compiler class or other exposure to the analysis or design of programming languages would also be helpful. A degree of mathematical sophistication and moderate programming experience is expected.
If you are unsure of your qualifications please contact the instructor, who will be happy to help you decide if CS706 is right for you. You are also welcome to just sit in for a few days and see how the class feels.
This course will cover specific research areas following an idealized view of how software is developed, i.e., starting with conceptualizing a system, to designing, building, testing, and maintaining it. Our focus will be on the tangible, technical artifacts of software engineering, such as formal specifications, source code, test suites, bug databases, etc. At each stage we will consider challenges that practitioners face in creating and effectively using these artifacts, and consider how analysis of these artifacts can support and improve modern software engineering practice.
This course is motivated by three dominating trends in modern software development:
Need for different artifacts: The typical software development process produces a variety of different kinds of artifacts. For instance, specifications describe requirements, and state machines and object models capture high-level designs. Solutions are implemented by source code, communicated by byte code, checked with test suites, and tracked with version control systems and bug repositories.
Need for analysis: A large number of software related tasks rely on the analysis of these artifacts. For instance, specifications need to be checked for consistency or completeness. State machines and code need to be analyzed for correctness or security. Legacy code needs to be maintained and updated. History tracking systems need to be mined for trends and future predictions. In short, program design, validation, verification, reuse, and understanding require the analysis of these artifacts.
Need for automatic tools: The size and complexity of the developed software and thus of the artifacts involved is increasing constantly and is already too large to be handled without tool support. Experience in academia and industry has shown that the degree of automation of a tool is an important ingredient to its success. The more a tool minimizes the need for user interaction and expertise, the more likely it is to succeed. This course introduces the work undertaken in academia and industry to address these trends. We will identify a number of different kinds of software artifacts and analysis problems and present corresponding solution algorithms. We will cover both traditional analyses, such as verification and testing, as well as promising new approaches, such as nonstandard type systems and statistical debugging. The course is most suitable for graduate students interested in the theory and practice of software development in general and of software analysis in particular.
This class has no required textbook. Course notes and papers will be distributed by the instructor or posted online as needed.
This 3-credit class should meet 150 minutes per week: two 75-minute lectures for each of 15 weeks. We will meet three times per week at the start of the semester, twice per week during the middle of the semester, and just once per week toward the end. The idea is to load you up with lots of interesting ideas early on, then reduce your in-class commitments as you start spending more time working on your semester projects. See the tentative lecture schedule for more detail.
Students will be graded based on weekly written paper reviews, class participation, presentations, occasional homework problem sets, and a substantial, research-oriented class project. See also the concrete grading breakdown.