上课的时候,老师给了一段代码,要求写出测试用例,如果有问题则需修正并写出异常处理。
代码如下:
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}//只有一个数据
…………
观察可知,此函数存在以下问题:
1 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;
}
运行结果如下:

总结:
此次的测试用例练习让我学会了从不同的角度去思考问题,全面分析,尽可能考虑每一种情况,不管这种情况出现的概率多小,都要考虑到。
另外,对异常的处理,并不是测试用例要做到的,而是源程序就应该具备的功能。
浙公网安备 33010602011771号