zoukankan      html  css  js  c++  java
  • 关于软件单元测试的看法

                                                                            软件单元测试

                                                                           ——初学者浅见

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

            对于一个被侧代码如下: 

         

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

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

     

              

               

     

     
  • 相关阅读:
    推荐几款Silverlight Tools【转载】
    Emit Vs CodeDom
    Silverlight 中实现Service同步调用
    一个配置文件的Mapping
    Silverlight:获取ContentTemplate中的命名控件
    关于计划
    巧用异步委托解决异步并发问题
    我是如何学习NodeJs的 – 笔记1
    应用HttpHandler, Json, JQuery, ASP.Net UserControl等技术处理 Ajax 的解决方案
    关于程序员的那些事一个五年程序员的总结
  • 原文地址:https://www.cnblogs.com/chysly/p/3579409.html
Copyright © 2011-2022 走看看