Program Analysis

Static analyses are tools that extract information of computer programs without executing them. Static analyses have a wide range of applications in integrated development environments (IDEs), compilers, and continuous integration (CI) servers. For example, static analyses in IDEs are used to detect bugs and security vulnerabilities, whereas in compilers they are used for type checking and optimizations.

This course gives an overview of the fundamental concepts of static analyses. In particular, we will discuss the trade-off between performance, precision, and correctness of static analyses. Furthermore, you will learn about different types of analyses, such as control-flow, data-flow, points-to, purity, and immutability analyses. Lastly, the course presents several analyses frameworks, such as the monotone framework, big-step abstract interpreters, and IFDS/IDE.

The accompanying exercises practice new analysis concepts by applying them to example programs and extending and designing new static analyses.


Although this course as self-contained, we assume good familiarity with the concepts of programming languages, such as assignments, loops, exception handling, objects, and anonymous functions.

Furthermore, the students should be familiar with basic university-level math and logic.

Course Information



Course Type

V4 / 6CPs

Lecture Format

Hybrid: In-person lectures with recordings available on Moodle, exercise sessions in-person


Mondays, 10:45-12:15, in S101/A03; recordings available on Moodle later the same week


Mondays, 12:30-13:30, in S101/A03; exercise session starts right after the end of the lecture, which may be before 12:15


Please sign up in TuCan


The lectures, exercises and all material (slides, exercise sheets, etc.) will be in English.

Lecture Materials

In the Moodle course