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 E 5 and will be recorded.
  • 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 18Introduction PDF
Feb 19Documentation PDF
Feb 25Modularity I PDF
Feb 26Modularity II, Testing I PDF PDF
Mar 4Testing II PDF
Mar 5Testing III PDF
Mar 11Analysis Intro I PDF
Mar 12Analysis Intro II PDF
Mar 18Analysis Math I PDF
Mar 19Analysis Math II PDF
Mar 25Project Introduction PDF
Mar 26Intervals I PDF
Apr 1Intervals II PDF
Apr 2Intervals III & Pointers I PDF PDF
Apr 15Pointers II & Determinism I PDF PDF
Apr 16Determinism II & Abstract Interpretation Outlook PDF PDF
Apr 22Rigorous Testing I PDF PDF
Apr 23Guest Lecture: Program analysis and Datalog solvers PDF
Apr 29Rigorous Testing II PDF
Apr 30Project Q&A PDF
May 6Alloy I PDF
May 7Alloy II PDF
May 13Alloy III PDF
May 20SAT and SMT PDF
May 21Software Testing, Security, Safety in the LLM era PDF

Exercises

Use your NETHZ account to access the exercises.

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

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).