【测试用例选取及异常处理】 之 求一个数组中的最大整数。

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

代码如下:

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;

}

  运行结果如下:

总结

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

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

原文地址:https://www.cnblogs.com/XianqinHu/p/3650185.html