Program Analysis (Winter Semester 2021/22)

Quick Facts

Lecturer Prof. Dr. Michael Pradel
Teaching assistants Aryaz Eghbali, Daniel Lehmann, Islem Bouzenia, Luca Di Grazia, Matteo Paltenghi, Moiz Rauf
Course type Lecture + Exercises
Language English
Ilias Ilias course with forum and quizzes
Place Mondays: Universitätsstr. 38, room 38.03
Tuesdays: Universitätsstr. 38, room 38.02

Content

This course introduces the principles and practice of automatically analyzing large software systems. The course provides an overview of program analysis and then covers three topics in more detail: Static analysis, which analyzes the source code of a program, dynamic analysis, which reasons about the runtime behavior of a program, and test generation, which creates inputs to run programs. In addition to lectures, students will deepen their understanding through a practical course project (implement a program analysis based on an existing framework) and homework assignments. Besides academic achievements, the course will help students to improve their programming skills by learning about common sources of mistakes and about techniques to find them.

Organization

The course will be classroom-first, i.e., to the extent possible, all activities will be in a physical classroom or based on physical meetings. Slides and other material will be made available during the semester, usually soon after the corresponding lecture. For students who cannot physically attend the course, e.g., due to travel restrictions: Lecture videos from last year are available in this playlist. Note that the content covered in this semester will be similar, but not exactly the same.

Schedule

This is a preliminary schedule and may be subject to change. "L" stands for lecture, "P" stands for project, and "E" stands for exercise. Events printed in bold are deadlines (strict).

Date Topic Material
Oct 18, 2021, 3:45pm L: Introduction Slides and notes
Oct 19, 2021, 9:45am L: Operational Semantics (1/2) Slides and notes
Fernandez' book
Pitts' lecture notes
Oct 26, 2021, 9:45am L: Operational Semantics (2/2)
Oct 27, 2021, 11:59pm E: Exercise 1 published
Nov 2, 2021, 9:45am L: Data Flow Analysis (1/3)
Nov 3, 2021, 11:59pm E: Exercise 1 due
Nov 8, 2021, 3:45pm E: Discussion of Exercise 1
Nov 9, 2021, 9:45am L: Data Flow Analysis (2/3)
Nov 22, 2021, 3:45pm L: Data Flow Analysis (3/3)
Nov 23, 2021, 9:45am L: Call Graphs
Nov 24, 2021, 11:59pm E: Exercise 2 published
Nov 29, 2021, 3:45pm L: Dynamic Analysis Frameworks
Nov 30, 2021, 9:45am P: Introduction of Course Project
Dec 1, 2021, 11:59pm E: Exercise 2 due
Dec 6, 2021, 3:45pm E: Discussion of Exercise 2
Dec 7, 2021, 9:45am L: Random and Fuzz Testing
Week of Dec 13 to 17 (scheduled individually) P: Progress meeting 1
Dec 13, 2021, 3:45pm L: Symbolic Execution (1/2)
Dec 14, 2021, 9:45am L: Symbolic Execution (2/2)
Dec 15, 2021, 11:59pm E: Exercise 3 published
Dec 20, 2021, 3:45pm L: Information Flow Analysis
Dec 21, 2021, 9:45am L: Slicing
Dec 22, 2021, 11:59pm E: Exercise 3 due
Week of Jan 10 to 15 (scheduled individually) P: Progress meeting 2
Jan 10, 2022, 3:45pm E: Discussion of Exercise 3
Jan 11, 2022, 9:45am L: Path Profiling
Jan 12, 2022, 11:59pm E: Exercise 4 published
Jan 19, 2022, 11:59pm E: Exercise 4 due
Week of Jan 24 to 28 (scheduled individually) P: Progress meeting 3
Jan 24, 2022, 3:45pm E: Discussion of Exercise 4
Jan 25, 2022, 9:45am L: Analyzing Concurrent Programs
Feb 11, 2022, 11:59pm P: Project due
Week of Feb 14 to 18 (scheduled individually) P: Final presentations

Course Project

The course project is about implementing a program analysis for a real-world language. More details will be published during the semester.