Your SlideShare is downloading. ×
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
基于覆盖信息的软件错误定位技术综述
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

基于覆盖信息的软件错误定位技术综述

1,163

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,163
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 中山大学 软件工程实验室基于覆盖信息的软件错误定位技术软件错误定位技术的重要性根据 Iris Vessey 的一份关于软件调试的报告[Ves85],报告指出软件调试是一件乏味而又代价巨大的活动。 其中,占据其中大部分时间就是错误定位。 因此,自动化的软件错误定位技术是非常有意义的研究方向。软件错误定位的简介软件调试包括三个步骤:识别程序的失败运行,错误定位以及修正程序错误。软件错误定位技术定位在其中第二个步骤的自动化。软件错误定位技术的输入源程序软件错误定位需要源程序作为输入。第一,源程序中包含了大量的形式化信息,通过程序的静态分析,可以提取出来用于软件错误定位;第二,需要给源程序装置一些分析代码,并进一步运行测试用例,才能实现程序的动态分析,收集程序的运行信息;第三,错误定位技术的结果,通常是疑似错误的语句,需要在源代码上指出。测试用例动态的软件错误定位需要测试用例作为输入。测试用例通常包含了两个部分:输入与期待的输出。通过把测试用例的输入带入程序运行,对比实际输出和期待的输出,可以判断一次运行是成功的运行,还是失败的运行。如果程序装置了动态分析代码,还可以得到本次运行的动态信息。 内部资料 不得外传 版权所有 不得翻印
  • 2. 中山大学 软件工程实验室例 源程序下面列出的这个例子是比较典型的,首先,这个程序意图明确,结构简单;然后,这个例子能够介绍清楚基于覆盖信息的软件错误定位技术的工作原理;最后,这个例子同时能够说明基于覆盖信息的软件错误定位技术难以处理的情况。//Find the maximum among a, b and c int max (int a, int b, int c){1 int temp = a;2 if (b > temp ){3 temp = b+1; //bug4 }5 if (c > temp ){6 temp = c;7 }8 return temp; }例 测试用例a, b, c oracle3, 2, 1 32, 1, 3 31, 2, 3 31, 2, 4 41, 2, 3 31, 3, 2 3软件错误定位技术的输出疑似的错误位置软件错误定位技术通常输出程序的错误位置,通常来说,是一个程序单元错误疑似度的列表,从高到低的排列了程序单元错误的概率。疑似错误的上下文另外,由于程序员在调试的时候,错误的位置,错误的个数对于程序员来说都是未知的。 不仅仅需要知道错误的位置,还需要知道该错误的上下文,以便于分析导致错误的原因。 文献[CLZ+09] [HJO08]尝试着提出一些可以用于定位错误的上下文。不过,这方面的评价比较难 内部资料 不得外传 版权所有 不得翻印
  • 3. 中山大学 软件工程实验室做,需要进行用户研究。软件错误定位技术的评价错误定位技术的有效性需要一套定量的评价标准,用以判断不同的技术间的优劣。许多错误定位技术文章[RR03] [JH05] [WD10]都使用了如下描述的一种评价方法:错误定位技术,会输出一个按疑似度从高到低排序的疑似错误位置列表。假设有一个“理想的程序员”,他看到一个程序单元,能够立即准确地判断该程序单元是否是真正的错误。该评价方法为实验程序集(通常为 Siemens test suite)中每一个程序的每一个错误版本都赋一个分数,这个分数为“理想的程序员”按照疑似错误位置列表发现真正错误位置需要检查的程序百分比。但是这个“理想的程序员”的设定是否合理还需探讨。 其中一个方面,真正的程序员在看到了真正错误的语句,并不能一下子就知道它是错误,程序员还需要尝试着修改错误,重新运行测试用例,才能确定是否定位到了错误。 但是定位失败,修改失败,或者程序有多个错误,都会导致程序在修改后无法通过全部测试用例,这会使得程序员不知所措,不知是继续修改,还是还原上次修改,再修改另一处疑似错误。 可见错误定位技术是和错误修改紧密结合在一起的,较难分离开来。 Vidroha Debroy 在文章[DW10]中,给出了一个结合错误定位和错误修改的技术,是少有的自动错误修改的文章,不过其代价实在较大(主要是其中程序变异技术的搜索空间较大)。基于覆盖信息的软件错误定位技术基于覆盖信息的软件错误定位技术,是被研究得最多的一种动态软件错误定位技术。研究人员之所以仅选择覆盖信息来研究,是经过许多权衡后得到的,其中原因如下:第一,程序运行的覆盖信息容易获取;第二,其他程序动态信息(谓词,轨迹,程序状态)难以建立一套足够简单通用的模型,其中谓词覆盖信息与基本块覆盖信息几乎等价,并可以相互转化;第三,已经可以证明,排除掉巧合性成功、覆盖等价和程序多错误这三种情况,基于覆盖信息的软件错误定位技术总是能够得到准确的错误位置。基于覆盖信息的软件错误定位技术的输入基于覆盖信息的软件错误定位技术的输入是覆盖信息以及测试用例是否通过的结果,由动态分析后得到。覆盖信息,即一个程序在运行一个测试用例后,此次运行覆盖的语句。通常把多个测试用例的覆盖信息以及运行结果列成一个矩阵。例 覆盖信息矩阵这个覆盖信息矩阵对应 例 源程序 和 例 测试用例a, b, c S1 S2 S3 S4 S5 S6 S7 S8 r 内部资料 不得外传 版权所有 不得翻印
  • 4. 中山大学 软件工程实验室 3, 2, 1 1 0 1 1 0 1 1 p 1 2, 1, 1 1 0 1 1 1 1 1 p 3 1, 2, 1 1 1 1 1 0 1 1 p 3 1, 2, 1 1 1 1 1 1 1 1 P 4 1, 2, 1 1 1 1 1 1 1 1 f 3 1, 3, 1 1 1 1 1 0 1 1 f 2 可以发现 S1, S2, S4, S5, S7, S8 的覆盖信息都是 1,用 others 替换,得到下面这个更易读的 表: a, b, c S3 S6 others r 3, 2, 0 0 1 p 1 2, 1, 0 1 1 p 3 1, 2, 1 0 1 p 3 1, 2, 1 1 1 P 4 1, 2, 1 1 1 f 3 1, 3, 1 0 1 f 2 基于覆盖信息的软件错误定位技术的输出 基于覆盖信息的软件错误定位技术的输出是各个程序单元的错误疑似度,根据我们的理解 , 程序单元错误疑似度的意义,只有在对两个程序单元的错误疑似度进行比较的时候才能体 现。因为我们最终的目的是对程序单元进行错误疑似度的排序,而不是计算程序单元的错误 概率。同时,不同的错误定位技术计算出的错误疑似度不具有可比性。 例 错误疑似度a, b, c S3 S6 othersSJ ( s) 0.5 0.25 0.33 基于覆盖信息的软件错误定位技术的核心观点 对于每一个程序单元,一个测试用例带来的影响有四种可能情况: a00 、 01 、 10 和 a11 ,通 a a 内部资料 不得外传 版权所有 不得翻印
  • 5. 中山大学 软件工程实验室过积累这四种情况,会影响其最终的错误疑似度。其中, a00 表示没有执行该程序单元的成功运行次数, a01 表示没有执行该程序单元的失败运行次数, a10 表示执行了该程序单元的成功运行次数, a11 表示执行了该程序单元的失败运行次数。我们的理解是, a00 、 01 、 10 和 a11 对于错误疑似度的贡献应该是不同的,应该根据领域特 a a征来进行数学建模,以便于进行错误疑似度的计算。 这样对于任意两个程序单元,就能计算出两个错误疑似度,这样我们就能对任意两个程序单元进行错误疑似度的比较,进而对程序单元进行错误疑似度的排序。至于应该怎样建模,就是软件错误定位技术研究的重点。从另外一个角度来看,程序单元的错误疑似度,也可以看作程序单元的覆盖信息与运行结果的相似度,不过研究[MAEA09]发现,这种观点也会遇到许多反例,影响基于覆盖信息的软件错误定位技术的效果,我们会在下一章讨论。基于覆盖信息的软件错误定位技术的典型技术通过分析 a00 、 01 、 10 和 a11 这四个因素对错误疑似度影响,研究人员对错误疑似度的计算 a a进行了不同的数学建模,并分析了领域相关因素是如何影响影响到数学建模的设计。JaccardJaccard 系数由文献[CKF+02]引入软件错误定位领域,该文献主要是研究互联网环境下的错误定位,定位的粒度为互联网环境下的构件。本文并对于 Jaccard 系数的选择,只是说来自于聚类算法领域,并没有进一步介绍。我们通过阅读 Wikipedia 得知,Jaccard 系数常用于二元属性的相似度计算。Jaccard 错误疑似度计算公式如下: a11 ( s )S J ( s) = a11 ( s ) + a01 ( s ) + a10 ( s)或者 failed ( s )S J ( s) = totalfailed + passed ( s )例 使用 Jaccard 公式计算错误疑似度a, b, c S3 S6 Others r3, 2, 1 0 0 1 p2, 1, 3 0 1 1 p 内部资料 不得外传 版权所有 不得翻印
  • 6. 中山大学 软件工程实验室1, 2, 3 1 0 1 p1, 2, 4 1 1 1 P1, 2, 3 1 1 1 f1, 3, 2 1 0 1 fSJ ( s) 0.5 0.25 0.33TarantulaTarantula 公式由文献[JHS02] [JH05]引入软件错误定位领域,该方法被广泛的引用,用于评价和比较新的错误定位方法。该方法显式地考虑到了 a00 、 01 、 10 和 a11 这四个因素的影响。 a a直观来说,失败运行中覆盖该程序单元的比例与错误疑似度正相关,成功运行中覆盖该程序单元的比例与错误疑似度负相关。Tarantula 错误疑似度计算公式如下: a11 ( s ) a11 ( s ) + a01 ( s )ST ( s ) = a11 ( s) a10 ( s ) + a11 ( s ) + a01 ( s ) a10 ( s) + a00 ( s )或者 failed ( s) totalfailedST ( s ) = failed ( s) passed ( s) + totalfailed totalpassed例 使用 Tarantula 公式计算错误疑似度a, b, c S3 S6 Others r3, 2, 1 0 0 1 p2, 1, 3 0 1 1 p1, 2, 3 1 0 1 p1, 2, 4 1 1 1 p1, 2, 3 1 1 1 f1, 3, 2 1 0 1 fST ( s ) 0.66 0.5 0.5OchiaiOchiai 公式由文献[AZG06] [AZG07]引入软件错误定位领域,它来自于生物计算领域中对于基因相似度的计算。Ochiai 公式得到了优于 Jaccard 方法与 Tarantula 方法的实验结果,作 内部资料 不得外传 版权所有 不得翻印
  • 7. 中山大学 软件工程实验室者对公式本身进行了深入的分析,这里的深入分析非常有意义,我们放在下一章探讨。Ochiai 错误疑似度计算公式如下: a11 ( s)SO ( s ) = (a11 ( s ) + a01 ( s)) × (a11 ( s) + a10 ( s ))或者 failed ( s)SO ( s ) = totalfailed × ( passed ( s ) + failed ( s ))例 使用 Ochiai 公式计算错误疑似度a, b, c S3 S6 Others ra, b, c S3 S6 Others r3, 2, 1 0 0 1 p2, 1, 3 0 1 1 p1, 2, 3 1 0 1 p1, 2, 4 1 1 1 p1, 2, 3 1 1 1 f1, 3, 2 1 0 1 fSO ( s ) 0.7 0.41 0.57χDebug( χ 读作 /ˈ kaɪ /)χDebug 的方法由文献[WDC10]引入软件错误定位领域,它主要讨论程序单元被一个失败运行覆盖,与程序单元被一个成功运行覆盖,两者对错误疑似度的贡献的绝对值是不一样的 ,前者的贡献应该略高。χDebug 错误疑似度计算公式如下:(1.0 × n F ,1 + 0.1 × nF , 2 + 0.1 × nF ,3 ) − (1.0 × nS ,1 + 0.1 × nS , 2 + α × χ F S × nS ,3 )其中, χ F S 是失败与成功用例个数的比值, α 是经验得来的参数。 内部资料 不得外传 版权所有 不得翻印
  • 8. 中山大学 软件工程实验室例 使用 χDebug 公式计算错误疑似度a, b, c S3 S6 Others r3, 2, 1 0 0 1 p2, 1, 3 0 1 1 p1, 2, 3 1 0 1 p1, 2, 4 1 1 1 p1, 2, 3 1 1 1 f1, 3, 2 1 0 1 fSw ( s) 0.99 0.99 0.985Jaccard、 Tarantula、 Ochiai 以及 χDebug 方法的评价我们在 Linux 平台上收集了 Siemens 的覆盖信息,然后在 x86 机器上,Windows 平台下的使用 Java 实现了 Jaccard、Tarantula、Ochiai 以及 χDebug 方法,以及软件错误定位技术的评价方法,结果如下:好的情况: 内部资料 不得外传 版权所有 不得翻印
  • 9. 中山大学 软件工程实验室坏的情况: 内部资料 不得外传 版权所有 不得翻印
  • 10. 中山大学 软件工程实验室基于覆盖信息的软件错误定位技术的设计影响的因素直观来看, a00 、 a01 、 a10 和 a11 的影响如下表: 含义 与疑似度的相关性a00 没有执行该程序单元的成功运行次数 正相关a01 没有执行该程序单元的失败运行次数 负相关a10 表示执行了该程序单元的成功运行次数 负相关a11 执行了该程序单元的失败运行次数 正相关影响因素的权重根据文献[AZG07]的介绍,作者的结果表明对于 Jaccard 系数、Tarantula 系数以及 Ochiai 系数,最好的结果是 Ochiai 系数,平均来说比第二好的系数要提高 4% 的性能,对于某些错误来说可能提高至 30% 的性能。 为了解释这一点,作者对这三种系数进行了深入分析。 首先,注意到,当 a11 = 0 时,也即当语句没有被任何失败测试用例执行时,这三个公式计算出的疑似度都是最低的(即都等于 0)。当 a11 > 0 时,经过一些不影响数值之间相关关系的变换,可发现上面三个公式所计算的排名分别与下面三个公式相同。 1 a a11 ′ST = a11 ′ S O = 11 SO = 2 a S′ = a  a  1 + CT × 10 , J C J + a10 以及 1 + 10 (来自于 C J × 1 + 10  )  a  a11 a11  11 其中, a11 + a01CT = C = a11 + a01 a10 + a00 , J注意到, CT 与 C J 在程序单元之间是无差异的,也即不会影响程序单元的疑似度排名。这是因为在程序单元之间,成功的测试用例数目 a10 + a00 是相等的;在程序单元之间,失败的测试用例数目 a11 + a01 也是相等的。通过上面对系数的变化,可以清楚地看到上述三个系数中影响到程序块排名的只有 a11 和 a10 ,即程序块被成功测试用例和失败测试用例的执行次数。 内部资料 不得外传 版权所有 不得翻印
  • 11. 中山大学 软件工程实验室 ′在极端情况下,当 a10 = 0,则 ST =1,这表明对那些只被失败测试用例运行的程序块有最高的错误疑似度。这能解释 Jaccard 和 Ochiai 对 Tarantula 的改进,因为这两个系数在这种情况下还考虑了 a11 。 ′ ′ 另一方面,当 a11 增长时, SO 的分母数值减少,分子数值增大,但 ST 只有分母数值减少, S ′ 只有分子数值增大,也就是说, SO 对失败运行的增加比较敏感,即 J ′ ′ ′SO 对失败运行比对成功运行敏感,这解释了为什么 SO 的性能比另外两个系数的性能要好。对于上面文献[AZG07]的讨论,我们有以下疑惑:一、公式中影响到程序块排名的真的只有 a11 和 a10 吗?注意到存在下面这样的约束:a11 = totalfailed − a01 以及 a10 = totalpassed − a00 ,于是,我们可以把上述公式中的 a11 和 a10 分别替换成 a00 和 a01 ,这样公式中影响到程序块排名的就只有 a00 和 a01 了。可以这样来理解,三个公式中仅表示了 a11 和 a10 的影响,不过由于约束的存在,也就暗含了 a00 和 a01 的影响。二、如果让我们来设计一个公式,应该考虑哪些因素影响?因为约束的存在,可以只显式的考虑 a11 和 a10 的影响: 含义 与疑似度的相关性a10 表示执行了该程序单元的成功运 负相关 行次数a11 执行了该程序单元的失败运行次 正相关 数如果让我们来设计一个公式,主要任务就是设计 a10 与 a11 对疑似度的影响的权重。 a10 与a11 对疑似度的影响的权重不是线性的,应该考虑到 a10 和 a11 自身和相对的大小。 a (s)对 Jaccard 系数 S J ( s ) = a ( s ) + a ( s ) + a ( s ) 求偏微分,也可以看出 a10 , a11 自身的大小 11 11 01 10的影响: 内部资料 不得外传 版权所有 不得翻印
  • 12. 中山大学 软件工程实验室∂S J ∂S J − a11 ∂S J − a11 =0, = =∂a00 ∂a01 ( a11 + a01 + a10 ) 2 , ∂a10 ( a11 + a01 + a10 ) 2 以 及∂S J a01 + a10 =∂a11 ( a11 + a01 + a10 ) 2例 疑似度增量的差异举个例子来说,对于两个程序单元 i 和 j ,它们的 a10 和 a11 都分别不等。如下表: i ja00 36 320 0a01 19 193 4a10 40 80a11 6 7计算其疑似度: 6 7 1S J ( i) = 和 SJ ( j) = ,可知 S J ( i ) = S J ( j ) = , 6 + 194 + 40 7 + 193 + 80 40此时再来了一个失败的测试用例,它同时经过了程序单元 i 和 j , a11 各自加 1,产生了如下变化: i ja00 36 320 0a01 19 193 4a10 40 80a11 7 8计算其疑似度: 7 8S J ( i) = 和 SJ ( j) = ,可知 S J ( i ) > S J ( j ) 。 7 + 194 + 40 8 + 193 + 80从这个例子我们就可以看出, a10 与 a11 对疑似度的影响考虑到了 a10 和 a11 自身和相对的大小的。另外,文献[WDC10]中 χDebug 的方法讨论了程序单元被一个失败运行覆盖,与程序单元被一个成功运行覆盖,两者对错误疑似度的贡献的绝对值是不一样的,前者的贡献应该略高,作者提出了目前在 Siemens 程序集上效果最好的公式。因此,我们若想设计出更好的公式,就需要对错误程序单元,覆盖信息以及运行的结果有经验性的研究。 内部资料 不得外传 版权所有 不得翻印
  • 13. 中山大学 软件工程实验室基于覆盖信息的软件错误定位技术的效果通常情况假设一种情况,程序覆盖了错误程序单元,就一定会导致失败的运行;程序没有覆盖错误程序单元,就一定不会导致失败的运行。对于测试用例来说,就有下面的四种情况:Case Sf St r1 0 0 p2 0 1 p3 1 0 f4 1 1 f其中 Case 是测试用例的标号,Sf 错误的程序单元,St 是正确的程序单元,r 是测试用例的结果(p:成功;f:失败)。在这种假设下,使用之前介绍的四种公式,错误的语句 Sf 相对于 St 总是能够拿到最高(或者并列最高)的疑似度。这是因为失败的运行总是提高错误程序单元的 a11 ,成功的运行总是在提高正确程序单元的 a10 。难以处理的情况但是,根据文献[MAEA09]的介绍,在实际的程序中,上一节的假设(程序覆盖了错误程序单元,就一定会导致失败的运行;程序没有覆盖错误程序单元,就一定不会导致失败的运行)是不成立的。共有下面三种情况会打破上面的假设。巧合性成功的测试用例根据[AO08]中 RIP(reachability-infection-propagation 执行-可传染-影响输出)的模型,一次运行失败的产生需要满足下面三种条件:条件一、 错误被执行了;条件二、 错误的执行形成了可传染的程序状态;条件三、 这种可传染的程序状态传递并影响到了输出。 如果缺少后面两个条件,我们称之为巧合性成功( Coincidental Correctness)的测试用例。根据文献[MAEA09]的研究,巧合性成功是广泛存在的。进一步,把巧合性成功的测试用例又分为两种:一、错误发生了但是没有影响到输出(Thecondition for failure is met but the program does not fail)(仅满足了条件一、和条件二、),在文章[MAEA09]中的实验集出现的频度是 15.7%,文献[WCCZ09]通过后向切片技术与错误模式来尝试解决,并取得了不错的效果;二、 错误语句被覆盖了却没有满足错误发生的条件(The faulty statement is executed but the program does not fail)(仅满足了条件一、),在文章中的实验集出现的频度是 56.4%。我们根据程序的结构,对“错误语句被覆盖了却没有满足错误发生的条件”进行进一步的分 内部资料 不得外传 版权所有 不得翻印
  • 14. 中山大学 软件工程实验室类:A、发生在赋值语句中;B、 谓词语句中(可以猜想,频度 56.4%中绝大部分属于这种情况)。A、若发生在赋值语句中,对于语句来说,可以理解为被赋值的变量在语句执行前后,值并没有改变;对于基本块来说,基本块中的被赋值的变量在基本块被执行前后,值并没有改变。(注意到,这里在文献[WCCZ09]没有尝试解决)B、若发生在谓词语句中,我们就可以通过记录谓词的结果,状态,边界值来进行模式识别,但是仍然很难。另外,文献[MA10]基于程序的覆盖信息,对正确运行的测试用例进行聚类分析,得到两个聚类,并进一步自动去掉其中巧合性成功的聚类,提升测试用例的效力。例 巧合性成功的测试用例下面这个例子,S3 是错误语句,但是在下面的测试用例上,错误疑似度却低于正确语句S6。 我们甚至可以根据列出条件(condition)(注意到这个条件其实并不强),构造出无数的巧合性成功的测试用例。 巧合性成功对于最终疑似度的排名影响较大,因为它能提供相反的数据(覆盖了错误,没覆盖部分正确语句,却运行成功),足以扰乱最终的疑似度排名。//Find the maximum among a, b and c int max (int a, int b, int c){1 int temp = a;2 if (b > temp ){3 temp = b+1; //bug4 }5 if (c > temp ){6 temp = c;7 }8 return temp; }conditon a, b, c S3 S6 Others ra<b, b+1=c 1, 2, 1 0 1 p 3a<b, b+1<c 1, 2, 1 1 1 p 4覆盖等价在执行测试用例后,可能会出现 a10 , a11 相等的程序单元,我们称这种情况为覆盖等价。我们可以把它归结于两种情况:一、测试用例不够充分,还没有把有可能区分开来的程序单元区分开来;二、程序本身固有的性质,使得两个程序单元的 a10 , a11 总是相等,例如同一个基本块中的语句;例如 main 函数的两个同一层次的语句。覆盖等价对最终疑似度排序的影响没有巧合性成功来得大,但是它会扩大 Best 和 Worst 的评价标准下得分的差距。通常要解决覆盖等价的问题,就需要使用动态切片技术。 对于情况一、,也可以通过生成更多测试用例来解决。 内部资料 不得外传 版权所有 不得翻印
  • 15. 中山大学 软件工程实验室例 覆盖等价下面这个例子,S1 是错误语句。因为程序本身的结构,S1 和 S8 的覆盖信息完全相同, a10 ,a11 相同,疑似度相同,无法区分那个语句是错误语句。不过通过动态切片技术可知,S1 影响到了输出,而 S8 没有,所以知道 S1 是错误语句。//Find the maximum among a, b and c int max (int a, int b, int c){1 int temp = a+1; //bug2 if (b > temp ){3 temp = b;4 }5 if (c > temp ){6 temp = c;7 }8 b++;9 return temp; }conditon a, b, c S1 S8 ra+1≤b≤c 0, 2, 3 1 1 potherwise 3, 2, 1 1 1 f多错误的程序如果一个程序有多个错误,那么失败的运行可能是由其中某一个错误引起。 就会出现一个错误没被覆盖,但是程序运行失败,这种情况也会给最终的错误疑似度排序带来较大影响。通常的解决方法,在文献[JBH07] [LH06] [PLF+03] [ZJLN06]中都有提及,对测试用例的失败运行进行聚类,让不同聚类的运行失败关联到不同的错误程序单元,消除相互之间的影响。例 多错误的程序下面这个例子,S3 与 S6 是程序的错误,但是因为它们的相互影响,使得不是错误语句的其他语句 others 成为了疑似度最高的语句。//Find the maximum among a, b and c int max (int a, int b, int c){1 int temp = a+1;2 if (b > temp ){3 temp = b+1; //bug4 } 内部资料 不得外传 版权所有 不得翻印
  • 16. 中山大学 软件工程实验室5 if (c > temp ){6 temp = c+1; //bug7 }8 return temp; }conditon a, b, c S3 S6 others ra<b, b ≥ c 1, 2, 3 1 0 1 fa ≥ b, a<c 3, 2, 4 0 1 1 fJaccard、Tarantula、Ochiai 以及 χDebug 方法的影响Jaccard、Tarantula、Ochiai 以及 χDebug 方法对于通常情况,总是能得到最优解。根据 Robin 老师的来信,可以这样来说,考虑程序中只存在一个错误语句,如果巧合性成功没有发生,那么所有成功的运行都不会覆盖这个错误语句;如果多个错误的错误聚类无误的话,那么所 有 失 败 的 运 行 都 会 覆 盖 这 个 错 误 语 句 , 此 时 a10 = 0 , a11 = totalfailed 。 这 样Jaccard、Tarantula、Ochiai 以及 χDebug 方法都会给这个错误语句赋一个最高的疑似度。同时,如果没有与这个错误语句覆盖等价的情况发生,那么这个错误语句拥有唯一的最高疑似度。Jaccard、Tarantula、Ochiai 以及 χDebug 方法的不同,其数学建模的重点就在于通过调节公式中 a10 与 a11 对疑似度影响的权重,实现对巧合性成功、多错误的程序的兼容度不同,而覆盖等价在基于覆盖的方法中,无法通过提出新的公式来兼容。具体来说,疑似度受 a10 与 a11 影响;想兼容巧合性成功,我们就要减少 a10 对疑似度的相对贡献;想兼容多错误的程序,我们就要减少 a11 对疑似度的相对贡献;同时,我们只能顾及其中一种情况。基于覆盖信息的软件错误定位技术的相关理解软件错误的分类根据文献[DM06]中对 C 程序中错误调查研究,我们可以了解到目前 C 语言中常见的重要错误。该研究把错误分成了赋值、 判断、接口、算法以及函数五种错误,并根据真实的项目调查了其出现的频度,如下表: 内部资料 不得外传 版权所有 不得翻印
  • 17. 中山大学 软件工程实验室同时,两篇 IEEE 对于软件缺陷的分类[IEEE94] [IEEE96]也有参考意义。根据我们的理解,软件的错误主要分为两种:一、 谓词的错误;二、 赋值语句的错误。谓词的错误会直接影响控制流,赋值语句的错误会直接影响程序的数据状态。 在对这两种错误进行模式识别的时候,我们可能需要做不同的处理。代码遗漏根 据文 献 [DM06]的 调查 ,我 们看 到代 码遗 漏的 情况 会占 到实 际错 误的 64% 。在 文献[ZTGG07] 中 提 出 了 一 种 基 于 模 型 寻 找 隐 式 依 赖 的 方 法 去 定 位 遗 漏 执 行 ( executionomission)(注意到遗漏执行还不是代码遗漏,遗漏执行其代码还在程序里,只是没有执行它),取得了一定的效果。根据我们的理解,能通过编译的代码遗漏的情况可以分为两种:一、赋值语句中的代码遗漏;二、谓词中的代码遗漏。赋值语句中的代码遗漏可以看作是基本块的被改写,可以使用基于覆盖信息的软件错误定位技术找到这个基本块,进一步,可以使用动态切片技术,找到这个基本块缺少对哪个变量的赋值,从而提供更好的错误定位;谓词中的代码遗漏,非常容易造成巧合性成功,需要对谓词的行为进行动态的模式识别[WCCZ09],才能区分真正成功的执行和巧合性成功的执行,进一步使用基于覆盖信息的软件错误定位技术找到遗漏代码的谓词。可以看到,基于覆盖信息的软件错误定位技术是一种基本而通用的技术,同时它又有许多缺陷,需要使用其他技术来优化或弥补。静态分析与动态分析静态分析就是不执行程序,从程序语法以及语意上来分析程序的错误。文献 [Wei82]使用了 内部资料 不得外传 版权所有 不得翻印
  • 18. 中山大学 软件工程实验室一种静态切片的方法进行错误定位,文献[LW87]使用程序切块的方法改进了文献[Wei82]的方法,减少了搜索的空间。 也有一些研究通过挖掘的编程语言中语句的使用模式,建立知识库来进行错误定位。而动态分析,需要执行程序,了解程序执行期间的覆盖、 程序状态、控制流以及数据流等信息。相比静态分析,动态分析缩小了待分析问题的空间,提供了更精确的信息。文献[ADS93] [SO05] [ZHGG05]介绍了动态切片的方法。本文提到的其他错误定位方法都是动态分析的技术。根据我们的理解,纯静态分析的方法用于错误定位代价较高,预计效果也不会比动态分析的方法来得更优,因此研究并不多。若我们想在软件错误定位技术中加入新的输入,理解程序动态的行为,可以优先考虑动态分析的信息,不过,当需要理解程序的语法以及语意这种固定在程序形式化描述中的信息,可以直接使用静态分析,例如获取抽象语法树。程序单元程序单元,即是基于覆盖信息的软件错误定位技术中被覆盖的最小单元。 常用的程序单元有:语句、 基本块、 分支、 函数、 函数调用(覆盖函数不一定覆盖每一个函数调用)、 声明-使用二元组(数据流)以及模块内路径。根据我们之前的分析,排除掉巧合性成功、覆盖等价以及多错误的情况 ,Jaccard 、Tarantula 、Ochiai 以及 χDebug 方法在基本块已经可以取得最好的效果。问题就在于如何使用其他程序单元分析并排除掉巧合性成功、 覆盖等价以及多错误的影响。例如,可否把文献[MA10]中用于识别巧合性成功的程序单元替换为模块内路径,从而得到更精确的聚类呢?基于谓词的方法基于谓词的方法主要有 SOBER 方法[LFY+06]、Liblit05 方法[LNZ+05]。所谓谓词,我们的理解,即是哪些能决定基本块跳转的语句,可以理解为,比较判断语句、函数返回值的赋值[WCCZ09]。在程序控制流图中,如果把基本块“点”,那么谓词就是决定“边”的依据。 并且在动态分析中,一次运行的执行谓词数并不多,文献[WR05][ZGG06]通过切换谓词结果,搜索出可能导致失败的谓词,实现了一种定位谓词错误的方法。 内部资料 不得外传 版权所有 不得翻印
  • 19. 中山大学 软件工程实验室程序的执行轨迹、谓词结果以及覆盖程序的执行轨迹、 谓词结果以及覆盖,包含了不同层次的信息,并且可以逐级转化。 利用基本块的执行轨迹可以推测出程序的谓词结果与覆盖信息,却丢弃了谓词与覆盖的执行顺序的信息。利用谓词每次的结果,就能够推测出基本块的覆盖次数,却丢弃了谓词的执行结果。覆盖信息通常有两种:一、 命中与否;二、覆盖次数。进一步看,有了循环,递归,函数调用,同一个基本块才有可能在一次运行中被执行多次。 那么执行的次数是否为我们用于识别难以处理的情况呢?谓词信息通常有三种:一、整个谓词的结果(true/false);二、谓词子句的结果以及短路求值的信息;三、谓词每次判断时变量的值。执行轨迹信息通常即:基本块的执行顺序。 同时,从基本块的执行顺序,能够绘制程序的控制流图,文献[CLZ+09]就是在控制流图的基础上做图挖掘,实现了一种新型的软件错误定位的技术。进一步,条件分支,循环,递归,Break/Continue,函数调用和 Return,这些语句隐含了跳转,分割出了基本块,可以改变程序的控制流。更实际的软件错误定位技术根据我们的编程经验,程序员在调试的时候对于错误是迷茫的,程序员起初只知道程序若干成功和失败的测试用例;并不知道错误的位置,错误的个数,错误时候程序的状态。优秀的程序员可以用直觉来定位到错误,但是多数程序员通常是基于失败测试用例的运行,通过设置断点(设置断点的策略通常有二分策略,至顶而下的策略),观察程序的变量状态 ,定位程序的错误。因此程序员需要更多的信息来定位错误,既然有这样的实际需求,我们的软件错误定位技术能否提供更多的信息给程序员呢?例如疑似错误的上下文,疑似错误的特征等等。当然软件错误定位技术的新输出也会需要新的评价方法,这些都非常值得探讨并做用户研究。我们有这样一个想法:程序有不同层次的作用域,通常程序员定位错误是至顶而下的方法来调试,那是否可以认为在同一个作用域内对疑似度进行排序会更加符合用户习惯呢?并且同一个作用域内,程序单元空间维度更小,计算聚类是否会得到更好的效果呢?这些都需要我们进一步实验。机器学习、数据挖掘用于基于覆盖信息的错误定位技术文献[WSQG08] [WQ09]中,使用了神经网络算法进行错误定位。文献[LLJB10]中,尝试了数据挖掘领域中二十种关联规则挖掘的方法进行了对比实验。 以上方法都基于这样一个假设,错误程序单元的覆盖信息与运行结果关联的、相似的。根据我们之前的分析,覆盖信息与运行结果最关联的程序单元并不一定就是错误单元。 由于有巧合性成功、 覆盖等价和多错误的存在,可以构造覆盖信息与运行结果并不关联的错误程序单元。经验性研究[MAEA09]说明了广义的巧合性成功占据实际程序的 72.1%(15.7%+56.4%),不过若想说明错误程序单元的覆盖信息与运行结果的关联性较弱,会导致机器学习、数据挖掘的方法失效,还需要进一步进行经验性研究。 内部资料 不得外传 版权所有 不得翻印
  • 20. 中山大学 软件工程实验室例 基于关联挖掘的缺陷下面这个例子,根据关联度的定义:若测试用例的结果为 p(成功)与程序单元覆盖(1),就能减少关联度;若测试用例的结果为 f(失败)与程序单元覆盖(1),也能增加关联度。我们发现,当巧合性成功广泛发生时,与运行失败相关联的语句 S6,而不是真正的错误 S3。//Find the maximum among a, b and c int max (int a, int b, int c){1 int temp = a;2 if (b > temp ){3 temp = b+1; //bug4 }5 if (c > temp ){6 temp = c;7 }8 return temp; }conditon a, b, c S3 S6 ra<b, b+1=c 1, 2, 1 0 p 3a<b, b+1=c 2, 3, 1 0 p 4a<b, b+1=c 3, 4, 1 0 p 5a<b, b+1=c 1, 5, 1 0 p 6a<b, b+1=c 2, 6, 1 0 p 7a<b, b+1>c 1, 2, 1 0 f 1部分实验结果这一章记录了做过的一些实验,通过这些实验,我们逐渐对于错误,覆盖,运行的结果间的关联有更多直观理解。实验一、除去失败运行没有覆盖的语句本实验希望展示:失败运行没有覆盖的语句都是正确语句。 原因如下:因为程序的错误只有一个,运行失败必定会覆盖到此错误,那么本次运行没有覆盖的语句都是正确的。实验在周老师提出的 Heuristic IIII 的方法上做改进,并与 Heuristic IIII 方法做比较。 内部资料 不得外传 版权所有 不得翻印
  • 21. 中山大学 软件工程实验室实验结果左图为最好的情况,右图为最坏的情况。红线为本次实验的新方法,蓝线为 Wong 的Heuristic III c 方法。实验二、选择与失败测试用例距离最近的成功测试用例本实验希望展示:与失败测试用例距离最近的成功测试用例,再加上失败的测试用例,仅使用这两种测试用例,有利于把真正的错误给展现出来。实验在 Wong 的 Heuristic III c 方法上改进而得,并与 Wong 的 Heuristic III c 方法随机选择100 个用例做比较。实验结果左图为最好的情况,右图为最坏的情况。红线为本次实验的新方法,蓝线为 Wong 的 内部资料 不得外传 版权所有 不得翻印
  • 22. 中山大学 软件工程实验室Heuristic III c 方法随机选择 100 个用例的方法。Euclidean Closest:(使用了覆盖的次数来定义测试用例间的距离)Boolean Closest:(仅使用了是否覆盖来定义测试用例间的距离) 内部资料 不得外传 版权所有 不得翻印
  • 23. 中山大学 软件工程实验室实验三、选择与失败测试用例距离最远的成功测试用例本实验希望展示:由于巧合性成功的存在,我们尽量去找与失败测试用例语句最远的成功测试用例。实验在 Wong 的 Heuristic III c 方法上改进而得,并与 Wong 的 Heuristic III c 方法随机选择100 个用例做比较。实验结果左图为最好的情况,右图为最坏的情况。红线为本次实验的新方法,蓝线为 Wong 的Heuristic III c 方法随机选择 100 个用例的方法。Euclidean Closest:(使用了覆盖的次数来定义测试用例间的距离) 内部资料 不得外传 版权所有 不得翻印
  • 24. 中山大学 软件工程实验室Boolean Closest:(仅使用了是否覆盖来定义测试用例间的距离) 内部资料 不得外传 版权所有 不得翻印
  • 25. 中山大学 软件工程实验室实验四、同时选择与失败测试用例距离最远和最近的成功测试用例本实验希望展示:根据之前两个实验的结果,我们希望去它们的并集来尝试。实验在 Wong 的 Heuristic III c 方法上改进而得,并与 Wong 的 Heuristic III c 方法随机选择100 个用例做比较。实验结果左图为最好的情况,右图为最坏的情况。红线为本次实验的新方法,蓝线为 Wong 的Heuristic III c 方法随机选择 100 个用例的方法。实验五、移除与失败测试用例距离最近的成功测试用例本实验希望展示:与失败测试用例距离最近的成功测试用例很有可能是巧合性成功的测试用例,移除之。 内部资料 不得外传 版权所有 不得翻印
  • 26. 中山大学 软件工程实验室实验在 Wong 的 Heuristic III c 方法上改进而得,并与 Wong 的 Heuristic III c 方法做比较。实验结果左图为最好的情况,右图为最坏的情况。红线为本次实验的新方法,蓝线为 Wong 的Heuristic III c 方法随机选择 100 个用例的方法。实验六、为测试用例设置权重本实验希望展示:成功的测试用例不会经过所有正确的程序单元;失败的运行会经过若干正确的程序单元。以上两种情况会给实验结果带来负面影响,我们希望以为每个测试用例赋一个权重的方法来弱化这种影响。 覆盖的程序单元数具体来说,为每个成功的测试用例赋权重: ,即覆盖得越多,权重 总的程序单元数 内部资料 不得外传 版权所有 不得翻印
  • 27. 中山大学 软件工程实验室 覆盖的程序单元数越大;为每个失败的测试用例赋权重: 1 − ,即覆盖得越少,权重越 总的程序单元数大。实验结果左图为最好的情况,右图为最坏的情况。红线为本次实验的新方法,蓝线为对应的旧方法。Ochiai:Jaccard: 内部资料 不得外传 版权所有 不得翻印
  • 28. 中山大学 软件工程实验室Tarantula: 内部资料 不得外传 版权所有 不得翻印
  • 29. 中山大学 软件工程实验室WongsHeuristicIII: 内部资料 不得外传 版权所有 不得翻印
  • 30. 中山大学 软件工程实验室实验七、只选择高权重的测试用例本实验希望展示:考虑到使用权重来计算错误疑似度,权重的影响能力有限,于是采用比较极端的方法:移除权重较低的测试用例。实验结果左图为最好的情况,右图为最坏的情况。红线为本次实验的新方法,蓝线为对应的旧方法。Tarantula:实验八、把疑似为巧合性成功的成功测试用例设置为失败本实验希望展示:那些覆盖了失败测试用例覆盖交集的成功用例,认定为巧合性成功,本实验把它们标记为失败。 内部资料 不得外传 版权所有 不得翻印
  • 31. 中山大学 软件工程实验室实验结果左图为最好的情况,右图为最坏的情况。红线为本次实验的新方法,蓝线为对应的旧方法。实验九、对成功的测试用例聚类本实验希望展示:从测试用例的每个聚类中,选出部分测试用例,即能够代表全部测试用例。实验结果左图为最好的情况,右图为最坏的情况。红线为本次实验的新方法,蓝线为 Wong 的Heuristic III c 方法随机选择 100 个用例的方法。2 个聚类: 内部资料 不得外传 版权所有 不得翻印
  • 32. 中山大学 软件工程实验室10 个聚类: 内部资料 不得外传 版权所有 不得翻印
  • 33. 中山大学 软件工程实验室未来的工作通过之前的讨论,我们了解到想提出一个更好的公式(或者是使用数据挖掘的方法),兼容各种难以处理的情况,得到更好的效果,是很困难的。 不过排除掉难处理的情况,目前的方法又是高效的。所以目前许多文章开始讨论如何识别和处理难处理的情况。文献[MA10]介绍了使用聚类的方法来识别巧合性成功,取得了不错的效果。却还有一些不足之处:只使用了一种聚类方法(K-means)来聚类;只对基本块、 分支和定义-使用对的覆盖信息进行聚类;只使用了 Tarantula 方法计算错误疑似度;巧合性成功是应该除去,还是应该标记为失败?。 所以我们未来的工作即是针对以上四个设计空间进行实验和讨论。 不过需要先实现文献[MA10]中的评价方法。综上所述,未来的工作定位在,在文献[MA10]的基础上,使用各种现成测试用例聚类方法[JBH07] [LH06] [PLF+03] [ZJLN06] [Jon08] [DLP01]对成功的测试用例进行二聚类,更精确地标记巧合性成功,并分析产生各种方法效果差异的原因。总结可以看到,基于覆盖信息的软件错误定位技术是一种基本而通用的覆盖技术,其中基于相似性系数的方法主要使用了 a11 (执行了该程序单元的失败运行次数)和 a10 (执行了该程序单元的成功运行次数)来设计错误疑似度的计算公式。同时,它有三种难以处理的情况:巧合性成功、覆盖等价以及多错误的程序,需要使用其他技术来优化或弥补。 内部资料 不得外传 版权所有 不得翻印
  • 34. 中山大学 软件工程实验室测试用例聚类Cleansing Test Suites from Coincidental Correctness to Enhance Fault-Localization这是文献[MA10]的阅读笔记,本文的作者 Masri 之前的工作有经验性研究[MAEA09]。总的来说本文提出了三种对成功的测试用例进行聚类的技术,并自动选取巧合性成功的聚类,从而提高软件错误定位技术的效力。 注意到本文针对巧合性成功的评价方法值得借鉴,同时我们也可以参考[WCCZ09]受控实验的评价方法。另外,本文也通过经验性研究现实出巧合性成功的流行。本文也有一些不足之处:只使用了一种聚类方法(K-means)来聚类;只对基本块的级别上覆盖信息进行聚类;只使用了 Tarantula 方法计算错误疑似度。Abstract研究认为运行失败需要满足以下三种条件:1)缺陷被执行;2)该缺陷转产生一种能传染的程序状态;3)这种能传染的程序状态传播到了程序的输出。巧合性成功是指满足了条件1)与条件 2),却没有满足条件 3)。作者之前的工作显示,巧合性成功普遍存在,并且被证明是基于覆盖信息的软件错误定位技术的安全性减少因素。 本文的工作定位在清扫测试用例集中的巧合性成功,以提高软件错误定位的效果。 特别地,给定一个测试用例集,每个测试用例使用成功或失败来标记。作者提出在测试集中标记巧合性成功的一种技术的三种变体。本文使用三个指标来评价上面技术的效果:1)标记巧合性成功的准确度;2)对原有软件错误定位技术效力的提升;3)测试集的覆盖比例减少量。作者使用他们的技术和配置,软件错误定位技术的安全率和准确率分别提高了 88%和 61%。Semi-Automatic Fault Localization这是 Jones 博士论文 [Jon08] 第四章关于错误聚类的阅读笔记,其聚类方法也发表在文献[JBH07]中。本文提出两种聚类方法:方法一、 基于程序覆盖的方法(作者具体实现的覆盖比例);方法二、基于错误疑似度的方法。方法一、基于每个谓词结果的覆盖比例,使用离散时间马尔科夫链( DTMCs)模型做聚类,使用对称差(pair-wise difference)来计算距离,使用错误定位技术的结果来判断聚类是否结束,最后又使用错误定位技术来合并类似的聚类。另注,这里的离散时间马尔科夫链(DTMCs)模型,简单地说,就是分层合并聚类,每一层合并最相似的两个聚类。初始值以每个测试用例作为一个聚类。方法二、 只使用语句的错误疑似度(由 Tarantule 方法得到)来聚类。 首先,每个失败的测试用例初始为一个聚类,画作一个点,画成一个聚类图;然后,通过遍历对聚类图中相似的聚类连线;对已连线的聚类求闭包,产生最后聚类。 (值得注意的是,方法二、虽然简单, 内部资料 不得外传 版权所有 不得翻印
  • 35. 中山大学 软件工程实验室却取得了比方法一、要好的效果。)Statistical Debugging: Simultaneous Isolation of Multiple Bugs这是文献[ZJLN06]的阅读笔记,值得注意的是,本文不仅介绍了方法,还对权衡进行了讨论,分析结果产生的原因,非常有意义。 文章中把错误的运行当作投票人,程序单元作为候选人。初始时,每个错误运行对每个它覆盖了的程序单元都分了一份票;然后,反复迭代,每个错误运行的投票越来越集中,直到每个错误运行的投票集中到单独的程序单元。 最后,按照投票的程序单元,对错误运行聚类。 文中迭代的过程,是基于作者提出的谓词贡献公式(本文基于谓词结果的统计信息)。具体算法最好还是查阅博士论文[Zhe05]中相关章节。Failure proximity: a fault localization-based approach.文献[LH06]提出了一种使用程序单元错误疑似度来对错误运行进行聚类的方法,文章基于这样一个假设:如果两个错误运行产生的错误疑似度排名相似,那么这两个错误运行就会来自于一个错误程序单元。 本文在计算相似度时,使用的是 Kendall’s tau distance 距离。具体算法最好还是查阅 Liu 的博士论文[Liu07]中相关章节。Automated support for classifying software failure reports文献[PLF+03]是较早对错误聚类进行研究的文章,主要是提出一个大致框架。我们在 Masri的博士论文[Mas05]中并没有找到相关介绍,该文的其他作者都已经是 Doc.,估计不存在博士论文的版本。参考文献[Ves85] I. Vessey. Expertise in debugging computer programs: A process analysis. InternationalJournal of Man-Machine Studies, 23(5):459–494, November 1985.[RR03] M. Renieris and S. P. Reiss. Fault localization with nearest neighbor queries. In 18th IEEEInternational Conference on Automated Software Engineering (ASE 2003), pages 30–39,Montreal, Canada, 6-10 October 2003. IEEE Computer Society.[JH05] J. A. Jones and M. J. Harrold. Empirical evaluation of the tarantula automaticfaultlocalization technique. In D. F. Redmiles, T. Ellman, and A. Zisman, editors, 20th IEEE/ACMInternational Conference on Automated Software Engineering (ASE 2005), pages 273–282, LongBeach, CA, USA, November 7-11 2005. ACM.[WD10] W. E. Wong, V. Debroy, and B. Choi. A family of code coverage-based heuristics foreffective fault localization. Journal of Systems and Software, 83(2):188–208, 2010. 内部资料 不得外传 版权所有 不得翻印
  • 36. 中山大学 软件工程实验室[DW10] Vidroha Debroy and W. Eric Wong. 2010. Using Mutation to Automatically SuggestFixes for Faulty Programs. In Proceedings of the 2010 Third International Conference on SoftwareTesting, Verification and Validation (ICST 10). IEEE Computer Society, Washington, DC, USA,65-74.[CKF+02] M. Y. Chen, E. Kiciman, E. Fratkin, A. Fox, and E. A. Brewer. Pinpoint: Problemdetermination in large, dynamic internet services. In Proceedings of 2002 InternationalConference on Dependable Systems and Networks (DSN 2002), pages 595–604, Bethesda, MD,USA, 23-26 June 2002. IEEE Computer Society.[AZG07] R. Abreu, P. Zoeteweij, and A. J. van Gemund. On the accuracy of spectrum-based faultlocalization. In P. McMinn, editor, Proceedings of the Testing: Academia and Industry Conference- Practice And Research Techniques (TAIC PART’07), pages 89–98, Windsor, United Kingdom,September 2007. IEEE Computer Society.[WDC10] W. E. Wong, V. Debroy, and B. Choi. A family of code coverage-based heuristics foreffective fault localization. Journal of Systems and Software, 83(2):188–208, 2010.[JHS02] J. A. Jones, M. J. Harrold, and J. T. Stasko. Visualization of test information to assist faultlocalization. In Proceedings of the 22rd International Conference on Software Engineering (ICSE2002), pages 467–477, Orlando, Florida, USA, 19-25 May 2002 2002. ACM.[AZG06] R. Abreu, P. Zoeteweij, and A. J. C. van Gemun. An evaluation of similarity coefficientsfor software fault localization. In 12th IEEE Pacific Rim International Symposium on DependableComputing (PRDC 2006), pages 39–46, University of California, Riverside, USA, 18-20December 2006. IEEE Computer Society.[MAEA09] W. Masri, R. Abou-Assi, M. El-Ghali, and N. Al-Fatairi. An empirical study of thefactors that reduce the effectiveness of coverage-based fault localization. In B. Liblit, N.Nagappan, and T. Zimmermann, editors, Proceedings of the 2nd International Workshop onDefects in Large Software Systems: Held in conjunction with ISSTA 2009, pages 1–5, Chicago,Illinois, July 19-19 2009. ACM.[WCCZ09] X. Wang, S.-C. Cheung, W. K. Chan, and Z. Zhang. Taming coincidental correctness:Coverage refinement with context patterns to improve fault localization. In 31st InternationalConference on Software Engineering, ICSE 2009, pages 45–55, Vancouver, Canada, May 16-242009. IEEE.[JBH07] J. A. Jones, J. F. Bowring, and M. J. Harrold. Debugging in parallel. In D. S. Rosenblumand S. G. Elbaum, editors, Proceedings of the ACM/SIGSOFT International Symposium onSoftware Testing and Analysis, ISSTA 2007, pages 16–26, London, UK, July 9-12 2007. ACM.[LH06] C. Liu and J. Han. Failure proximity: a fault localization-based approach. In M. Youngand P. T. Devanbu, editors, Proceedings of the 14th ACM SIGSOFT International Symposium onFoundations of Software Engineering, FSE 2005, pages 46–56, Portland, Oregon, USA,November 5-11 2006. ACM.[PLF+03] A. Podgurski, D. Leon, P. Francis, W. Masri, M. Minch, J. Sun, and B. Wang.Automated support for classifying software failure reports. In Proceedings of the 25thInternational Conference on Software Engineering (ICSE 2003), pages 465–475, Portland,Oregon, USA, May 3-10 2003. ACM.[ZJLN06] A. X. Zheng, M. I. Jordan, B. Liblit, M. Naik, and A. Aiken, Statistical Debugging:Simultaneous Isolation of Multiple Bugs, Proc. of the 23rd International Conference on MachineLearning, pp. 26-29, Pittsburgh, Pennsylvania, June 2006. IEEE 内部资料 不得外传 版权所有 不得翻印
  • 37. 中山大学 软件工程实验室[IEEE94]"IEEE Standard Classification for Software Anomalies.," IEEE Std 1044-1993 , vol., no.,pp.i, 1994[IEEE96]"IEEE Guide to Classification for Software Anomalies," IEEE Std 1044.1-1995 , vol.,no., pp.i, 1996[DM06] Duraes, J.A.; Madeira, H.S.; , "Emulation of Software Faults: A Field Data Study and aPractical Approach," Software Engineering, IEEE Transactions on , vol.32, no.11, pp.849-867,Nov. 2006[ZTGG07] X. Zhang, S. Tallam, N. Gupta, and R. Gupta. Towards locating execution omissionerrors. In J. Ferrante and K. S. McKinley, editors, Proceedings of the ACM SIGPLAN 2007Conference on Programming Language Design and Implementation, pages 415–424, San Diego,California, USA, June 10-13 2007. ACM.[Wei82] M. Weiser, Programmers use slices when debugging, Communications of the ACM,25(7):446-452,July 1982. ACM[LW87] J. R. Lyle and M. Weiser, Automatic Program Bug Location by Program Slicing, Proc. ofthe 2nd International Conference on Computer and Applications, pp. 877-883, Beijing, China,June 1987. IEEE[ADS93] H. Agrawal, R. A. DeMillo, and E. H. Spafford. Debugging with dynamic slicing andbacktracking. Software - Practice and Experience, 23(6):589–616, June 1993.[SO05] Chad D. Sterling and Ronald A. Olsson. 2005. Automated bug isolation via programchipping. In Proceedings of the sixth international symposium on Automated analysis-drivendebugging (AADEBUG05). ACM, New York, NY, USA, 23-32.[ZHGG05] X. Zhang, H. He, N.Gupta, and R. Gupta. Experimental evaluation of using dynamicslices for fault location. In C. Jeffery, J.-D. Choi, and R. Lencevicius, editors, Proceedings of theSixth International Workshop on Automated Debugging, AADEBUG 2005, pages 33–42,Monterey, California, USA, September 19-21 2005. ACM.[LFY+06] C. Liu, L. Fei, X. Yan, J. Han, and S. P. Midkiff. Statistical debugging: A hypothesistestingbased approach. IEEE Transactions on Software Engineering, 32(10):831–848, 2006.[LNZ+05] B. Liblit, M. Naik, A. X. Zheng, A. Aiken, and M. I. Jordan. Scalable statistical bugisolation. In V. Sarkar and M. W. Hall, editors, Proceedings of the ACM SIGPLAN 2005Conference on Programming Language Design and Implementation, pages 15–26, Chicago, IL,USA, June 12-15 2005. ACM.[CLZ+09] H. Cheng, D. Lo, Y. Zhou, X.Wang, and X. Yan. Identifying bug signatures usingdiscriminative graph mining. In G. Rothermel and L. K. Dillon, editors, Proceedings of theEighteenth International Symposium on Software Testing and Analysis, ISSTA 2009, pages 141–152, Chicago, IL, USA, July 19-23 2009. ACM.[MA10] Wes Masri, Rawad Abou Assi, Cleansing Test Suites from Coincidental Correctness toEnhance Fault-Localization, 2008 International Conference on Software Testing, Verification, andValidation, pp. 165-174, 2010 Third International Conference on Software Testing, Verificationand Validation, 2010. IEEE[ZGG06] X. Zhang, N. Gupta, and R. Gupta. Locating faults through automated predicateswitching. In L. J. Osterweil, H. D. Rombach, and M. L. Soffa, editors, 28th InternationalConference on Software Engineering (ICSE 2006), pages 272–281, Shanghai, China, May 20-282006. ACM.[WR05] T.Wang and A. Roychoudhury. Automated path generation for software fault localization. 内部资料 不得外传 版权所有 不得翻印
  • 38. 中山大学 软件工程实验室In D. F. Redmiles, T. Ellman, and A. Zisman, editors, 20th IEEE/ACM International Conferenceon Automated Software Engineering (ASE 2005), pages 347–351, Long Beach, CA, USA,November 7-11 2005. ACM.[LLJB10] Lucia, David Lo, Lingxiao Jiang, and Aditya Budi. Comprehensive Evaluation ofAssociation Measures for Fault-Localization, in proceedings of the 26th IEEE InternationalConference on Software Maintenance (ICSM’10). Timisoara, Romania. September 12-18, 2010.IEEE[WQ09] W. E. Wong and Y. Qi. Bp neural network-based effective fault localization. InternationalJournal of Software Engineering and Knowledge Engineering, 19(4):573–597, June 2009.[WSQG08] W. E. Wong, Y. Shi, Y. Qi, and R. Golden. Using an RBF neural network to locateprogram bugs. In 19th International Symposium on Software Reliability Engineering (ISSRE2008), pages 27–36, Seattle/Redmond, WA, USA, 11-14 November 2008. IEEE ComputerSociety.[Jon08] J. A. Jones. Semi-Automatic Fault Localization. PhD thesis, Georgia Institute ofTechnology, April 2008.[DLP01] W. Dickinson, D. Leon, and A. Podgurski, Finding failures by cluster analysis ofexecution profiles, presented at the 23rd International Conference on Software Engineering, 2001.pp. 339-348.[HJO08] H.-Y. Hsu, J. A. Jones, and A. Orso. Rapid: Identifying bug signatures to supportdebugging activities. In 23rd IEEE/ACM International Conference on Automated SoftwareEngineering (ASE 2008), pages 439–442, L’Aquila, Italy, 15-19 September 2008. IEEE.[AO08] Ammann P. and Offutt J. Introduction to Software Testing. Cambridge University Press,2008.[Liu07] Chao Liu. Statistical Debugging and Automated Program Failure Triage. University ofIllinois at Urbana-Champaign, 2007[Zhe05] A. Zheng. Statistical Software Debugging. University of California, Berkeley, 2005[Mas05] Wassim A. Masri. Dynamic information flow analysis, slicing and profiling. 2005 内部资料 不得外传 版权所有 不得翻印

×