关于软件单元测试的看法

                                                                        软件单元测试

                                                                       ——初学者浅见

       第一次听到软件单元测试,感觉是相对迷惑的。难道也是由来已久的单元小测验?然而事实往往不在我们的意料之中,那么究竟什么才是软件测试呢?照官方的话说,单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。而我个人的理解是想尽一切办法找出被测代码中的错误及漏洞,然后加以改进和完善。

        对于一个被侧代码如下: 

     

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;
}

         这是一段查找整数数组最大值的代码。

            一般来说,对于一个程序能否正常的得到正确结果,是我们测试的首要选择。如下示例:      

#include < iostream >
using namespace std;
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  main()
{
    int    i;
    int    num[3];
    for ( i = 0 ; i < 3; i ++ )
    {
        cin >> num[i];
    }
        cout <<Largest( num , 3 ) << endl;
    return    0;
}

      在以上的代码中我给予了被测代码一个主函数,并且给予了基本的数值要求,然后我测试的整数为:5  6  8
然而测试结果为 6。我们会清楚地发现这个输出结果违背了我们的意愿,并不是我们想当然的数字8。可以看出在被测代码中是存在问题的。经过仔细的检验,发现错误之处在于对于数组边界的控制问题,在for ( i = 0; i < ( length - 1); i ++   )中最后一个数组中的值并不能被调用,而是提前结束了数组的遍历。对此我们做出了如下更改:将i < ( length - 1)改为i <length或者i <= ( length - 1);经过以上的更改我们发现对于上述测试的整数5 6 8最终能够到达我们所期望的结果8。这便是我们在单元检测时应该注意的边界问题。

        当被测代码检验到此的时候,许多刚接触单元测试的同学都会想当然的认为检测到此结束了。而事实上我们忽略了测试代码的本质需求,这里并不是让大家将所加的main ( )函数运行出来就行,而是要检测被测程序代码的需求,在上述例题中的代码段需求的是在整数范围内测试成功。作为一个在大学中迷迷糊糊编程,糊糊涂涂运行程序的大学生来说,对于整数的概念,在多次编程的过程中,我已经形成了一种思维定式,让我输入整数,想当然的认为必然是大于0的简单的1,2,3,4,5......是最好的选择,这其中便忽略了整数的真正定义,那就是整数由负数,零和正数组成。相应的在测试过程中便忽略了对于负数和零的考虑,然而在C++运行环境下不会出现错误的情况,然而在其他的运行环境下可能就会出现错误,所以最好给max赋予一个数组中的初值。

       同时,身为单元测试人员还应有一颗鸡蛋里挑骨头的心,对于一些极端的情况做出判断并给出解决的办法。经过这基本的几步检验之后我们便拥有了最终的测试代码,如下:

             

int    Largest ( int list[], int length )
{
    int    i;
    int       max;
    if    ( list == NULL || length == 0)
    {
        cout << "数组为空" << endl;
        exit ( 0 );
    }
    else 
    {
       for    (  i = 0; i <=  (  length  -  1  ); i ++ )
       {
          if    ( list[i] > max) 
          {
              max = list[i];
          }
       }
    }
     return    max;
}

到目前为止,对于代码的单元测试基本上算是完成了。然而身为初学者还有很多东西要学习,在代码的单元测试上还有很长的路要走。

 

          

           

 

 
原文地址:https://www.cnblogs.com/chysly/p/3579409.html