【问题标题】:Understanding what Fault, Error and Failure mean了解故障、错误和失败的含义
【发布时间】:2011-06-12 16:22:20
【问题描述】:

考虑以下类:

class Xyz {
    public int count;

    public void numZero (int[] x) {
        // Effects: if x == null throw NullPointerException
        // else return the number of occurrences of 0 in x
        int count = 0;
        for (int i = 1; i < x.length; i++) //we have a bug here
            {
            if (x[i] == 0)
            {
                count++;
            }
        }

        this.count = count;
    }
}

我想弄清楚FaultErrorFailure 的真正含义。

故障

据我了解,Fault 在这种情况下将是代码编写逻辑的缺陷。 所以在这种情况下,Fault 将是这样一个事实,即代码指示计算机开始迭代 v 的所有元素,起始索引为 1 而不是预期的 0。

错误

当运行上述方法时,我们总是得到一个Error,但在一次实例中(当v.length == 0),因为我们真正想要的是迭代x的所有元素,但因为我们从i = 1,这并没有真正发生。

使用空向量作为输入,因为我们没有输入for loop,所以我们的错误代码不会运行,这意味着错误不会发生,并且一切都会按照理论上发生。

失败

由于我们的代码有一个Fault,在执行时几乎总是会显示为Error,所以当我们有效地看到不正确的输出时,我们只有一个Failure

假设Error 在我的程序中有效地发生了,如果它以某种方式对外界可见,我们只有一个失败。也就是说,如果我private int count;而不是public int count;,我永远不会在我的课堂上出现错误(当然这将是有史以来最没用的课堂!)。是这样吗?

我所说的一切都是正确的还是我有错误?

谢谢

【问题讨论】:

  • 这属于english.stackexchange.com
  • ...或 sqa.stackexchange.com :))
  • @Hans:那肯定是个玩笑吧?

标签: testing


【解决方案1】:
  • 失败:与预期结果不同。这就是问题 你观察。
  • 故障:故障原因。
  • 错误:导致故障发生的错误。例如,错别字。

一个失败、错误和错误的例子。

pre: param is an integer.
post: returns the product of the param multiplied by 2.

1. int double (int param) {
2.   int result;
3.   result = param * param;
4.   return result;
5. }

• 对 double(3) 的调用返回 9,但后置条件表明它应该返回 6。
• 结果 9 表示失败
• 失败是由于第 3 行的 fault,(使用“* param”而不是“* 2”)
error 是一个错字,(有人错误地输入了“* param”而不是“* 2”)。

为什么要给“Bug”三个不同的标签?

它们有助于传达您对问题所在的了解程度。

说“失败”意味着你知道出了问题但不知道原因。
说“故障”意味着您知道原因,但不知道故障发生的原因。
说“错误”意味着您知道故障发生的原因;例如:编码员被一辆经过的救火车分散了注意力。

你可以问,“但是为什么这个人会打错字?”但这涉及人为因素,超出了问题的范围。

资料来源:Zhen Ming (Jack) Jiang - EECS 4413,软件测试,约克大学。

【讨论】:

  • 真实场景:“我尝试使用我的应用程序,但在我登录后它未能显示我的用户名。我运行回归测试和调试器以在 Authentication 类的第 142 行找到错误。我犯的错误是忘记取消注释登录后返回用户名的代码行。
  • 我认为,这个例子说明错误和故障之间的区别不是很清楚。表面上看,我的反应是“当然错误是因为有人错误地引入了它。目前开发人员负责对源代码进行正确的更改,如果最终出错,那就是他的错误”。经过更仔细的思考,我想出了一个场景,那行错误的代码本来是可以的,但是有人更改了该行的输入使其错误。所以在这种情况下,错误和故障可能是可以区分的。
  • 我认为我同意解释可以更清楚。错了代码有什么问题。错误是编码器编码错误的原因。例如:编码人员分心并输入了错误的内容。 Fault 没有说明代码出错的原因。错误附有原因。
  • 我是否正确地看到您和 mouviciel 已经完全交换了错误和错误的定义?你能举一些例子来区分错误和错误吗?
  • 错误是您的代码有问题。即: * 而不是 + 或其他东西。错误是程序员做错了什么。他们打错了钥匙。在大多数情况下,不需要细粒度的定义。
【解决方案2】:

首先,每当系统提供的实际服务偏离其预期服务时,就会发生失败。请注意,由于即使规范也可能出错,所以定义并不依赖于它们。

其次,错误是系统状态中可能导致故障的部分。系统的状态可以出错但永远不会到达输出,因此不会导致失败。

第三,故障是导致错误的原因。它可能是设计错误,宇宙射线或其他任何东西。如您所指出的,如果未激活故障,则不会产生错误。

查看dependabilitybasic concepts and terminology 了解更多信息。

【讨论】:

  • 看起来你澄清了我对此的一些误解。谢谢。
  • 我是否正确地看到了你和例如? kiwicomb123 有完全切换错误和故障的定义吗?你能举一些例子来区分错误和错误吗?
  • @MartinThoma 如下所述paper 错误导致错误,所以我认为 mouviciel 就在这里
【解决方案3】:

错误是与实际结果和预期结果的偏差。它代表了人们所犯的错误。

错误是错误的结果。它是错误的步骤或过程,导致程序或软件以非预期方式运行

Bug 是程序中出现故障的证据,由于该程序未按预期方式运行

故障是系统或组件无法执行其所需功能。 Faults执行时发生故障

缺陷据说是在发生故障时检测到的。

【讨论】:

    【解决方案4】:

    有多种不同的定义,我个人比较喜欢的一种是:

    Fault -&gt; Error -&gt; Failure

    故障:已验证或假设的错误原因(故障、外部干扰、设计错误)。

    错误:程序或数据结构中的故障表现(实际输出与预期输出之间的差异)。

    失败:当错误到达服务接口时发生的事件,改变了服务本身(导致系统或组件无法根据其规范执行所需的功能)。 p>

    【讨论】:

      【解决方案5】:

      Error/Fault/Failure 中的错误是指导致问题的人为错误。人为错误是错误的想法导致用户在您的示例中创建了不正确的 for 语句。

      错误很难衡量或理解。在许多情况下,当出现引入故障的错误时,很难知道开发人员在想什么。这就是为什么他们喜欢区分错误和错误的原因。我们可以看到代码中存在错误,但很难知道为什么会产生错误。可能是代码是正确的,然后在随后的更改期间,for 循环被更改了。

      我始终记得,程序员的错误会导致代码错误,从而导致用户失败。并非所有错误都会导致故障。并非所有故障都会导致故障。

      【讨论】:

      • “程序员的错误导致代码错误,从而导致用户失败。并非所有错误都会导致故障。并不是所有的错误都会导致失败。”好点子!
      【解决方案6】:

      软件故障指的是代码中的一个bug。它是DURING 软件活动。

      而软件失败是指系统行为不端。这比故障观察到。

      故障可能是导致故障的原因。错误是“WHAT”,失败是“WHEN”。

      这些只是基本原理,但我仍然希望它能对此事有所启发。

      【讨论】:

        猜你喜欢
        • 2012-08-03
        • 1970-01-01
        • 1970-01-01
        • 2016-12-26
        • 1970-01-01
        • 2021-07-04
        • 2020-05-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多