软件分析技术(Software Analysis)


课程信息

学分: 3
周学时: 3
总学时: 54
上课时间: 单周周二 3-4节 每周周三5-6节
上课地点: 理教 206
任课教师: 熊英飞 xiongyf@pku.edu.cn
授课对象: 本科生/研究生
课程助教: 朱琪豪 zhuqh@pku.edu.cn

课程通知

作业提交方式:以微信群通知为准。如无特别声明,作业的截止日期为下一周上课之前。

课程简介

软件开发过程中会产生大量的代码制品,包括代码、测试数据、配置方案等等,对这些制品进行分析是各种软件工程工具的基本手段之一。典型软件开发工具比如编译器、代码编辑器、测试与调试工具等等都离不开对软件制品进行分析。在工业界,各大公司的基础平台部门对掌握软件分析技术的人才有大量需求;在学术界,软件分析技术是软件工程领域开展研究的必备基础知识之一。本课程将系统地介绍软件分析技术。本课程同时面向高年级本科生和研究生开设。

软件分析技术主要用于回答关于程序本身性质的问题。程序分析技术是开发和代码直接相关的工具,比如编译器、调试器、代码编辑器的基本手段。根据哥德尔不完备定理,大量问题都无法静态的回答,所以程序分析技术关注如何做出正确的近似逼近,或者采用统计等概率手段来弥补。但是,软件分析技术相关文献存在内容广,流派多,数学基础要求高等方面的特点,使得学习软件分析技术一直是一件很困难的事。本课程希望通过对这一类技术进行通俗易懂的讲解,帮助同学们构建较完整的软件分析技术知识体系,了解该领域的前沿知识,学术上为进一步开展软件工程领域的学术研究打下基础,在实践上培养开发大型软件工程工具的开发能力。

教学内容

课程日期 课程内容 讲师 讲义 作业/项目
9月10日 课程介绍 熊英飞 01_intro.pdf
9月11日 数据流分析I:基础 熊英飞 02_dataflow_analysis_I.pdf 见胶片
9月18日 数据流分析II:性质和扩展 熊英飞 03_dataflow_analysis_II.pdf
9月24日 数据流分析III:多视角理解数据流分析 熊英飞 04_dataflow_analysis_III.pdf 见胶片最后一页
9月25日 静态单赋值和稀疏分析 熊英飞 05_static_single_assignment.pdf
10月8日 过程间分析I:基础
课程项目1
熊英飞 06_interprocedural_analysis_basics.pdf
课程项目1介绍
见胶片最后一页
课程项目1程序包
提交截止:12月1日
现场报告:12月3日每组报告8分钟,提问2分钟
10月9日 过程间分析II:优化 熊英飞 07_interprocedural_analysis_optimization.pdf 见胶片最后一页
10月16日 过程内指针分析 熊英飞 08_pointer_analysis.pdf
10月22日 控制流分析 熊英飞 09_control_flow_analysis.pdf
10月24日 抽象解释 熊英飞 10_abstract_interpretation.pdf 见胶片最后一页
10月25日 SAT 熊英飞 11_SAT.pdf
11月5日 SMT 熊英飞 12_SMT.pdf 见胶片最后一页
截止时间:11月19日
11月6日 符号执行 熊英飞 13_symbolic_execution.pdf
11月13日 SOOT 陈逸凡 14_SOOT-chenyifan.pdf 见胶片最后一页
11月19日 符号抽象 熊英飞 15_symbolic_abstraction.pdf
11月20日 搜索算法 熊英飞 16_Searching.pdf
11月27日 程序综合1
课程项目2
熊英飞 17_program_synthesis_basic.pdf
课程项目2介绍
课程项目2开发包
提交截止:12月22日
汇报日期:12月25日每组报告8分钟,提问2分钟
12月4日 程序综合:优化 熊英飞 18_program_synthesis_advanced.pdf
12月11日 程序生成学习 熊英飞 19_learning_to_synthesis.pdf
12月17日 缺陷定位 熊英飞 20_fault_localization.pdf
12月18日 缺陷修复 熊英飞 21_program_repair.pdf