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)=1−hue(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 >= 0
与 i > 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