单元测试大揭密
FILEID:
VERSION:
AUTHOR:
DATE:
FILE STATE:
VINCETEST_002
1.0
Vince
200666
[ ] DRAFT
[ ] MODIFY
[√] RELEASE
未 经 授 权 严 禁 扩 散
单元测试大揭密
目
1
1.1
1.2
1.3
2
½
单元测试的重要性...................................................................................................................3
一些错误的认识...............................................................................................................3
测试的重要性...................................................................................................................3
具有的优点.......................................................................................................................4
单元测试的基本理论...............................................................................................................5
2.1
2.2
2.3
基本概念...........................................................................................................................5
测试的内容.......................................................................................................................5
测试的环境构成...............................................................................................................7
3
测试方法与过程.......................................................................................................................9
3.1
3.2
3.3
3.4
3.5
3.6
用例设计...........................................................................................................................9
用例执行.........................................................................................................................11
测试优化和策略.............................................................................................................11
测试评估.........................................................................................................................12
测试过程.........................................................................................................................12
测试实½.........................................................................................................................13
4
常用测试工具介绍:.............................................................................................................15
文斯测试技术研究中心:http://blog.csdn.net/vincetest
第
2
页 共
16
页
单元测试大揭密
1
单元测试的重要性
1.1
一些错误的认识
在实际的单元测试过程中总会有一些错误的认识左右着我们,
½之成为单元测试最大的
障碍,在此将其一一分析如下:
l
l
l
它太浪费时间了,现在要赶进度,时间上根本不允许,或者随便做做应付领导。
我是一个很棒的程序员,我写的代码肯定是没有问题的。
做单元测试太烦了,直接集成,到时有问题在集成测试时肯定½发现的,实在不行
在系统测试总该½发现吧。
它仅仅是证明这些代码做了什么。
l
对于以上错误认识的产生½根结底还是由于对单元测试的理解还是不够,
没有真正认识
到单元测试的重要性。
1.2
测试的重要性
单元测试是½件测试的基础,
因此单元测试的效果会直接½响到½件的后期测试,
最终
在很大程度上½响到产品的质量。从如下几个方面就可以看出单元测试的重要性在½处。
²
时间方面:如果认真的做½了单元测试,在系统集成联调时非常顺利,因此会节约很多
时间,
反之那些由于因为时间原因不做单元测试或随便做做的则在集成时总会遇到那些
本应该在单元测试就½发现的问题,
而这种问题在集成时遇到往往很难让开发人员预料
到,最后在苦苦寻觅中才发现这是个很½级的错误而在悔恨自己时已经浪费了很多时
间,这种时间上的浪费一点½不值得,正所谓得不偿失。
测试效果:根据以往的测试经验来看,单元测试的效果是非常明显的,首先它是测试阶
段的基础,做½了单元测试,在做后期的集成测试和系统测试时就很顺利。其次在单元
测试过程中½发现一些很深层次的问题,
同时还会发现一些很容易发现而在集成测试和
系统测试很难发现的问题。
再次单元测试关注的范围也特殊,
它不仅仅是证明这些代码
做了什么,
最重要的是代码是如½做的,
是否做了它该做的事情而没有做不该做的事情。
测试成本:
在单元测试时某些问题就很容易发现,
如果在后期的测试中发现问题所花的
成本将成倍数上升。
比如在单元测试时发现 1 个问题需要 1 个小时,
则在集成测试时发
现该问题需要 2 个小时,
在系统测试时发现则需要 3 个小时,
同理还有定½问题和解决
问题的费用也是成倍数上升的,
这就是我们要½可½早的排除½可½多的
bug
来减少后
期成本的因素之一。
产品质量:
单元测试的½与坏直接½响到产品的质量,
可½就是由于代码中的某一个小
错误就导致了整个产品的质量降½一个指标,
或者导致更严重的后果,
如果我们做½了
单元测试这种情况是可以完全避免的。
²
²
²
综上所述,
单元测试是构筑产品质量的基石,
我们不要因为节约单元测试的时间不做单元测
试或随便做而让我们在后期浪费太多的不值得的时间,
我们也不愿意因为由于节约那些时间
导致开发出来的整个产品失败或重来!
文斯测试技术研究中心:http://blog.csdn.net/vincetest
第
3
页 共
16
页
单元测试大揭密
1.3
具有的优点
1.
它是一种验证行为。
程序中的每一项功½½是测试来验证它的正确性,
为以后的开发提供支缓。
就算是开发
后期,
我们也可以½松的增加功½或更改程序结构,
而不用担心这个过程中会破坏重要的东
西。而且它为代码的重构提供了保障,这样,我们就可以更自由的对程序进行改进。
2.
它是一种设计行为。
编写单元测试将½我们从调用者观察、思考,特别是先写测试(testfirst)
,迫½我们把
程序设计成易于调用和可测试的,
即迫½我们解除½件中的耦合。
另外还可以½编码人员在
编码时产生预测试,将程序的缺陷降½到最小。
3.
它是一种编写文档的行为。
单元测试是一种无价的文档,
它是展示½数或类如½½用的最½文档。
这½文档是可编
译、可运行的,并且它保持最新,永远与代码同步。
4.
它具有回½性。
自动化的单元测试避免了代码出现回½,
编写完成之后,
可以随时随地的快速运行测试。
文斯测试技术研究中心:http://blog.csdn.net/vincetest
第
4
页 共
16
页
单元测试大揭密
2
单元测试的基本理论
2.1
基本概念
1.
单元测试:单元测试又称模块测试,属于½盒测试,是最小单½的测试。模块分为程序
模块和功½模块。功½模块指实现了一个完整功½的模块(单元)
,一个完整的程序单
元具备输入、加工和输出三个环节。而且每个程序单元½应该有正规的规格说明,½之
对其输入、加工和输出的关系做出名明确的描述。
2.
测试驱动:驱动被测试模块正常运行起来的实½
3.
测试桩:代替被测模块调用的子模块的实½,该实½一般为桩½数。
4.
测试覆盖:评测测试过程中已经执行的代码的多少。
5.
覆盖率:代码的覆盖程度,一种度量方式。针对代码的测试覆盖率有许多种度量方式,
定义如下:
l
语 句 覆 盖 (
StatementCoverage
) 也 称 为 行 覆 盖 (
lin EC overage
)
,
段 覆 盖
:
(segmentcoverage)和基本块覆盖(bASicblockcoverage)
。它度量每一个可执行语
句是否被执行到了。
判定覆盖(DecisionCoverage)
:也被称为分支覆盖(branchcoverage)
,所有边界覆
盖 (
alledgescoverage
) 基 本 路 径 覆 盖 (
basispathcoverage
) 判 定 路 径 覆 盖
,
,
(decisiondecisionpath 或
DDPtesting)
。它度量是否每个
BOOL
型的表达式取值
true
和 false 在控制结构中½被测试到了。
条件覆盖(ConDItionCoverage)
:它独立的度量每一个子表达式,报告每一个子表
达式的结果的
true
或
false。这个度量和判定覆盖(decisioncoverage)相似,½是
对控制流更敏感。不过,完全的条件覆盖并不½保证完全的判定覆盖。
路径覆盖(PathCoverage)
:也称为断言覆盖(prEDIcatecoverage)
,它度量了是否
½数的每一个可½的分支½被执行了。路径覆盖的一个½处是:需要½底的测试。
½有两个缺点:一是,路径是以分支的指数级别增加的,例如:一个½数包含
10
个 IF 语句,就有 1024 个路径要测试。如果加入一个 IF 语句,路径数就达到 2048;
二是,许多路径不可½与执行的数据无关。
循环覆盖(LOOPCoverage)
:这个度量报告½是否执行了每个循环½零次、只有一
次还是多½一次(连续地)
。对于 dowhile 循环,循环覆盖报告½是否执行了每个
循环½只有一次还是多½一次(连续地)
。这个度量的有价值的方面是确定是否对
于 while 循环和 for 循环执行了多于一次,这个信息在其它的覆盖率报告中是没有
的。
l
l
l
l
2.2
测试的内容
单元测试的对象是½件设计的最小单½——模块或½数,单元测试的依据是详细设描
述。测试者要根据详细设计说明书和源程序清单,了解模块的 I/O 条件和模块的逻辑结构。
主要采用½盒测试的测试用例,
辅之以黑盒测试的测试用例,
½之对任½合理和不合理的输
入½½鉴别和响应。
要求对所有的局部和全局的数据结构、
外部接口和程序代码的关键部分
进行桌面检查和代码审查。在单元测试中,需要对下面 5 个方面的内容进行测试,也是构造
文斯测试技术研究中心:http://blog.csdn.net/vincetest
第
5
页 共
16
页
评论