上课的时候,老师给了一段代码,要求写出测试用例,如果有问题则需修正并写出异常处理。
代码如下:
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; }
运行结果如下:
总结:
此次的测试用例练习让我学会了从不同的角度去思考问题,全面分析,尽可能考虑每一种情况,不管这种情况出现的概率多小,都要考虑到。
另外,对异常的处理,并不是测试用例要做到的,而是源程序就应该具备的功能。