您的位置:首页 > 大数据 > 人工智能

软件测试的几个术语(故障--Fault、错误--Error、失效--Failure)

2018-11-15 19:22 155 查看

1.解释

Fault--故障

编码过程中,存在于软件中的静态缺陷 (Defect)  

Error--错误

软件运行过程中,运行fault后,触发得到的结果(错误)。

Failure--失效

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

指不完全符合给定的需求,实际结果或行为与期望结果或行为之间的偏差。

当一个系统不能执行所要求的功能时,即为Failure

 

观测到Failure的三个必要条件【PIE模型】

Execution/Reachability-执行:执行必须通过错误的代码

Infection-感染:在执行错误代码的时候必须触发出一个错误的中间状态

Propagation-传播:错误的中间状态必须传播到最后的输出,使得观测到输出结果与预期结果不一致

ps:

一个测试执行到包含fault的代码,不一定会产生错误的中间状态error

产生了错误的中间状态,不一定会有失效failure

question:有没有一个fault,任何测试都不会将其测试出来?这样还能称之为fault吗?answer:有这样的fault

 

2.例子

[code]public int findLast (int [ ] x,int y)
{  // Effects: If x is null throw NullPointerException
// else return the index of last element in x that equals y.
// if no such element exists,return -1.
int count = 0;
for (int i = x.length-1; i > 0 ; i--)
{
if (x [ i ] == y)
{
return i;
}
}
return -1;
}

这个题目要求我们在数组中从后往前找到匹配期望值的索引,但是在for循环中,由于当i = 0时候没有满足 i>0的条件,无法遍历到 i = 0,所以实际上没有比对第一个数。这就是我们的Fault。

1.当测试用例为 test:x = [] 时,抛出空指针异常,此时没有执行下面的程序,所以没有执行fault。

2.当测试用例为 test:x = [2,3,5], y = 3 的时候

期望值:1 实际值:1 同时由于我们在 i = 1的时候,正确返回。所以我们虽然执行了含有fault的程序,但是并没有产生错误,所以 执行了fault,没有执行error。

3.当测试用例为 test:x = [2,3,5],y = 1的时候

期望值:-1 实际值:-1 虽然我们得到了正确的结果,但是按照设计,应该在遍历完x = 0 以后,返回 -1;而实际程序在遍历完x = 1之后直接返回了 -1,所以 执行了fault,产生了error,但没有出现failure。

4.当测试用例为 test:x = [2,3,5],y = 2的时候

期望值:0 实际值:-1 我们得到了与预期不一致的结果,按照设计,应该在遍历完x = 0 以后,返回 0;而实际程序在遍历完x = 1之后直接返回了 -1,所以 执行了fault,产生了error,也产生了failure。

 

3.个人理解

是否执行Fault,取决于是否执行了出现Fault的语句。

是否执行Error,不容易把握。先针对代码原本要完成的功能,在脑海里预想一个完美的代码。然后对比那个完美代码和存在Fault的代码在输入相同的测试样例的时候,看它们在执行期间状态是否一致。

是否执行Failure,通过最终结果与完美代码的结果(或者说预期结果)的一致性体现出来。

由于个人能力有限,编不出合适的例子,本例借鉴于其他博主,本人又加以拓展和思考,若有错误,欢迎指正!

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: