公开/公告号CN104317707A
专利类型发明专利
公开/公告日2015-01-28
原文格式PDF
申请/专利权人 中国科学院软件研究所;
申请/专利号CN201410546645.5
申请日2014-10-15
分类号G06F11/36;
代理机构北京科迪生专利代理有限责任公司;
代理人成金玉
地址 100190 北京市海淀区中关村南四街4号
入库时间 2023-12-17 04:14:53
法律状态公告日
法律状态信息
法律状态
2017-09-29
授权
授权
2015-02-25
实质审查的生效 IPC(主分类):G06F11/36 申请日:20141015
实质审查的生效
2015-01-28
公开
公开
技术领域
本发明涉及一种基于程序结构影响感知的软件错误定位方法,属于软件测试技术领域。
背景技术
软件在日常生活中的应用越来越广泛。随着软件功能和架构的复杂化,想要在软件 产品中彻底避免软件错误的出现,仍然是很困难的。软件错误,即导致软件实际运行的 结果和预期的运行结果不相符的那些因素,这些错误的存在,导致软件相应的功能丧失。 软件调试是用于修改软件错误的常用手段,是一项十分重要但又代价很大的工程,它通 常包括三个步骤:错误的定位、错误的修复和对错误修复后的再确认。其中,错误的定 位是最为重要也是最为费时和费力的过程。
语句级别的统计错误定位方法通过收集每条语句在程序执行失败或成功时的运行 信息来分析和评估该语句存在错误的可疑程度。举例来说,若某条语句总是在失败的程 序执行中被运行,而从未在成功的程序执行中被运行过,那么,它很可能是和软件错误 相关的。在此类统计错误定位方法中,通常采用可疑度函数来评估语句存在错误的可能 性。
在进行错误定位时,首先需要多次执行程序,统计失败测试用例的条数m和语句si的覆盖次数failed(si),以及成功测试用例的条数m'和语句的覆盖si次数passed(si); 然后根据可疑度函数来评估每条语句存在错误的可能性,按照可疑值从大到小对语句进 行排序;最后根据这个排序来逐个查找程序中的错误。对于目前的大部分可疑度函数(如 Tarantula、Jaccard、Ochiai、Ochiai2)而言,一条语句si的可疑度RT(si)只与两个变量 有关——该语句在失败的程序执行中运行的次数failed(si)和该语句在成功的程序执行 中运行的次数passed(si)。
然而,单纯地利用failed(si)和passed(si)来评估语句可疑度的方法与实际情况相 差甚远,在进行错误定位时,受程序结构的影响,某些语句在计算可疑度值时总是具有 较高的可疑度值,而有些语句总是具有较低的可疑度值。这些都可能会造成软件开发者 反复多次地查看正确的程序片段,反而漏掉了一些难以察觉的错误。目前这种错误定位 的方法很低,很难用于工业界。本发明考虑程序结构对可疑度值的影响,以对初始的可 疑度值进行校正和优化,提供了一种准确度更高的错误定位方法。
发明内容
本发明技术解决问题:克服现有技术的不足,提供一种基于程序结构影响感知的软件错 误定位方法,本发明考虑了实际编程中程序结构对错误定位方法的影响,提出了一个通用的 错误定位校正和优化策略,用以感知程序结构对错误定位效果的影响并予以消除,以至于可 疑函数更加符合语言特性和实际情况,从而提高了错误定位的准确度。
本发明技术解决方案:一种基于程序结构影响感知的软件错误定位方法,统计在软件错 误定位过程中程序实体的历史可疑度值并进行分析,构造程序结构对程序实体可疑度值的影 响函数,进而校正和优化当前的可疑度函数,在后续错误定位过程中消除程序结构对错误定 位效果的影响,使得可疑度函数更加遵循程序的语言特性,从而提高错误定位的准确度。
具体实现步骤如下:
(1)提取程序集中各版本的程序语句的覆盖信息,即错误语句在失败的程序执行 中运行的次数和语句在成功的程序执行中运行的次数;
(2)选择某种可疑度函数,计算错误语句的可疑度;
(3)统计程序错误版本中各语句的可疑度值,以估算程序结构对错误定位方法的 影响;
(4)构造程序结构对当前使用的错误定位方法的影响函数,利用该影响函数对可 疑度函数进行校正和优化;
(5)在程序后续各版本的错误定位过程中,根据程序的每条语句的运行特征,利 用步骤(4)中所述的策略不断校正和优化可疑度函数,然后计算每条语句的可疑度, 然后根据可疑值从大到小对语句进行排序,根据此顺序对程序语句逐条排查,定位程序 中的错误。
所述步骤(4)中使用简单移动平均法来构造程序结构对错误定位方法的影响函数。
本发明不限定具体的错误定位方法,其他的错误定位方法也可以应用;
本发明不限定具体的估算方法,其它估算方法也可以应用。
本发明与现有技术相比的优点在于:
(1)本发明应用于软件错误定位过程中,通过统计程序历史错误版本中各语句的可疑 度值并进行分析,估算程序结构对语句可疑度值的影响函数,进而校正和优化当前的可疑度 函数,在后续错误定位过程中消除程序结构对错误定位效果的影响。
(2)本发明统计程序实体的历史可疑度值,便于分析程序结构对其影响。另外, 本发明通过简单移动平均法得到程序结构对可疑度函数的影响,用于校正和优化可疑度 函数,并生成最终的可疑度函数,从而提高了软件错误定位的准确度。
附图说明
图1为本发明方法的实现流程图;
图2为基于程序结构影响感知的软件错误定位方法分别应用于Tarantula与Jaccard 方法上的效果对比图。
具体实施方式
基于程序结构影响感知的软件错误定位方法的步骤主要为图1所示的四个步骤,第 五个步骤是对于整个方法的优化:
(1)提取该程序版本在执行过程中的覆盖信息,即程序语句在失败的程序执行中 运行的次数和语句在成功的程序执行中运行的次数;
(2)选择某种可疑度函数,如下所述的Tarantula和Jaccard可疑度计算函数,来 计算错误语句的可疑度;
其中failed(si)表示在这条语句si执行了但是运行结果为错误的测试用例数量, passed(si)表示这条语句si被执行了程序运行结果正确的测试用例数量;m表示所有失 败测试用例的数目,m'表示所有成功测试用例的总数目。
(3)构造程序结构对当前使用的错误定位方法的影响函数,函数3表示该影响函 数,使用简单移动平均法来构造程序结构对错误定位方法的影响函数,即选取一定的时 间跨度,逐项推移,将位于该跨度之内的程序版本作为参考来获取程序结构对错误定位 可疑度函数的影响,并利用函数4来消除程序结构对可疑度函数的影响,从而实现校正 和优化,
其中,Impv(si)表示语句si可疑度值受程序结构的影响值,v表示当前程序的版本, 表示在第k个版本中使用公式T来计算语句si的可疑度值。
(4)利用上面进过校正和优化的可疑度计算函数,计算并统计程序错误版本中各 语句的可疑度值。然后根据可疑值从大到小对语句进行排序,根据此顺序对程序语句逐 条排查,定位程序中的错误。
(5)同时在程序后续版本的错误定位过程中,把上述影响函数作用于更多的程序 版本中,从而更加准确地获取程序结构对错误定位方法的影响,并加以消除。
效果检验:
为了验证本发明的错误定位效果,采用Siemens标准评价数据集对本发明的方法进 行训练和测试,该数据集的详细信息如表1所示。
表1 SIEMENS数据集的特征信息
实验步骤:
(1)分别使用Tarantula、Jaccard、Ochiai、Ochiai2这四种可疑函数对Siemens数据集 中的168个错误版本进行错误定位;
(2)根据程序实体的历史可疑度值,使用简单移动平均法分别对Tarantula、Jaccard、 Ochiai、Ochiai2这四种可疑函数进行校正和优化,校正和优化后的方法分别是Tarantula-I、 Jaccard-I、Ochiai-I、Ochiai2-I;
(3)用上述经过校正和优化的可疑函数来对后续的错误版本进行错误定位,然后将相 应版本中的语句按可疑值从高到低进行排序,得到可疑度排位表,然后根据错误语句的排序 位置计算可疑函数的定位效率,即:
其中,Position of faulty statement in list表示错误语句在可疑度排位表中的位 置,number of statements in list表示可疑度排位表中语句的总条数。
(4)将本发明中的方法分别和相应原始可疑函数的效率进行对比。
实验结果:
根据图2中的效率对比,代码检查率表示程序中检查的代码行数占总行数的百分比, 错误定位率表示已定位的错误的数目占所有错误数目的百分比。从图中可以看出,经过 校正和优化后的错误定位方法(实线)都要优于原始的错误定位方法(虚线)。
综上所述,本发明中提出的程序结构感知的错误定位优化策略在错误定位方面效果 显著。
提供以上实施仅仅是为了描述本发明的目的,而并非要限制本发明的范围。本发明 的范围由所附权利要求限定。不脱离本发明的精神和原理而做出的各种等同替换和修 改,均应涵盖在本发明的范围之内。
机译: 基于能量加权因子的复合结构影响区域定位方法
机译: 在基于多线程的应用程序系统中处理软件错误的方法
机译: 指定目标包装位置的方法,一种计算机可读记录介质,用于记录同一设备的程序以及一种用于通过使用能够通过使用人为的准确定位目标来确定停车位的设备来辅助停车空间的设备基于触摸屏的机器界面