软件分析技术(Software Analysis)


课程信息

学分: 3
周学时: 3
总学时: 54
上课时间: 每周周二 3-4节 双周周四 3-4节
上课地点: 三教 103
任课教师: 熊英飞 北京大学研究员 xiongyf@pku.edu.cn
张冬梅 微软亚洲研究院研究员 dongmeiz@microsoft.com
张海东 微软亚洲研究院架构师 haizhang@microsoft.com
楼建光 微软亚洲研究院研究员 jlou@microsoft.com
韩石 微软亚洲研究院研究员 shihan@microsoft.com
张洪宇 微软亚洲研究院研究员 honzhang@microsoft.com
授课对象: 高年级本科生/研究生
课程助教: 臧琳飞 zanglf126@126.com

课程通知

作业提交:如果没有特别指明时间,请在下次课上课前发送到助教的邮箱zanglf126@126.com,邮件标题请以“第X次作业-姓名-学号”格式书写。

2016年1月14日:课程最终成绩已经给出,同学们可以在教务系统里查看。如果想了解自己成绩的详细构成,可以和臧琳飞同学联系。

课程简介

软件开发过程中会产生大量的制品,包括代码、需求文档、UML设计图、测试数据、配置方案等等,对这些制品进行分析是各种软件工程工具的基本手段之一。典型软件开发工具比如编译器、代码编辑器、测试与调试工具等等都离不开对软件制品进行分析。在软件工程领域开展研究,软件分析技术是必备的基础知识之一。本课程将系统地介绍软件分析技术。本课程邀请到了微软亚洲研究院的软件分析组团队共同开设。

软件分析技术经过多年的发展,形成了两条主线。一条是传统的程序分析技术,主要用于回答关于程序本身性质的问题。程序分析技术是开发和代码直接相关的工具,比如编译器、调试器、代码编辑器的基本手段。根据哥德尔不完备定理,大量问题都无法静态的回答,所以程序分析技术关注如何做出正确的近似逼近,或者在静态分析无法完成的时候用动态数据来弥补。第二条是近年来兴起的软件解析学。随着互联网的发展,可供分析的软件制品变得越来越多。软件解析学就是利用数据挖掘、信息检索、机器学习等数据处理技术对软件工程的数据进行处理,回答关于软件系统、软件用户、软件开发过程的各种问题。与基本的程序分析技术不同,软件解析技术可以处理代码以外的各类软件制品,在各个领域都有广阔的应用前景,是近年来大力发展的领域。

本课程从软件分析技术的两条主线设置。前半学期的课程讲授程序分析技术,由北京大学“百人计划”研究员熊英飞主讲,北京大学相关领域的教师参与。后半学期的课程讲授软件解析学,由软件解析学这一概念的提出团队、微软亚洲研究院张冬梅研究员领导的“软件解析”团队的5名研究员和工程师(张冬梅、张海东、楼建光、韩石、张洪宇)主讲。希望通过这两方面知识的讲解,帮助同学们构建较完整的软件分析技术知识体系,了解该领域的前沿知识,学术上为进一步开展软件工程领域的学术研究打下基础,培养开发大型软件工程工具的实践能力。

教学大纲

课程日期 课程内容 讲师 讲义 作业未交作业名单
9月15日 课程介绍 熊英飞 intro
9月22日 数据流分析:基本算法 熊英飞 dataflow analysis
9月24日 数据流分析:性质与扩展 熊英飞 dataflow analysis II 见讲义,10月8日上课前截止 第一次作业未交名单
9月29日 LLVM 高庆 LLVM 完成StmtPrinter并提交样例程序和运行截图,10月8日上课前截止 第二次作业未交名单
10月08日 指针分析 熊英飞 points-to analysis 见讲义,10月13日上课前截止 第三次作业未交名单
10月13日 基于克隆的过程间分析 熊英飞 interprocedural analysis
control flow analysis
见讲义interprocedural analysis,10月20日上课前截止 第四次作业未交名单
10月20日 精确的过程间分析 熊英飞 interprocedural analysis II
course project
见讲义interprocedural analysis II最后一页,10月27日上课前截止 第五次作业未交名单
10月22日 过程分析加速技术 熊英飞 interprocedural analysis III
见讲义最后一页,10月27日上课前截止 第六次作业未交名单
10月27日 SAT约束求解 熊英飞 Solvers and Symbolic Execution
见讲义最后一页,11月10日上课前截止 软件分析技术作业提交汇总表
11月3日 SMT约束求解 熊英飞 SMT
11月5日 符号执行和抽象解释 熊英飞 Solvers and Symbolic Execution
Dynamic Symbolic Execution
Abstract Interpretation
11月10日 SOOT 唐浩 SOOT 11月17日上课前截止 第1~8次作业提交汇总表
11月17日 静态单赋值SSA 熊英飞 Static Single Assignment
11月19日 搜索算法与优化问题 熊英飞 Search Algorithms
11月24日 课程项目开题报告 各位同学
12月1日 软件解析学介绍 张冬梅 Introduction to Software Analytics
12月3日 软件克隆与缺陷分析 张洪宇 CodeMining
12月8日 软件服务分析(暂定) 楼建光 Service Analytics
12月15日 操作系统分析1(暂定) 韩石 Data-Driven OS Performance Analysis
12月17日 操作系统分析2(暂定) 韩石 --
12月22日 软件分析可视化(暂定) 张海东 21 Visualization_Haidong Zhang
12月29日 学期项目报告1 各位同学
12月31日 学期项目报告2 各位同学