不增加人力投入,不改变开发流程,不延长项目时间,不提高管理成本,如果要较大幅度地提高软件产品的质量、降低开发测试及后期维护的成本,那么,单元测试可能是最好的选择。
简单地说,单元测试的效益主要表现在:
1、保证局部代码的质量。单元测试在隔离的前提下,分别对各个代码单元进行测试,能够达到其他测试不可能达到的测试完整性,从而保证了局部代码的质量。只有局部代码的质量得到了保证,代码的整体质量才可能得到保证。
2、保证代码的整体结构良好。要对代码进行单元测试,最起码的前提是代码能够隔离,也就是说,要具有一定的可测性,因此,单元测试是一种有效的约束机制,这种机制将保证代码具有良好的整体结构。例如,如果把业务代码直接写在界面类中,将很难进行单元测试,随意的不合理的紧耦合也会造成难于测试,单元测试使这些不好的特性得于及时发现,从而很容易进行修正。可以说,可测性是高质量代码的最重要的特性,不具有可测性,也就无法衡量代码的正确性,而有了可测性,也就在一定程度上保证了代码的可扩展性、可复用性。
3、单元测试使排除代码错误的成本最小化。排除错误的代价随着时间的推移呈指数级数上升,并且,有很多细小的代码错误只有通过单元测试的手段才能发现。
4、单元测试大幅度降低了后期测试和升级维护的时间成本。如果代码经过了充分的单元测试,集成测试和系统测试就只需要关注设计方面的问题。自动回归测试也大量降低升级维护成本。
5、单元测试自然地使开发流程变得“敏捷”,可以适应频繁变动的需求,因为整体结构良好的代码具有较好的可扩展性,自动回归测试又能保证修改不会引入新的错误。
对程序员来说,单元测试也有利于养成编写局部代码时的缜密的思维习惯,以及提高设计能力。
本文所说的方法和技术,具有“简单实用”的特征,对于企业来说,不需要增加额外的人员就可以实施,对于某一个项目来说,不需改变原来的开发流程来适应单元测试,反过来,单元测试会自然促进开发流程的改进;对于开发人员,也没有特殊的要求,反过来,单元测试会促进开发人员进一步提高开发能力。