自述:论述单元测试的文章已经很多很多了,但是单元测试是否已经真正成为软件开发过程中不可或缺的一个重要活动呢?我不知道其他公司的情况如何,我知道起码在我们公司还不是的,目前我们基本上还处于没有任何单元测试的水平上。而这种情况带来的痛苦实在是让人心惊胆战,我不知道自己写的代码什么时候会蹦出个Bug来挑战自己的神经。本文是我为了推动单元测试在公司内的普及所写的一篇文章,我对单元测试的认识基本都来自网上,也有部分是我和我的同事们在平常工作中认识到的。本文没有多少创新的观点,贴出来是希望能得到做过单元测试推广工作的朋友们的建议,也希望为那些需要做单元测试推广工作的朋友们提供一点帮助。

  1    概述

  1.1    单元测试概述

  所谓单元测试,是指对软件设计的小单位,进行正确性检验的测试工作。而检验的方法,一般来说是由开发人员编写一小段测试代码,根据被测目标代码的应用场景,设计拥有合理覆盖度的输入条件,调用执行目标代码,然后判断输出结果是否与预期一致。被测试目标代码一般应具体到类的方法层面上。

  总之,单元测试是一个方法层级上的测试,单元测试也是细粒度的测试,用于测试一个类的每一个方法都已经满足了方法的功能需求。

  单元测试的目的在于发现目标代码中可能存在的错误。单元测试一般与编码同步进行,以便及时发现编码过程中可能存在的缺陷并使其尽早得以修正。当然,在开发后期也可以开展单元测试活动,用以保证代码质量,支持后续的代码重构。

  在现代软件开发周期中,以拥抱需求变化、倡导快速开发等理念日益获得业界重视的敏捷开发过程十分推崇单元测试,已经把单元测试作为贯穿整个开发周期的一个重要的开发活动。在敏捷开发过程中,有持续集成和渐进提交的方法论,已经总结出了非常好的单元测试理论和实践。如TDD实践的提出,将单元测试提升到与需求分析一致的地位,直接弱化设计阶段,它认为可以通过单元测试活动来驱动整个开发过程。

  注:《程序员为什么不写单元测试? 》

  1.2    本文档目的

  阐明单元测试的重要意义,定义单元测试的实施过程,依据公司的OSSP规范,对OSSP中与单元测试有关的论述进行补充,积极探索改进软件开发过程的方法,为公司OSSP规范的完善和进化提供有益支持。

  2    公司的OSSP规范

  2.1    OSSP概述

  OSSP是指Organization’s Set of Standard Process,即组织标准软件过程,描述组织中所有项目的软件开发过程中必须满足的一些需求。OSSP的目的是在组织的各项目中建立起公共过程,支持过程的度量、持续性和改进。

  公司已经通过CMMI3认证,因此也已经建立起一套适合公司实际情况的OSSP规范,对公司所有项目的研发过程进行了明确划分和定义,并同时提出了对各项活动过程进行裁剪的指导建议。其中涉及单元测试的部分有如下两个过程:

  一、测试过程

  在测试(Test)过程中定义了单元测试的活动,指出其目的是:对软件各模块进行单元测试,寻找并改正缺陷,保证软件质量;并指出单元测试一般由开发人员完成,制定开发计划时应该考虑包含实施单元测试的测试计划;同时还规定了单元测试活动的输出是《单元测试检查表》。

  二、技术解决过程

  该过程共分成五个子过程,“编码与单元测试”是后一个子过程,其中明确要求“对每个单元、关键类、关键算法、关键业务进行单元测试”。

  下面我们来详细分析一下这两个过程对单元测试的论述。

  2.2    测试过程

  2.2.1    测试过程对单元测试活动的论述

  目的(Purpose)

  对软件各模块进行单元测试,寻找并改正缺陷,保证产品质量。单元测试一般由开发人员来完成。

  角色和职责(Roles and Responsibility)

  角色    职责

  项目经理  制定单元测试计划。

  开发人员  编写测试用例,执行测试,修改错误。

  进入条件(Entry Criteria)

  按测试计划的安排,项目进行到单元测试阶段。

  程序可进行测试。