This course provides an overview of techniques to build correct software, with a strong focus on testing and program analysis. In particular, we will cover topics including:
- Code documentation
- Modularity and coupling (Design patterns)
- Dynamic program analysis (Testing, fuzzing, concolic execution)
- Static program analysis (Numerical abstract interpretation, pointer analysis, symbolic execution)
- Formal modeling (Alloy)
Students apply the learned techniques to solve a group project in the area of program analysis.
Note that the modalities described below are subject to change throughout the semester.
- Exercise sheets will be published here by Thursday evening. Please solve the exercises before next week's exercise session and before looking at the solutions.
- Exercise sessions start in the second week of the semester. There will be both online and physical exercise sessions, as listed below (students can freely chose which session to attend). We will discuss the solutions of the previous week's exercise sheet.
- Exercise sessions will not be recorded.
- For any additional questions regarding the lectures or exercises, we have prepared a Moodle forum.
★ To join the Zoom meetings, you must be logged in with a *.ethz.ch account, which you can create here.
Use your NETHZ account to access the slides.
Use your NETHZ account to access the exercises.
Details on the course project will be communicated in a dedicated lecture.
Previous exams are available in the exam collection of the student association (VIS).