1、什么是单元测试?
单元测试就是针对代码单元的独立测试。就像电视机工厂对元器件的测试一样,单元测试把源代码单元与其他代码隔离,独立进行测试。“单元”,一般是指类或函数。如果以类为单元的话,则过于复杂,在实际的应用当中并不合适,所以一般主张以函数为单元。实际上一个函数的测试也可能相当复杂,可能需要十几个用例。
综上所述,单元测试可以简单理解为:单元测试就是测试各个函数是否有问题。在实际工作中,进行单元测试并不是一件容易的事,能做好函数测试已经相当不错了。
2、为什么要进行单元测试?
单元测试的价值和意义已经得到业界的广泛认同,也有很多文章详细介绍了它的意义,这里只做简单的介绍。
首先,单元测试可以保证局部代码的质量。只有局部代码的质量得到保证,项目整体质量才能够得到保证。 其次,单元测试可以降低后期测试、升级维护成本。虽然需要投入一些资源来完成这些测试,但是在后期的测试和升级维护中可以省出很多的成本。在进行单元测试的过程中还会自然实现回归测试的功能,有了回归测试就可以适应频繁变化的需求,也就是项目自然会变得敏捷。在敏捷开发当中的核心就是单元测试,没有单元测试也就没有敏捷可言。有了单元测试,项目自然就会变得敏捷。 再次,单元测试可以使得开发过程可控。因为单元测试可以保证代码的质量,因此不会使开发到了后期才不断发现代码当中有大量的错误,然后不断的去测试修改。单元测试可以避免项目开发过程出现的这种不可控的情况。 最后,单元测试可以促进开发。单元测试使大型项目的编码工作也能像编写控制台小程序那样,随时让正在编写的代码单独“跑”起来,还可以让全部可能输入(等价类)都“跑”到,甚至可以随时查看不同输入下的程序行为(什么输入执行什么代码产生什么输出),使编程工作变得轻松和高效。 代码错误可以分为两个方面:一个是性能问题,一个是功能错误。 性能问题可以分为时间性能和空间性能。时间性能就是指代码的执行效率不符合预期。空间性能就是指代码所占用的资源超出预期。由于单元测试面对的测试目标是比较小的代码单元,时间性能和空间性能通常都比较难于衡量,所以单元测试一般不测试性能问题。性能问题的测试通常是在系统测试或者性能测试阶段进行。 功能错误就是程序没有实现正确的功能。具体来说就是某种输入下没有产生预期的输出。功能错误可以分为有特征错误和无特征错误两种。有特征错误分为行为特征和语法特征。行为特征是在执行的过程当中会产生一些可以捕捉到的行为方面的特征,比如崩溃或者超时。语法特征错误就是在不执行的情况下,通过扫描,自动的或者人工的分析,发现代码当中的某些特征可能潜在一些错误,比如在条件表达式当中使用了赋值操作符,但是编译器是允许这种语法的。语法特征错误通常只是潜在的,不能明确肯定这里有错误,具体来说还可能包含数组越界这一类的。因为在C/C++语言当中数组是具有语法特征的,它是有上下限的,而上下限很多时候是静态的,所以可以通过对比来判断数组是不是有可能越界。这些都算是语法特征错误。总的来说,静态分析可以找出来的错误就叫语法错误。 3.1.2产生的原因
从代码单元错误的角度来看,一般有三种原因造成:
1、
设计错误,就是在设计代码单元的功能时,就已经有错误了。
2、
录入错误,就是在编码的过程中敲键盘敲错了。
3、
算法错误,就是在编写代码的时候考虑得不够全面,不够完善,或者是考虑错了。
算法错误占大多数,其中部分算法错误又占算法错误的大部分。部分算法错误指的是一个程序可能有十种输入,在这十种输入当中有三四种我们是做了正确处理的,可能还有几种是有错误的,甚至有几种是根本没有想到,没有进行处理,从而导致的错误。
3.1.3特征
代码错误有一些基本的特性,包括偶然性,随机性和单一性。一般来说开发流程比较好,编码规范比较好,都有助于减少代码错误,还有就是程序员的经验比较丰富,对业务比较熟悉也可以减少代码错误的数量。但是这些只是在程度上,数量上有所减少,要想完全预防错误还是非常困难的。
转自:http://www.51testing.com/?uid-222098
|