程序分析
- 层级
- 本科生
- 状态
- 建设中
提示:本课程仍在持续设计和校准中,页面内容仅供参考,不代表最终教学版本。
教学大纲
课程概览
程序分析课程研究如何自动理解程序行为。课程覆盖控制流、数据流、抽象解释、指针分析、符号执行、约束求解和静态安全检查,并要求学生实现一个能分析真实小程序的工具。
这是软件安全、系统安全和协议验证之间的算法与工具桥梁。
先修要求
- 编译原理或等价的 AST/IR 基础。
- 离散数学和基本算法。
- 熟悉一种可用于实现分析器的语言。
学习目标
- 构造 CFG、调用图和数据流事实。
- 实现经典数据流分析和抽象解释。
- 理解精度、可扩展性和健全性的取舍。
- 使用约束求解或符号执行发现路径问题。
- 设计一个静态安全检查器并评估误报漏报。
教学组织
- 每周 2 次课堂:一次讲授核心概念,一次用于实验、论文讨论或项目评审。
- 课程按 16 周推进,每周都有可检查的作业、实验或项目里程碑。
- 强调可复现材料:代码、配置、数据、实验日志和报告需要能被助教或同学复查。
周计划
第 1 周
第 2 周
程序表示和分析问题实验与评审
构造 AST、IR 和 CFG。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 3 周
第 4 周
数据流分析框架实验与评审
实现活跃变量或到达定义分析。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 5 周
第 6 周
抽象解释和格实验与评审
实现区间或符号集合分析。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 7 周
第 8 周
指针、别名和堆抽象实验与评审
比较上下文敏感与不敏感分析。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 9 周
第 10 周
过程间分析和调用图实验与评审
扩展分析器处理函数调用。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 11 周
第 12 周
符号执行和约束求解实验与评审
生成触发特定路径的输入。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 13 周
第 14 周
安全检查和告警排序实验与评审
实现一个 taint 或 API misuse 检查。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
第 15 周
第 16 周
分析工具评估实验与评审
提交 benchmark、误报分析和改进计划。完成配套实验、记录问题,并在课堂评审中解释设计取舍。
考核方式
个人作业
25%概念题、阅读题、设计题和小型编程或实验任务。
实验与项目
40%分析器实现、benchmark、告警评估和报告。
课堂参与与评审
10%参与讨论、演示、代码或论文评审,以及同伴反馈。
期末报告与答辩
25%提交可复现材料、技术报告和演示,说明方法、结果、限制与后续工作。
课程项目
项目要求实现一个面向真实代码片段的静态分析器或符号执行工具,给出算法说明、benchmark、误报漏报分析和使用文档。
课程政策
- 允许使用 AI 工具,但所有生成代码、实验记录和设计建议必须经过学生本人审查,并在报告中说明使用方式。
- 严禁提交不能解释的代码、证明、配置或实验结果;答辩时每名成员都需要解释自己负责部分的设计、测试和取舍。
- 迟交会影响迭代评分,但课程更看重可复现、可审计和可维护的结果,而不是临时堆砌。
参考课程
国际名校
- CMU17-355/17-665: Program Analysis
- CornellCS 6120: Advanced Compilers
- ETH ZurichProgram Analysis for System Security and Reliability
- Georgia TechCS 6340: Software Analysis and Test
- MIT6.820 Fundamentals of Program Analysis
- PrincetonCOS 516: Automated Reasoning about Software
- StanfordCS 243: Program Analysis and Optimizations
- UC BerkeleyCS 294-260: Program Analysis and Optimization
- University of WashingtonCSE 503: Software Engineering
中国 985 高校
- 上海交通大学CS 2612: Programming Languages and Compilers
- 中国科学技术大学程序语言设计与程序分析
- 北京大学软件分析技术
- 南京大学软件分析(Software Analysis)
- 复旦大学智能化软件工程与系统
- 清华大学程序分析