CN104317707B - 一种基于程序结构影响感知的软件错误定位方法 - Google Patents

一种基于程序结构影响感知的软件错误定位方法 Download PDF

Info

Publication number
CN104317707B
CN104317707B CN201410546645.5A CN201410546645A CN104317707B CN 104317707 B CN104317707 B CN 104317707B CN 201410546645 A CN201410546645 A CN 201410546645A CN 104317707 B CN104317707 B CN 104317707B
Authority
CN
China
Prior art keywords
mrow
program
sentence
mistake
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.)
Active
Application number
CN201410546645.5A
Other languages
English (en)
Other versions
CN104317707A (zh
Inventor
李恒
张震宇
刘畅
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Software of CAS
Original Assignee
Institute of Software of CAS
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Institute of Software of CAS filed Critical Institute of Software of CAS
Priority to CN201410546645.5A priority Critical patent/CN104317707B/zh
Publication of CN104317707A publication Critical patent/CN104317707A/zh
Application granted granted Critical
Publication of CN104317707B publication Critical patent/CN104317707B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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 (1)

1.一种基于程序结构影响感知的软件错误定位方法,其特征在于:通过统计程序历史错误版本中各语句的可疑度值并进行分析,估算程序结构对语句可疑度值的影响函数,进而校正和优化当前的可疑度函数,在后续错误定位过程中消除程序结构对错误定位效果的影响,
实现步骤如下:
(1)提取程序集中各版本的程序语句的覆盖信息,即错误语句在失败的程序执行中运行的次数和语句在成功的程序执行中运行的次数;
(2)选择某种可疑度函数,计算错误语句的可疑度;
(3)统计程序错误版本中各语句的可疑度值,以估算程序结构对错误定位方法的影响;
(4)构造程序结构对当前使用的错误定位方法的影响函数,利用该影响函数对可疑度函数进行校正和优化;
(5)在程序后续版本的错误定位过程中,根据程序的每条语句的运行特征,利用步骤(4)中校正和优化之后的可疑度函数,计算每条语句的可疑度,然后根据可疑值从大到小对语句进行排序,根据此顺序对程序语句逐条排查,定位程序中的错误;
所述步骤(4)中使用简单移动平均法来构造程序结构对错误定位方法的影响函数,具体如下:
<mrow> <msup> <mi>Imp</mi> <mi>v</mi> </msup> <mrow> <mo>(</mo> <msub> <mi>s</mi> <mi>i</mi> </msub> <mo>)</mo> </mrow> <mo>=</mo> <mfenced open = "{" close = ""> <mtable> <mtr> <mtd> <mrow> <mn>0</mn> <mo>,</mo> <mi>v</mi> <mo>=</mo> <mn>1</mn> </mrow> </mtd> </mtr> <mtr> <mtd> <mrow> <mfrac> <mn>1</mn> <mrow> <mi>v</mi> <mo>-</mo> <mn>1</mn> </mrow> </mfrac> <munderover> <mo>&amp;Sigma;</mo> <mrow> <mi>k</mi> <mo>=</mo> <mn>1</mn> </mrow> <mrow> <mi>v</mi> <mo>-</mo> <mn>1</mn> </mrow> </munderover> <msubsup> <mi>R</mi> <mi>T</mi> <mi>k</mi> </msubsup> <mrow> <mo>(</mo> <msub> <mi>s</mi> <mi>i</mi> </msub> <mo>)</mo> </mrow> <mo>,</mo> <mi>v</mi> <mo>&amp;GreaterEqual;</mo> <mn>2</mn> </mrow> </mtd> </mtr> </mtable> </mfenced> <mn>......3</mn> </mrow>
<mrow> <msubsup> <mi>R</mi> <mi>T</mi> <mi>v</mi> </msubsup> <mrow> <mo>(</mo> <msub> <mi>s</mi> <mi>i</mi> </msub> <mo>)</mo> </mrow> <mo>=</mo> <msubsup> <mi>R</mi> <mi>T</mi> <mi>v</mi> </msubsup> <mrow> <mo>(</mo> <msub> <mi>s</mi> <mi>i</mi> </msub> <mo>)</mo> </mrow> <mo>-</mo> <msup> <mi>Imp</mi> <mi>v</mi> </msup> <mrow> <mo>(</mo> <msub> <mi>s</mi> <mi>i</mi> </msub> <mo>)</mo> </mrow> <mn>......4</mn> </mrow>
其中,Impv(si)表示语句si可疑度值受程序结构的影响值,v表示当前程序的版本,表示在第k个版本中使用公式T来计算语句si的可疑度值;
函数3表示该影响函数,使用简单移动平均法来构造程序结构对错误定位方法的影响函数,即选取一定的时间跨度,逐项推移,将位于该跨度之内的程序版本作为参考来获取程序结构对错误定位可疑度函数的影响,并利用函数4来消除程序结构对可疑度函数的影响,从而实现校正和优化。
CN201410546645.5A 2014-10-15 2014-10-15 一种基于程序结构影响感知的软件错误定位方法 Active CN104317707B (zh)

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 CN104317707A (zh) 2015-01-28
CN104317707B true 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)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105786704A (zh) * 2016-02-22 2016-07-20 南京大学 一种工作量感知的bug定位技术有效性评价方法
CN106021116B (zh) * 2016-06-07 2018-07-13 北京信息科技大学 复杂系统中不可达函数调用路径检测方法
CN106886490B (zh) * 2016-12-30 2019-09-20 浙江理工大学 一种基于失效轨迹的程序错误定位方法
CN109359023B (zh) * 2018-04-27 2020-01-24 哈尔滨工程大学 基于提交信息的移动应用错误定位方法
CN111444078B (zh) * 2019-01-16 2023-02-07 河南工业大学 一种基于蚁群算法的软件缺陷定位方法及装置
CN111625444B (zh) * 2020-04-10 2021-09-17 中国科学院软件研究所 一种基于频谱法的程序错误定位方法和装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
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
CN102708052B (zh) * 2012-04-27 2017-10-20 北京邮电大学 一种单元测试中软件故障自动定位方法
CN102750223B (zh) * 2012-06-06 2015-07-29 东南大学 一种基于面向对象程序切片谱的错误定位方法
US9575871B2 (en) * 2012-09-04 2017-02-21 Salesforce.Com, Inc. System and method for dynamically debugging data in a multi-tenant database environment
CN103744789B (zh) * 2014-01-23 2017-01-11 中国科学院软件研究所 一种三维曲面表示的软件错误定位方法
CN103995780B (zh) * 2014-05-30 2017-01-04 浙江理工大学 一种基于语句频度统计的程序错误定位方法

Also Published As

Publication number Publication date
CN104317707A (zh) 2015-01-28

Similar Documents

Publication Publication Date Title
CN104317707B (zh) 一种基于程序结构影响感知的软件错误定位方法
CN107577603A (zh) 一种基于测试用例构建决策树的程序条件语句自动化修复系统及方法
CN103995780B (zh) 一种基于语句频度统计的程序错误定位方法
CN110515826B (zh) 一种基于次数频谱与神经网络算法的软件缺陷定位方法
CN105653450A (zh) 基于改进遗传算法与Adaboost结合的软件缺陷数据特征选择方法
CN107678971B (zh) 代码味道驱动的基于克隆和耦合检测的代码缺陷预测方法
CN115629998B (zh) 一种基于KMeans聚类和相似度的测试用例筛选方法
US10761961B2 (en) Identification of software program fault locations
CN105701013A (zh) 基于互信息的软件缺陷数据特征选择方法
CN115687115B (zh) 一种移动应用程序自动化测试方法及系统
CN109976990A (zh) 一种用于确认软件测试用例优先级的方法及系统
Kadry A new proposed technique to improve software regression testing cost
CN102521131A (zh) 一种基于动态基本块的缺陷定位测试用例约简方法
CN112685320B (zh) 一种基于多候选程序的软件缺陷修复方法及装置
Alenezi et al. The impact of co-evolution of code production and test suites through software releases in open source software systems
CN105159826A (zh) 一种定位目标程序中的错误语句的方法和装置
WO2017201853A1 (zh) 基于切片模型的程序回归错误定位方法
KR100713206B1 (ko) 다중고착 고장 진단을 위한 매칭 방법
CN101901185A (zh) 一种按类组织执行轨迹的面向对象程序缺陷定位方法
CN103744789B (zh) 一种三维曲面表示的软件错误定位方法
CN104317706B (zh) 一种基于预运算的程序变异软件错误定位方法
Goyal et al. Characterization study of developers in non-reproducible bugs
Van Nho et al. A solution for improving the effectiveness of higher order mutation testing
CN104572455A (zh) 一种基于马尔科夫链的构件化软件可靠性评估方法
CN102073584B (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