前言
视频:北大-软件分析-公开课
文档:课件
简单记录下。
基于测试的错误定位
静态分析、测试等技术都是为了发现缺陷。当一个缺陷被发现之后,如何修复该缺陷:如何知道缺陷是因为哪行程序的错误导致的;当定位到有缺陷的语句之后,如何修复该语句的缺陷;
基于测试的错误定位:
- 输入:软件系统的源码;一组测试,至少有一个没有通过;
- 输出:一个可能有错误的程序元素列表,根据出错概率排序。(程序元素可以定义在不同级别上:表达式,语句,方法,类,文件)
基于频谱的错误定位
基本思想:被失败的测试用例执行的程序元素,更有可能有错误;被成功的测试用例执行的程序元素,更有可能没有错
误;
下面例子:
- 错误的那一列,经过第一、三行。所以错误可能出现在第一、三行。
- 第一行有3个测试用例通过;第三行有有两个测试用例通过。所以,错误更可能出现在第三行。
其他
程序切片:出错的语句只可能存在于动态反向切片中;动态反向切片可以有效的缩小错误语句的范围;
基于状态覆盖的错误定位、基于变异的错误定位etc