程序的单元测试—软件工程课上所获得的感悟

发表于:2014-5-26 11:11

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:達達尼亞    来源:51Testing软件测试网采编

  现在说单元测试,那么什么是单元测试呢?单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
  课堂上王老师给了我们一个例子。查找list[]中的最大值:int Largest(int list[], int length);并给出了测试函数的代码:
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;
}
  当然这个函数是有一定的小小的问题的!通过对程序的编写以及编译,其中的错误就是i的范围有误,且没有给max定义初值。前面的那个问题课堂上是找到了,但是同样我和我同桌蔡都没有想到为max定义一个初值。(这是一个程序员不应该有的问题)歪打正着的测试了几组数据竟然是正确的。{2,4 6,0}最大值是6。又测试了另外一组{-1,-7,-3 ,0}最大的数为0,{-7,3,45,0,-2}最大的数为45,王老师在不停的说,输入的数组为空怎样处理,数组中的数有浮点数怎么办,若输入的是字符怎么办,这个函数还可以满足性能要求吗,答案当然是否定的。所以课下我对这个函数又进行了修改。代码如下:
1 int Largest(int list[],int length)
2 {
3     int i,max;
4     max=list[0];
5     bool bRet = cin.good();
6     if(list==NULL)
7     {
8         cout<<"数组不能为空!"<<endl;
9         exit(-1);
10     }
11     else if(length==0)
12     {
13         cout<<"数组长度不能为零!"<<endl;
14         exit(-1);
15     }
16     else if(!bRet)
17     {
18         cout<<"您输入的有误,必须输入整数!"<<endl;
19         exit(-1);
20     }
21     else
22     {
23         for(i=0;i<=length-1;i++)
24         {
25             if(list[i]>max)
26             {
27                 max=list[i];
28             }
29         }
30         return max;
31     }
  }
  这样上述的问题都得到了解决。bool bRet = cin.good()函数是用来判断从键盘输入的数据是不是与定义的整型数据相同(输入的类型包括浮点型与字符型)。只要用户输入的数据有上述问题都会有相应的提示。
  其实单元测试是很重要的,就像盖楼房一样,如果每块砖都是不合格的,那么整栋楼的质量也就不能保证了。只有我们把每个函数或者模块的功能做好,整个工程的bug才会越来越少。(真是受益匪浅啊!)把单元测试做好了,就会大大地节省我们的调试程序的时间。所以有必要对这方面提起重视来。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号