什么是软件故障注入真正用于?

bat*_*man 6 javascript testing debugging fault

我对软件故障注入的基本了解如下:

人们无法运行所有可能的测试来测试软件.因此,人们可以在代码中进行修改并分析从中产生的错误程度.

但这有用吗?

就像说我们有:

function foo(a, b) {
   return a/b;
}
Run Code Online (Sandbox Code Playgroud)

我们改成了

function foo(a, b) {
  return Math.floor(a/b);
}
Run Code Online (Sandbox Code Playgroud)

那又怎样呢?

这有什么用呢?

编辑

@Leo,我说我写了一个找到Fibonacci数字的软件.我写的测试看起来像这样: assert(fib(1) == 1);

assert(fib(0) == 0);

assert(fib(3) == 2);

我声称100%覆盖率,因为所有代码行都在这里执行.

我的客户端运行这些测试,所有测试都通过.所以他认为,"也许测试本身是错误的.让我介绍一下它们的一些变化".

所以他改变其中一个 assert(fib(1) == 5);

而且测试失败了.他能从中得出什么结论?

Leo*_*Leo 4

假设您雇佣了一家公司向您提供一些软件,并且他们承诺以 90% 的覆盖率对其代码进行单元测试,这似乎是一笔很大的交易。

因此,您决定在这些测试中插入错误,因此您期望看到通过测试的覆盖率要低得多,但是,插入错误后,您发现它的覆盖率仍然是 90% :-)

这些测试有多大用处?

例如,这个测试对吗?

@Test
public void testAdd() {
    int result = 0;
    Claszz c = new Claszz();
    int result2 = c.add(-1, 1);
    assertEquals(result,0);
}
Run Code Online (Sandbox Code Playgroud)