20409 CS 4501: Program Analysis for Robust Software, Spring 2018

Lecture Details

Instructor: Baishakhi Ray (Rice 505)
Class Schedule : Tuesday and Thursday 9:30 AM - 10:45 AM at Olsson Hall 011
Office Hours: Tuesday 11 am - 12 pm or by appointment
Teaching Assistant: Chong Tang (ctang at virginia dot edu)
TA Office Hours: Thursday 11 am - 12 pm at Rice 019


Writing robust, bug-free software is hard, if not impossible. Incorrect code leads to software bugs that often cost companies billions of dollars every year. In this course, we will learn how to ensure program correctness, using a diverse set of static and dynamic program analysis techniques. Some of the specific analysis techniques to be studied are program parsing, control and data dependency analysis, symbolic evaluation, constraints, invariants, program slicing, and code change analysis. As applications to these techniques, we will learn how to automatically detect bugs, and debug and fix the buggy programs.


You should be generally comfortable to deal with a complex large source code (> 1000 lines of code). The class would be especially relevant to the students who have already taken Programming Language class (CS 4610/4501, CS 6610).

Date Topic Lecture Slides/Reading
01.17.2018 Introduction intro.pptx
01.23.2018 Parsing
(Parse Tree, AST)
01.23.2018 Home Work 1 (due on 4th February) hw1.pdf
01.26.2018 Control Flow Analsis control_flow.pptx
02.01.2018 Data Flow Analysis data_flow.pptx
02.13.2018 Program Slicing slicing.pptx
Additional Reading: Static-Slicing.pdf, Dynamic-Slicing.pdf
02.13.2018 Home Work 2 (due on 25th February) hw2
02.15.2018 Symbolic Execution symbolic_execution.pptx, KLEE
02.13.2018 Home Work 3 (due on 23rd March) hw3
03.13.2018 Introduction to Testing testing.pptx
03.15.2018 Fuzzing Fuzzing.pptx
Presentation Topics
03.(20/22).2018 Performance Bugs 1. Understanding and Detecting Real-World Performance Bugs
    presenter: Downing, Jared
2. Characterizing and Detecting Performance Bugs for Smartphone Applications
    presenter: Maimon, Laura
3. Toddler: Detecting Performance Problems via Similar Memory-Access Patterns
    presenter: Roy, Joshua
03.27.2018 Discussions on midterm  
03.29.2018 Midterm
04.03.2018 No Class  
04.(05/10).2018 Concurrency Bug  

  • Programming Assignments – 50%
  • Midterm - 20%
  • Final - 20%s
  • Class Participation – 10%


Slack: http://sp18-cs4501.slack.com will be used for class communications. You can also form team with your classmates and create channels to communicate with them.


The learning from this class might be used for research purposes. For example, we might develop new technique to find new kind of security bugs. Inerestested students who are willing to pursue undergraduate research should make an appointment to talk about it. I am happy to discuss independent study projects, capstone projects, and graduate school.