课程项目

命题项目(20 分)

实现一个 Java 程序分析工具。Lab-1(A1–A5)包含数据流分析与指针分析,Lab-2(B1–B3)包含符号执行。

实验手册与代码模板 提供环境配置、构建与测试、提交格式和计分说明。

软分课程项目一(简要)介绍

Lab 截止日期

Lab 任务 截止日期
A1 过程内符号分析 2026/10/25
A2 过程间符号分析 2026/11/01
A3 上下文非敏感指针分析 2026/11/08
A4 上下文敏感指针分析 2026/11/15
A5 符号分析与指针分析的组合 2026/11/22
B1 单过程符号执行 2026/11/29
B2 函数调用与递归 2026/12/06
B3(选做) 数组符号执行 2026/12/20

自选项目(20 分)

利用所学知识完成具有一定实用价值的程序分析工具,助教根据代码和文档质量评分。可选择参加项目现场汇报,限 20 人报名;根据汇报质量给予附加分,最高 5 分。

按目前的教学计划,10 月 13 日介绍课程项目,12 月 22 日、12 月 24 日安排课程项目报告。

参考书与讲义

  • 《编译原理》,Aho 等:适合作为基础参考,涉及本课程的内容较少。
  • Lecture Notes on Static Analysis,Moller、Schwartzbach:易懂且持续更新,主要覆盖基于抽象解释的分析。
  • Program Analysis,Aldrich、Le Goues、Padhye:覆盖范围与本课程接近,可配合课程学习。
  • 《Introduction to Static Analysis》,Rival、Yi:更系统地介绍抽象解释,推荐给希望深入学习的同学。
  • Program Analysis: An Appetizer,Nielson 等;同一批作者另著有《Principles of Program Analysis》,后者不建议作为初学入门材料。
  • 《Principles of Abstract Interpretation》,Cousot:全面介绍抽象解释,数学要求较高,不建议作为初学入门材料。
  • 《Decision Procedures: An Algorithmic Point of View》,Daniel Kroening、Ofer Strichman:约束求解算法的经典教材。

其他课程

往年课程材料可从课程主页的历史课件访问。