zoukankan      html  css  js  c++  java
  • 程序的单元测试—软件工程课上所获得的感悟

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

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

     
  • 相关阅读:
    Windows--查看端口占用
    设计模式--策略模式--简记
    Java--运算符的优先级表
    乐观锁和悲观锁--简记
    设计模式--适配器模式--简记
    设计模式--建造者模式--简记
    设计模式--抽象工厂模式--简记
    设计模式--工厂方法模式--简记
    寒假学习进度
    程序员修炼之道--从小工到专家阅读笔记03
  • 原文地址:https://www.cnblogs.com/zsjy/p/3588297.html
Copyright © 2011-2022 走看看