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

      现在说单元测试,那么什么是单元测试呢?单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。

      课堂上王老师给了我们一个例子。查找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才会越来越少。(真是受益匪浅啊!)把单元测试做好了,就会大大地节省我们的调试程序的时间。所以有必要对这方面提起重视来。

 
原文地址:https://www.cnblogs.com/zsjy/p/3588297.html