Overview

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.

Organization

Note that the modalities described below are subject to change throughout the semester.

Lectures

  • Lectures will generally be held in-person in HG F 3 and will be recorded.
  • Note: On Thu 27th of Feb, the lecture will take place in HG G 3!
  • Recordings can be found here.
  • However, we cannot guarantee that the recordings will capture all content and activity presented in the lecture, therefore we recommend attending the lectures in person.

Exercises

  • Exercise sheets and corresponding solutions will be published here by Wednesday evening. Please solve the exercises before the next topics's exercise block and before looking at the solutions.
  • Exercise sessions start on Thursday in the first week of the semester (22.02). There will be identical sessions in Thursday-Monday blocks in person. The exercise sessions will consist of a discussion of the solutions of the previous problem sheet, a brief recap of the current week's topics, and a pre-discussion of the next problem sheet.
      • Groups 1 + 2 (Mon 14-16): Physical in IFW A 36
      • Groups 3 + 4 (Thur 16-18): Physical in LFW C 5
  • Exercise sessions will not be recorded.

Moodle

  • For any additional questions regarding the lectures or exercises, we have prepared a Moodle forum.

Lectures

Use your NETHZ account to access the slides.

DateContentSlides
Feb 19Introduction PDF
Feb 20Documentation PDF
Feb 26Modularity I PDF
Feb 27Modularity II, Testing I (Change: the lecture will be in HG G 3) PDF PDF
Mar 5Testing II PDF
Mar 6Testing III PDF
Mar 12Analysis Intro I PDF
Mar 13Analysis Intro II PDF
Mar 19Analysis Math I PDF
Mar 20Analysis Math II PDF
Mar 26Project Introduction PDF
Mar 27Intervals I PDF
Apr 2Intervals II
Apr 3Intervals III & Pointers I
Apr 9Pointers II & Determinism I
Apr 10Determinism II & Abstract Interpretation Outlook
Apr 16Rigorous Testing I
Apr 17Project Q&A
Apr 30Rigorous Testing II
May 1No lecture
May 7Guest Lecture: Program analysis and Datalog solvers
May 8Alloy I
May 14Alloy II
May 15Alloy III
May 21SAT and SMT
May 22Guest Lecture: Alloy IV
May 28Summary

Exercises

Use your NETHZ account to access the exercises.

No. Due DateContentExercisesSolutions
1 Feb 27 Documentation and Contracts PDF PDF
2 Mar 6 Modularity and Functional Testing PDF PDF PDF PDF
3 Mar 13 Structural Testing PDF PDF
4 Mar 20 First Steps with Abstract Interpretation PDF PDF
5 Mar 27 Mathematical Concepts of Abstract Interpretation PDF PDF
6 Apr 3 Approximation and Transformers PDF
7 Apr 10 Interval Analysis
8 Apr 17 Pointer Analysis
9 May 5 Verifying Determinism
10 May 8 Symbolic Execution
11 May 15 Alloy I
12 May 22 Alloy II
13 May 29 Alloy III

Project

Details on the course project will be communicated in a dedicated lecture.

Previous exams

Previous exams are available in the exam collection of the student association (VIS).