CN104317707A - 一种基于程序结构影响感知的软件错误定位方法 - Google Patents
一种基于程序结构影响感知的软件错误定位方法 Download PDFInfo
- Publication number
- CN104317707A CN104317707A CN201410546645.5A CN201410546645A CN104317707A CN 104317707 A CN104317707 A CN 104317707A CN 201410546645 A CN201410546645 A CN 201410546645A CN 104317707 A CN104317707 A CN 104317707A
- Authority
- CN
- China
- Prior art keywords
- program
- statement
- mistake
- suspicious degree
- function
- 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.)
- Granted
Links
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种基于程序结构影响感知的软件错误定位方法,步骤包括:提取程序集中各版本的程序语句的覆盖信息—错误语句在所有失败的程序执行中运行的次数和语句在所有成功的程序执行中运行的次数,选择某种可疑度函数,计算错误语句的可疑度;统计程序错误版本中各语句的可疑度值;构造程序结构对当前使用的错误定位方法的影响函数,利用该影响函数对可疑度函数进行校正和优化;在程序后续版本的错误定位过程中,根据程序的每条语句的运行特征,利用上述校正和优化之后的可疑度函数,计算每条语句的可疑度,然后根据可疑值从大到小对语句进行排序,根据此顺序对程序语句逐条排查,定位程序中的错误。本发明提高了错误定位的准确度。
Description
技术领域
本发明涉及一种基于程序结构影响感知的软件错误定位方法,属于软件测试技术领域。
背景技术
软件在日常生活中的应用越来越广泛。随着软件功能和架构的复杂化,想要在软件产品中彻底避免软件错误的出现,仍然是很困难的。软件错误,即导致软件实际运行的结果和预期的运行结果不相符的那些因素,这些错误的存在,导致软件相应的功能丧失。软件调试是用于修改软件错误的常用手段,是一项十分重要但又代价很大的工程,它通常包括三个步骤:错误的定位、错误的修复和对错误修复后的再确认。其中,错误的定位是最为重要也是最为费时和费力的过程。
语句级别的统计错误定位方法通过收集每条语句在程序执行失败或成功时的运行信息来分析和评估该语句存在错误的可疑程度。举例来说,若某条语句总是在失败的程序执行中被运行,而从未在成功的程序执行中被运行过,那么,它很可能是和软件错误相关的。在此类统计错误定位方法中,通常采用可疑度函数来评估语句存在错误的可能性。
在进行错误定位时,首先需要多次执行程序,统计失败测试用例的条数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数据集的特征信息
训练程序 | 语句数目 | 错误版本数目 | 失败执行的比例 |
print_tokens | 341–342 | 7 | 0.15%-3.6% |
print_tokens2 | 350–354 | 10 | 0.8%-12.6% |
replace | 508–515 | 32 | 0.22%-5.3% |
schedule | 291–294 | 9 | 0.15%-11.1% |
scheudule2 | 261–263 | 10 | 0.1%-2.4% |
tcas | 133–137 | 41 | 0.19%-8.2% |
tot_info | 272–274 | 23 | 0.28%-21.6% |
space | 9250-9255 | 38 | 0.12%-92.7% |
实验步骤:
(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中的效率对比,代码检查率表示程序中检查的代码行数占总行数的百分比,错误定位率表示已定位的错误的数目占所有错误数目的百分比。从图中可以看出,经过校正和优化后的错误定位方法(实线)都要优于原始的错误定位方法(虚线)。
综上所述,本发明中提出的程序结构感知的错误定位优化策略在错误定位方面效果显著。
提供以上实施仅仅是为了描述本发明的目的,而并非要限制本发明的范围。本发明的范围由所附权利要求限定。不脱离本发明的精神和原理而做出的各种等同替换和修改,均应涵盖在本发明的范围之内。
Claims (2)
1.一种基于程序结构影响感知的软件错误定位方法,其特征在于实现步骤如下:
(1)提取程序集中各版本的程序语句的覆盖信息,即错误语句在失败的程序执行中运行的次数和语句在成功的程序执行中运行的次数;
(2)选择某种可疑度函数,计算错误语句的可疑度;
(3)统计程序错误版本中各语句的可疑度值,以估算程序结构对错误定位方法的影响;
(4)构造程序结构对当前使用的错误定位方法的影响函数,利用该影响函数对可疑度函数进行校正和优化;
(5)在程序后续版本的错误定位过程中,根据程序的每条语句的运行特征,利用步骤(4)中校正和优化之后的可疑度函数,计算每条语句的可疑度,然后根据可疑值从大到小对语句进行排序,根据此顺序对程序语句逐条排查,定位程序中的错误。
2.根据权利要求1所述的基于程序结构影响感知的软件错误定位方法,其特征在于:所述步骤(4)中使用简单移动平均法来构造程序结构对错误定位方法的影响函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410546645.5A CN104317707B (zh) | 2014-10-15 | 2014-10-15 | 一种基于程序结构影响感知的软件错误定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410546645.5A CN104317707B (zh) | 2014-10-15 | 2014-10-15 | 一种基于程序结构影响感知的软件错误定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104317707A true CN104317707A (zh) | 2015-01-28 |
CN104317707B CN104317707B (zh) | 2017-09-29 |
Family
ID=52372942
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410546645.5A Active CN104317707B (zh) | 2014-10-15 | 2014-10-15 | 一种基于程序结构影响感知的软件错误定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104317707B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105786704A (zh) * | 2016-02-22 | 2016-07-20 | 南京大学 | 一种工作量感知的bug定位技术有效性评价方法 |
CN106021116A (zh) * | 2016-06-07 | 2016-10-12 | 北京信息科技大学 | 复杂系统中不可达函数调用路径检测方法 |
CN106886490A (zh) * | 2016-12-30 | 2017-06-23 | 浙江理工大学 | 一种基于失效轨迹的程序错误定位方法 |
CN109359023A (zh) * | 2018-04-27 | 2019-02-19 | 哈尔滨工程大学 | 基于提交信息的移动应用错误定位方法 |
CN111444078A (zh) * | 2019-01-16 | 2020-07-24 | 河南工业大学 | 一种基于蚁群算法的软件缺陷定位方法及装置 |
CN111625444A (zh) * | 2020-04-10 | 2020-09-04 | 中国科学院软件研究所 | 一种基于频谱法的程序错误定位方法和装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102708052A (zh) * | 2012-04-27 | 2012-10-03 | 北京邮电大学 | 一种单元测试中软件故障自动定位方法 |
CN102750223A (zh) * | 2012-06-06 | 2012-10-24 | 东南大学 | 一种基于面向对象程序切片谱的错误定位方法 |
US20120290883A1 (en) * | 2010-11-11 | 2012-11-15 | Nec Laboratories America, Inc. | Computer Implemented Method for Precise May-Happen-in-Parallel Analysis with Applications to Dataflow Analysis of Concurrent Programs |
US20140068568A1 (en) * | 2012-09-04 | 2014-03-06 | Salesforce.Com, Inc. | System and method for dynamically debugging data in a multi-tenant database environment |
CN103744789A (zh) * | 2014-01-23 | 2014-04-23 | 中国科学院软件研究所 | 一种三维曲面表示的软件错误定位方法 |
CN103995780A (zh) * | 2014-05-30 | 2014-08-20 | 浙江理工大学 | 一种基于语句频度统计的程序错误定位方法 |
-
2014
- 2014-10-15 CN CN201410546645.5A patent/CN104317707B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120290883A1 (en) * | 2010-11-11 | 2012-11-15 | Nec Laboratories America, Inc. | Computer Implemented Method for Precise May-Happen-in-Parallel Analysis with Applications to Dataflow Analysis of Concurrent Programs |
CN102708052A (zh) * | 2012-04-27 | 2012-10-03 | 北京邮电大学 | 一种单元测试中软件故障自动定位方法 |
CN102750223A (zh) * | 2012-06-06 | 2012-10-24 | 东南大学 | 一种基于面向对象程序切片谱的错误定位方法 |
US20140068568A1 (en) * | 2012-09-04 | 2014-03-06 | Salesforce.Com, Inc. | System and method for dynamically debugging data in a multi-tenant database environment |
CN103744789A (zh) * | 2014-01-23 | 2014-04-23 | 中国科学院软件研究所 | 一种三维曲面表示的软件错误定位方法 |
CN103995780A (zh) * | 2014-05-30 | 2014-08-20 | 浙江理工大学 | 一种基于语句频度统计的程序错误定位方法 |
Non-Patent Citations (2)
Title |
---|
唐启锋等: "一种基于模型结合的错误定位方法", 《新型工业化》 * |
张云乾等: "基于马尔可夫模型的软件错误定位方法", 《计算机学报》 * |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105786704A (zh) * | 2016-02-22 | 2016-07-20 | 南京大学 | 一种工作量感知的bug定位技术有效性评价方法 |
CN106021116A (zh) * | 2016-06-07 | 2016-10-12 | 北京信息科技大学 | 复杂系统中不可达函数调用路径检测方法 |
CN106021116B (zh) * | 2016-06-07 | 2018-07-13 | 北京信息科技大学 | 复杂系统中不可达函数调用路径检测方法 |
CN106886490A (zh) * | 2016-12-30 | 2017-06-23 | 浙江理工大学 | 一种基于失效轨迹的程序错误定位方法 |
CN106886490B (zh) * | 2016-12-30 | 2019-09-20 | 浙江理工大学 | 一种基于失效轨迹的程序错误定位方法 |
CN109359023A (zh) * | 2018-04-27 | 2019-02-19 | 哈尔滨工程大学 | 基于提交信息的移动应用错误定位方法 |
CN109359023B (zh) * | 2018-04-27 | 2020-01-24 | 哈尔滨工程大学 | 基于提交信息的移动应用错误定位方法 |
CN111444078A (zh) * | 2019-01-16 | 2020-07-24 | 河南工业大学 | 一种基于蚁群算法的软件缺陷定位方法及装置 |
CN111444078B (zh) * | 2019-01-16 | 2023-02-07 | 河南工业大学 | 一种基于蚁群算法的软件缺陷定位方法及装置 |
CN111625444A (zh) * | 2020-04-10 | 2020-09-04 | 中国科学院软件研究所 | 一种基于频谱法的程序错误定位方法和装置 |
CN111625444B (zh) * | 2020-04-10 | 2021-09-17 | 中国科学院软件研究所 | 一种基于频谱法的程序错误定位方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104317707B (zh) | 2017-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104317707A (zh) | 一种基于程序结构影响感知的软件错误定位方法 | |
CN102880545A (zh) | 一种测试用例优先级排序动态调整方法 | |
CN102193864B (zh) | 基于覆盖度的错误定位技术的测试用例集优化方法 | |
CN105468517B (zh) | 一种基于黑盒测试用例约简的统计错误定位方法 | |
CN105868116A (zh) | 基于语义变异算子的测试用例生成和优化方法 | |
CN103995780B (zh) | 一种基于语句频度统计的程序错误定位方法 | |
CN105701013A (zh) | 基于互信息的软件缺陷数据特征选择方法 | |
CN102508767A (zh) | 一种基于形式概念分析的软件维护方法 | |
US20200201741A1 (en) | Identification of software program fault locations | |
CN110515826A (zh) | 一种基于次数频谱与神经网络算法的软件缺陷定位方法 | |
CN103309811A (zh) | 一种基于测试执行记录快速定位软件代码缺陷的方法 | |
CN111782532B (zh) | 一种基于网络异常节点分析的软件故障定位方法及系统 | |
CN102681936B (zh) | 一种针对金融系统测试结果的验证方法及装置 | |
CN105528293A (zh) | 一种用于回归测试选取测试用例的系统及方法 | |
CN103455417B (zh) | 一种基于马尔可夫模型的软件错误定位系统及错误定位方法 | |
CN105159826A (zh) | 一种定位目标程序中的错误语句的方法和装置 | |
CN112685320A (zh) | 一种基于多候选程序的软件缺陷修复方法及装置 | |
CN115422865B (zh) | 仿真方法及装置、计算设备、计算机可读存储介质 | |
CN104615535B (zh) | 一种基于扩展的数据流模型来生成测试用例的方法与装置 | |
CN106095663A (zh) | 基于切片模型的程序回归错误定位方法 | |
CN110008120A (zh) | 一种基于频谱的软件故障定位方法 | |
CN103744789B (zh) | 一种三维曲面表示的软件错误定位方法 | |
CN114357919A (zh) | 对激励约束文件优化的反馈收敛方法和装置 | |
CN103150254B (zh) | 基于状态依赖概率建模的软件错误定位方法 | |
CN104050084A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |