积成电子股份有限公司
单元测试指南 版本:1.0
1 引言
1.1 目的
本文用于指导软件开发中的单元测试工作。编写洁净并且工作良好的代码,是实现阶段的主要工作目标,本文针
对实现阶段的工作目标结合业界的最佳实践为实现阶段的单元测试工作提出了指导方案。
1.2 预期的读者和阅读建议
本文的预期读者是项目组的软件开发人员、测试人员和项目组长。软件开发人员通过阅读本文,应能掌握进行软
件的静态和动态单元测试的工作能力,以指导相应的单元测试工作;测试人员通过阅读本文,对于系统测试等其他测
试工作也有参考作用。项目组长通过阅读本文可以为项目组的测试工作安排提供指导。
1.3 文档范围
本文的第 2 章引入了测试驱动开发的概念,并介绍了相关的知识。第 3 章介绍了黑盒测试和白盒测试的概念和方
法。第 4 章介绍了使用 PC-Lint 工具进行软件静态单元测试的方法和注意事项。第 5 章介绍了使用 CppUnit 工具进行
软件动态单元测试的方法和注意事项。
2 测试驱动开发
测试驱动开发(TDD)是极限编程的重要特点,它以不断的测试推动代码的开发,既简化了代码,又保证了软件质
量。本章对 TDD 的背景、目标、优势等方面做了简要介绍,以期在各软件项目中引入 TDD 软件开发模式,并辅助提
高发布软件的质量。
一个高效的软件开发过程对软件开发人员来说是至关重要的,决定着开发是痛苦的挣扎,还是不断进步的喜悦。
最近兴起的一些软件开发过程相关的技术,提供一些比较高效、实用的软件过程开发方法。其中比较基础、关键的一
个技术就是测试驱动开发。虽然 TDD 光大于极限编程,但测试驱动开发完全可以单独应用。下面就从开发人员使用
的角度进行介绍,使开发人员用最少的代价尽快理解、掌握、应用这种技术。
测试驱动开发的目标是:“Clean Code That Works.”
这句话的含义是两件事情:让代码奏效(Work)和让代码洁净(Clean),前者是把事情做对,后者是把事情做
好。在项目组的研发工作中,增加功能和提升设计,是真正有意义的两类工作,而 TDD 关注的正是这两类工作
TDD 有可能成为显著提升软件研发工作效率的一件法宝。试用 TDD 请遵循下面的步骤:
编写 TestCase --> 实现 TestCase --> 重构
(确定范围和目标)
"
(增加功能)
"
(提升设计)
2.1 优势
TDD 的基本思路就是通过测试来推动整个开发的进行。而测试驱动开发技术并不只是单纯的测试工作。
需求向来就是软件开发过程中感觉最不好明确描述、最易变的东西。测试驱动开发就是通过编写测试用例,考虑
并描述代码的使用需求(包括功能、过程、接口等),而且这个描述是无二义的,可执行验证的。通过编写这部分测
试用例,对那些要实现代码的功能分解、使用过程、接口等进行设计。而且这种从使用角度对代码的设计通常更符合
后期开发的需求。通过编写测例,对代码的内聚性的提高和复用都是非常有益的。因此测试驱动开发也是一种代码设
计的过程。开发人员通常对编写文档非常厌烦,但要使用、理解别人的代码时通常又希望能有文档进行指导。而测试
驱动开发过程中产生的测试用例代码就是对代码的最好解释。
快乐工作的基础就是对自己有信心,对自己的工作成果有信心。当前很多开发人员却经常在担心:“代码是否正
确?”“辛苦编写的代码还有没有严重 bug?”“修改的新代码对其他部分有没有影响?”。这种担心甚至导致某些代码应
该修改却不敢修改。按照测试驱动开发生成的测试集恰恰可以成为开发人员信心的来源。
当然测试驱动开发最重要的功能还在于保障代码的正确性,能够迅速发现、定位 bug。针对关键代码的测试集,
以及不断完善的测试用例,为迅速发现、定位 bug 提供了条件。而迅速发现、定位 bug 是很多开发人员的梦想。
2.2 原理
下面介绍一下提供上一节所说这些好处的 TDD 的工作原理。
测试驱动开发的基本思想就是在开发功能代码之前,先编写测试代码。也就是说在明确要开发某个功能后,首先
思考如何对这个功能进行测试,并完成测试代码的编写,然后编写相关的代码满足这些测试用例。然后循环进行添加
其他功能,直到完成全部功能的开发。
这里把这个技术的应用领域从代码编写扩展到整个开发过程。应该对整个开发过程的各个阶段进行测试驱动,首
软件开发 0 3 - 0 X 第 1 页 共 2 1 页