ST-软件测试作业1-Page16-3

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

  a) Ans:在for循环中判断条件i>0,应该改为i>=0,否则数组第一个元素就不会被遍历到,使得第一个元素会影响到预期的结果。

  b) Ans:不会执行故障代码的测试用例:

                x=[2,3,5] ; y=3

               Expected:1; Actually:1  EQUAL!

  c) Ans: 会执行故障代码的,但不会导致内部错误(error)的测试用例:

                x=[2,3,5]; y=4

                Expected:-1; Actually:-1 EQUAL!

  d) Ans:会导致内部错误但不是程序失效(failure)的测试用例:

                x=Null; y=1

                Expected:NullpointerException; Actually:NullpointerExpection

  e) Ans:对于给定的测试用例,我们可以看到程序不会执行到数组下标为0的地址,所以最后的结果状态给的值就是-1,和预期的0不一致

  f) Ans:只用把for循环中的i>0,改为i>=0,那么预期的结果和实际的结果就都是0.

 

public static int lastZero(int[] x){
    //Effects:if x==null throw NullPointerExpection
    //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

 

  a) Ans:故障代码是for循环是从前往后循环,遇见等于0的值就返回数组下标,是寻找数组中的第一个0的位置,和函数的需求不一致。

  b) Ans:不会执行故障代码的测试用例:

                x=Null; 

                Expected:NullPointerException; Actually:NullPointerException  EQUAL!

  c) Ans:会执行故障代码的,但不会导致内部错误(error)的测试用例:

                x=[2,3,5]; 

                Expected:-1; Actually:-1 EQUAL!

  d) Ans:会导致内部错误但不是程序失效(failure)的测试用例:

                x=Null;

                Expected:NullpointerException; Actually:NullpointerExpection

  e) Ans:对于给定的测试用例x=[0,1,0],函数在访问到第一个元素时发现等于0,所以就直接返回第一个元素的数组下标0,和期望的2不一致。

  f) Ans:只用把for循环改为for(int i =x.length-1;i>=0;i--)即可,那么预期的结果和实际的结果就都是2.

 

 

public int countPositive(int[] x){
    //Effects:If x==null throw NullPointerException
    //else return the number of
    //positive elements in x
     
    int count  = 0;
    for(int i = 0; i<x.length; i++)
    {
        if(x[i]==0)
        {
            count++;
        }
    }
    return count;
}
  
    //test:x=[-4,2,0,2]
    //Expected = 2

  

  a) Ans:这个函数的功能是计算数组中正数的数量,而if条件中x[i]>=0,判断的是非负数的数量,应该改为x[i]>0

  b) Ans:不会执行故障代码的测试用例:

                x=Null; 

                Expected:NullPointerException; Actually:NullPointerException  EQUAL!

  c) Ans:会执行故障代码的,但不会导致内部错误(error)的测试用例:

                x=[-2,3,5]; 

                Expected:2; Actually:2 EQUAL!

  d) Ans:会导致内部错误但不是程序失效(failure)的测试用例:

                x=Null;

                Expected:NullpointerException; Actually:NullpointerExpection

  e) Ans:对于给定的测试用例x=[-4,2,0,2],当访问到第三个元素0的时候,满足条件所以count的值增加1,使得最后实际的值是3而不是预期的2,不一致。

  f) Ans:if条件中x[i]>=0,判断的是非负数的数量,应该改为x[i]>0,那么预期的结果和实际的结果就都是2.

 

  

public static int  oddOrPos(int[] x){
    //Effects: if x==null throw NullPointerException
    //else return the number of elements in x that
    //are either off or positive(or both)
 
    int count= 0;
    for(int i = 0;i < x.length;i++)
    {
        if(x[i] % 2 ==1 || x[i] >0)
        {
            count++;
        }
    }
    return count;
}
    //test: x=[-3,-2,0,1,4]
    //Expected =  3

 

  a) Ans:if判断条件中x[i] % 2 ==1会有故障,函数的功能是判断正数和奇数的数量,而这个条件没有考虑到负数的情况所以会漏掉负数中奇数的数量。

  b) Ans:不会执行故障代码的测试用例:

                x=Null; 

                Expected:NullPointerException; Actually:NullPointerException  EQUAL!

  c) Ans:会执行故障代码的,但不会导致内部错误(error)的测试用例:

                x=[2,3,5]; 

                Expected:2; Actually:2 EQUAL!

  d) Ans:会导致内部错误但不是程序失效(failure)的测试用例:

                x=Null;

                Expected:NullpointerException; Actually:NullpointerExpection

  e) Ans:对于第一个数的判定,取余2不等于1,所以判断不是奇数使得实际值和预期值不一致

  f) Ans:将 x[i] % 2 ==1 改为 x[i] % 2 != 0即可,那么预期的结果和实际的结果就都是2.

转载于:https://www.cnblogs.com/chengmengmeng/p/5263654.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值