Fall 2026
You have reached the homepage of the 02242 Program Analysis course at DTU. The goal of this course is to learn to derive information from computer programs, using different techniques.
This is the Fall 2026 edition. Course materials for previous years are available here: 2025 and 2024.
First let's quickly go over some practical information:
The primary goal of this course is to introduce you to the fundamentals of program analysis. Guided by my Teaching Philosophy, I prioritize practical, hands-on work and collaborative learning. Consequently, the course structure and lecture format depart from traditional academic models to better support these objectives.
This course is still in its early stages. Your feedback is incredibly helpful in shaping the course for future students. Please feel free to send suggestions to chrg@dtu.dk or submit them anonymously via this Google Form.
Personally, I have always thought we teach material backwards: First, we give students all the information in a lecture, and then afterward we ask them to solve exercises. This is problematic, as students do not know what to do with the information, and when they figure out what they need to do, they have no way of getting the necessary details.
So my teaching philosophy is a best summarized by the phrase:
You only learn from your mistakes.
Essentially, no matter what you, the student, are presented with, it will not be absorbed, unless it is needed by you to fill gaps in your understanding. And you only realize that there are gaps, if you fail at doing a task. My teaching style is therefore practical and hands-on.
We know this form of teaching is taxing and can feel frustrating. So, please reach out if you need help, because it is the only way to learn.
During the course, you will spend most of your time implementing different program analyses. Therefore, it is expected (and required) that you have a good level of programming experience. DTU sets the expected workload of one ETCS point to 28 hours. Since this is a 7.5 ETCS point course over 13 weeks + 1 week exam, you should expect to spend 14 hours on this course a week, only 4 of which are in class.
Participation in the class is not mandatory. However, it is the primary way we convey the class material, and it will be very hard to pass the course without engaging with the material. In return, I will teach you program analysis by presenting you with challenges to overcome, making the lectures relevant, helping you learn when you fail, and supporting you, so you do not give up.
To solve the challenges, we are going to have two kinds of groups:
The Feedback Group is a group of ~4 random students. The goal of this groups is to have a place to hear about alternative solutions to your current problems. In the start of every class, you'll sit at these groups, as well as answer the Questions & Feedback Groups (§3.2) together.
The Project Group is a group of 3 - 5 students. The goal of this group is do the final project and defend it together orally. The groups are due when handing in the proposal, and the groups cannot overlap with your feedback groups.
The goal of the course is simply to do as well as possible on a benchmark suite called JPAMB. In short, the benchmark suite is a collection of java programs, for which you will build multiple analyses. Your goal is to build an analysis that is as good as possible.
The rules are available in the README of the project.
Each project group will be assinged a permanent TA which will help them with their project.
When you have a group please sign up at
To foster an atmosphere of collaboration and give you a change to get peer-feedback on your ideas, we start every lecture with 30 minutes of feedback revolving around the questions given in class. Every lecture (except the first) is structure like so:
13:00 Peer-feedback. In the beginning of the lecture you should sit with you feedback groups. Together with them you'll discuss your progress over the last week: what was easy and what was hard, as well as the questions from the previous lecture.
13:20 Communal Feedback. We'll then summarize the feedback in class, hopefully resolving the biggest questions from the last week.
13:30 Lecture. Then we'll have an interactive lecture about the problem of the day. Here we can cover any problems and questions that have come up during the Getting started
section.
15:00 Lab-work, with TA's.
At the end of every lecture, I will pose 2-3 questions about program analysis, which you should be able to answer. These questions might also be asked during the oral exam.
We'll go over the questions in the peer-feedback groups, in the next lecture.
The lectures are on Mondays from 13:00 to 17:00. This is a tentative list of topics and might change. The (*) indicates topics that have not yet been updated for this year. On the right are the due dates of the exercises; they are due the day before each lecture.
| No | Date | Topic | Due |
|---|---|---|---|
| 01 | 08-31 | Introduction | |
| 02 | 09-07 | Syntactic Analysis (*) | |
| 03 | 09-14 | Semantics (*) | Syntatic Analysis |
| 04 | 09-21 | Dynamic Analysis (*) | |
| 05 | 09-28 | Bounded Static Analysis (*) | Dynamic Analysis |
| 06 | 10-04 | Unbounded Static Analysis (*) | |
| — | 10-12 | Autumn holiday | Static Analysis |
| 08 | 10-19 | Lab-day | Proposal (+1 day) |
| 07 | 10-26 | Concolic Execution (*) | |
| 09 | 11-02 | Context Sensitive Analysis (*) | |
| 10 | 11-09 | Lab-day | |
| 11 | 11-16 | How to Write a Good Paper (*) | |
| 12 | 11-23 | Lab-day | |
| 13 | 11-31 | Q/A & How to-do a good presentation | Paper |
| — | 12-07 | Video & Contribution Table | |
| — | 12-09 | Exam? | |
| — | 12-10 | Exam? | |
| — | 12-11 | Exam? |
This course will be evaluated as a joint evaluation of your final paper and the performance on the final oral exam.
During this course, there are three mandatory assignments, which must be passed before you can go to the final exam.
Syntatic Analysis — The score of your syntatic analysis.
Dynamic Analysis — The score and a trace of your dynamic analysis on all benchmarks.
Static Analysis — The score and a trace of your static analysis on all benchmarks.
The assingments are semi-individual, which means that you can work on the analyses in groups, but you have to evaluate and submit a unique evaluation. If you work in a group, the group name must be clearly stated.
The exact rules are stated in the description of the assignments on Autolab (to be done).
During the course we will be doing a project together with your project group.
See 🗒 The Project for details!
After the exams, we will collect the papers on a voluntary basis in proceedings, which is shared among the participating students and with students in future years. Furthermore, every semester, we will award the best paper, which will be indicated in the proceedings.
You can find the proceedings from the last years on Learn.