实用单元测试技术(2)

来源:互联网 发布:oracle sql parallel 编辑:程序博客网 时间:2024/05/17 06:32
第一章 单元测试的必要性和效益
1.1 什么是单元测试?

工厂在组装一台电视机前,会先测试所有元器件,与此类似,软件开发过程中也要对各个代码单元进行单独的隔离的测试,这就是单元测试。

"代码单元"一般是指类或函数,流行的看法是以类为"单元",但在实际工作中,以类为测试单元并不实用,即使是比较简单的类,例如只有三五个成员变量、十几个成员函数的类,如果作为一个整体来测试,做起来也过于复杂,因此,本文主张以函数为测试单元。

1.2 单元测试的必要性

缺少单元测试是项目质量不符要求,工期超时,预算超支的主要原因之一。如果缺少单元测试,编码完成后看到的往往不是胜利的曙光,而是噩梦般的泥潭。不说别的,仅仅"对代码的修改很可能会引入新的错误"这一点,就足于导致项目失败。

缺少单元测试,代码就会遗留大量的细小的错误,集成后就算能把这些错误找出来,总要修改吧?这就可能陷入修改,引入新的错误,测试,再修改,再引入新的错误的怪圈。

需求的变化几乎是不可避免的,因为很多功能都是做出来、试用过才知道有没有用、好不好用。需求的变化必然导致大范围的代码修改,于是又可能陷入修改,引入新的错误,测试,再修改,再引入新的错误的怪圈。

有了单元测试,情况就完全不同,首先单元测试使代码中的错误减至最少,其次任何修 改都可以通过自动回归测试来发现所引入的错误,从而消除修改所造成的破坏。

如果要保证项目质量,避免工期超时、预算超支,那么,实施单元测试就是完全必要的。

1.3 单元测试的效益

保证局部代码的质量:单元测试在隔离的前提下,分别对各个代码单元进行测试,能够达到其他测试不可能达到的测试完整性,从而保证了局部代码的质量。只有局部代码的质量得到了保证,软件产品的质量才可能得到保证。

改良项目代码的整体结构:要对代码进行单元测试,最起码的前提是代码能够隔离,也就是说,要具有一定的可测性,因此,单元测试是一种有效的约束机制,这种机制将有效地改良代码的整体结构。例如,如果把业务代码直接写在界面类中,将很难进行单元测试,随意的不合理的紧耦合也会造成难于测试,单元测试使这些不好的特性得于及时发现,从而很容易进行修正。可测性是高质量代码的首要特性,不具有可测性,也就无法衡量代码的正确性,有了可测性,也就基本上保证了代码的可扩展性、可复用性。

降低测试、维护升级的成本:错误越早发现,修复的代价越小,另一方面,如果代码经过了充分的单元测试,集成测试和系统测试就只需要关注设计方面的问题。自动回归测试也大量降低升级维护成本。

使开发过程适应频繁变化的需求:单元测试自然地使开发流程变得"敏捷",这是因为,整体结构良好的代码具有较好的可扩展性,自动回归测试又能保证修改不会引入新的错误,因此可以适应频繁变动的需求,降低系统分析、架构设计和后期测试的压力。

提升程序员的能力:对程序员来说,单元测试有利于养成缜密的思维习惯,提高编写健壮代码的能力,并提高设计能力
原创粉丝点击