如何做好单元测试
作者:网络转载 发布时间:[ 2011/3/14 10:28:34 ] 推荐标签:
单元测试必须制订一定的覆盖率指标和质量目标,来指导单元测试设计和执行,同时作为单元测试验收的标准。设计用例时,可针对要达到的覆盖率指标来设计用例,而在测试执行时,可以依据覆盖率分析工具分析测试是否达到了覆盖率指标,如果没达到,需要分析哪些部分没有覆盖到,从而补充用例来达到覆盖率指标。而单元测试质量目标的制订,需要符合软件企业的实际过程能力,这依赖于软件企业以前单元测试过程度量数据的积累,不能凭空制造出来。有了以前度量数据的积累,完全可以了解当前组织的单元测试能力,例如单元测试每千行代码发现的缺陷数是多少。如果单元测试统计结果没有落到这个质量目标范围内,说明单元测试过程中某些方面存在一些问题,需要对过程进行审计后找出问题原因进行改进。
这些指标确定下来后,一定要严格推行。会有一些测试人员找出各种理由证明覆盖率指标达不到等等,这需要 QA 根据实际情况分析指标是否合理。实际证明有一个相对简单的标准也比没有标准要好得多,我们的实践发现,通过推行硬性指标,单元测试发现的问题数目比没有标准前至少增加了 2 倍。
下面是印度 SASKEN 公司的质量目标:
印度 SASKEN公司质量目标
阶段
组织目标
目标上限
目标下限
HLD (概要设计)
50 Major Defects / 100 pages
55 Major Defects/100 pages
45 Major Defects
/100 pages
LLD(详细设计)
40 Major Defects / 100 pages
44 Major Defects/100 pages
36 Major Defects
/ 100 pages
Unit Test Plan
(单元测试计划)
25 Major Defects / 100 pages
27.5 Major Defects /100 pages
22.5 Major Defects / 100 pages
Code Review
(代码走读)
20 Major Defects
/ KLOC
22 Major Defects
/ KLOC
18 Major Defects / KLOC
Defects during Unit test(单元测试)
15 Major Defects
/ KLOC
16.5 Major Defects / KLOC
13.5 Major Defects / KLOC
Defects during Integration test(集成测试)
6 Major Defects / KLOC
6.6 Major Defects / KLOC
5.4 Major Defects / KLOC
● 加强详细设计文档评审
详细设计是单元测试的主要输入,详细设计文档的质量将直接影响到单元测试的质量,所以一定要加强详细设计文档的评审,特别是要写相关测试方案和进行测试用例设计的人员,一定要从写测试用例的角度看这个详设是否符合要求,否则后期进行单元测试设计时会发现无法依据详细设计进行单元测试设计。软件组织可以将详细设计评审的要点以查检表的形式固化下来,这样在详细设计评审的时候依据查检表一项项检查,既提高了评审效率,也能保证评审效果。评审流程需要确定如果不满足查检表 n% 以上的条件,被评审详细设计文档不能通过,需要重新设计。
通常详细设计文档有两种形式,一种是流程图的形式,另一种是伪码的形式。用流程图表达的优点是直观,利于单元测试用例设计,缺点是描述性比较差,文档写作麻烦,不利于文档的变更和修改;伪码的方式可能正好相反,文档变更修改简单,可以方便地在任何地方增加文字说明,而且翻译成代码更加便捷,但不直观,不利于进行单元测试用例设计。
详细设计和单元测试设计一定要分离。如果单元测试由测试人员承担,这一点不会有什么问题;如果单元测试由开发人员承担,那么实际操作时可以让项目组内做相同或者相近任务的成员相互交换,根据对方的详设设计对方的单元测试。这样在单元测试开始之前的详细设计评审阶段要考虑到后面的分工,安排相关的单元测试设计人员参与相关详细设计的评审。
如果代码没有对应的经过评审后的详细设计文档,建议不进行单元测试,而是用代码审查替代单元测试。
开发人员在编码的过程中,可能会发现详设中的问题,并对代码进行修改,这种修改应该回溯到详设,并对详设进行相应的修改,否则到单元测试执行的时候,会发现代码和详设根本对不上,无法执行下去。详设的修改要受控制,要走变更控制流程,它的变更也要经过评审。因为单元测试是详细设计的下游活动,如果详细设计随意更改,单元测试文档很难和其保持一致,这样单元测试也失去了依据和意义。只有详设也纳入配置管理,才能保证单元测试和详设的一致性。
● 单元测试者技能的提高
1 .加强对单元测试人员的技能培训
单元测试的质量很大程度上决定于进行单元测试的人的技术水平。如果测试者不具备单元测试的知识,那么应该对测试者进行相关的培训。一个没有做过单元测试人,不经过培训初次是很难做好单元测试的。单元测试在详设阶段结束时开始,但是单元测试相关培训应该尽早准备和计划,培训可以分两个阶段,每个阶段的内容类似。第一阶段是写单元测试方案前,培训对象为测试方案的写作者和详设的写作者,这样可以在设计时多考虑可测试性,培训的内容为单元测试基本概念、单元测试分析方法、单元测试用例的写作、单元测试标准的明确;第二阶段为单元测试执行前,对象为测试执行者,培训内容为具体单元测试的执行,包括驱动函数、桩函数的构造、覆盖率测试工具的使用( TrueCoverage 、 Logiscope 等)、利用自动化单元测试框架构造单元测试自动化( TCL 、 CppUnit 、Junit等)。培训过程中好结合实例穿插其中,会比较生动,而且增强理解。
通过以上的系统培训,可以统一单元测试方法、明确单元测试的标准、掌握单元测试基本技能,为后期单元测试的顺利开展扫平道路。
2 .必须引入工具进行辅助
单元测试非常需要工具的帮助,特别是覆盖率工具不能缺少,否则用例执行后无法得到测试质量如语句覆盖、路径覆盖等情况,也无法对被测对象进行进一步的分析。应用较广的分析覆盖率的工具有 Logiscope 、 TrueCoverage 、 PureCoverage 等,它们的功能有强有弱,可以根据实际情况采用。
为了提高单元测试的效率,特别是提高进行回归测试时的效率,需要在单元测试中引入自动化。目前常用的方法是采用 TCL 语言编写扩展指令,构造自己的单元测试自动化。也可以直接采用开源的自动化测试框架如 CppUnit 、 JUnit 等。
此外,在单元测试之前,还需要利用 PC_Lint 对被测代码进行检查,排除代码语法错误,确保进行单元测试的代码已经具备了基本质量,保证单元测试能够顺利进行,提高单元测试执行效率。
3 .单元测试者加强对被测软件的全面了解
单元测试的目的除了要发现编码中引入的错误和发现代码与详细设计不一致的地方之外,还有一个目的是为了保证详细设计的质量。因为测试分析和测试用例设计需要依据详细设计来进行,这个过程实际上是对详细设计的重新检视,在这个过程中会发现以前评审中没有发现的问题。
无论是在单元测试的设计活动中还是在单元测试的执行过程中,都需要测试者了解软件的需求和概要,加强对被测软件的全面了解。否则对被测对象了解不深,只能被测单元的流程而测流程,而对于该流程是否正确无法保证了。
测试者要注重与开发的交流,这样能对被测单元有更深的了解;同时因为进度的原因,包括详设在内的文档往往来不及更新,所以新正确的思想往往存在于开发人员的脑袋里,及时与他们交流才会获得及时的信息,减少将来更新用例的工作量。
结尾
单元测试是软件开发过程中非常重要的质量保证手段,加强单元测试对提高软件质量具有非常重要的意义。而做好单元测试不是只要掌握单元测试方法可以了的,这需要从组织、流程和技术三个方面来保证。
原创文章请注明转载自测试小锅,本文地址:http://www.guojf.com/cat_4/17.html
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南