首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >软件故障注入的真正用途是什么?

软件故障注入的真正用途是什么?
EN

Stack Overflow用户
提问于 2014-01-26 14:31:46
回答 3查看 1.5K关注 0票数 6

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

一个人不能运行所有可能的测试来测试一个软件。因此,我们需要对代码进行修改,并分析由此产生的错误程度。

但这有什么用呢?

就像我们说过:

代码语言:javascript
复制
function foo(a, b) {
   return a/b;
}

我们把它改成了

代码语言:javascript
复制
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);

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-26 14:39:37

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

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

这些测试有多有用?

例如,这个测试是对的吗?

代码语言:javascript
复制
@Test
public void testAdd() {
    int result = 0;
    Claszz c = new Claszz();
    int result2 = c.add(-1, 1);
    assertEquals(result,0);
}
票数 4
EN

Stack Overflow用户

发布于 2014-02-02 19:15:51

软件错误注入基本上用于检查测试完成的代码覆盖率。如果在代码上运行了一组测试数据,并且所有测试数据都通过了,那么这肯定并不意味着代码是100%没有bug的。一个原因可能是,给定数据,代码的某些部分是不可触及的。在本例中,对代码进行了修改,以查看它是否仍按预期工作。

这主要用于测试异常或错误处理,这些异常或错误处理可能很少遇到。

例如,如果有一个字段只接受正数,并且要求输入负值时应显示错误。

在这种情况下,可以设置字段的属性,使用户无法输入该属性。因此,负值条件是不可检验的。

在这里,代码将被修改,以便用户可以输入-ve值并检查错误消息。

票数 1
EN

Stack Overflow用户

发布于 2016-04-11 15:53:15

嗯,这是一个老问题,但谷歌把我带到了这里,所以我只想补充我的观点。

软件错误注入和相关的估计与测试覆盖率有关,但我要说的不仅仅是作为代码的百分比。这是一个衡量你的测试在发现错误方面有多好。所以你注射了100个错误,你的测试发现了其中的60个。你漏掉了40%的错误。您的测试中可能有100%的代码覆盖率,但仍然漏掉了这些错误。如果您有一组测试,所有测试都是断言(1 == 1),那么您就会错过100%的错误。

当然,还有注射质量的问题(例如,它们是否触发可观察的故障,故障是否足够重要以进行测试,代码是否可达,等等)。但这是另一回事。

最后,另一个方面是健壮性测试,它使用像Chaos这样的工具从您的实际系统中杀死VM实例,目的是评估您的系统如何处理故障、恢复等。但是这是一个稍微不同的观点,因为您在系统级别注入了错误,我想这个问题是在代码/单元测试级别上提出的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21364626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档