课程简介
软件开发过程中会产生大量的制品,包括代码、需求文档、UML设计图、测试数据、配置方案等等,对这些制品进行分析是各种软件工程工具的基本手段之一。典型软件开发工具比如编译器、代码编辑器、测试与调试工具等等都离不开对软件制品进行分析。在软件工程领域开展研究,软件分析技术是必备的基础知识之一。本课程将系统地介绍软件分析技术。本课程邀请到了微软亚洲研究院的软件分析组团队共同开设。
软件分析技术经过多年的发展,形成了两条主线。一条是传统的程序分析技术,主要用于回答关于程序本身性质的问题。程序分析技术是开发和代码直接相关的工具,比如编译器、调试器、代码编辑器的基本手段。根据哥德尔不完备定理,大量问题都无法静态的回答,所以程序分析技术关注如何做出正确的近似逼近,或者在静态分析无法完成的时候用动态数据来弥补。第二条是近年来兴起的,由微软亚洲研究院张冬梅研究员和同事所提出的软件解析学。随着互联网的发展,可供分析的软件制品变得越来越多。软件解析学就是利用数据挖掘、信息检索、机器学习等数据处理技术对软件工程的数据进行处理,回答关于软件系统、软件用户、软件开发过程的各种问题。与基本的程序分析技术不同,软件解析技术可以处理代码以外的各类软件制品,在各个领域都有广阔的应用前景,是近年来大力发展的领域。
本课程从软件分析技术的两条主线设置。前半学期的课程讲授程序分析技术,由北京大学“百人计划”研究员熊英飞主讲,北京大学相关领域的教师参与。后半学期的课程讲授软件解析学,由软件解析学这一概念的提出团队、微软亚洲研究院张冬梅研究员领导的“软件解析”团队的5名研究员和工程师(张冬梅、张海东、楼建光、韩石、张洪宇)主讲。希望通过这两方面知识的讲解,帮助同学们构建较完整的软件分析技术知识体系,了解该领域的前沿知识,学术上为进一步开展软件工程领域的学术研究打下基础,培养开发大型软件工程工具的实践能力。
本课程和信息科学技术学院现行研究生课程之间的关系:一、《高级编译技术》:该课程中的数据流分析、过程间分析等内容和本课程中的程序分析内容有部分重叠。但是,《高级编译技术》主要从编译器的角度讲授部分程序分析的应用,而本课程不局限于一种应用,而是关注程序分析本身,重叠的部分内容在深度和广度上都与《高级编译技术》有所不同。二、《软件测试》:该课程主要从实用的角度出发,讲授实际软件开发过程中使用的工具和技术。因为测试本身也是一种程序分析的过程,本课程会少量涉及测试等方面的内容,但主要程序分析的视角进行探讨符号执行等测试数据生成技术,与《软件测试》课程重叠较少。