【发布时间】:2014-01-26 14:31:46
【问题描述】:
我对软件故障注入的基本理解如下:
无法运行所有可能的测试来测试软件。因此,人们不得不对代码进行修改并分析由此产生的错误程度。
但这有什么用呢?
就像说我们有:
function foo(a, b) {
return a/b;
}
我们把它改成了
function foo(a, b) {
return Math.floor(a/b);
}
那又怎样?
这到底有什么用处?
编辑
@Leo,
假设我编写了一个查找斐波那契数的软件。
我编写如下所示的测试:
assert(fib(1) == 1);
assert(fib(0) == 0);
assert(fib(3) == 2);
我声称 100% 的覆盖率,因为所有代码行都在这里执行。
我的客户运行这些测试并且所有测试都通过了。 所以他想,“也许测试本身是错误的。让我介绍一下它们的一些变化”。
所以他将其中一个更改为
assert(fib(1) == 5);
测试失败。 他能从中得出什么结论?
【问题讨论】:
-
他不会在断言中添加更改。他会将更改添加到 fib() 中。您同意如果他更改 fib(),那么您的测试预计会失败?
-
@Leo,是的,是的。那么他能从失败中得出什么结论呢?他一定是改变了一些逻辑,所以失败了。
-
你知道,一些测试工厂是有偿提供测试代码的。想象一下有人离开公司,不喜欢他的老板并决定用 assertTrue(1==1) 结束每个测试 :-) 它可能一直发生 :-)
-
@Leo,我明白了。谢谢:)
标签: javascript debugging testing fault