Important: Click to sign up for this class in Moodle!
  • Discover, Connect, Innovate

    Learn about techniques you were not aware of. Discover known approaches from a new perspective. Establish meaningful connections between ideas. Get inspired for your research.

  • All About Software Bugs

    Navigate back in time from a failure through an infection to the defect. Learn about program slicing, delta debugging, assertions & invariants, deterministic replay, and even bug repositories.

  • Textbook, Papers, Tools

    Read chapters of a great textbook and relevant research papers, and explore and compare tools. Meet to discuss, analyze, and compare, and generate ideas.

Logistics When, where, what and how

Meetings Thursday, 15:30 - 17:15, room SI-004
Prerequisites PhD student in informatics
Textbook Andreas Zeller, Why Programs Fail, Second Edition
Effort 8 hours per week (1.5 in class, 6.5 reading, thinking, and exploring tools)
Credits 4 ECTS - based on the 112 total working hours
Grade Pass/fail (based on submitted structured notes and active participation in at least 10 of the 14 meetings)
Where do I ask questions?

Please use our Discussions Forum on Moodle.

Team Instructors

We are two professors of the Faculty of Informatics. Besides teaching this course, we spend our days (and sometimes nights) on research in the areas of programming languages, systems, and software engineering.

  • Matthias
    Hauswirth Instructor

    Office SI-207
    Contact Homepage
  • Nate
    Nystrom Instructor

    Office SI-203
    Contact Homepage

Schedule A one-semester, 14-week course

We have one weekly meeting of 90 minutes. We will usually spend 2 weeks per book chapter. In the first week we will read the chapter and do selected exercises (each chapter ends in a set of usually very insightful exercises). This provides a good introduction into a topic. In the second week we will read a relevant related paper and/or explore/compare relevant related tools/techniques (each chapter points to the most relevant research papers and tools). This gives us deeper insights into current research in the corresponding topic. Chapters 1 and 6 might not need further reading and tool exploration, thus we probably will cover them in a single week.

Note that this schedule is subject to change. We will update the contents of this schedule as we progress through the course.

Date Topic Preparation
Thu, Sep. 19 Textbook How Failures Came to Be
(debugging as search in space and time)
Read Chapter 1, solve Exercises 1.2, 1.3, and 1.4 (sample.c).
Submit your notes on Moodle.
Thu, Sep. 26 Textbook Making Programs Fail -- Note: Chapter 3
(testing and design for debuggability)
Read Chapter 3, propose at least one related paper to read or tool to try, solve Exercise 3.4. Submit your notes on Moodle.
Thu, Oct. 3 One or more of:
Thu, Oct. 10 Textbook Tracking Problems
(bug reports and bug repositories)
Read Chapter 2, solve Exercise 2.2 (on Tool Bugzilla). Submit your notes on Moodle.
Thu, Oct. 17 One or more of:
Thu, Oct. 24 Textbook Reproducing Problems
(non-determinism, record/replay, mock objects, crash reproduction)
Read Chapter 4, solve Exercise 4.3. Note: On OS X use "sudo dtruss ls" (dtruss is using dtrace). Submit your notes on Moodle.
Thu, Oct. 31 One or more of:
Thu, Nov. 7 Textbook Simplifying Problems
(delta debugging, ddmin algorithm)
Read Chapter 5. Submit your notes on Moodle.
Thu, Nov. 14 ddmin and related approaches
Thu, Nov. 21 Textbook Isolating Failure Causes
(pinpointig the defect with delta debugging)
Read Chapter 13. Submit your notes on Moodle.
Thu, Nov. 28 Textbook Deducing Errors
(static analysis: program dependence graph, program slicing)
Read Chapter 7. Submit your notes on Moodle.
Thu, Dec. 5 One or more of:
Thu, Dec. 12 Textbook Observing Facts
(dynamic analysis: logging, debugging, event queries, visualization)
Read Chapter 8. Submit your notes on Moodle.
Thu, Dec. 19 Textbook Tracking Origins
(omniscient debugging, dynamic slicing)
Read Chapter 9. Submit your notes on Moodle.

Assignment Policy

Kinds of Assignments

There will be three kinds of assignments: reading book chapters, reading papers, and investigating tools.


In all three kinds of assignments you need to take notes. We would like you to organize your notes according to the following categories:

  • New ideas triggered by reading/exploration (if any)
  • Relationship to your own practical developer experience (if any)
  • Direct connection to your own research (if any)
  • Difficult points that are unclear to you (if any)
  • Possibly controversial aspects (if any)
  • Other notes & comments (if any)

You always have to submit some insightful notes, but you do not need to have notes in all of the above categories.


There will be one assignment each week. We expect that you have to invest about 6.5 hours in each assignment.

Late Policy

In general, no late assignments are accepted. You can skip (or be late with) at most 4 assignments (and their corresponding class meetings) and still get credit.

Where are the assignments?

All assignments are posted on the schedule.