软件分析技术(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 | 各位同学 | 无 |