软件分析技术(Software Analysis)
课程信息
学分: | 3 |
周学时: | 3 |
总学时: | 54 |
上课时间: | 每周 周三 10-12节 |
上课地点: | 理教 317 |
任课教师: | 熊英飞 北京大学研究员 xiongyf@pku.edu.cn |
张路 北京大学教授 zhanglu@sei.pku.edu.cn | |
张冬梅 微软亚洲研究院研究员 dongmeiz@microsoft.com | |
张海东 微软亚洲研究院架构师 haizhang@microsoft.com | |
楼建光 微软亚洲研究院研究员 jlou@microsoft.com | |
韩石 微软亚洲研究院研究员 shihan@microsoft.com | |
张洪宇 微软亚洲研究院研究员 honzhang@microsoft.com | |
授课对象: | 研究生 |
课程助教: | 王杰 yjxxtd@yeah.net |
课程通知
作业提交:关于纸制版作业提交,每次课的作业在下次课上课前交给助教;关于电子版作业提交,同样在下次课上课前发送到助教的邮箱yjxxtd@yeah.net,邮件标题请以“第X次作业-姓名-学号”格式书写。
周一寒组和李元春组项目报告尚未提交(PPT不等于报告)
李豁然组项目代码尚未提交
第四次作业1401111333,1401111353两位同学未提交
请大家抓紧提交
课程简介
软件开发过程中会产生大量的制品,包括代码、需求文档、UML设计图、测试数据、配置方案等等,对这些制品进行分析是各种软件工程工具的基本手段之一。典型软件开发工具比如编译器、代码编辑器、测试与调试工具等等都离不开对软件制品进行分析。在软件工程领域开展研究,软件分析技术是必备的基础知识之一。本课程将系统地介绍软件分析技术。本课程邀请到了微软亚洲研究院的软件分析组团队共同开设。
软件分析技术经过多年的发展,形成了两条主线。一条是传统的程序分析技术,主要用于回答关于程序本身性质的问题。程序分析技术是开发和代码直接相关的工具,比如编译器、调试器、代码编辑器的基本手段。根据哥德尔不完备定理,大量问题都无法静态的回答,所以程序分析技术关注如何做出正确的近似逼近,或者在静态分析无法完成的时候用动态数据来弥补。第二条是近年来兴起的,由微软亚洲研究院张冬梅研究员和同事所提出的软件解析学。随着互联网的发展,可供分析的软件制品变得越来越多。软件解析学就是利用数据挖掘、信息检索、机器学习等数据处理技术对软件工程的数据进行处理,回答关于软件系统、软件用户、软件开发过程的各种问题。与基本的程序分析技术不同,软件解析技术可以处理代码以外的各类软件制品,在各个领域都有广阔的应用前景,是近年来大力发展的领域。
本课程从软件分析技术的两条主线设置。前半学期的课程讲授程序分析技术,由北京大学“百人计划”研究员熊英飞主讲,北京大学相关领域的教师参与。后半学期的课程讲授软件解析学,由软件解析学这一概念的提出团队、微软亚洲研究院张冬梅研究员领导的“软件解析”团队的5名研究员和工程师(张冬梅、张海东、楼建光、韩石、张洪宇)主讲。希望通过这两方面知识的讲解,帮助同学们构建较完整的软件分析技术知识体系,了解该领域的前沿知识,学术上为进一步开展软件工程领域的学术研究打下基础,培养开发大型软件工程工具的实践能力。
本课程和信息科学技术学院现行研究生课程之间的关系:一、《高级编译技术》:该课程中的数据流分析、过程间分析等内容和本课程中的程序分析内容有部分重叠。但是,《高级编译技术》主要从编译器的角度讲授部分程序分析的应用,而本课程不局限于一种应用,而是关注程序分析本身,重叠的部分内容在深度和广度上都与《高级编译技术》有所不同。二、《软件测试》:该课程主要从实用的角度出发,讲授实际软件开发过程中使用的工具和技术。因为测试本身也是一种程序分析的过程,本课程会少量涉及测试等方面的内容,但主要程序分析的视角进行探讨符号执行等测试数据生成技术,与《软件测试》课程重叠较少。
教学大纲
课程日期 | 课程内容 | 讲师 | 讲义 | 作业 | 未交作业名单 | 作业答案 |
---|---|---|---|---|---|---|
9月17 | 课程介绍 | 熊英飞 | 讲义:1 |
无 | 无 | |
9月24 | 数据流分析 | 熊英飞 | 讲义:2(PPT更正:半格的定义加上存在最大元的条件) |
见课件第50页(作业要求:写算法,不要求写程序;截止日期:10月8日;作业提交电子版到yjxxtd@yeah.net,以后如无特别说明,均提交到此邮箱) | ||
10月8 | 基于克隆的过程间分析 | 熊英飞 | 讲义:3 |
无 | 无 | |
10月8 | 课程项目介绍 | 熊英飞 | 讲义:课程项目介绍 |
无 | ||
10月8 | LLVM | 高庆 | 讲义:LLVM |
无 | ||
10月15 | 基于摘要的过程间分析 | 熊英飞 | 讲义:4 |
见课件第63页(截止日期:鉴于理科一号楼频繁停电导致服务器关闭,作业延期至10月26日24点) | 第二次作业答案 |
|
10月22 | 约束求解和符号执行 | 熊英飞 | 讲义:5 |
见课件第45页(截止日期:11月2日24点) | ||
10月22 | SMT | 熊英飞 | 讲义:SMT |
无 | ||
10月29 | 动态符号执行和抽象解释 | 熊英飞 | 讲义:6 |
见课件第90页(截止日期:11月16日24点) | 1401111333,1401111353 | |
10月29 | Abstract Interpretation | 熊英飞 | 讲义:Abstract Interpretation |
无 | ||
11月5 | 基于搜索的软件分析 | 张路 | 讲义:7 |
|||
11月5 | String Analysis | 张路 | 讲义:String Analysis |
|||
11月26 | Introduction to Software Analytics | 张冬梅 | 讲义:8 |
|||
12月3 | 暂无 | 张洪宇 | 讲义:暂无 | 按照选题报告分的组,每组选择下面三篇论文中任意一篇
Fingerprinting the datacenter- Automated classification ofperformance c.... Detecting Large-Scale System Problems by Mining Console Logs |
||
12月10 | Service Analytics | 楼建光 | 讲义:10 |