zoukankan      html  css  js  c++  java
  • 【测试用例选取及异常处理】 之 求一个数组中的最大整数。

    上课的时候,老师给了一段代码,要求写出测试用例,如果有问题则需修正并写出异常处理。

    代码如下:

    int Largest(int list[],int length)
    {
        int i,max;
        for(i=0;i<length-1;i++)
        {
            if(list[i]>max)
            {
                max=list[i];
            }
        }
            return max;
    }
    

    要对这段代码做测试,测试的内容包括:

    ①局部变量类型是否正确

    ②是否初始化

    ③是否存在错误的初始值或错误的默认值

    ④运算是否正确

    ⑤逻辑是否正确

    ⑥是否存在死循环

    ⑦对错误条件的处理

     

    对测试用例的选取要讲究方法,每个用例要有一定的代表性,比如

    int a[]={7,8,9}//普通正整数
    
    int b[]={-3,-1,-5}//负整数
    
    int c[3]//数组为空
    
    int d[4]={7,8,7,8}//有相同数据
    
    int e[]={0}//只有一个数据
    
    …………

    观察可知,此函数存在以下问题:

    max没有赋初值,可能会对结果产生影响

      解决方法:用list[0]来作为max的初始值。

    2 没有对异常进行处理,也就是当length长度为空的时候,也就表示list数组的为空

      解决方法:在源代码中增加提示信息;

     

    if(list==NULL||length==0)
     {
      cout<<"error!input null!";      //输出提示信息
      return 0;                             //返回特殊值
     }
    

      

     

    3 在做比较的时候,for循环结束条件有错

      解决方法:将for循环中的i < length-1修改成为i < length

     

    为了是程序能够具备更加完整的性能,改进后的代码如下

    #include<iostream>
    #define null -858993460
    using namespace std;
    
    void main()
    {
    	int largest(int list[],int length);
    
    	int a[]={7,8,9},b[]={-3,-1,-5},c[3],d[4]={7,8,7,8},e[]={0},max;//测试用例
    
    	max=largest(a,3);
    	cout<<max<<endl;
    	max=largest(b,3);
    	cout<<max<<endl;
    	max=largest(c,0);
    	cout<<max<<endl;
    	max=largest(d,4);
    	cout<<max<<endl;
    	max=largest(e,1);
    	cout<<max<<endl;
    }
    
    int largest(int list[],int length)
    {
    	int i,max=list[0];
    	if(list==NULL||length==0)
    		{
    			cout<<"输入数组不能为空!";      //输出提示信息
    			return 0;                       //返回特殊值
    		}
    
    	for(i=1;i<(length);i++)
    		{
    			if(list[i]>max)
    			{
    					max=list[i];
    			}
    		}
    
    	return max;
    
    }
    

      运行结果如下:

    总结

      此次的测试用例练习让我学会了从不同的角度去思考问题,全面分析,尽可能考虑每一种情况,不管这种情况出现的概率多小,都要考虑到。

      另外,对异常的处理,并不是测试用例要做到的,而是源程序就应该具备的功能。

  • 相关阅读:
    数据库 第一、二、三范式
    JVM垃圾回收(GC)整理总结学习
    ConcurrentHashMap
    Java GC、新生代、老年代
    Android -- 查看手机中所有进程
    ThreadLocal
    Android -- DrawerLayout
    WeakReference与SoftReference
    ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解
    微服务架构体系
  • 原文地址:https://www.cnblogs.com/XianqinHu/p/3650185.html
Copyright © 2011-2022 走看看