软件测试基本概念--3个失效模型

v1.0 2024-03-12 学习时总结;

v1.1 2024-06-25   复习时阅读下文补充总结;软件测试的几个术语(故障--Fault、错误--Error、失效--Failure-CSDN博客 

前言:

“微软不是一家软件开发公司,而是一家软件测试公司。”  --比尔•盖茨(据说)

一.what is 失效模型?

Now, I 'll give u 3  terms:  fault, error, failure; 

1.1 Software Fault(软件缺陷):

Define: (Abnormal condition that can cause an element or an item to fail.)

key words:静态缺陷;可能使功能失效的异常条件.(并未执行,通过静态的,观测发现的问题)

即:实际代码功能与预期实现功能不符合/注释有问题(maybe? [v1.1]ans:不是,注释并不会导致任何失效,不是fault;)/...

e.g.1

//e.g.1
int i =0; // i =1  注释有误(存疑,Q1:注释有误 算fault吗?)
//e.g.2
int add(int a,int b){
 return a-b;        } // 加法函数却写的减法

1.2 Software Error(软件错误) :

Define: (Discrepancy between a computed, observed or measured value or condition and the true, specified, or theoretically correct value or condition.)

key words: 中间步骤/中间变量与你设计的运行模式不同

即: 不正确的内部状态,是缺陷Fault的表现形式(执行fault,可能会有Error) 

[v1.1] 补充:

[实际执行中]

运行fault后,触发得到的中间错误

Q:怎么才叫中间错误?中间值的问题or实际逻辑问题[比如数组求和中,0+4+5变成了4+5,是error吗?]

e.g.2

float  sum =0.0;
 for(int i =1;i<A.length;i++) // 实际应该从i =0 开始;
{
 sum+= A[i];
}
means = sum / A.length; 
//test case1 : A=[1,2,3];
//test 预期步骤(expected):  sum= (1+2+3) 
//test 实际步骤(actual):    sum= (2+3) ----error


1.3 Software Failure(软件失效):

Define: (Termination of the ability of an element or an item to perform a function as required.)

key words:  预期结果实际结果不符

像这里的case1,平均数应该是2而实际结果是1.667,failure表现在输出(Q2:不输出,算体现出failure吗)

[v1.1]补充:

error传到软件外部,用户和测试人员能够观测的到的失效行为。

什么叫能观测?

那肯定就是输出[print]了.

比如e.g3,没有print,那么观测不到,就是没有failure;

e.g.3

float  sum =0.0;
 for(int i =1;i<A.length;i++) // 实际应该从i =0 开始;
{
 sum+= A[i];
}
means = sum / A.length; 
print(means)
//test case1 : A=[1,2,3];
//test output(expected):  means= (1+2+3)/3 =2;  
//test output(actual):  means= (2+3)/3 =1.66666667;
1.3.1 观测到Failure的三个必要条件【PIE模型】

1)Execution/Reachability-执行:

必须到达程序中包含缺陷的一个或多个位置

2)Infection-感染:

程序的状态必须是错误的

3)Propagation-传播:

被错误影响的状态必须传播,导致程序的某些输出不正确

二、三者关系

2.1 关系示例图

程序就好比是从起点运行到终点。过程中有偏差,即使最终到达期望终点,过程也是Error的。

2.2关于failure常见的运行情况(3种)

  • No  reachability:代码没有执行到fault处
  • No propagation:有Reachability&Infection.但是Error因为某些特定的情况无视了因为传入数据的特殊,例如计算平均数的时候,对数组起始位置的下标 i :
    • i = 0 :平均数等于0 + 2 + 4 = 6;6 / 3 = 2;
    • i = 1 :平均数等于2 + 4 = 6; 6 / 3 = 2;(结果一样)
  • No Infection :  即执行到了fault但是没产生error。
    • 先问个问题。Q2:有没有一个fault,任何测试都不会将其测试出来?这样还能称之为fault吗   (应该不算了)[v1.1]不算,这个逻辑类似于假言推理;

2.3 产生Fault,error,failure三者的不同情况

2.3.1有Fault,Error,无Failure;

(即 No Propagation)

e.g.4

int find_last_march(int [] a,int b ){//从后向前找到首个匹配的元素,返回下标
    for (int i = length(a)-1, i >0;i--)
        if(a[i] == b)  return  i ;  }
//test : a=[1,2,3];b=4; 
//有fault(length错误减一),error(遍历过程有误).
//无failure(期望和实际,均未输出。【当然在代码内加入return -1 也可】)
 2.3.2有fault无error 更无failure :

如no reachability 一样. (事实上,对于上例当输入a为空数组时,返回空指针异常,甚至没有执行到 [i=length(a)-1] 的fault处)

   Q3:执行了fault但没产生error? 存在吗?

是否产生Error,不容易把握。先针对代码原本要完成的功能,在脑海里预想一个完美的代码。

然后对比那个完美代码和存在Fault的代码在输入相同的测试样例的时候,看它们在执行期间状态是否一致。

2.3.3有fault有error 有failure :比较常见;

参考:

Fault、Error及Failure的解释 - 知乎 (zhihu.com)

软件测试的几个术语(故障--Fault、错误--Error、失效--Failure)_如果因为软件错误的中间态引起了软件的输出错误是fault吗-CSDN博客

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值