CN106886490A - 一种基于失效轨迹的程序错误定位方法 - Google Patents

一种基于失效轨迹的程序错误定位方法 Download PDF

Info

Publication number
CN106886490A
CN106886490A CN201611259121.3A CN201611259121A CN106886490A CN 106886490 A CN106886490 A CN 106886490A CN 201611259121 A CN201611259121 A CN 201611259121A CN 106886490 A CN106886490 A CN 106886490A
Authority
CN
China
Prior art keywords
sentence
track
failure
program
mistake
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
Application number
CN201611259121.3A
Other languages
English (en)
Other versions
CN106886490B (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.)
Badcrystal Technology Garment Jiangsu Co ltd
Original Assignee
Zhejiang Sci Tech University ZSTU
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 Zhejiang Sci Tech University ZSTU filed Critical Zhejiang Sci Tech University ZSTU
Priority to CN201611259121.3A priority Critical patent/CN106886490B/zh
Publication of CN106886490A publication Critical patent/CN106886490A/zh
Application granted granted Critical
Publication of CN106886490B publication Critical patent/CN106886490B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3676Test management for coverage analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于失效轨迹的程序错误定位方法,其通过挑选一个合适的失效测试用例的执行谱即失效轨迹,再根据已有SFL方法的特定模型计算出的语句可疑度序列在失效轨迹中投影,按语句可疑度大小从大到小依次排查错误语句。本发明通过失效轨迹效用函数来评测失效轨迹,从所有的失效轨迹中选取函数值最小的失效轨迹作为关键失效轨迹,将传统错误定位报告中的语句可疑度排序序列投影到关键失效轨迹上,重构新的程序实体可疑排查序列,并根据新的程序实体序列按可疑度从高到低来检查程序实体,最终提高错误定位的效果。实验结果表明,相较于传统的基于程序频谱软件错误定位方法,本发明方法在错误定位效率方面有显著的提高。

Description

一种基于失效轨迹的程序错误定位方法
技术领域
本发明属于软件程序错误定位检测技术领域,具体涉及一种基于失效轨迹的程序错误定位方法。
背景技术
软件系统规模的不断扩大和复杂度的日益增加给软件开发和调试技术提出了新的挑战。软件调试是提高软件质量的重要手段,也是软件开发生命周期中的一项重要任务。错误定位是软件调试中的关键步骤,然而实践表明依靠人工实现程序错误定位是一项十分枯燥且耗时耗力的工作。因此,为了有效提高软件调试效率,实现自动化的软件错误定位成为了学术界和工业界共同追求的目标。
近些年,学者们提出了许多实现自动化软件错误定位的方法,基于频谱的软件错误定位(Spectrum-based fault localization,SFL)是其中具有代表性的一类方法。SFL通过统计分析被测程序在成功和失败测试用例中的代码覆盖信息来探索相应代码的出错可能性。具体地,SFL在实现错误语句定位的过程中,需要执行充分数量的测试例,分析对应测试例执行的程序频谱,通过构造特定的统计模型来计算语句错误的可疑度;最后,软件维护人员再根据可疑度从大到小按序排查出错误语句。SFL方法的应用通常基于假设如下:某代码出现在错误执行中的次数越大,则该代码是错误的可能性也越大;相反,某代码被正确测试执行覆盖的次数越大,则该代码是正确的可能性越大。但在一些特定的情况下,假设并不完全成立,这也是制约SFL方法错误定位精度的主要原因。
“失败测试用例必然至少执行到1条缺陷语句”是SFL方法应用的基本前提。换言之,如果一条程序语句在某个失败测试用例执行谱中没有出现,我们就可以断定该语句不是造成该测试用例失败的错误语句。然而,现有的基于SFL方法及其变体并没有充分应用该前提条件来提高错误定位的精度。
发明内容
鉴于上述,本发明提供了一种基于失效轨迹的程序错误定位方法,其通过挑选一个合适的失败测试用例的执行谱即失效轨迹,再根据已有SFL方法的特定模型计算出的语句可疑度在失效轨迹中按序排查错误语句;如果失效轨迹选择得当,则可以很大程度上剔除一些候选语句,从而有效提高原有SFL方法的错误定位精度和效率。
一种基于失效轨迹的程序错误定位方法,包括如下步骤:
(1)统计被测程序中各条语句在每组测试用例下的语句覆盖情况,得到对应的语句覆盖矩阵;
(2)统计每组测试用例在被测程序运行下的执行结果:正确或错误;以错误的测试用例所执行覆盖的语句集对应作为失效轨迹;
(3)应用失效轨迹效用评价函数计算各个失效轨迹的效用值,以效用值最小的失效轨迹作为关键失效轨迹;
(4)以关键失效轨迹作为错误排查范围,按照语句可疑度降序逐条进行错误定位。
所述语句覆盖情况的定义为:以某一测试用例作为被测程序的输入,若被测程序对于该测试用例的整个运行过程中执行了某一条语句,则该语句在该测试用例下的语句覆盖情况表示为1,否则表示为0。
所述语句覆盖矩阵的维度为m×n,m为被测程序的语句总数,n为测试用例总数;该矩阵中第i行第j列的元素值为第i条语句在第j组测试用例下的语句覆盖情况,i和j均为自然数且1≤i≤m,1≤j≤n。
所述步骤(3)中通过以下公式计算各失效轨迹的效用值:
其中:Ti为任一失效轨迹且Ti∈TT,TT为失效轨迹集合,Ii为Ti对应的错误测试用例,f(Ti)为失效轨迹Ti的效用值,S[Ii][i]为错误测试用例Ii运行过程中被测程序第i条语句的执行情况且S[Ii][i]∈[0,1],0表示未执行,1表示执行;sus[i]为第i条语句的可疑度值,m为被测程序的语句总数。
本发明通过失效轨迹效用评价函数来评估失效测试执行轨迹,从而识别关键失效轨迹;基于此,实现关键失效轨迹重构新的程序实体可疑排查队列,并根据新的程序实体序列从高到低来检查程序实体,最终提高错误定位的效果。实验结果表明,相较于传统的基于程序频谱软件错误定位方法,本发明方法在错误定位效率方面有显著的提高。
本发明并不是提出一种新的可疑度计算公式,而是另辟蹊径,基于这些宿主SFL方法,利用合适的失效轨迹来进一步缩小错误排查范围,有效改善错误定位效率。此外,本发明方法并没有对被测程序的错误类型有过多的限制,相对适用性更普遍。本发明只需要很小的失效轨迹评估开销,而且能够保证至少定位到一个错误,针对规模加大的被测程序具有一定的应用优势。
附图说明
图1为SFL方法的执行过程示意图。
图2为本发明基于失效轨迹错误定位方法的流程示意图。
图3为失效轨迹两个关键属性(语句可疑度和执行语句数量)的关系示意图。
图4为失效轨迹评价函数自变量和因变量的提取过程示意图。
图5(a)为本发明方法与SFL方法在可疑度公式Ochi、Tarantula和Jaccard下关于EXAM指标的实验结果对比示意图。
图5(b)为本发明方法与SFL方法在可疑度公式M2、Ample2和Cohen下关于EXAM指标的实验结果对比示意图。
图5(c)为本发明方法与SFL方法在可疑度公式Ohci2、Kulczynski1和Kulczynski2下关于EXAM指标的实验结果对比示意图。
图5(d)为本发明方法与SFL方法在可疑度公式Dstar、Wang3和Op2下关于EXAM指标的实验结果对比示意图。
图6为12种可疑度公式下失效轨迹与错误定位查找率的变化趋势示意图。
具体实施方式
为了更为具体地描述本发明,下面结合附图及具体实施方式对本发明的技术方案进行详细说明。
基于频谱的错误定位方法通过统计分析程序失效和程序频谱两者的关联,从而计算程序语句的出错可疑度。代码调试阶段软件工程师将根据可疑度从大到小来按序排查缺陷程序,SFL方法(以语句为基本单位)可以描述如图1过程。SFL方法可以计算得到被测程序P中每条语句si的可疑度Sui,根据可疑度排序所有的语句,得到P的另一个错误排查视图P'。软件维护工程师将根据P',逐一按序排查ac区间的程序语句集合Sac,直到找到第一条错误语句si。因此,提高SFL方法效率的问题可以形式化描述为:针对具体的被测程序P,设法最小化min(|Sac|)的最优化问题,其中|Sac|表示待排除的可疑区间ac中包含的语句数量。
然而,软件缺陷类型多样化限制了SFL方法错误定位的精度,在有些程序缺陷的情况下,SFL方法的错误定位效率受到了制约。换言之,ac排查区间中语句的可疑度值的精确程度受到影响,去除可疑度排序中的噪声是提高算法错误定位效率的有效途径。“失败测试用例必然至少执行到1条缺陷语句”意味着程序失效轨迹必定包含了错误语句。利用失效轨迹包含的程序语句错误信息,可以有效减少错误侦测的范围,从而提高错误定位的最终效率。为了便于形式化描述问题,我们给出如下定义:
定义1:被测程序P={s1,s2,...,si,...,sn}及其测试集{I1,I2,I3,...,Ii,...,In},Ii表示具体的测试例,si为程序语句,n≥1。如果Ii的程序执行结果R(Ii)=Fail,exec(si)表示语句si被执行的情况,那么Ii对应的失效轨迹测试集对应的失效轨迹集合表示为TT={T1,T2,...,Tn}。
如图1所示,假设程序错误定位待排查的语句集合为Sac,依赖失效轨迹Ti,可以得到错误定位排查的新区间为其中|X|≤|bc|,|bc|表示bc区间包含的语句数目。因为失效轨迹Ti必定包含一条错误语句,所以语句集合X必定包含了某条错误语句。程序P可能包含一个或多个错误。在多错误的场景下,se∈Ti表示可疑度值最大的那条错误语句,此刻,Sac即为所有可疑度值大于等于Se的语句集合。因此,如何计算Max(|Sac|-|X|)成为提高现有SFL方法错误排查效率的关键。
失效轨迹所包含的错误揭示信息可以在现有SFL方法的基础上,提升其错误定位效率和性能。本发明充分挖潜了失效轨迹FET(Failing Execution Trace)蕴含的错误语句信息,提出了一种新的SFL错误定位方法FET。
FET方法的基本思路为:利用已有的SFL方法执行测试并计算程序语句可疑度,甄选一个合适的失效轨迹来有效缩减根据可疑度排序的错误排除区间,从而提高SFL方法的错误定位效率,算法流程如图2所示。FET方法主要分三步实现程序错误定位:(1)基于现有的SFL方法计算被测程序的语句可疑度,根据可疑度降序构造被测程序的排错视图Ps;(2)分析程序所有的失效轨迹,从中选择一个利于最大化约减被测程序排错视图语句集合的关键失效轨迹Ti;(3)计算关键失效轨迹和被测程序排错视图的交集,构建新的排错语句集合Pst,按序排查Pst中的每条可疑语句。
在步骤(1)中,FET方法基于主流的SFL方法来计算被测程序的可疑度,并没有修改相应的可疑度计算公式。因此,该阶段计算所得的语句可疑度值的精确性只取决于对应SFL方法的优劣。步骤(2)是新方法的核心,FET方法的本质是试图从步骤(1)计算所得的可疑度降序的语句队列中,剔除某个失效轨迹未覆盖的语句,剩余程序保留原可疑度排序,从而有效减少错误语句的排查范围。因此,选择一个具有最大程度剔除待查视图中语句能力的失效轨迹成为了问题的关键,这样的失效轨迹称为关键失效轨迹。为了衡量每个失效轨迹的可疑度语句剔除能力,我们定义了失效轨迹的有效性评价函数f,通过函数值来挑选关键失效轨迹。最后,步骤(3)按照新的错误排查视图,根据可疑度从大到小逐一排查错误语句。根据基本假设1可知,FET方法必定能找到关键失效轨迹覆盖到的错误语句。
关键失效轨迹决定了FET方法改善宿主SFL方法效率的程度。然而,FET方法只能从被测程序所有失效轨迹中挑选单一的关键失效轨迹。因为,任意两个及两个以上失效轨迹的交集可能会遗漏错误语句,失效轨迹的并集的规模通常大于单个失效轨迹,因此也不适合用于FET。
如上所述,关键失效轨迹应该能够有助于FET方法最大程度的减少错误排查范围,提升宿主SFL方法的错误定位效率。为了实现该目标,关键失效轨迹应该尽可能多的剔除语句可疑度排序序列中排在真正错误语句之前的语句。然而,在未知错误语句具体位置的情况下,如何选择关键失效轨迹,提高其错误定位的有效性是一个具有挑战的难题。
根据宿主SFL方法的定义,计算所得的可疑度值越大的语句越可能是错误语句。因此,有效的失效轨迹应该具有两个必要属性:①能够最大化错误排查视图中剔除语句的数量;②能够尽可能多的剔除可疑度值大的语句。因此,针对FET方法,评价一个失效轨迹效用的依据是判断它符合这两个必要属性的程度。
图3形象地刻画了失效轨迹的两个关键属性。根据FET方法的原理,效用最大的失效轨迹对应的失效测试用例应尽可能少的执行程序语句并且其可疑度值应该尽可能的小。所以,FET方法选择的关键失效轨迹应该处于图3中的区域I,并且尽可能靠近原点。
为了度量失效轨迹的效用,根据两个关键属性提出了失效轨迹的效用度量函数f:
其中:Ti∈TT是失效轨迹,Ii为对应的失效测试用例;S[Ii][i]∈[0,1]是测试用例Ii执行中被测程序第i条语句的执行情况,0表示未执行,1表示执行;n≥1表示被测程序的语句数量;sus[i]是第i条语句的可疑度值。当被测程序P执行了测试集{I1,I2,I3,...,Ii,...,In},宿主SFL方法针对任一程序语句si计算得到其可疑度值sus[i],通过效用度量函数f可以计算出每个失效轨迹Ti的效用值。根据函数定义可知,f值越小,Ti的效用越大。具体为,当一组测试例执行完成后,P中语句si的可疑度值sus[i]在特定的宿主SFL方法中已经确定。因此,失效测试例Ii覆盖到的语句数量越少,即满足S[Ii][i]=0的语句si数量越少,那么f值越小。在失效测试例Ii覆盖到的语句数量相同的情形系下,Ii覆盖的语句对应的可疑度值sus[i]越小,那么f值也越小。
基于效用度量函数f的定义可知,f值越小的失效轨迹满足两个属性的可能性也越大。因此,选用效用度量函数值最小的失效轨迹来改善SFL方法的错误定位效率理应更显著。f值最小的失效轨迹即为FET方法的关键失效轨迹。
为了直观的说明关键失效轨迹的效用,以表1所示的程序为例来描述FET方法的工作原理,并对比新方法与已有方法的差异。本实施例中采用经典的Tarantula作为宿主SFL方法来计算语句的可疑度,其中:
t1=(1,1,1)、t2=(0,1,1)、t3=(-1,1,1)、t4=(-1,0,1)、t5=(-1,-1,-1)、t6=(-2,-1,-2)、t7=(-1,-1,0)
表1
通过上表可以发现,bug出现在s3。经过评价函数计算得出失败测试用例t3的函数值最小,从而选择t3用来对语句可疑度序列进行过滤。通过传统的基于语句可疑度计算的软件错误定位方法得到的语句可疑度序列为s7、s12、s5、s6、s3、s4、s11、s1、s2、s17,定位到错误需要排查5.5个语句(s3,s4可疑度相同取平均值)。经过基于失效信息反馈的软件错误定位方法处理后的语句可疑度序列为s12、s3、s4、s11、s1、s2、s17,定位到错误需要排查2.5个语句;可以看出明显提高了定位效率。
同时,如果选择另外两个函数值并非最小的失败测试用例来过滤语句可疑度序列。例如选择t5,则经过处理后的语句可疑度序列为s7、s5、s6、s3、s4、s1、s2、s17,定位到错误需要排查4.5个语句。虽然和传统方法相比定位效率有所提升,但其效果远不如用通过评价函数计算函数值最小t3好。
通过上面这个小例子,我们初步认识到,利用评价函数对失败测试用例进行筛选有明显的效果,同时基于失效信息反馈的软件错误定位方法和传统基于语句可疑度计算的软件错误定位方法相比,其定位效率有明显提升。
以下我们选取了软件测试领域广泛使用的siemens套件和space套件来做实验。siemens包括了replace、tot_info、tcas、print_tokens、print_tokens2、schedule和schedule2共计7个套件,各个套件规模相对于space来说较小。每个套件有若干个错误版本的程序以供测试。但是考虑到方法的特殊性和套件本身的缺陷,实验中剔除了若干错误版本。有些版本不存在失败测试用例,并不适用于根据本发明方法予以剔除包括replace的v32,schedule2的v9,以及space的v1、v2、v32和v34。有些程序版本的错误会导致部分测试用例执行的时候异常终止,会给实验造成不可预测的干扰予以剔除包括replace的v27,schedule的v1、v5、v6和v9以及space的v25、v26、v30、v35、v36和v38。最后,实验对象包括了siemens的125个错误版本和space的28个错误版本,总计153个错误版本。关于每个套件的具体情况如表2所示:
表2
此外,实验过程中发现,不同的gcc版本对实验结果会造成一定的影响。本实施方式中实验的运行环境是:OS X EI Caption,处理器2.7GHZ Intel Core i5,内存8GB,gcc版本4.8.5。
本实施方式选取了12个可疑度公式进行分析比较,除了前文说的那些之外,另选取了7个可疑度公式,详见表3。
表3
本实施方式做了2个实验用来说明不同的问题。实验1用来验证新方法的有效性和适用性。实验2用来验证评价函数在选取失败测试用例上的有效性,即验证通过评价函数选取的函数值大小不同失败测试用例与相应得到的定位效率高低的相关性。总之实验要验证新方法的三个特性:
有效性:新方法较之于原始的方法,其定位效率有明显提升。
适用性:新方法在多个套件,多个可疑度公式上都有效。
相关性:根据评价函数选出的失败测试用例和定位效率的提高呈相关。
实验1:验证新方法的有效性和适用性。
实验设计:为了验证新方法的有效性和适用性,本实施方式从错误定位代价和EXAM指标2个指标对错误定位效率进行评估。错误定位代价是找到一个程序所有测试版本中错误的累积检查语句数与所有版本可执行代码总行数的比值。EXAM指标为错误检出率与代码检查率的比值,即在指定代码检查率之内就能找到错误的程序版本数与程序总版本数的比值。从两个指标,两个展现形式验证新方法的有效性和适用性。
实验步骤:
获取错误定位代价指标:
首先,按照传统的方法,以上述的8个程序套件为对象,分别计算其在表3中各个可疑度公式条件下的错误定位代价。
然后,按照新方法,同样以上述的8个程序套件为对象,分别计算其在表3中各个可疑度公式条件下的错误定位代价。
进而,计算同样的程序套件和同样的可疑度公式的条件下,新方法相较于传统方法的定位效率提高百分比。
最后,以表格的形式展现新方法错误定位代价的降低,也就是错误定位效率的提高。
获取EXAM指标:
首先,按照传统的方法,以153个错误版本为对象,分别按照传统和新的方法计算其在表3中各个可疑度公式条件下的错误定位效率百分数。
然后,以1%为单位,分别统计以上新旧24个定位策略下的,定位效率1%,2%,...,100%以内的版本数。
进而,根据总版本数,将上一步骤产生的版本数变换为版本百分比。
最后,画图展示新旧24个定位策略的EXAM指标。
实验2:验证评价函数的有效性。
实验设计:因为评价函数是对失败测试用例的一个评估,函数值只是用来对失败测试用例进行排序,而其绝对值会受到可疑度公式、具体测试用例等影响,不能作为相关性分析中的一方向量。所以实验选取,根据函数值排序后的t所处的序列位置,为自变量。因变量为对应每个自变量处的所有错误程序版本的平均查找率。为了统一处理更容易发现规律,将t所处的序列的绝对位置转化为相对位置。根据函数值由大到小排序过后,相对整个失败测试用例集个数为N,则[0.1*N],[0.2*N],...,[0.9*N]这样的一个序列号位置处的失败测试用例,加上序列中第一个失败测试用例,即函数值最大的失败测试用例序列号1,序列中最后一个失败测试用例,即函数值最小的失败测试用例序列号为N。这样就可以有11个失败测试用例,分别取值自变量值为0,0.1,0.2,...,1,观察定位效率随着自变量值变化而变化的趋势。图4展现了自变量和因变量的提取过程。
待测对象为所有153个错误程序版本,因变量平均查找率定义为:
实验步骤:
1.确定自变量,每个程序版本对应的11个失败测试用例。
2.确定每一个程序版本的需排查语句数并求和,以及所有程序版本的可执行语句总和。
3.同样的方法可疑度公式分别计算在表3中各个可疑度公式条件下的定位结果。
4.绘制图像观察随着选取失败测试用例相对位置的变化,平均查找率的变化趋势。
5.根据pearson公式,计算表3中各个可疑度公式条件下的定位效率和自变量的相关系数,并确定关联程度。
新方法相对原方法的错误定位效率提高结果如表4所示。
表4
表4中显示了在不同可疑度公式和不同程序套件的情况下,新方法较之SFL的错误定位代价降低百分数,即新方法相对原方法的效率提高百分数。计算公式为
考虑到错误定位代价越小,效率越高,所以新方法的错误定位代价较原方法错误定位代价小,即为定位效率提高。从公式可以看出,当新方法排查率低于原方法是为正值,新方法排查率高于原方法是为负值。提高程度最大为1,没有提高是为0,新方法效率下降时为负值。
由表4可以看出新方法对应大部分测试对象效率均有明显提高。此外,还可以发现如下几点结论:
1.从待测程序角度来看,整体而言新方法对space程序的排查效率提高程度最大同时各个可疑度在其上的效率提高也是最稳定的,说明新方法对不同的程序具有不同的敏感度。而这其中最主要的原因应当在于space程序体量足够大,近万行代码。反观siemens的7个程序套件都是几百号的代码。从这个角度说明新方法对于代码行数巨大的程序,比如实际社会生产环境中的庞大程序更具有适用性。
2.从可疑度公式角度看,平均而言新方法对Tarantula和Kulczynski1可疑度公式排查效率提高程度最大,说明新方法对不同的可疑度公式具有不同的敏感度。而一般来说Tarantula和Kulczynski1可疑度公式在所有列举的12个可疑度公式中效率是较低的,说明新方法对排查效率低的可疑度公式具有更大的改善空间。然而,并不是说新方法对于表现较好的可疑度公式是无所作为的,比如Op2公式,是Naish等人通过比较33个可疑度公式并加上理论分析证明了的最优公式,实验也再次印证了这一点。新方法对于该可疑度公式的提高较之其他可疑度公式上的提高而言收效甚微,但是对于siemens套件新方法还是或多或少的有所提高,至少没有下降。并且,对更加贴近实际生产环境的space套件,在对于Op2公式上新方法较于原方法还是有近30%的提高。这说明了新方法在不同可疑度公式,不同程序套件上都有所提高,从而验证了新方法对于不同可疑度公式,不同程序套件的适用性。
3.提高程度最大的是Ochi2方法应用于space程序套件,达62.32%。提高程度最小的Op2方法应用于tcas程序套件,为0.77%。在上表96个数据中效率提高百分数大于10的数据有77个,占到总数据个数的80.2%。所以,对于大部分可疑度公式和大部分的程序版本而言,新方法对原方法有明显的提高,从而验证了新方法的有效性和适用性。
新方法和原方法在Exam指标上的对比实验结果如图5所示,图中标记方法名前有下划线的为采用了“基于失效信息反馈的软件错误定位”新方法,没有下划线的则是基于频谱的软件错误定位方法。为了便于观察,原方法皆用实线画出,新方法则用虚线画出。
图5中展现了24个方法在Exam指标上的表现情况,为了更加清晰的说明问题,用了4张图展示了所有的24个方法,每张图展现6个方法对应3个可疑度公式。从图5(a)、图5(b)、图5(c)和图5(d)都能清晰的看出新方法对应的虚线分别都在对应的实线的上方。说明从Exam指标来看,新方法较之于原方法在定位效率方面有明显的改善。
比如图5(a)中可以看出,当检测代码量为10%的时候,原方法中可疑度Ochi,Tarantula和Jaccard能都检测出的错误版本数占程序总版本数百分比在47%到54%。然而同样情况下,新方法中该三个可疑度公式此刻能够给检测出的错误版本数占总错误版本数百分比集中在64%左右。从另一个角度来看,图5(b)显示欲从整个错误版本程序中检测出其中65%个版本的错误,原方法中M2至少需要从每个错误程序版本中检测大概14%的代码量,而Ample2,Cohen至少需要检测大概19%的代码量。然而从这三个可疑度对应的新方法上可以看出,同样的任务,新方法只需要至少检测大概10%的代码量。上述实验结果同样适用于图5(c)和图5(d)。
值得关注的是图5(c)和图5(d)中存在部分可疑度公式使得新方法和原方法方法在Exam指数表现上趋近相同,如图5(d)中Op2和Wang3。存在这种情况的原因在于:(1)Exam指标本身的数据展现形式;Exam指标中代码检查百分比以百分之一为单位,例如一个一千行的程序,原方法需要检测99行能够找到错误,新方法需要检测90行可以检测到错误。虽然新方法效率较之原方法有提高,但是放到Exam指标上,原方法和新方法都算是检测了9%的代码量检测到了错误,即Exam指标上的表现效果是一样的。(2)Op2和Wang3可疑度公式相较其他公式而言都是更加重视公式中aef的权重,从这一角度分析,之所以那些语句在可疑度中排序中排在fault之前,更可能是因为这些语句的执行情况中aef的比重更大,即该语句被失败测试用例执行的次数更多。这样的话,从概率的角度来讲,从所有失败测试用例中选取的那个失败测试用例,也有更大的可能执行了这个排在错误语句之前的语句。所以就造成了实验中新方法对于Op2和Wang3可疑度公式的提高幅度不如其他公式那样大。(3)评价函数在选取失败测试用例时,仅仅是从统计学的角度选取那些更少的执行了可疑度高语句的那些失败测试用例,过分依赖初步产生的语句可疑度,没有考虑从程序内部数据流、控制流、程序依赖关系出发,去寻找那些尽量只执行那些和程序错误有关联代码的测试用例。
其实,关于Op2和Wang3可疑度公式,将图放大观察的话,还是可以看出新方法对于原方法有优势的。即使Op2和Wang3可疑度公式在Exam指标上不能明显的看出新方法较之于原方法的优势,但是从上表4中可以看出,这几个可疑度公式的新方法较之于原方法在各个程序套件上还是有不同程度的定位效率提高,尤其是对于space套件。总而言之,对于12个可疑度公式中有10个表现出了新方法对于原方法在Exam指数上有明显的优势,占到总数的83.3%。所以,对于大部分可疑度公式而言,新方法对原方法有明显的提高,从而验证了新方法的有效性和适用性。
从图5中也可以看出,在检查代码量小于5%时,各方法EXAM指数基本一致,之后随着检查代码量增加,新方法的优势逐渐显示出来。尤其对于图5(a)可以清晰的看的,新方法和原方法逐渐分成了两个梯队,在该图新方法要普遍优于原方法。当检测代码量在70%以后,随着检测代码量的增加原方法和新方法的EXAM指数逐渐重合,趋于100%。
对实验1结果分析总结如下:从错误定位代价和Exam指标两方面数据表明,无论可疑度公式和待测程序的变化,新方法在绝大多数待测对象上相较于原方法均有明显的优势,即实验验证了新方法的有效性和适用性。
实验2在153个错误程序版本之上,分别采用了表3中12个可疑度公式。分别计算得出随着评价函数选取出的失败测试用例变化,对应各个可疑度的新方法平均查找率的变化,图6展示了这一变化的趋势图。
因实验对象足够大,尽13万行可执行代码,分配在153个错误程序版本中,所以平均查找率可以大幅度的减低特殊、极端情况的影响。使得结果更加具有客观性和说服力。从该趋势图中可以看出,随着评价函数的失败测试用例次序逐渐靠近1.0,所选用的失败测试用例的R值逐渐变小,从图6可以看出其平均查找率也逐渐降低,即定位效率逐渐变高。可能有个别处没有明显的递减趋势,但从整体看递减趋势明显。
为了更加严谨且量化的研究这两个变量的相关程度,本实施方式利用Pearson相关系数将图6中的两个变量进行量化。采用Pearson相关系数分析两者之间的相关性,Pearson相关系数的公式为:
通过|r|取值范围可以判断变量之间的相关强度:其中0.8~1.0为极强相关,0.6~0.8为强相,0.4~0.6为中等程度相关,0.2~0.4为弱相关,0.0~0.2为极弱相关或无相关;结果如表5所示。
表5
由表5可以看出不同可疑度公式下的相关系数|r|都在0.9以上,充分说明了通过评估函数f选取失败测试用例与错误定位效率有着极强相关性。从而,实验验证在选取失败测试用例方面,评估函数f的有效性,即用评价函数得到的失败测试用例排序相对位置与对应错误定位效率具有相关性。
上述对实施例的描述是为便于本技术领域的普通技术人员能理解和应用本发明。熟悉本领域技术的人员显然可以容易地对上述实施例做出各种修改,并把在此说明的一般原理应用到其他实施例中而不必经过创造性的劳动。因此,本发明不限于上述实施例,本领域技术人员根据本发明的揭示,对于本发明做出的改进和修改都应该在本发明的保护范围之内。

Claims (4)

1.一种基于失效轨迹的程序错误定位方法,包括如下步骤:
(1)统计被测程序中各条语句在每组测试用例下的语句覆盖情况,得到对应的语句覆盖矩阵;
(2)统计每组测试用例在被测程序运行下的执行结果:正确或错误;以错误的测试用例所执行覆盖的语句集对应作为失效轨迹;
(3)应用失效轨迹效用评价函数计算各个失效轨迹的效用值,以效用值最小的失效轨迹作为关键失效轨迹;
(4)以关键失效轨迹作为错误排查范围,按照语句可疑度降序逐条进行错误定位。
2.根据权利要求1所述的程序错误定位方法,其特征在于:所述语句覆盖情况的定义为:以某一测试用例作为被测程序的输入,若被测程序对于该测试用例的整个运行过程中执行了某一条语句,则该语句在该测试用例下的语句覆盖情况表示为1,否则表示为0。
3.根据权利要求1所述的程序错误定位方法,其特征在于:所述语句覆盖矩阵的维度为m×n,m为被测程序的语句总数,n为测试用例总数;该矩阵中第i行第j列的元素值为第i条语句在第j组测试用例下的语句覆盖情况,i和j均为自然数且1≤i≤m,1≤j≤n。
4.根据权利要求1所述的程序错误定位方法,其特征在于:所述步骤(3)中通过以下公式计算各失效轨迹的效用值:
f ( T i ) = Σ i = 1 m S [ I i ] [ i ] × s u s [ i ]
其中:Ti为任一失效轨迹且Ti∈TT,TT为失效轨迹集合,Ii为Ti对应的错误测试用例,f(Ti)为失效轨迹Ti的效用值,S[Ii][i]为错误测试用例Ii运行过程中被测程序第i条语句的执行情况且S[Ii][i]∈[0,1],0表示未执行,1表示执行;sus[i]为第i条语句的可疑度值,m为被测程序的语句总数。
CN201611259121.3A 2016-12-30 2016-12-30 一种基于失效轨迹的程序错误定位方法 Active CN106886490B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611259121.3A CN106886490B (zh) 2016-12-30 2016-12-30 一种基于失效轨迹的程序错误定位方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611259121.3A CN106886490B (zh) 2016-12-30 2016-12-30 一种基于失效轨迹的程序错误定位方法

Publications (2)

Publication Number Publication Date
CN106886490A true CN106886490A (zh) 2017-06-23
CN106886490B CN106886490B (zh) 2019-09-20

Family

ID=59176076

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611259121.3A Active CN106886490B (zh) 2016-12-30 2016-12-30 一种基于失效轨迹的程序错误定位方法

Country Status (1)

Country Link
CN (1) CN106886490B (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019223314A1 (zh) * 2018-05-22 2019-11-28 深圳云天励飞技术有限公司 神经网络处理器的调试系统及方法
CN111274129A (zh) * 2020-01-16 2020-06-12 浙江理工大学 一种基于动态程序失效执行块的程序错误定位方法
CN111563044A (zh) * 2020-05-11 2020-08-21 西安邮电大学 一种基于程序变异的程序谱错误定位方法
CN111581086A (zh) * 2020-04-28 2020-08-25 清华大学深圳国际研究生院 一种基于RankNet的混合软件错误定位方法及系统
CN111880957A (zh) * 2020-06-12 2020-11-03 浙江理工大学 一种基于随机森林模型的程序错误定位方法
CN115510782A (zh) * 2022-08-31 2022-12-23 芯华章科技股份有限公司 定位验证错误的方法、电子设备和存储介质

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101231614A (zh) * 2008-02-02 2008-07-30 南京大学 一种基于执行轨迹块相似度的软件缺陷定位方法
CN101866316A (zh) * 2010-06-23 2010-10-20 南京大学 一种基于相对冗余测试集约简的软件缺陷定位方法
CN102750223A (zh) * 2012-06-06 2012-10-24 东南大学 一种基于面向对象程序切片谱的错误定位方法
US20120290868A1 (en) * 2011-05-09 2012-11-15 Cleversafe, Inc. Assigning a dispersed storage network address range in a maintenance free storage container
CN102968369A (zh) * 2012-03-23 2013-03-13 中国科学院计算技术研究所 一种动态断点的自动生成方法及系统
CN103914386A (zh) * 2014-04-21 2014-07-09 西北工业大学 基于输入参数特征谱的软件缺陷定位方法
CN103995780A (zh) * 2014-05-30 2014-08-20 浙江理工大学 一种基于语句频度统计的程序错误定位方法
CN104317707A (zh) * 2014-10-15 2015-01-28 中国科学院软件研究所 一种基于程序结构影响感知的软件错误定位方法
US20150186250A1 (en) * 2013-12-27 2015-07-02 International Business Machines Corporation Architectural failure analysis
CN105159826A (zh) * 2015-08-20 2015-12-16 浪潮(北京)电子信息产业有限公司 一种定位目标程序中的错误语句的方法和装置

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101231614A (zh) * 2008-02-02 2008-07-30 南京大学 一种基于执行轨迹块相似度的软件缺陷定位方法
CN101866316A (zh) * 2010-06-23 2010-10-20 南京大学 一种基于相对冗余测试集约简的软件缺陷定位方法
US20120290868A1 (en) * 2011-05-09 2012-11-15 Cleversafe, Inc. Assigning a dispersed storage network address range in a maintenance free storage container
CN102968369A (zh) * 2012-03-23 2013-03-13 中国科学院计算技术研究所 一种动态断点的自动生成方法及系统
CN102750223A (zh) * 2012-06-06 2012-10-24 东南大学 一种基于面向对象程序切片谱的错误定位方法
US20150186250A1 (en) * 2013-12-27 2015-07-02 International Business Machines Corporation Architectural failure analysis
CN103914386A (zh) * 2014-04-21 2014-07-09 西北工业大学 基于输入参数特征谱的软件缺陷定位方法
CN103995780A (zh) * 2014-05-30 2014-08-20 浙江理工大学 一种基于语句频度统计的程序错误定位方法
CN104317707A (zh) * 2014-10-15 2015-01-28 中国科学院软件研究所 一种基于程序结构影响感知的软件错误定位方法
CN105159826A (zh) * 2015-08-20 2015-12-16 浪潮(北京)电子信息产业有限公司 一种定位目标程序中的错误语句的方法和装置

Non-Patent Citations (6)

* Cited by examiner, † Cited by third party
Title
NEELAM GUPTA AND RAJIV GUPTA: "ExPert: Dynamic Analysis Based Fault Location via Execution Perturbations", 《2007 IEEE INTERNATIONAL PARALLEL AND DISTRIBUTED PROCESSING SYMPOSIUM》 *
OPHIR FRIEDLER, WISAM KADRY, ARKADIY MORGENSHTEIN, AMIR NAHIR, A: "Effective Post-Silicon Failure Localization Using Dynamic Progra", 《AUTOMATION & TEST IN EUROPE CONFERENCE & EXHIBITION (DATE)》 *
叶甜甜: "基于频谱的软件错误定位方法研究", 《中国优秀硕士学位论文全文数据库-信息科技辑》 *
施小燕: "基于条件概率公式的缺陷定位问题研究", 《中国优秀硕士学位论文全文数据库-信息科技辑》 *
涂径玄: "基于覆盖分析的自动化错误定位关键技术研究", 《中国博士学位论文全文数据库-信息科技辑》 *
鞠小林,姜淑娟,陈翔,张艳梅,邵浩然: "基于切片谱的错误定位框架影响因素分析", 《计算机研究与发展》 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019223314A1 (zh) * 2018-05-22 2019-11-28 深圳云天励飞技术有限公司 神经网络处理器的调试系统及方法
CN111274129A (zh) * 2020-01-16 2020-06-12 浙江理工大学 一种基于动态程序失效执行块的程序错误定位方法
CN111581086A (zh) * 2020-04-28 2020-08-25 清华大学深圳国际研究生院 一种基于RankNet的混合软件错误定位方法及系统
CN111581086B (zh) * 2020-04-28 2023-03-31 清华大学深圳国际研究生院 一种基于RankNet的混合软件错误定位方法及系统
CN111563044A (zh) * 2020-05-11 2020-08-21 西安邮电大学 一种基于程序变异的程序谱错误定位方法
CN111563044B (zh) * 2020-05-11 2022-10-25 西安邮电大学 一种基于程序变异的程序谱错误定位方法
CN111880957A (zh) * 2020-06-12 2020-11-03 浙江理工大学 一种基于随机森林模型的程序错误定位方法
CN115510782A (zh) * 2022-08-31 2022-12-23 芯华章科技股份有限公司 定位验证错误的方法、电子设备和存储介质
CN115510782B (zh) * 2022-08-31 2024-04-26 芯华章科技股份有限公司 定位验证错误的方法、电子设备和存储介质

Also Published As

Publication number Publication date
CN106886490B (zh) 2019-09-20

Similar Documents

Publication Publication Date Title
CN106886490A (zh) 一种基于失效轨迹的程序错误定位方法
Zhou et al. Examining the potentially confounding effect of class size on the associations between object-oriented metrics and change-proneness
CN109144882B (zh) 一种基于程序不变量的软件故障定位方法及装置
JP6701367B2 (ja) 個人オーダーメイド教育コンテンツを提供する方法、装置、及びコンピュータプログラム
Da Silva et al. Six years of systematic literature reviews in software engineering: An updated tertiary study
CN103995780B (zh) 一种基于语句频度统计的程序错误定位方法
Lange et al. Effects of defects in UML models: an experimental investigation
Hasan et al. Analyzing the effect of data quality on the accuracy of clinical decision support systems: a computer simulation approach
Blue et al. Interaction-based test-suite minimization
CN104794059A (zh) 一种基于函数调用记录的缺陷定位方法及装置
Liu et al. A weighted fuzzy classification approach to identify and manipulate coincidental correct test cases for fault localization
Modiba et al. Evaluating plagiarism detection software for introductory programming assignments
Domin et al. Improving plagiarism detection in coding assignments by dynamic removal of common ground
Briand et al. Modeling and managing risk early in software development
Li et al. Identify coincidental correct test cases based on fuzzy classification
Idahl et al. Towards benchmarking the utility of explanations for model debugging
Yang et al. A lightweight fault localization approach based on xgboost
CN106776283A (zh) 一种基于条件概率的程序错误定位方法
Arndt et al. Effects of errors in a multicenter medical study: preventing misinterpreted data
Cimitile et al. A software model for impact analysis: a validation experiment
Feyzi et al. Kernel-based detection of coincidentally correct test cases to improve fault localisation effectiveness
Bond et al. A Critical Analysis of “Model-Based Diagnosis Meets Error Diagnosis in Logic Programs”
Guo et al. First, debug the test oracle
Groth A framework for using SACADA to enhance the qualitative and quantitative basis of HRA
CN112732549A (zh) 基于聚类分析的测试程序分类方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20200827

Address after: No.2, Wantian village, Guanqian village, Datang Township, Xinjian County, Nanchang City, Jiangxi Province

Patentee after: Wan Ping

Address before: 310018, No. 928, No. 2, Poplar Street, Hangzhou economic and Technological Development Zone, Zhejiang

Patentee before: Zhejiang University of Technology

TR01 Transfer of patent right
CP02 Change in the address of a patent holder

Address after: No. 16, Tongjiang Avenue, Chengguan Town, Nandan county, Hechi City, Guangxi Zhuang Autonomous Region

Patentee after: Wan Ping

Address before: No.2, Wantian village, Guanqian village, Datang Township, Xinjian County, Nanchang City, Jiangxi Province

Patentee before: Wan Ping

CP02 Change in the address of a patent holder
TR01 Transfer of patent right

Effective date of registration: 20210111

Address after: No. 2-3-8, Zhengrunzhou Road, Zhenjiang City, Jiangsu Province, 212000

Patentee after: BADCRYSTAL TECHNOLOGY GARMENT (JIANGSU) Co.,Ltd.

Address before: No.16 Tongjiang Avenue, Chengguan Town, Nandan county, Hechi City, Guangxi Zhuang Autonomous Region 547200

Patentee before: Wan Ping

TR01 Transfer of patent right