仅基于失败运行的错误定位总汇.docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
仅基于失败运行的错误定位 背景介绍 错误定位通常依赖成功与失败运行两方面,但成功运行通常易受巧合正确性的影响,并且现代软件自动产生大量关于失败运行的bug报告。仅基于失败运行的错误定位方法(简称FOnly)是一个有效的仅基于失败运行来错误定位的新技术。 当错误程序的一次运行传递了一个错误时,可能是程序内部语句的原因。在运行中,通常也会执行其他程序的语句,这些语句可能将错误传播给其他的内部语句。如果这些语句产生了显著影响,就会导致失败的出现。 一旦程序工程师发现失败的出现,就会调试、定位错误、弥补错误并确认移除了这一错误,然而,调试过程依旧很艰辛,错误定位也通常被认为是这之中最难的一部分。 最近亚洲的研究在程序错误定位自动化上有了显著突破,这些技术通常是基于成功运行与失败运行共同实现的。然而,这之中的成功运行可能激活了错???但不至于引起失败运行的出现。更进一步讲,很多系统如今能自动检测失败并产出大量有用的关于失败运行的bug报告。基于此,我们提出FOnly,一个仅基于失败运行数据定位错误的革命性技术。 技术介绍 在过去20年,有很多新颖的错误定位技术出现,为了比较这些技术,我们将他们分类,分类依据是研发时是否使用错误/成功运行数据,并列出他们使用这些运行的数目。 我们仅列出在源代码中定位错误的技术,包含了诸如delta debugging,semi-proving这些仅揭露导致程序失败的可疑输入范围的技术,也有检测或制止失败出现的技术如Eraser。 下表便是这些数据的详细信息,最左两列是失败/成功运行数,第三列列出了这一原理早年的代表性项目,最后一列是与亚洲一流学者相关的最近提出的项目。 使用成功运行的隐患是可能出现激活了错误却没有引发失败出现的情况,这就是巧合正确性。上表下面三个技术就存在这样的隐患,早先的原理诸如chislice,nearest neighbor ,Tarantula也不可靠如若巧合正确情况出现。最近亚洲的研究就在解决这一问题。 CP是一种通过计算运行中基本块转变为错误块的频率并通过程序控制流图中的相似系数测量后向传播错误—失败关联的技术,这样的计算结果是传递错误的代码有较高的秩。 Hong Cheng和他的同事在C程序中通过分析bug报告中的最具识别图模式来定位错误。 Saha与其合作者在ABAP语言的SAP系统中定位错误切片,其方法是从失败运行中得到程序环,构建数据库需要独立切片作为起始点,在将单独的错误运行划分给这些切片,他们之中存在正确数据记录并被视为成功运行,然而在成功运行中依旧蕴含着巧合正确性。 另一种方法解决巧合正确性影响的是完全放弃正确运行的使用。Findbug这种数据分析工具是同时不使用成功与失败运行的,他在程序运行时产生报警,再通过多次运行来确认警报点。动态切片技术是在只有一个错误运行的情况下生成所需的语句切片集。与Tarantula类似,Ochiai这类调试工具也能不使用成功运行来定位,但是这种野蛮的方法是非常没有效率的。 据目前所知,使用一个或多个失败运行而不使用成功运行来定位错误的研究是非常少的,在过去这种方法被认为是不现实的是因为任何程序编译时候都是希望出现0错误,但是由于目前新兴的动态bug监测器能快速监听运行过程并给出大量错误报告,这种方法就不再是不可行的了。 因为现代软件的内置工具通常可以监测失败运行并汇报出来,软件调试者就会收到大量错误报告,然而生成与其数目相等的成功运行来进行定位分析又会花费大量时间,这就促使了仅用失败运行来定位错误的技术的出现。 我们基于以下概念假设提出FOnly技术:若已知一个错误程序的一次特定运行,若该运行通过错误程序实体(语句)次数越多,就越可能导致失败运行的出现。对于另一个语句而言,若上述趋势在错误运行中没有被发现,则后者的错误几率就相对小些。 趋势估计,是目前非常流行的技术之一,也是我们FOnly的核心。这一概念的简单阐释是使用最小二乘方法找到回归线,这样的线就能揭露出给定案例的趋势。 在统计不同失败运行通过同一语句的次数的基础上, FOnly可以进一步找到拟合误差最小化的回归线,然后使用回归线的斜率和拟合误差值计算信噪比,这一数据代表了对语句错误关联性的估计。高信噪比的语句被视为有更高的错误相关性。 我们使用一个例子来证明Fonly如何应用错误假设来实现趋势估计从而定位错误:图1a是两个代码段,上面的代码段包含了if语句和变量检测及对应功能,若布尔表达式是真,则函数addstr修改变量dest。否则不改变它的值,下面的代码实现了输出功能。 若此时在上面的代码段中L115开始的if语句错误(遗失L116),那么产生错误后的代码就更有可能使表达式为真,所以L121执行几率也就相应增加。因此,dest就可能有了错误的值。除非i

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档