了解故障,错误和失败的含义

dev*_*ium 6 testing

考虑以下课程:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图总结我的头什么Fault,ErrorFailure真正的意思.

故障

根据我的理解,Fault在这种情况下,代码的书面逻辑将是一个缺陷.因此,在这种情况下Fault,代码将指示计算机开始迭代所有元素,v其中起始索引为1而不是预期的0.

错误

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

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

失败

由于我们的代码具有Fault执行时间几乎总是在a中显示的代码Error,因此我们只有Failure在有效地看到错误输出的时候.

假设Error我的程序中有效地发生了,如果外部世界以某种方式可见,我们只会失败.就是这样,我private int count; 而不是public int count;我在课堂上永远不会有错误(当然,这将是有史以来最无用的课程!).这是正确的吗?

我所说的一切都是正确的还是我错了什么?

谢谢

kiw*_*123 9

  • 失败:与预期结果的差异.这是你观察到的问题.
  • 故障:失败的原因.
  • 错误:导致故障发生的错误.错别字.

失败,错误和错误的一个例子.

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. }
Run Code Online (Sandbox Code Playgroud)

•对double(3)的调用返回9,但是post条件表示它应该返回6.
•结果9表示失败.
•故障是由于第3行的故障,(使用"*param"而不是"*2")
错误是错字,(有人在错误时键入"*param"而不是"*2").

为什么给"Bug"三个不同的标签?

它们可以帮助您准确地了解问题所在.

说"失败"意味着你知道出了什么问题,但却不知道原因.
说"故障"意味着你知道原因,但不知道故障发生的原因.
说"错误"意味着你知道故障发生的原因.

你可以问,"但是为什么这个人会输错?" 但这会影响人为因素而超出问题的范围.

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

  • 真实世界场景:“我尝试使用我的应用程序,但在我登录后未能显示我的用户名。我运行回归测试和调试器以在 Authentication 类的第 142 行找到错误。我犯的错误是忘记取消- 注释一行登录后返回用户名的代码。 (2认同)
  • 我是否正确地理解您和 mouviciel 完全互换了错误和故障的定义?您能举一些例子来区分故障和错误吗? (2认同)

小智 7

在此处输入图片说明

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

故障是错误的结果。这是由于程序或软件以非预期方式运行的不正确步骤或过程

错误是程序中错误的证据,因为该程序没有以预期的方式运行

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

当故障发生时,缺陷被称为检测到。


小智 7

有多种不同的定义,我个人更喜欢以下一种:

Fault -> Error -> Failure

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

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

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


mou*_*iel 6

首先,只要系统提供的实际服务偏离其预期服务,就会发生故障.请注意,由于即使规范可能出错,定义也不依赖于它们.

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

第三,故障是导致错误的原因.它可以是设计缺陷,宇宙射线等等.如果您指出,如果未激活故障,则不会产生错误.

看看的基本概念和术语可靠性以获取更多信息.

  • 我是否正确地看到您和例如 kiwicomb123 完全切换了错误和故障的定义?您能举一些例子来区分故障和错误吗? (2认同)

Bil*_*ell 3

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

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

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