Fall 2025
You have reached the homepage of the 02242 Program Analysis course at DTU. The goal of this course is to learn you to derive information from computer programs, using different techniques.
This is the Fall 2025 edition, you can find the course material for 2024.
First let's quickly go over some practical information:
We are Christian (mail), the teacher, and Oskar, Peter, and Emil, who are the TA's.
We meet 13-17 on Mondays in 358-060A
The course description is available here.
If you need help outside of class, you can ask a question on Teams or send Christian an email.
All feedback is appreciated, either by mail or via the anonymous feedback system.
As mentioned the goal of the course is to introduce you to program analysis. Because of my Teaching Philosophy, I like to focus on practical work and collaboration. The course and the lectures are therefore structured differently from what you might be used to.
This course is still in its infancy, feedback is therefore crucial to make it better for generations to come. You are welcome to send suggestions to chrg@dtu.dk
or anonymously on 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 the student does 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 information.
So my teaching philosophy is a best summarized by the phrase:
You only learn from your mistakes.
Essentially, no matter what you, the student, is presented with, it will not be absorbed, unless it is needed by you to fill gabs in your understanding. And you only realize that there are gabs, 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. It is therefore 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, one should expect to use 14 hours on this course a week, only 4 of which are in class.
Participation in the class or doing the assignments are not mandatory. However, they are the primary way we convey the material of the class. 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, make the lectures relevant, help you to learn when you fail, and support you, so you do not give up.
Because of my Teaching Philosophy (§2.2), I will make sure you have the activity before the lectures. The goal of the course is very simply to do as well as possible on a benchmark suite called JPAMB. In short, the benchmark suite is a collection of java programs, which you will build multiple analyses for. You will try to build an analysis which is as good as possible.
In the end of the course you will be evaluated on how well you did at this task.
The rules are available in the README of the project.
You can upload the results of running the evaluation to Autolab, use the access code 7FNKZO
.
At every lecture, I will ask 2-4 questions which can guide you to investigate different different aspects of program analysis.
To solve the challenges, we are going to have two kinds of groups:
The Feedback Group is a group of ~8 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 (§2.5) together.
The Project Group is a group of 4 - 6 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.
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:
In the beginning of class we sit in our feedback groups.
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.
The lectures are on Mondays at 13:00 to 17:00. This is a tentative list of topics and might change. As I update the lecture notes, the links to the old lecture notes will disappear.
No | Date | Topic |
---|---|---|
01 | 09-01 | Introduction |
02 | 09-08 | Syntactic Analysis |
03 | 09-15 | Semantics |
04 | 09-22 | Dynamic Analysis |
05 | 09-29 | Lab-day |
06 | 10-06 | Bounded Static Analysis |
— | 10-13 | Autumn holiday |
08 | 10-20 | Lab-day & Proposal Due |
07 | 10-27 | Unbounded Static Analysis |
09 | 11-03 | Concolic Execution (OLD) |
10 | 11-10 | Context Sensitive Analysis (OLD) |
11 | 11-17 | How to write a good paper (OLD) |
12 | 11-24 | Lab-day |
13 | 12-01 | Q/A & How to-do a good presentation & Paper Due |
— | 12-10 | Exam |
— | 12-11 | Exam |
— | 12-12 | Exam |
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 a proceedings, which is shared among the participating students and with the students of the classes years to come. Furthermore, every semester, we will assign a paper the best paper award, which will be indicated in the proceedings.
You can find the proceedings from last year on Learn.