55AA-010

Program Analysis

Level
Undergraduate
Status
Under development

Note: this course is still being designed and calibrated; the page content is for reference and does not represent the final teaching version.

Syllabus

Course Overview

Program Analysis studies how to automatically reason about program behavior. The course covers control flow, data flow, abstract interpretation, pointer analysis, symbolic execution, constraint solving, and static security checks, requiring students to implement a tool that analyzes real small programs.

This is the algorithmic and tooling bridge among software security, system security, and protocol verification.

Prerequisites

  • Compilers or equivalent AST/IR background.
  • Discrete mathematics and basic algorithms.
  • Familiarity with a language suitable for implementing analyzers.

Learning Outcomes

  • Construct CFGs, call graphs, and data-flow facts.
  • Implement classic data-flow analyses and abstract interpretation.
  • Understand tradeoffs among precision, scalability, and soundness.
  • Use constraint solving or symbolic execution to find path problems.
  • Design a static security checker and evaluate false positives and false negatives.

Course Format

  • Two meetings per week: one for core concepts and one for labs, paper discussion, or project review.
  • The course proceeds over 16 weeks, each with a checkable assignment, lab, or project milestone.
  • Reproducibility is required: code, configuration, data, lab logs, and reports must be reviewable by staff or peers.

Weekly Plan

Week 2

Program representations and analysis problems: lab and review

Construct ASTs, IR, and CFGs. Complete the paired lab, record issues, and explain design tradeoffs in class review.

Week 4

Data-flow analysis framework: lab and review

Implement liveness or reaching-definitions analysis. Complete the paired lab, record issues, and explain design tradeoffs in class review.

Week 6

Abstract interpretation and lattices: lab and review

Implement interval or symbolic-set analysis. Complete the paired lab, record issues, and explain design tradeoffs in class review.

Week 8

Pointers, aliasing, and heap abstraction: lab and review

Compare context-sensitive and insensitive analyses. Complete the paired lab, record issues, and explain design tradeoffs in class review.

Week 10

Interprocedural analysis and call graphs: lab and review

Extend the analyzer to handle function calls. Complete the paired lab, record issues, and explain design tradeoffs in class review.

Week 12

Symbolic execution and constraint solving: lab and review

Generate inputs that trigger selected paths. Complete the paired lab, record issues, and explain design tradeoffs in class review.

Week 14

Security checks and alert ranking: lab and review

Implement a taint or API-misuse checker. Complete the paired lab, record issues, and explain design tradeoffs in class review.

Week 15

Analyzer evaluation

Submit benchmarks, false-positive analysis, and improvement plan.

Week 16

Analyzer evaluation: lab and review

Submit benchmarks, false-positive analysis, and improvement plan. Complete the paired lab, record issues, and explain design tradeoffs in class review.

Assessment

Individual assignments

Concept questions, reading responses, design tasks, and small programming or lab exercises.

25%
Labs and project

Analyzer implementation, benchmarks, alert evaluation, and report.

40%
Participation and review

Participation in discussions, demos, code or paper reviews, and peer feedback.

10%
Final report and defense

Submit reproducible artifacts, a technical report, and a demo explaining methods, results, limitations, and future work.

25%

Course Project

Students implement a static analyzer or symbolic-execution tool for real code snippets, with algorithm notes, benchmarks, false-positive and false-negative analysis, and usage docs.

Policies

  • AI tools are allowed, but generated code, lab notes, and design suggestions must be reviewed by the student and disclosed in the report.
  • Students may not submit code, proofs, configuration, or experimental results they cannot explain; each member must defend their own design, tests, and tradeoffs.
  • Late work affects iteration grades, but the course values reproducible, auditable, and maintainable results over last-minute accumulation.

Reference Courses