本文的主要思路是先分别解释这几个概念的含义,然后通过一个具体的例子进行阐释,最后总结它们之间的关系。
(一)什么是error?
我们先看软件工程中对error的定义,
Error is deviation from actual and expected value.
It represents mistake made by people.
这句话的意思是,Error是指实际值偏离你最初的期望,往往是由人为造成的。
(二)什么是fault?
Fault is incorrect step, process or data definition in a computer program which causes the program to behave in an unintended or unanticipated manner.
It is the result of the error.
这段话的意思,fault通常是由于程序中不正确的步骤,过程或者数据定义,导致程序出现了非故意的、不可预料的行为。fault通常是由error导致的。
(三)什么是failure?
Failure is the inability of a system or a component to perform its required functions within specified performance requirements.
Failure occurs when fault executes.
这段话的意思是failure是一个系统或者组件不能完成它被要求的功能。failure通常是由fault导致的。
从前面的解释我们可以顺理成章的得出这样的解释,一些人为的error,使得程序中产生了不正确的步骤、过程和数据定义,从而使程序出现了一些不可预料的fualt,这些 fault最终又致使系统或者组件不能完成了最初要求的功能,也就是failure。如果你还有点迷糊,那么通过下面的这个例子,相信你应该就更清楚了。
(四)解释这三个概念的区别的例子。
#include<stdio.h>
int main ()
{
int value1, value2, ans;
value1 = 5;
value2 = 3;
ans = value1 - value2;
printf("The addition of 5 + 3 = %d.", ans);
return 0;
}
这个程序的功能是实现两个数相加输出最终的结果,编译运行之后输出这样的结果:
The addition of 5 + 3 = 2.
我们接下来具体分析一下:
- 很显然程序的结果和我们最初期望的功能是不相符的,也就是说系统出现了failure。
- 为了使程序能够正确工作,我们焦急的去寻找程序中的哪个过程出现了问题,也就是在寻找fault。在历经千辛万苦之后,终于发现了是第七行的这条语句出现了问题。这个程序的fault是把减法当成了加法。那么error是什么呢?
- error就是我犯的错误,将原本应该输入+的地方,输入了-。这样我们就发现了系统故障产生的过程,我们往往把我们发现的代码 错误叫做bug。
这三个概念是属于软件测试范畴的。对测试人员来说,他们不必知道程序的源码就能发现程序功能性的故障。从观察到的结果上来看,测试人员知道了程序中一定存在error导致了fault,因为fault导致程序failure产生正确的结果。但是测试人员不知道是什么导致了error。
(四)什么是异常?
对Exception这个概念,大家往往不会太陌生,不管是Java还是C++中都有相应的处理机制。简而言之,异常就是那些我们能够预料到的,可能会出现的使得程序不能正常运行的行为。如果不是很清楚,可以参见博客。