[note]delta debugging(A Zeller)

Yesterday, my program Worked.

Today, it Does Not. Why?(A Zeller)

主要内容:

本篇论文主要讲的是delta debugging。

Zeller首先给出了一些定义,configuration为全体可能的改变的集合的一个子集,test为一次测试包括PASS,FAILED和UNRESOLVED三种可能结果,对于任意包含c的改变集c'如果都有test(c')不为PASS,则c为failure-inducing集。

接着,Zeller说明了configuration可能有的三个属性,单调性,无歧义以及一致性。单调性指的是,如果test(c)FAILED那么任何包含c的集合都不可能测试通过。无歧义指的是,failure只可能由一个改变集造成,不可能由两个独立的改变集分别造成。一致性指的是,任何测试的结果都是确定的,要么PASS要么FAILED。

上面的三种性质,当然不是一定具有的,只是一种理想情况。接着,Zeller设计了dd算法来找到理想情况下的最小failure-inducing集。

dd算法基于二分查找。改变集分为c1和c2两部分。分别测试c1和c2,共有3种结果,前两种是c1或c2fail了,那么递归的在fail的集合中查找;另一种情况,就是两个集合都pass,则必然是c1中的部分改变与c2中的部分改变发生了冲突,这时应用一个集合c1中的全部改变,对另一个集合c2二分的查找与集合c1发生冲突的改变,找到之后,可以类似的找到c1中与c2发生冲突的改变。

dd算法的用处仅限于比较理想情况,这显然是不够的。接下来,Zeller说明了通过撤销操作,可以将dd算法用到有歧义和不单调的情况下。

现在,dd算法的约束只有一个一致性了。Zeller解决这一约束的方式,基于对原程序做尽可能少的改变,产生不一致性的可能越小。

Zeller将dd扩展到dd+来解决一致性的一致。在dd的基础上,增加了一些步骤。当ciPASS但是ci的补集UNRESOLVED时,则称ci是preferred的,接下来的测试可以保留ci来保证一致性。try again,指的是将原来的n个集合进行二分分成2n个集合来尽快找到有效的测试。

之后,Zeller讲了两个避免不一致性的方法。首先是将关联的改变尽可能地放在一起,其次是预测测试结果。

最后,给出两个实际例子,以及该算法的应用前景。


收获:

本文作者先构建一个约束较多的理想情况,并进行分析,然后再逐步解开约束。这一种思路,值得学习。

转载于:https://my.oschina.net/locusxt/blog/205835

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值