This course covers software specification, testing, and verification. Students explore current best practices and technology for developing reliable software at reasonable cost and learn techniques for developing reliable software other than programming, including testing, bug finding, verification, and methodologies for constructing robust code. The first part of the course covers mostly dynamic techniques for analyzing software: techniques that require actually executing the program. The second part of the course covers mostly static techniques for analyzing software: techniques that work directly on the source code without running the program.
The course also features guest lecturers who will present on the interesting systems they have built and on the approaches and techniques they prefer. Assignments focus on applying these techniques to realistic software systems.
- 10-15 hours of reading per week
- Midterm Exam
- Final Exam