单元测试的重要性

 

    一些错误的认识

    在实际的单元测试过程中总会有一些错误的认识左右着我们,使之成为单元测试最大的障碍,在此将其一一分析如下:

    它太浪费时间了,现在要赶进度,时间上根本不允许,或者随便做做应付领导。

    我是一个很棒的程序员,我写的代码肯定是没有问题的。

    做单元测试太烦了,直接集成,到时有问题在集成测试时肯定能发现的,实在不行在系统测试总该能发现吧。

    它仅仅是证明这些代码做了什么。

    对于以上错误认识的产生归根结底还是由于对单元测试的理解还是不够,没有真正认识到单元测试的重要性。

    测试的重要性

    单元测试是软件测试的基础,因此单元测试的效果会直接影响到软件的后期测试,最终在很大程度上影响到产品的质量。从如下几个方面就可以看出单元测试的重要性在何处。

    时间方面:如果认真的做好了单元测试,在系统集成联调时非常顺利,因此会节约很多时间,反之那些由于因为时间原因不做单元测试或随便做做的则在集成时总会遇到那些本应该在单元测试就能发现的问题,而这种问题在集成时遇到往往很难让开发人员预料到,最后在苦苦寻觅中才发现这是个很低级的错误而在悔恨自己时已经浪费了很多时间,这种时间上的浪费一点都不值得,正所谓得不偿失。

    测试效果:根据以往的测试经验来看,单元测试的效果是非常明显的,首先它是测试阶段的基础,做好了单元测试,在做后期的集成测试和系统测试时就很顺利。其次在单元测试过程中能发现一些很深层次的问题,同时还会发现一些很容易发现而在集成测试和系统测试很难发现的问题。再次单元测试关注的范围也特殊,它不仅仅是证明这些代码做了什么,最重要的是代码是如何做的,是否做了它该做的事情而没有做不该做的事情。

    测试成本:在单元测试时某些问题就很容易发现,如果在后期的测试中发现问题所花的成本将成倍数上升。比如在单元测试时发现1个问题需要1个小时,则在集成测试时发现该问题需要2个小时,在系统测试时发现则需要3个小时,同理还有定位问题和解决问题的费用也是成倍数上升的,这就是我们要尽可能早的排除尽可能多的bug来减少后期成本的因素之一。

    产品质量:单元测试的好与坏直接影响到产品的质量,可能就是由于代码中的某一个小错误就导致了整个产品的质量降低一个指标,或者导致更严重的后果,如果我们做好了单元测试这种情况是可以完全避免的。

    综上所述,单元测试是构筑产品质量的基石,我们不要因为节约单元测试的时间不做单元测试或随便做而让我们在后期浪费太多的不值得的时间,我们也不愿意因为由于节约那些时间导致开发出来的整个产品失败或重来!

    具有的优点

    它是一种验证行为。

    程序中的每一项功能都是测试来验证它的正确性,为以后的开发提供支缓。就算是开发后期,我们也可以轻松的增加功能或更改程序结构,而不用担心这个过程中会破坏重要的东西。而且它为代码的重构提供了保障,这样,我们就可以更自由的对程序进行改进。

    它是一种设计行为。

    编写单元测试将使我们从调用者观察、思考,特别是先写测试(test-first),迫使我们把程序设计成易于调用和可测试的,即迫使我们解除软件中的耦合。另外还可以使编码人员在编码时产生预测试,将程序的缺陷降低到最小。

    它是一种编写文档的行为。

    单元测试是一种无价的文档,它是展示函数或类如何使用的最佳文档。这份文档是可编译、可运行的,并且它保持最新,永远与代码同步。

    它具有回归性。

    自动化的单元测试避免了代码出现回归,编写完成之后,可以随时随地的快速运行测试。

UnitTest不仅是对代码正确性的检验,更是在考验你的设计
每一个类处于不同的层次.平面上,拥有不同的职责
能相对独立的解决某一问题
是某个实体或行为或算法或业务或X的抽象
当然他有存在的上下文,要食人间烟火的,没有依赖关系就没有存在的必要
所以如何能让一个类在相对封闭的环境中进行**单元**测试是一个很大的课题
 
很多时候不是你不想做单元测试,而是你的设计导致你根本无法下手做单元测试
心有余而力不从
你不妨随意瞄一眼你现在IDE中正在Edit的类,他能进行单元测试吗?
 
一个好的对象设计应该很容易为他的每个单元进行测试
其实这一点可以上升到对一个设计的评价尺度上
 
所以在设计的同时多考虑一下单元测试是一个设计师的职责
对异常以及错误上的探索也同样属于设计师的职责
 
这个在编写有效用例中已经大下笔墨的问题也无需再提及
实践证明,对一个类是否能测试以及对错误的管理不是编码中可以轻易重构的
重构不要成为设计推卸责任的借口
其实在细节的把握往往成为决定胜负手的一个关键
随着长期的实践,我们才会渐渐有信心写出让人让自己放心的软件
原文地址:https://www.cnblogs.com/lutzmark/p/977957.html