材料
课程项目
命题项目(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:约束求解算法的经典教材。
其他课程
- 南京大学《软件分析》:提供视频与课件,可辅助理解基于抽象解释的分析技术。Tai-e 框架来自南大团队。
- 国防科技大学《程序分析》:陈立前老师讲授,与上一门课的内容互补。
往年课程材料可从课程主页的历史课件访问。
