软件测试学习(2)

最近软件测试学习的重点,应该就要算

Software Faults, Errors & Failures的基本概念和对它们之间区别的理解了

我个人对这三个概念是这么理解的

Faults:静态代码中存在的错误,和程序是否运行无关,一个程序存在Faults只能代表这个程序有错,不能代表这个程序被运行的时候一定会出错

Errors :程序在运行的过程中,运行到了存在Faults的代码时,而产生的一种异常的中间状态。首先,这种状态是临时的,不会长时间存在;其次,error不是一定会导致Failures,但是如果代码运行过程中没有error就一定不会Faults

Failures:程序中的Faults被执行之后,程序出现过Error状态之后,可能导致的程序运行失败的最终结果,这个结果有可能是结果错误,有可能是运行异常。

我理解的三者之间的关系是这样的:如果代码中没有Faults,那么运行时一定不会出现Errors,如果运行中没有出现Errors那么最后的程序运行结果一定不会是Failures。但是这句话反过来说不一定成立。

这一点和软件测试本身很相似,软件测试只能证明错误存在,却没有部分证明错误不存在。

下面来说一下本周的两道作业题:

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

这段代码的功能是从一个数组中找最后一个值等于y的元素

很明显,我们能发现这段代码的for循环没有循环数组的第一个元素,这就是这段代码的Fault

如果我们想要找一组测试数据不执行一开始的for循环,那么也只有当输入的x数组为空时,抛出空指针异常了

执行Fault但是不进入Error状态的一种情况就是在倒序循环数组元素时,在数组第一个元素之前找到y的位置,比如说x={1,2,3},y=3,最后都返回2

进入Error状态但是没有出现Failure,就是说程序的运行结果没错,一种简单的情况就是数组中不存在我要查找的元素值,如x={1,2,3},y=4,最后都返回-1,代表没有找到

public static int lastZero (int[] x) {
        //Effects: if x==null throw 
        //           NullPointerException 
        // else return the index of the LAST 0 in x. 
        // Return -1 if 0 does not occur in x 
        for (int i = 0; i < x.length; i++) 
        {
                 if (x[i] == 0) 
                { 
                        return i;
                } 
        } 
        return -1; 
}
// test: x=[0, 1, 0] 
// Expected = 2

第二小题的代码也很简单寻找数组中的最后一个0的位置,但是实际功能却变成了寻找第一个0,这个就是这段代码的Fault

不执行Fault的测试用例还是一个空指针的数组

执行Fault但是不进入Error状态的一种情况比较难想,因为这段代码和代码原来的意思是完全相反的,所以说只有数组只有唯一一个元素的时候如,x={0},返回0

进入Error状态但是没有出现Failure,一种情况是数组里面的0小于等于1个,如x={1,2,3},返回-1

原文地址:https://www.cnblogs.com/ljc825/p/5247295.html