频谱信息去冗优化的软件缺陷定位方法技术

技术编号:10369858 阅读:229 留言:0更新日期:2014-08-28 12:29
本发明专利技术提供一种频谱信息去冗优化的软件缺陷定位方法,通过运行测试用例,收集程序运行结果信息即频谱信息;对所得频谱信息进行去冗优化处理,利用频谱信息计算可疑度;根据可疑度值的大小对语句进行降序排列,根据已排序的语句序列逐个进行排错,直至找到引发程序异常的语句。本发明专利技术在基于频谱的错误定位方法中,在利用覆盖信息表进行可疑度计算之前,对频谱信息进行去冗余处理,利用有效的频谱信息进行可疑度计算,提高根据可疑度进行缺陷定位的可靠性,进而提高软件缺陷定位的效率。

【技术实现步骤摘要】
频谱信息去冗优化的软件缺陷定位方法
本专利技术涉及一种频谱信息去冗优化的软件缺陷定位方法,属于软件测试领域。
技术介绍
多年来,人们在缺陷定位的研究中提出了许多方法,主要通过程序的静态信息和动态信息来定位程序错误。但获得静态信息的开销较大,对于大型软件,全面的静态分析甚至是不现实的,而动态信息的收集只要是运行测试用例,并不会给测试带来过多的开销。同时,由于动态信息包含了程序运行时的信息,与利用静态信息的方法相比,可以提供更准确的结果。利用程序频谱信息进行缺陷定位,是目前比较切实有效的软件缺陷定位方法,程序频谱是一种表示程序运行时覆盖情况的信息,反应程序运行某一特征的代码剖面信息。程序频谱与程序行为之间存在着一定的关系,通过研究运行失败测试用例得到的频谱信息与运行成功测试用例得到的频谱信息之间的差异性可为软件缺陷定位提供帮助。对于程序的单条语句,被失效测试用例执行的越多,成功的测试用例执行的越少,语句含有错误的可能性就越大,发生错误的概率就越大。利用这种特征对程序语句被成功测试用例以及失败测试用例的覆盖情况进行统计分析,找出含有缺陷的程序语句。对基于程序频谱的程序定位方法,可以从多角度采取优化策略提高软件缺陷定位的效率:第一,提高选取测试用例集的有效性;第二,尽量减少收集程序频谱的开销;第三,提高可以度算法的精确度性。在以往的优化策略的基础上,如何提出一种新的优化策略,对覆盖信息表进行去冗优化,提高依赖程序语句可疑度进行缺陷定位的可靠性,从而达到提高软件缺陷定位的效率是在基于程序频谱的程序定位方法的优化过程中应当予以考虑并解决的问题。
技术实现思路
本专利技术对已有缺陷定位方法采取优化策略产生一种新的错误定位方法,使缺陷定位的效率更高。通过运行测试用例,收集程序运行结果信息即频谱信息,对频谱信息进行去冗优化处理,利用频谱信息进行可疑度计算,根据可疑度值的大小对语句进行降序排列,最后根据已排序的语句序列逐个进行排错,直到找到引发程序异常的语句。本专利技术的技术解决方案是:一种频谱信息去冗优化的软件缺陷定位方法,通过运行测试用例,收集程序运行结果信息即频谱信息;对所得频谱信息进行去冗优化处理,利用频谱信息计算可疑度;根据可疑度值的大小对语句进行降序排列,根据已排序的语句序列逐个进行排错,直至找到引发程序异常的语句。优选地,S1、获取可执行的待测程序以及测试用例集;S2、执行测试用例,获取程序执行的动态信息;S3、收集所有测试用例的运行情况,并进行去冗余处理,生成无冗余覆盖信息表;S4、根据覆盖信息表进行语句可疑度计算;S5、根据可疑度值,对程序语句进行降序排列,根据排序的语句序列进行缺陷定位。优选地,步骤S1具体为:S11、获取待测的可执行程序P;S12、将程序P的每条语句进行编号,按序编为S1,S2,S3,...,Sj,...,Sn,将编号集合记为S,其中Sj表示程序P的第j条语句,n为程序语句的总条数;S13、获取测试用例集,记为Listsuites;S14、对Listsuites中的测试用例进行编号,按序编为test1,test2,test3,...,test1,...,testm,其中testi表示测试用例集Listsuites中的第i条测试用例,m为测试用例的总条数。优选地,步骤S2具体为:S21、根据测试用例的编号按序从Listsuites中读取测试用例testi;S22、根据测试用例的输入以及执行条件执行读取的测试用例testi;S23、在测试用例执行过程中对覆盖语句以及未覆盖的语句用“0”和“1”进行区分标记,“0”表示语句没有被当前测试用例执行,“1”表示语句被当前测试用例执行;S24、判定测试用例运行结果;S25、收集测试用例testi的运行情况,记为F[testi]{T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R},,即频谱信息,其中,T(Sj)表示语句Sj被当前测试用例覆盖的情况,R表示当前测试用例的运行通过情况;S26、判断测试用例集中的所有的测试用例是否均被运行,如果“是”,转步骤S27,否则转步骤S21;S27、收集所有测试用例的执行情况。优选地,步骤S24具体为:S241、获取当前测试用例testi在程序中的实际运行结果;S242、获取当前测试用例testi的预期运行结果;S243、判断testi的实际运行结果与预期结果是否相同,如果“是”,转步骤S244,否则转步骤S245;S244、运行结果记为0,记入R中,R表示测试用例运行结果情况;S245、运行结果记为1,记入R中,R表示测试用例运行结果情况。优选地,步骤S3具体为:S31、首个测试用例默认处理;S32、将FF[test1]{Test1,T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R}记入覆盖信息表G,G由FF[test1]{Test1,T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R}累积生成;S33、获取下一条测试用例的执行情况F[testi]{T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R};S34、判定F[testi]{T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R}是否与覆盖信息表G已有行F[test]相同,如果“是”,转步骤S35,否则转步骤S37;S35、判定测试testi为非有效测试用例;S36、删除F[testi]{T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R};S37、判定测试用例testi为有效测试用例;S38、对有效测试用例testi进行编号,编为TestI,表示第I个有效测试用例;S39、拓展testi运行结果为FF[testi]{TestI,F[testi]{T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R}},即FF[testi]{TestI,T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R};S310、将FF[testi]{TestI,T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R}记入覆盖信息表G中;S311、判断Listsuites中所有测试用例是否都被执行,如果“是”,转步骤S312,否则转步骤S33;S312、获得最终覆盖信息表G。优选地,步骤S31具体为:默认第一个测试用例test1为有效测试用例;对第一个有效测试用例test1进行编号,记为Test1,表示第一个有效测试用例;拓展有效测试用例的执行情况为FF[test1]{Test1,F[test1]{T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R}},即为FF[test1]{Test1,T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R}。优选地,步骤S4具体为:S41、针对Sj语句,收集执行完测试用例集Listsuites所提供的<aef,aep,anf,anp>,其中,表示语句Sj没有执行且测试结果正确的次数;表示语句Sj没有执行且测试结果错误的次数;表示语句Sj被执行且测试结果正确的次数;表示语句Sj被执行且测试结果错误的次数;Gi,j为覆盖信息表的第i行本文档来自技高网...
频谱信息去冗优化的软件缺陷定位方法

【技术保护点】
一种频谱信息去冗优化的软件缺陷定位方法,其特征在于:通过运行测试用例,收集程序运行结果信息即频谱信息;对所得频谱信息进行去冗优化处理,利用频谱信息计算可疑度;根据可疑度值的大小对语句进行降序排列,根据已排序的语句序列逐个进行排错,直至找到引发程序异常的语句。

【技术特征摘要】
1.一种频谱信息去冗优化的软件缺陷定位方法,其特征在于:通过运行测试用例,收集程序运行结果信息即频谱信息;对所得频谱信息进行去冗优化处理,利用频谱信息计算可疑度;根据可疑度值的大小对语句进行降序排列,根据已排序的语句序列逐个进行排错,直至找到引发程序异常的语句;具体为:S1、获取可执行的待测程序以及测试用例集;S2、执行测试用例,获取程序执行的动态信息;S3、收集所有测试用例的运行情况,并进行去冗余处理,生成无冗余覆盖信息表;具体为:S31、首个测试用例默认处理;具体为:默认第一个测试用例test1为有效测试用例;对第一个有效测试用例test1进行编号,记为Test1,表示第一个有效测试用例;拓展有效测试用例的执行情况为FF[test1]{Test1,F[test1]{T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R}},即为FF[test1]{Test1,T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R};收集测试用例testi的运行情况,记为F[testi]{T(S1),T(S2),T(S3)…T(Sj)…T(Sn),R},也即频谱信息,表示测试用例运行轨迹,其中,T(S1),T(S2),T(S3)…T(Sj)…T(Sn)分别表示各语句S1,S2,S3,...,Sj,...,Sn覆盖情况,Sj表示程序P的第j条语句,n为程序语句的总条数,R表示运行结果;S32、将FF[test1]{Test1,T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R}记入覆盖信息表G,G由FF[test1]{Test1,T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R}累积生成;S33、获取下一条测试用例的执行情况F[testi]{T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R};S34、判定F[testi]{T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R}是否与覆盖信息表G已有行F[test]相同,如果“是”,转步骤S35,否则转步骤S37;S35、判定测试testi为非有效测试用例;S36、删除F[testi]{T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R};S37、判定测试用例testi为有效测试用例;S38、对有效测试用例testi进行编号,编为testI,表示第I个有效测试用例;S39、拓展testi运行结果为FF[testi]{TestI,F[testi]{T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R}},即FF[testi]{TestI,T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R};S310、将FF[testi]{TestI,T(S1),T(S2),T(S3)...T(Sj)...T(Sn),R}记入覆盖信息表G中;S311、判断Listsuites中所有测试用例是否都被执行,如果“是”,转步骤S312,否则转步骤S33;S312、获得最终覆盖信息表G;S4、根据覆盖信息表进行语句可疑度计算;S5、根据可疑度值,对程序语句进行降序排列,定位缺陷语句。2.如权利要求1所述的频谱信息去冗优化的软件缺陷定位方法,其特征在于,步骤S1具体为:S11、获取待测的可执行程序P;S12、将程序P的每条语句进行编号,按序编为S1,S2,S3,.....

【专利技术属性】
技术研发人员:张卫丰张晓红王云王子元周国强张迎周
申请(专利权)人:南京邮电大学
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1