软件测试之fault,error&failure

软件测试的错误

  • Failure
      定义:当一个系统不能执行所要求的功能时,即为Failure,可译为“失效”。
      例子:一个程序员在编程的时候,不小心将for(i = 0;i < 3; i++)中的i = 0误打成i=1,这种错误就可以归为Fault。
  • Error
       定义:计算、观察或测量值或条件,与真实、规定或理论上正确的值或条件之间的差异,可译为“错误”。Error是能够导致系统出现Failure的系统内部状态。
       例子:若将i = 0,打成 i = 1,则会导致 s =2 + 3(正常情况:i = 0,则s = 1 + 2 + 3)
    Fault导致的s表现出计算错误,这种 s计算错误为Error。即i = 1 导致 s = 2 + 3这种漏算错误。
/**
 *  代码段1
 *  计算平均数 
 */
public static int average(int [] nums) {
    double result = 0;
    for(int i=0;i<nums.lenght;i++){
        result += nums[i]
    }
    result = result / nums.lenght;
    return result;
}
  
  • Fault
      定义:可能导致系统或功能失效的异常条件(Abnormal condition that can cause an element or an item tofail.),可译为“故障”。
      例子:从上面的代码可以看出,当Fault :i=1 导致Error:s = 2 + 3,代码继续运行会导致 平均数average的结果错误,average的计算错误表现在输出,即为Failure。

三者的关系

  • 由于人类试图通过上述3个基本术语来覆盖所有现实中的失效场景,所以就有“Fault -> Error -> Failure”。即,故障发生了,会导致错误,错误有可能造成系统功能的减弱或丧失。
  • 当Fault是另外一个组件/系统的失效时,则有Failure (Fault) -> Error -> Failure;当将Fault说成是某组件状态Error时,则有Error (Fault) -> Error -> Failure。
  • 事实上,这是一种递归循环的关系,递归关系要成立必须有一个明确的结束条件,这个条件就是要找出Root Cause,否则将无法完成一个失效分析。
    来自穆春阳科学网博客

常见的运行情况

通常会有三种情况

  1. 没有执行到fault
    • 出现了某些异常,代码没有执行到fault处
  2. 感染到Error,但是Error因为某些特定的情况无视了
    • 因为传入数据的特殊,例如计算平均数的时候,根据代码段1,int a = {0,2,4};
      当i = 0 的时候,平均数等于0 + 2 + 4 = 6;6 / 3 = 2;
      当i = 1 的时候,平均数等于2 + 4 = 6; 6 / 3 = 2;
      这样的话i=0或者i=1的时候得到的结果都是一样的
  3. 没有传播到外面体现Failure
/*
 * 代码段2
 * 计算平均数
 */
public static double average(int a[]){
    int i = 0;
    double result = 0;
    for (i=0; i < a.length; i++) {
        result += a[i];
    }
    result = result / i ;
    return result;
}
  • 正确情况:当 i = 0 时,s = 3 + 5 + 4 = 12
    具有Error:当 i = 1 时,s = 3 + 5 = 8 ;这种情况下因为Fault导致了Error。
    但当 i = 0时,average = 12 / 3 = 4
    当 i = 1时, average = 8 / 2 = 4
    这种巧合导致了Failure 无法传播到外面,我们无法观测到失效行为,这会导致隐藏的Failure。
    原文作者:渣空格
    原文地址: https://www.jianshu.com/p/f350c5f9f16e
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞