Calendar
Week 1
- Jan 18
 - Introduction
 - Reading: none, but you should come to class (even if you’re on the waitlist).
In-class: background survey and start HW0
 
Week 2
- Jan 24
 - Homework 0 due
 - Jan 25
 - Testing Basics
 - Reading: Shore’s The Art of Agile Development: Test-Driven Development and SQLite’s How SQLite is Tested
In-class: start HW1
 
Week 3
- Jan 31
 - Homework 1 due
 - Feb 1
 - Coverage
 - Reading: Ivankovic et al.’s Code Coverage at Google and Chen et al.’s Revisiting the Relationship Between Fault Detection, Test Adequacy Criteria, and Test Set Size
In-class: start HW2
 
Week 4
- Feb 7
 - Homework 2 due
 - Feb 8
 - Fuzzing
 - Reading: Zeller’s Fuzzing: Breaking Things With Random Inputs
In-class: start HW3
Lecture recording: video (.mp4), transcript (.vtt)
 
Week 5
- Feb 14
 - Homework 3 due
 - Feb 15
 - More Test Input Generation
 - Reading: Fraser and Arcuri’s EvoSuite: Automatic Test Suite Generation for Object-Oriented Software
In-class: start HW4
Lecture recording: video (.mp4), transcript (.vtt)
 
Week 6
- Feb 21
 - Homework 4 due
 - Feb 22
 - Oracles and Invariants
 - Reading: Ernst et al.’s The Daikon system for dynamic detection of likely invariants and Yang et al.’s Finding and Understanding Bugs in C Compilers
In-class: start HW5
Lecture recording: video (.mp4), transcript (.vtt)
 
Week 7
- Feb 28
 - Homework 5 due
 - Feb 29
 - Mutation Testing
 - Reading: Petrović et al.’s Practical Mutation Testing at Scale:A view from Google
In-class: start HW6
Lecture recording: video (.mp4), transcript (.vtt)
 
Week 8
- Mar 7
 - Other Dynamic Analyses
 - Reading: Musuvathi et al.’s Finding and Reproducing Heisenbugs in Concurrent Programs
In-class: continue working on HW6
Lecture recording: video (.mp4), transcript (.vtt)
 
Week 9
- Mar 13
 - Homework 6 due
 - Mar 14
 - No class (spring break)
 
Week 10
- Mar 21
 - Intro to Static Analysis
 - Reading: none (study for the midterm)
In-class: midterm
 
Week 11
- Mar 28
 - Dataflow Analysis
 - Reading: Ayewah et al.’s Experiences Using Static Analysis to Find Bugs
Lecture recording: webex
In-class: start HW7
 
Week 12
- Apr 3
 - Homework 7 due
 - Apr 4
 - Abstract Interpretation (1)
 - Reading: sections 2.0 to 2.14 of Ernst’s Notes on Program Analysis
 
In-class: start HW8
Week 13
- Apr 10
 - Homework 8 due
 - Apr 11
 - Abstract Interpretation (2)
 - Reading: sections 2.15 to 2.20 of Ernst’s Notes on Program Analysis and sections 1.0 to 2.2 of Jones and Nielson’s Abstract Interpretation: a semantics-based tool for program analysis, then skim the remainder of chapter 2 of the same
In-class: start HW9
 
Week 14
- Apr 17
 - Homework 9 due
 - Apr 18
 - Using SMT solvers
 - Reading: Bjørner et al.’s Programming Z3 (article begins on page 165 of the PDF; not as long as it looks!). Optional additional reading (may be useful for studying for the final) on some of the topics covered in class: Chapter 12 of Aldrich, Le Goues, and Padhye (chapter 12 starts on page 77 of the PDF).
 
In-class: start HW10
Week 15
- Apr 24
 - Homework 10 due
 - Apr 25
 - Class’ Choice: DevOps and Wrapup
 - Reading: Sloss’ “Introduction”, Baye’s “Emergency Response”, and Lunney and Lueder’s “Postmortem Culture: Learning from Failure” from Google’s Site Reliability Engineering
 
In-class: fill out the course evaluation
Week 16
- Exam Slot (May 9, 6PM, CKB 313)
 - final exam (cumulative, about half from before the midterm and half after)