考虑以下课程:
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,Error而Failure真正的意思.
根据我的理解,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;我在课堂上永远不会有错误(当然,这将是有史以来最无用的课程!).这是正确的吗?
我所说的一切都是正确的还是我错了什么?
谢谢
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,软件测试,约克大学.
小智 7
误差是与实际结果和预期结果的偏差。它代表了人民所犯的错误。
故障是错误的结果。这是由于程序或软件以非预期方式运行的不正确步骤或过程
错误是程序中错误的证据,因为该程序没有以预期的方式运行
故障是系统或组件无法执行其所需功能。执行 Faults 时发生故障
当故障发生时,缺陷被称为检测到。
小智 7
有多种不同的定义,我个人更喜欢以下一种:
Fault -> Error -> Failure
故障:已验证或假设的错误原因(故障、外部干扰、设计错误)。
错误:程序或数据结构中错误的表现(实际输出与预期输出之间的差异)。
失败:当错误到达服务接口时发生的事件,改变服务本身(导致系统或组件无法根据其规范执行所需的功能)。
Error/Fault/Failure中的Error是指引入问题的人为错误。人为错误是导致用户在您的示例中创建不正确的 for 语句的错误思维。
错误很难衡量或理解。在许多情况下,很难知道开发人员在犯下导致故障的错误时在想什么。这就是为什么他们喜欢区分错误和错误。我们可以看到代码中存在错误,但很难知道为什么会产生错误。可能代码是正确的,然后在后续更改期间,for 循环发生了更改。
我始终记得,程序员的错误会导致代码错误,从而导致用户失败。并非所有错误都会导致故障。并非所有的错误都会导致失败。
| 归档时间: |
|
| 查看次数: |
16781 次 |
| 最近记录: |