CN103150254B - 基于状态依赖概率建模的软件错误定位方法 - Google Patents
基于状态依赖概率建模的软件错误定位方法 Download PDFInfo
- Publication number
- CN103150254B CN103150254B CN201310099998.0A CN201310099998A CN103150254B CN 103150254 B CN103150254 B CN 103150254B CN 201310099998 A CN201310099998 A CN 201310099998A CN 103150254 B CN103150254 B CN 103150254B
- Authority
- CN
- China
- Prior art keywords
- node
- state
- false
- true
- dependence
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Abstract
基于状态依赖概率建模的软件错误定位方法,本发明涉及计算机程序分析领域。本发明是要解决传统的软件错误定位方法定位精度低的问题,而提供了基于状态依赖概率建模的软件错误定位方法。步骤1:分别执行正确测试用例和错误测试用例,并分别对正确测试用例和错误测试用例建立状态依赖概率模型;步骤2:在步骤1的基础上,根据状态依赖概率模型,计算每个节点的可疑度;步骤3:将错误定位信息按可疑度进行降序排列,可疑度高的节点认定为更有可能出错的节点,即完成了对基于状态依赖概率建模的软件的错误进行定位。本发明应用于计算机程序分析领域。
Description
技术领域
本发明涉及计算机程序分析领域。
背景技术
传统的软件错误定位方法大多采用设置断点等人工分析的方法,人工定位错误不仅难度大,而且极其耗时。要准确定位软件中的错误是极其困难的。当开发人员在程序执行过程中发现软件错误时,一方面,要么错误的症状与导致错误的根源(程序代码)可能相距甚远,要么很难产生完全一样的输入条件,使得“错误的现场”难以恢复,要么错误时隐时现,甚至可能在另一个错误被修正后暂时消失,导致某些错误难以被及时捕捉,而另一方面,在一个大型软件中一个错误的测试用例所覆盖的语句数量又往往是非常庞大的,这就使得程序开发人员需要花费大量的时间和精力来查找和定位产生错误的程序代码。软件错误自动定位的目的就是通过计算机分析程序源代码或程序运行过程中产生的运行时状态,检测程序中的异常情况,并将其独立出来作为需要进一步调试的可疑代码,从而将与软件错误定位无关的代码自动过滤掉,缩小错误代码的搜索范围,辅助开发人员快速有效地定位软件错误。
传统的统计分析方法通常能揭示统计关联(变量的联合分布),而不能充分分析程序元素间的相互影响。当软件错误涉及多个程序元素间复杂交互的情况下,可能定位不到错误语句。此外,现有方法通常只检测可疑程序语句或谓词,缺少对错误行为状态的描述,需要由开发人员进一步判定是否存在错误。由于错误可能起源于失效点之前的任何位置,因此仅通过孤立的可疑语句或谓词来理解软件错误的产生原因是很困难的,也是不准确的。
发明内容
本发明是要解决传统的软件错误定位方法定位精度低的问题,而提供了基于状态依赖概率建模的软件错误定位方法。
基于状态依赖概率建模的软件错误定位方法包括的具体步骤如下:
步骤1:分别执行正确测试用例和错误测试用例,并分别对正确测试用例和错误测试用例建立状态依赖概率模型;
步骤2:在步骤1的基础上,根据状态依赖概率模型,计算每个节点的可疑度;
步骤3:将错误定位信息按可疑度进行降序排列,可疑度高的节点认定为更有可能出错的节点,即完成了对基于状态依赖概率建模的软件的错误进行定位。
发明效果:
本发明的基于状态依赖概率建模的软件错误定位方法,能够有效定位与控制依赖相关的软件错误。与错误定位方法SBI、SOBER、Tarantula相比,定位精度可提高10%以上,适用于大规模程序代码的错误定位技术领域。
本发明的基本思想是:节点的状态依赖可以很好的表示节点的执行状态以及节点在各状态下的依赖关系,有助于进行错误定位。如果某个节点的状态依赖关系在错误测试用例执行过程中出现的频率较高,而在正确测试用例执行过程中出现的频率较低或没有出现,则该节点的状态依赖关系很可能是错误的。根据这一思想计算各语句在各个状态下的可疑度,进而有效定位软件错误。
附图说明
图1是本发明的流程示意图;
图2是具体实施方式一中步骤1中建立状态依赖概率模型示意图;
图3是具体实施方式一中程序控制流图实例示意图;
图4是具体实施方式一中程序控制依赖路径实例示意图。
具体实施方式
具体实施方式一:结合图1~图4说明本实施方式,本实施方式的基于状态依赖概率建模的软件错误定位方法包括的具体步骤如下:
步骤1:分别执行正确测试用例和错误测试用例,并分别对正确测试用例和错误测试用例建立状态依赖概率模型;
步骤2:在步骤1的基础上,根据状态依赖概率模型,计算每个节点的可疑度;
步骤3:将错误定位信息按可疑度进行降序排列,可疑度高的节点认定为更有可能出错的节点,即完成了对基于状态依赖概率建模的软件的错误进行定位。
本实施方式效果:
本实施方式的基于状态依赖概率建模的软件错误定位方法,能够有效定位与控制依赖相关的软件错误。与错误定位方法SBI、SOBER、Tarantula相比,定位精度可提高10%以上,适用于大规模程序代码的错误定位技术领域。
本实施方式的基本思想是:节点的状态依赖可以很好的表示节点的执行状态以及节点在各状态下的依赖关系,有助于进行错误定位。如果某个节点的状态依赖关系在错误测试用例执行过程中出现的频率较高,而在正确测试用例执行过程中出现的频率较低或没有出现,则该节点的状态依赖关系很可能是错误的。根据这一思想计算各语句在各个状态下的可疑度,进而有效定位软件错误。
具体实施方式二:本实施方式与具体实施方式一不同的是:步骤1中的所述建立状态依赖概率模型的方法具体为:
A、首先为程序建立控制流图,记录语句间的控制依赖关系;
B、然后通过运行测试用例,插装捕获节点的控制依赖轨迹,记录每个节点的执行状态;
其中,所述每个节点,执行测试用例时,都具有执行和未被执行两种状态,而分支节点在被执行时,又分为true和false两种状态;
C、最后根据测试用例执行结果,统计每个节点在各状态的依赖概率;其中,所述每个节点被执行的概率记为P(node),对于分支节点在被执行概率的基础上记录状态为true和false的概率,记为P(node(true))和P(node(false));
所述每个节点,根据下式计算每个节点node被执行的概率P(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)
其中,所述
所述
所述n(node(true))为控制依赖路径中节点node的执行状态为true的次数,所述n(node(false))为控制依赖路径中节点node的执行状态为false的次数;
D、建立状态依赖概率模型:
程序代码P的状态依赖概率模型是一个三元组(C,S,R),它记录了节点在不同状态下的依赖概率,其中:
所述C=(N,E)是P的控制流图,N为节点集合,E为控制依赖边集合,表示程序的控制依赖信息;
所述S是节点到状态的映射;
所述R是节点各状态的依赖概率,节点状态依赖概率通过步骤B计算得到。其它步骤及参数与具体实施方式一相同。
具体实施方式三:本实施方式与具体实施方式二不同的是:步骤2中的所述计算每个节点被执行状态的可疑度的方法,具体为:
所述每个节点,计算每个节点被执行状态的可疑度suspicious_score:
其中,Ppassed(node)为执行正确测试用例时节点被执行的概率,Pfailed(node)为执行错误测试用例时节点被执行的概率;
所述分支节点,分别计算节点状态为true和false的可疑度suspicious_scoreT和suspicious_scoreF:
其中,Ppassed(node(true))和Ppassed(node(false))为执行正确测试用例时,节点状态分别为true和false时的状态依赖概率;Pfailed(node(true))和Pfailed(node(false))为执行错误测试用例时,节点状态分别为true和false时的状态依赖概率。其它步骤及参数与具体实施方式二相同。
具体实施方式四:本实施方式与具体实施方式三不同的是:所述节点为对应于程序中的每条语句。其它步骤及参数与具体实施方式三相同。
具体实施方式五:本实施方式与具体实施方式四不同的是:所述分支节点为对应于程序中的选择语句和循环语句。其它步骤及参数与具体实施方式四相同。
Claims (4)
1.基于状态依赖概率建模的软件错误定位方法,其特征在于基于状态依赖概率建模的软件错误定位方法包括的具体步骤如下:
步骤1:分别执行正确测试用例和错误测试用例,并分别对正确测试用例和错误测试用例建立状态依赖概率模型;
其中,所述建立状态依赖概率模型的方法具体为:
A、首先为程序建立控制流图,记录语句间的控制依赖关系;
B、然后通过运行测试用例,插装捕获节点的控制依赖轨迹,记录每个节点的执行状态;
其中,所述每个节点,执行测试用例时,都具有执行和未被执行两种状态,而分支节点在被执行时,又分为true和false两种状态;
C、最后根据测试用例执行结果,统计每个节点在各状态的依赖概率;其中,所述每个节点被执行的概率记为P(node),对于分支节点在被执行概率的基础上记录状态为true和false的概率,记为P(node(true))和P(node(false));
所述每个节点,根据下式计算每个节点node被执行的概率P(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)
其中,所述
所述
所述n(node(true))为控制依赖路径中节点node的执行状态为true的次数,所述n(node(false))为控制依赖路径中节点node的执行状态为false的次数;
D、建立状态依赖概率模型:
程序代码P的状态依赖概率模型是一个三元组(C,S,R),它记录了节点在不同状态下的依赖概率,其中:
所述C=(N,E)是P的控制流图,N为节点集合,E为控制依赖边集合,表示程序的控制依赖信息;
所述S是节点到状态的映射;
所述R是节点各状态的依赖概率,节点状态依赖概率通过步骤B计算得到;
步骤2:在步骤1的基础上,根据状态依赖概率模型,计算每个节点的可疑度;步骤3:将错误定位信息按可疑度进行降序排列,可疑度高的节点认定为更有可能出错的节点,即完成了对基于状态依赖概率建模的软件的错误进行定位。
2.根据权利要求1所述的基于状态依赖概率建模的软件错误定位方法,其特征在于步骤2中的所述计算每个节点被执行状态的可疑度的方法,具体为:
所述每个节点,计算每个节点被执行状态的可疑度suspicious_score:
其中,Ppassed(node)为执行正确测试用例时节点被执行的概率,Pfailed(node)为执行错误测试用例时节点被执行的概率;
所述分支节点,分别计算节点状态为true和false的可疑度suspicious_scoreT和suspicious_scoreF:
其中,Ppassed(node(true))和Ppassed(node(false))为执行正确测试用例时,节点状态分别为true和false时的状态依赖概率;Pfailed(node(true))和Pfailed(node(false))为执行错误测试用例时,节点状态分别为true和false时的状态依赖概率。
3.根据权利要求2所述的基于状态依赖概率建模的软件错误定位方法,其特征在于所述节点为对应于程序中的每条语句。
4.根据权利要求3所述的基于状态依赖概率建模的软件错误定位方法,其特征在于所述分支节点为对应于程序中的选择语句和循环语句。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310099998.0A CN103150254B (zh) | 2013-03-26 | 2013-03-26 | 基于状态依赖概率建模的软件错误定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310099998.0A CN103150254B (zh) | 2013-03-26 | 2013-03-26 | 基于状态依赖概率建模的软件错误定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103150254A CN103150254A (zh) | 2013-06-12 |
CN103150254B true CN103150254B (zh) | 2015-05-13 |
Family
ID=48548349
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310099998.0A Active CN103150254B (zh) | 2013-03-26 | 2013-03-26 | 基于状态依赖概率建模的软件错误定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103150254B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104598381B (zh) * | 2015-01-26 | 2018-01-02 | 中国人民解放军理工大学 | 一种蜕变测试中失效测试用例的定位方法 |
CN110377930B (zh) * | 2019-05-31 | 2023-03-24 | 中国石油大学(华东) | 海洋平台失效路径的鲁棒性评估与加固方法 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102750223A (zh) * | 2012-06-06 | 2012-10-24 | 东南大学 | 一种基于面向对象程序切片谱的错误定位方法 |
-
2013
- 2013-03-26 CN CN201310099998.0A patent/CN103150254B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102750223A (zh) * | 2012-06-06 | 2012-10-24 | 东南大学 | 一种基于面向对象程序切片谱的错误定位方法 |
Non-Patent Citations (2)
Title |
---|
The Probabilistic Program Dependence Graph and Its Application to Fault Diagnosis;George K.Baah;《IEEE》;20100831;第36卷(第4期);第528-545页 * |
Zhenyu Zhang.Capturing Propagation of Infected Program States.《Proceedings of the 7th Joint Meeting of the European Software Engineering Conference and ACM SIGSOFT Symposium on the Foundations of Software Engineering》.2009,第43-52页. * |
Also Published As
Publication number | Publication date |
---|---|
CN103150254A (zh) | 2013-06-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103198016B (zh) | 基于联合依赖概率建模的软件错误定位方法 | |
US20150370685A1 (en) | Defect localization in software integration tests | |
Bartocci et al. | Localizing faults in Simulink/Stateflow models with STL | |
US6993736B2 (en) | Pending bug monitors for efficient processor development and debug | |
CN108897676B (zh) | 基于形式化规则的飞行引导控制软件可靠性分析系统与方法 | |
WO2014180107A1 (zh) | 一种基于测试的静态分析误报消除方法 | |
CN102750223B (zh) | 一种基于面向对象程序切片谱的错误定位方法 | |
CN104536883A (zh) | 一种静态缺陷检测方法及其系统 | |
CN110515826A (zh) | 一种基于次数频谱与神经网络算法的软件缺陷定位方法 | |
CN105468517B (zh) | 一种基于黑盒测试用例约简的统计错误定位方法 | |
CN105224463A (zh) | 一种基于崩溃栈数据的软件缺陷代码定位方法 | |
CN104572474A (zh) | 一种基于动态切片的轻量级错误定位技术实现方法 | |
CN103136103A (zh) | 一种面向错误定位需求的测试用例约简方法 | |
CN103995780A (zh) | 一种基于语句频度统计的程序错误定位方法 | |
CN103559131B (zh) | 一种有效的层次化错误定位方法 | |
CN111400505A (zh) | 一种用电信息采集系统匹配故障消缺方案的方法及系统 | |
CN104317707A (zh) | 一种基于程序结构影响感知的软件错误定位方法 | |
CN103150254B (zh) | 基于状态依赖概率建模的软件错误定位方法 | |
Islam et al. | Comparing bug replication in regular and micro code clones | |
CN112685320B (zh) | 一种基于多候选程序的软件缺陷修复方法及装置 | |
CN111045938B (zh) | 基于Pareto分布故障引进开源软件可靠性建模方法 | |
US9529042B2 (en) | Device for and method of estimating error point in logic diagram | |
CN110851353B (zh) | 一种基于Delta Debugging与约束求解的并发程序缺陷定位方法 | |
CN109002723B (zh) | 一种分段式符号执行方法 | |
WO2017201853A1 (zh) | 基于切片模型的程序回归错误定位方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |