软件分析技术(Software Analysis)
课程信息
学分: | 3 |
周学时: | 3 |
总学时: | 54 |
上课时间: | 每周周二 5-6节 双周周三5-6节 |
上课地点: | 二教 402 |
任课教师: | 熊英飞 xiongyf@pku.edu.cn |
授课对象: | 本科生 |
课程助教: | 吴宜谦 wuyiqian@pku.edu.cn |
课程通知
作业提交方式:通过邮件发送到wuyiqian@pku.edu.cn,邮件标题为 "软分作业[k]-[姓名]-[学号]"。
如无特别声明,作业的截止日期为下一周上课之前。
课程简介
对软件代码进行分析是各种软件工程工具的基本手段之一。典型软件开发工具比如编译器、代码编辑器、测试与调试工具等等都离不开对软件代码进行分析。在工业界,各大公司的基础平台部门对掌握软件分析技术的人才有大量需求;在学术界,软件分析技术是程序设计语言和软件工程领域开展研究的必备基础知识之一。但是,软件分析技术相关文献存在内容广,流派多,数学基础要求高等方面的特点,使得学习软件分析技术一直是一件很困难的事。本课程希望通过对这一类技术进行通俗易懂的讲解,帮助同学们构建较完整的软件分析技术知识体系,了解该领域的前沿知识,学术上为进一步开展程序设计语言和软件工程领域的学术研究打下基础,在实践上培养开发大型软件工程工具的开发能力。
课程内容
- 基于抽象解释的程序分析(数据流分析、过程间分析、指针分析、抽象解释、抽象解释的自动化等)
- 基于约束求解的程序分析(SAT、SMT、符号执行等)
- 软件分析应用(程序合成、缺陷定位、缺陷修复等)
教学内容
课程日期 | 课程内容 | 讲师 | 讲义 | 作业/项目 |
---|---|---|---|---|
9月14日 | 课程介绍 | 熊英飞 | 01_intro.pdf | 无 |
9月22日 | 程序设计语言基础知识 | 熊英飞 | 02_basics.pdf | 无 |
9月28日 | 数据流分析I:基础 | 熊英飞 | 03_dataflow_analysis_I.pdf | 见胶片 |
10月12日 | 数据流分析II:性质和扩展 | 熊英飞 | 04_dataflow_analysis_II.pdf | 无 |
10月19日 | 数据流分析III:多视角理解数据流分析 | 熊英飞 | 05_dataflow_analysis_III.pdf | 见胶片最后一页 |
10月20日 | 静态单赋值和稀疏分析 | 熊英飞 | 06_static_single_assignment.pdf | 无 |
10月20日 | 过程间分析I:基础 | 熊英飞 | 07_interprocedural_analysis_basics.pdf | 本周暂未布置课件中的作业 |
10月26日 | 过程间分析II:优化 | 熊英飞 | 08_interprocedural_analysis_optimization.pdf | 本周作业有两道题,见本节胶片和第七讲胶片的最后一页 |
11月2日 | 过程内指针分析 | 熊英飞 | 09_pointer_analysis.pdf course_project_1.pdf |
项目1开发包 组队截止日期:11月7日 提交截止日期:11月28日 汇报日期:11月30日 |
11月3日 | 控制流分析 | 熊英飞 | 10_control_flow_analysis.pdf | 无 |
11月9日 | SOOT | 吴宜谦 | 11_soot-wyq.pdf | soot demo |
11月16日 | 抽象解释 | 熊英飞 | 12_abstract_interpretation.pdf | 见胶片最后一页 |
11月17日 | SAT | 熊英飞 | 13_SAT.pdf | 无 |
11月23日 | SMT | 熊英飞 | 14_SMT.pdf | 见胶片 |
11月23日 | 符号执行 | 熊英飞 | 15_symbolic_execution.pdf | 无 |
12月1日 | 程序合成I:枚举
课程项目2 |
熊英飞 | 16_program_synthesis_enumerative.pdf | 项目2开发包 |
12月7日 | 程序合成II:空间表示和约束求解 | 熊英飞 | 17_program_synthesis_representation.pdf | 无 |
12月14日 | 程序合成III:概率 | 熊英飞 | 18_program_synthesis_probability.pdf | 无 |
12月15日 | 符号抽象 | 熊英飞 | 19_symbolic_abstraction.pdf | 无 |