一种基于谓词执行信息分析的自适应软件缺陷定位方法

文档序号:6359500阅读:224来源:国知局
专利名称:一种基于谓词执行信息分析的自适应软件缺陷定位方法
技术领域
本发明涉及一种加入特征选择的软件动态缺陷定位方法,特别是涉及一种基于谓词执行信息分析的自适应软件缺陷定位方法。它是一种能够根据程序中谓词实际执行情况自动选择所需谓词执行信息量的软件缺陷定位方法。该方法属于软件测试技术领域。
背景技术
建立高可靠、零缺陷的软件生产线,一直是软件工业界和软件工程学术研究机构多年以来锲而不舍的追求目标。尤其是进入20世纪90年代后,国外对软件缺陷定位、软件排错等自动化调试技术研究的投入明显加大,从不同角度对软件缺陷定位等核心技术展开了深入研究,并陆续发表了一些研究成果,研制了一批新型的软件调试和缺陷定位原型系统。现有软件缺陷定位方法(在本专利申请中,“方法”一词与“算法”一词可以互换)可分为五种(I)莱尔等人在“利用程序切片自动定位程序故障”一文中提出的基于程序执行切片的方法(详见1987年《第二届计算机与应用国际会议》)。该方法通过构造并对比程序成功和失败运行时的程序切片,来最大程度缩小需要检查的范围。这种方法适用于代码规模不大、分支较少的情况;(2)琼斯等人在“一种利用可视化信息的缺陷定位方法”一文中提出的基于可执行语句的方法(详见2002年《第二十四届软件工程国际会议》)。该方法收集程序在每个测试用例下的程序可执行语句的执行信息,并利用该执行信息计算可执行语句包含缺陷的可能性,以此来定位缺陷可能存在的位置。这种方法适用于测试用例容易获得、程序运行时间较短的情况;(3)里布里特等人在“一种可扩展的基于统计学的故障隔离方法”一文中提出的基于谓词的方法(详见2005年《美国计算机学会〈编程语言的设计和实现 > 会议》)。该方法通过对谓词(谓词是指程序中的条件判断,例如if,for,while等条件。谓词所在语句控制着程序中控制流的走向,对于程序能否正确执行起着主导作用)进行插桩而获得谓词的执行信息,利用相关评价体系计算这些谓词包含缺陷的可疑度,按照可疑度对谓词进行排序,并以最终排序作为定位缺陷位置的依据;(4)希尔德布兰德等人在“简化和隔离故障”一文中提出的基于程序模型(或状态)的方法(详见2002年美国电气电子工程师学会《软件工程》杂志第28卷第2期)。该类方法对失败执行过程中某些变量在一些特殊节点处的值进行记录,构建变量值的状态转换图,通过修改其中某些变量值的方法来定位缺陷可能存在的位置;(5)白里安等人在“使用机器学习来支持Tarantula调试”一文中提出的基于机器学习的方法(详见2007年《第十八届美国电气电子工程师学会软件可靠性国际研讨会》)。该类方法通过引入机器学习相关理论,以语句覆盖率等信息作为输入数据,试图通过学习或演绎推测出缺陷可能存在的位置。基于谓词的方法要求插桩复杂度低(程序插桩在软件测试中有广泛的应用,它通过向被测程序中插入新的操作语句以实现测试),处理数据少,定位效果好,现已成为研究热点。但目前已有的一些算法均存在对谓词执行信息利用不足或过分利用的情况,无法取得较好的定位效果。为了避免出现上述问题,要求新方法能够适应程序中谓词的实际执行情况。因此有必要先对谓词的执行信息进行预处理,以便确定算法对谓词执行信息的利用程度,使缺陷定位算法能够充分利用谓词的执行信息获得较好的定位效果,本发明正是基于这种考


发明内容
本发明一种基于谓词执行信息分析的自适应软件缺陷定位方法,其目的是克服现有方法中无法有效利用谓词执行信息的缺点,提供一种能够自适应谓词实际执行情况的动态缺陷定位方法。本发明一种基于谓词执行信息分析的自适应软件缺陷定位方法,其设计思想是对于桩点处的谓词P,运行待测程序的所有测试用例。对谓词P的执行信息进行预处理(谓词执行信息是指在程序一次运行中,谓词的执行次数以及每次的判断结果),具体为统计谓词P在程序运行失败时的执行次数,确定出现频率最高的前N个(2 < N< 64取整数)执行次数。根据该信息带入对应的步骤计算谓词P的缺陷关联度,最后按照缺陷关联度由大到小对程序中的所有谓词进行排序。P的缺陷关联度越大,则认为P以及与P有数据或控制关联的程序代码含有缺陷的概率越大,从而实现有效利用谓词的执行信息对缺陷进行定位的目的。整个算法的基本思路如图I所示。本发明一种基于谓词执行信息分析的自适应软件缺陷定位方法,该方法具体步骤如下步骤一对含缺陷的程序插桩。对程序中的分支和返回值if、while、for以及return语句中的谓词进行插桩,桩函数要求在程序运行时输出相应的谓词执行信息。步骤二 加载程序的全部测试用例,运行插有桩函数的待测程序。步骤三分别收集程序运行成功和运行失败时桩函数的输出信息。由于插桩程序设计的不同,桩函数输出的谓词执行信息可分为两类,分别如图2和图3所示。步骤四对每个谓词在所有失败测试用例下的执行信息进行预处理,该步骤分为三小步(一)利用桩函数的第二种类型输出信息(如图3所示),统计程序运行失败时的
(PlPn\
,-Λ-, /-Λ-,
ah ah an au aI5 aL ■■■ aL aL aL aL a\i 心错误矩阵八尸;’··;,其中表示第k个
< <2 B <4 <5 < …C <2 <3 <4<6
a I
VJIJ
(I ^ m,m表示失败测试用例总数)失败测试用例下,插桩谓词i (I < i < n,n表示插桩谓词总数)输出的第二种类型信息中的第j个(I < j < 6,j取整数)数。( 二)在错误矩阵A1中统计单个谓词的执行次数以及执行次数出现频率(在本专利中,频率是指出现的次数),将执行次数和相应的执行次数出现频率按谓词编号存储在矩阵
权利要求
1.一种基于谓词执行信息分析的自适应软件缺陷定位方法,其特征在于该方法具体步骤如下 步骤一对含缺陷的程序插桩;对程序中的分支和返回值if、while、for以及return语句中的谓词进行插桩,桩函数要求在程序运行时输出相应的谓词执行信息; 步骤二 加载程序的全部测试用例,运行插有桩函数的待测程序;步骤三分别收集程序运行成功和运行失败时桩函数的输出信息;由于插桩程序设计的不同,桩函数输出的谓词执行信息可分为两类,一种是谓词的编号,谓词在程序运行时的执行状态;另一种是用每6个数表示一个谓词,其中第一个数表示该谓词判断为“真”的次数,第二个数表示该谓词判断为“假”的次数,第三个数表示该谓词被执行到的次数;步骤四对每个谓词在所有失败测试用例下的执行信息进行预处理,该步骤分为三小 (一)利用桩函数的第二种类型输出信息,统计程序运行失败时的错误矩阵
全文摘要
一种基于谓词执行信息分析的自适应软件缺陷定位方法,它有七大步骤(1)对含缺陷的程序插桩;(2)加载程序的测试用例,运行插有桩函数的程序;(3)分别收集程序运行成功时和运行失败时,桩函数的输出信息;(4)对每个谓词在所有失败测试用例下的执行信息进行预处理;(5)计算谓词P的缺陷关联度;(6)重复第五步,计算所有谓词缺陷关联度,并按照从高到低将所有谓词进行排序;(7)根据第六步中的排序结果,对谓词依序进行查找,直到找到缺陷为止。本发明原理简单,容易实现,能有效解决现有基于谓词软件动态缺陷定位方法无法有效利用谓词执行信息的问题,从而克服了传统方法的局限性,提高了定位效率。
文档编号G06F11/36GK102622295SQ20121003795
公开日2012年8月1日 申请日期2012年2月17日 优先权日2012年2月17日
发明者宫成, 李伟, 蔡开元, 郑征, 郝鹏 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1