Tarantula Automatic Fault-Localization Technique

Posted GoldenaArcher

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tarantula Automatic Fault-Localization Technique相关的知识,希望对你有一定的参考价值。

Tarantula Automatic Fault-Localization Technique

这是上课 PPT 上碰到的一个案例,Tarantula 是一个 Fault-Localization(自动缺陷定位技术) 的方法之一,正好找到一篇 Georgia Tech 学生写的 paper: Empirical Tarantula Automatic Fault-Localization Technique,里面解释的还是挺清楚的,这里顺带记一下笔记,怕以后忘了……

Tarantula 是一种计算代码自动缺陷的方式,文章中使用了这样一个案例:

mid() 
    read("Enter 3 numbers:",x,y,z);
    m = z;
    if (y<z)
        if (x<y)
            m = y;
        else if (x<z)
            m = y; // *** bug ***
    else
        if (x>y)
            m = y;
        else if (x>z)
            m = x;
    print("Middle number is:",m);

这个函数从命令行获取三个数字,并且返回中间数。

文中同样给予了数个测试案例:

  • 3,3,5 (t, 执行结果正确)
  • 1,2,3 (t, 执行结果正确)
  • 3,2,1 (t, 执行结果正确)
  • 5,5,5 (t, 执行结果正确)
  • 5,3,4 (t, 执行结果正确)
  • 2,1,3 (f, 执行结果错误)

知道这几个基本情况后,就能开始制表,即:

黑点代表测试案例执行过的行数。

suspiciousness 越低代表代码可疑度越低。反之亦然。从图中看到,最可疑的代码为 m = y,也就是出现 bug 的地方——按逻辑来说一旦倒了 else if (x < z) 这一段就代表了 x >= y,所以说赋值操作应该是 m = x 而非 m = y

rank 就不说了,代表可疑度的排行。

Pass/Fail Status 代表运行结果,也就是上面 t/f 的地方。

suspiciousness 的计算公式为:

s u s p i c i o u s n e s s ( e ) = 1 − h u e ( e ) = f a i l e d ( e ) t o t a l f a i l e d p a s s e d ( e ) t o t a l p a s s e d + f a i l e d ( e ) t o t a l f a i l e d suspiciousness(e) = 1 - hue(e) = \\frac \\fracfailed(e)totalfailed \\fracpassed(e)totalpassed + \\fracfailed(e)totalfailed suspiciousness(e)=1hue(e)=totalpassedpassed(e)+totalfailedfailed(e)totalfailedfailed(e)

以 line1 为例,所有的测试都会执行这一行,在被执行的部分中,测试失败的案例有 1 例,总共测试失败的案例也有 1 例,测试成功的案例有 4 例,总共测试成功的案例有 4 例,这样就会得出:

1 1 4 4 + 1 1 = 1 2 \\frac \\frac11 \\frac44 + \\frac11 = \\frac12 44+1111=21

也就是 0.5 的来历。

m = y 这一行最可疑的代码的计算结果为:

1 1 1 4 + 1 1 = 1 1.2 \\frac \\frac11 \\frac14 + \\frac11 = \\frac11.2 41+1111=1.21

最终得出 0.83。

虽然从论文中所得出的结论来说,Tarantula Automatic Fault-Localization Technique 的可靠度还是不错的,不过我们 professor 出了一道题让我们去做,并且对比一下自己得出的结果与这个表格上的结果。

题目中有一个边界条件,那就是写错的代码是所有代码都会执行的部分,那么使用 Tarantula Automatic Fault-Localization Technique 反而不太能够测出来——所有代码都会执行的 suspiciousness 永远都是 0.5,正常情况下不会是最高的,也不会是最低的。

这种常见的错误比较多的会出现在循环上,比如说 i >= 0i > 0 这种有的时候就会出现 edge case,从而造成计算上的失误,无法有效探测到代码缺陷部分。

以上是关于Tarantula Automatic Fault-Localization Technique的主要内容,如果未能解决你的问题,请参考以下文章

Oracle AWR 介绍(AWR -- Automatic Workload Repository)

将 automatic_scaling max_idle_instances 设置为零 (0) 有啥作用?

ATPG中test coverage和fault coverage的区别

Automatic logon configuration on Linux OS

UVA 10115 Automatic Editing(字符处理)

Elastic Beanstalk 上的 Celery + Django 导致错误:<class 'xmlrpclib.Fault'>, <Fault 6: 'SHUTDOWN_ST