Advanced Topics in Software Systems

CSE P 504 · Fall 2026

Wednesdays, 6:30–9:20 PM · CSE2 G10

Instructor:
René Just · rjust@cs.washington.edu · OH: after class and by appointment (in person or video)

Teaching Assistants:
Ben Kushigian · benku@cs.washington.edu · OH: by appointment (in person or video)
Larrianna Warner · lmswar@cs.washington.edu · OH: by appointment (in person or video)

Assignment submissions: Canvas

Please bring a laptop: the in-class activities will require use of a computer.

Schedule

Date Topic Materials Readings Assignments
09/30 Introduction Slides (4 pages)
10/07 Best practices and version control Slides (4 pages) Reading 1 Git bisect (due 10/11)
10/14 Coverage-based testing Slides (4 pages) Reading 1
Reading 2
Reading 3
Coverage (due 10/18)
10/21 Mutation-based testing Slides (4 pages)
Coverage vs. Mutation
Reading 1
Reading 2 (sec. 1-4)
Reading 3
Reading 4
10/28 Delta debugging Slides (4 pages) Reading 1 (sec. 1-3)
Alternative link
11/04 Invariants and partial oracles Slides (4 pages) Reading 1
Reading 2 (sec. 1-4, 6-7, and 11)
11/11 No class (holiday) Revisit slides 26-43 (4 pages) Reading 1 (ch. 2)
11/18 Abstract interpretation Reading 1 (sec. 1-2.2)
11/25 Abstract interpretation
12/02 Solver-aided reasoning
12/09 Wrap up and Q&A
12/16 Final exam

Course description

This course teaches on the principles of dynamic and static program analysis, emphasizing state-of-the-art approaches to effective software testing, debugging, and verification. Lectures and discussions contribute to theoretical understanding. In-class activities and written homeworks provide a hands-on experience.

The goal of the class is for you to come away with a new perspective on testing, debugging, and verification. You already know how to perform these tasks, and you probably do so as part of your job. This class will introduce you to new ideas, methodologies, and tools from the state of the art, including from research. Seeing new ways of working and different viewpoints will enable you to take advantage of these ideas, or to adapt them to your own work environment, or to understand that their limitations make them impractical for you to use.

Many of the techniques you will use are in active production use at forward-looking companies. Others have not yet hit the mainstream, and we will discuss why.

Course format

The class meets once a week in person. Fully remote attendance is not permitted. Student interaction during lecture is expected.

Before each class meeting, do the assigned reading and do the setup for that week’s assignment. This will make the class more productive.

Each class meeting consists of two parts. The first part is lecture and discussion; the second part is an in-class exercise. You can view the second part of the class meeting as a chance to start on the week’s assignment, while the course staff are available to answer questions.

Grading

There are individual homeworks, group-based in-class exercises, and a final exam. Grades will be based on these components and participation:

  • 40%: Homeworks and in-class exercises
  • 40%: Final exam
  • 20%: Participation

Late policy

Assignments are generally due on Sunday night, because previous students have wanted to work over the weekend.

Assignments must be submitted on Canvas by the due date and time. Unless otherwise noted, all times are given in Pacific Time. The submission site remains open for 48 hours after the deadline. Assignments submitted within 24 hours after the deadline will incur a 10% penalty; assignments submitted within 24 to 48 hours will incur a 20% penalty. Assignments will not be accepted more than 48 hours after the deadline, except in extraordinary circumstances (in which case, discuss your situation with the instructor prior to the deadline).

General course policies

You can find the general course policies here. Note that CSE P 504 permits groupwork by pairs of students for in-class exercises.

Requirements and background

Students should be proficient developers, but do not need to know any particular programming language. Some activities and homeworks provide code for you to manipulate or extend. That code is often in Java. (Java is a widely-used memory-managed language, which made it an attractive target for research; and since much previous research used Java, subsequent research used Java as well to build upon it and to enable direct comparison.)