基于状态依赖概率建模的软件错误定位方法

文档序号:6400949阅读:131来源:国知局
专利名称:基于状态依赖概率建模的软件错误定位方法
技术领域
本发明涉及计算机程序分析领域。
背景技术
传统的软件错误定位方法大多采用设置断点等人工分析的方法,人工定位错误不仅难度大,而且极其耗时。要准确定位软件中的错误是极其困难的。当开发人员在程序执行过程中发现软件错误时,一方面,要么错误的症状与导致错误的根源(程序代码)可能相距甚远,要么很难产生完全一样的输入条件,使得“错误的现场”难以恢复,要么错误时隐时现,甚至可能在另一个错误被修正后暂时消失,导致某些错误难以被及时捕捉,而另一方面,在一个大型软件中一个错误的测试用例所覆盖的语句数量又往往是非常庞大的,这就使得程序开发人员需要花费大量的时间和精力来查找和定位产生错误的程序代码。软件错误自动定位的目的就是通过计算机分析程序源代码或程序运行过程中产生的运行时状态,检测程序中的异常情况,并将其独立出来作为需要进一步调试的可疑代码,从而将与软件错误定位无关的代码自动过滤掉,缩小错误代码的搜索范围,辅助开发人员快速有效地定位软件错误。传统的统计分析方法通常能揭示统计关联(变量的联合分布),而不能充分分析程序元素间的相互影响。当软件错误涉及多个程序元素间复杂交互的情况下,可能定位不到错误语句。此外,现有方法通常只检测可疑程序语句或谓词,缺少对错误行为状态的描述,需要由开发人员进一步判定是否存在错误。由于错误可能起源于失效点之前的任何位置,因此仅通过孤立的可疑语句或谓词来理解软件错误的产生原因是很困难的,也是不准确的。

发明内容
本发明是要解决传统的软件错误定位方法定位精度低的问题,而提供了基于状态依赖概率建模的软件错误定位方法。基于状态依赖概率建模的软件错误定位方法包括的具体步骤如下:步骤1:分别执行正确测试用例和错误测试用例,并分别对正确测试用例和错误测试用例建立状态依赖概率模型;步骤2:在步骤I的基础上,根据状态依赖概率模型,计算每个节点的可疑度;步骤3:将错误定位信息按可疑度进行降序排列,可疑度高的节点认定为更有可能出错的节点,即完成了对基于状态依赖概率建模的软件的错误进行定位。发明效果:本发明的基于状态依赖概率建模的软件错误定位方法,能够有效定位与控制依赖相关的软件错误。与错误定位方法SB1、SOBER、Tarantula相比,定位精度可提高10%以上,适用于大规模程序代码的错误定位技术领域。本发明的基本思想是:节点的状态依赖可以很好的表示节点的执行状态以及节点在各状态下的依赖关系,有助于进行错误定位。如果某个节点的状态依赖关系在错误测试用例执行过程中出现的频率较高,而在正确测试用例执行过程中出现的频率较低或没有出现,则该节点的状态依赖关系很可能是错误的。根据这一思想计算各语句在各个状态下的可疑度,进而有效定位软件错误。


图1是本发明的流程示意图;图2是具体实施方式
一中步骤I中建立状态依赖概率模型示意图;图3是具体实施方式
一中程序控制流图实例示意图;图4是具体实施方式
一中程序控制依赖路径实例示意图。
具体实施例方式具体实施方式
一:结合图1 图4说明本实施方式,本实施方式的基于状态依赖概率建模的软件错误定位方法包括的具体步骤如下:步骤1:分别执行正确测试用例和错误测试用例,并分别对正确测试用例和错误测试用例建立状态依赖概率模型;步骤2:在步骤I的基础上,根据状态依赖概率模型,计算每个节点的可疑度;步骤3:将错误定位信息按可疑度进行降序排列,可疑度高的节点认定为更有可能出错的节点,即完成了对基于状态依赖概率建模的软件的错误进行定位。本实施方式效果:本实施方式的基于状态依赖概率建模的软件错误定位方法,能够有效定位与控制依赖相关的软件错误。与错误定位方法SB1、SOBER、Tarantula相比,定位精度可提高10%以上,适用于大规模程序代码的错误定位技术领域。本实施方式的基本思想是:节点的状态依赖可以很好的表示节点的执行状态以及节点在各状态下的依赖关系,有助于进行错误定位。如果某个节点的状态依赖关系在错误测试用例执行过程中出现的频率较高,而在正确测试用例执行过程中出现的频率较低或没有出现,则该节点的状态依赖关系很可能是错误的。根据这一思想计算各语句在各个状态下的可疑度,进而有效定位软件错误。
具体实施方式
二:本实施方式与具体实施方式
一不同的是:步骤I中的所述建立状态依赖概率模型的方法具体为:A、首先为程序建立控制流图,记录语句间的控制依赖关系;B、然后通过运行测试用例,插装捕获节点的控制依赖轨迹,记录每个节点的执行状态;其中,所述每个节点,执行测试用例时,都具有执行和未被执行两种状态,而分支节点在被执行时,又分为true和false两种状态;C、最后根据测试用例执行结果,统计每个节点在各状态的依赖概率;其中,所述每个节点被执行的概率记为P (node),对于分支节点在被执行概率的基础上记录状态为true和 false 的概率,记为 P (node (true))和 P (node (false));所述每个节点,根据下式计算每个节点node被执行的概率P (node):
权利要求
1.基于状态依赖概率建模的软件错误定位方法,其特征在于基于状态依赖概率建模的软件错误定位方法包括的具体步骤如下: 步骤1:分别执行正确测试用例和错误测试用例,并分别对正确测试用例和错误测试用例建立状态依赖概率模型; 步骤2:在步骤I的基础上,根据状态依赖概率模型,计算每个节点的可疑度; 步骤3:将错误定位信息按可疑度进行降序排列,可疑度高的节点认定为更有可能出错的节点,即完成了对基于状态依赖概率建模的软件的错误进行定位。
2.根据权利要求1所述的基于状态依赖概率建模的软件错误定位方法,其特征在于步骤I中的所述建立状态依赖概率模型的方法具体为: A、首先为程序建立控制流图,记录语句间的控制依赖关系; B、然后通过运行测试用例,插装捕获节点的控制依赖轨迹,记录每个节点的执行状态; 其中,所述每个节点,执行测试用例时,都具有执行和未被执行两种状态,而分支节点在被执行时,又分为true和false两种状态; C、最后根据测试用例执行结果,统计每个节点在各状态的依赖概率;其中,所述每个节点被执行的概率记为P(node),对于分支节点在被执行概率的基础上记录状态为true和false 的概率,记为 P (node (true))和 P (node (false)); 所述每个节点 ,根据下式计算每个节点node被执行的概率P (node): Pinode) = -n(no—)——X P(para(n0.)) (I》 n(para(node)) 其中,所述P(para(node))为节点node的父节点被执行的概率,n(node)为控制依赖路径中节点node被执行的次数,n (para(node))为控制依赖路径中节点node的其父节点被执行的次数; 所述分支节点,在被执行概率的基础上计算节点状态为true和false的概率,即P (node (true))和 P (node (false)):P (node) = P (node (true)) +P (node (false)) (2) 其中,所述 P_de(_)) = —P(node) =--X P(OOde) n(node)n(node(irue)) + n(node(fa!se)) 所述 P(—.:.n(!10—))x P(node)=——n(n0de(灿——X__ nf node)n(node(//7/L^)) + 所述n(node (true))为控制依赖路径中节点node的执行状态为true的次数,所述n(node (false))为控制依赖路径中节点node的执行状态为false的次数; D、建立状态依赖概率模型: 程序代码P的状态依赖概率模型是一个三元组(C,S,R),它记录了节点在不同状态下的依赖概率,其中: 所述C = (N,E)是P的控制流图,N为节点集合,E为控制依赖边集合,表示程序的控制依赖信息; 所述S是节点到状态的映射;所述R是节点各状态的依赖概率,节点状态依赖概率通过步骤B计算得到。
3.根据权利要求2所述的基于状态依赖概率建模的软件错误定位方法,其特征在于步骤2中的所述计算每个节点被执行状态的可疑度的方法,具体为: 所述每个节点,计算每个节点被执行状态的可疑度suspicious_score:
4.根据权利要求3所述的基于状态依赖概率建模的软件错误定位方法,其特征在于所述节点为对应于程序中的每条语句。
5.根据权利要求4所述的基于状态依赖概率建模的软件错误定位方法,其特征在于所述分支节点为对应于程序中的选择语句和循环语句。
全文摘要
基于状态依赖概率建模的软件错误定位方法,本发明涉及计算机程序分析领域。本发明是要解决传统的软件错误定位方法定位精度低的问题,而提供了基于状态依赖概率建模的软件错误定位方法。步骤1分别执行正确测试用例和错误测试用例,并分别对正确测试用例和错误测试用例建立状态依赖概率模型;步骤2在步骤1的基础上,根据状态依赖概率模型,计算每个节点的可疑度;步骤3将错误定位信息按可疑度进行降序排列,可疑度高的节点认定为更有可能出错的节点,即完成了对基于状态依赖概率建模的软件的错误进行定位。本发明应用于计算机程序分析领域。
文档编号G06F11/36GK103150254SQ201310099998
公开日2013年6月12日 申请日期2013年3月26日 优先权日2013年3月26日
发明者苏小红, 龚丹丹, 王甜甜, 马培军, 王煜, 赵玲玲 申请人:哈尔滨工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1