软件测试技术---单元测试和集成测试
1,单元测试
单元测试试模块测试和集成测试的基础
是指对程序中单独的一个单元进行测试(类,或类的集合甚至是函数)
其主要工作分为两个步骤:人工静态检查和动态执行跟踪
这些工作主要是由程序编写者来进行的,因为他们对自己写的代码是最了解的
单元测试的主要目标是:
验证代码和设计相符合
跟踪需求和设计的实现
发现设计和需求中存在的缺陷
发现在编码过程中引入的错误
也可以说单元测试的总目标就是验证开发人员书写的编码是否能按照其设计的方式执行并生成符合预期的结果,确保产生符合其需求的可靠程序单元
2.单元测试和集成测试,系统测试的区别
(1)单元测试与集成测试的区别主要在与测试对象不同
单元测试的对象是程序中的类,包或者函数等
集成测试的对象是概念设计时规划好的模块,这些模块通常是分给不同的工作组开发的
单元测试的主要测试方法是基于代码的白盒测试
而集成测试主要是基于功能的黑盒测试
由于只有单元测试通过之后才能进行集成测试,所以单元测试是集成测试的基础,直接影响着集成测试
(2)单元测试和系统测试的主要区别是测试的性质不同
系统测试是站在用户的角度来看待系统并进行测试的,是基于需求规格说明书的
它是一种后期测试,发现错误后的定位工作也比较困难
3.单元测试环境
单元测试的环境并不是系统交付后的具体环境,应建立一个满足单元测试要求的环境才能顺利的做好测试工作
由于一个单元并不是一个独立的程序,所以在测试时需要考虑他和外界的联系,因此要用到一些辅助模块,用来模拟被测单元与其他模块的关系
辅助模块分为两种
(1)驱动模块:相当于被测单元的主程序
(2)桩模块:用于代替被测单元调用的子单元
这样被测单元和与他相关的驱动模块以及桩模块共同构成了一个“测试环境”
4.单元测试策略
由于单元模块的好坏直接影响到整个系统的性能
所以为了提供单元测试的质量,在测试的时候还要使用一些测试策略,如:
自顶向下的单元测试策略
自底向上的单元测试策略
孤立的单元测试策略
(1)自顶向下的单元测试策略
从最顶层开始,用桩模块代替调用的单元,对顶层进行单元测试
对第二层测试时,用已经测试过的顶层作为驱动单元,编写新的桩模块
以此类推,直到全部单元测试结束
优点:可以在集成测试之前为系统提供早期的集成途径
缺点:程序被桩模块控制,随着测试的进一步进行,测试过程将会变得很复杂
(2)自底向上的单元测试策略
先对程序的最底层进行测试,使用驱动模块代替调用它的上层
对上一层进行测试时,用已经测试过的单元作为桩模块,并为测试单元编写新的驱动模块
以此类推,直至全部单元测试结束
优点:不需要独立设计桩模块,可以直接从功能设计中获取测试用例,可以为系统提供早期的集成路径,在详细设计文档中缺少结构细节时可以用该策略
缺点:随着单元测试的不断进行,测试工作变得十分复杂
(3)独孤立测试
孤立测试的策略不需要考虑每个单元之间的关系,分别为每个单元单独设计桩模块和驱动模块逐一完成所有测试
优点:方法简单,容易操作,因此所需测试的时间短,能够达到高覆盖率
3.单元测试分析
在进行单元测试时,测试人员要依据详细设计规格说明和源程序清单,理解模块的I/O条件和模块的逻辑结构
从以下五个方面进行考虑
(1)模块接口:如果数据在模块接口出错,不能正确的输入和输出数据就无法进行下一步的工作
(2)局部数据结构:局部数据结构往往是错误的根源,对其检查主要是为了保证临时存储在模块内的数据在程序执行过程中完整正确
(3)独立路径:单元测试的基本任务是保证模块中的每条语句至少执行一次,对重要的独立路径进行测试往往会发现大量的错误
(4)出错处理:一个好的设计应能预见各种出错条件,并进行适当的出错处理,即预设各种出错处理通路
(5)边界条件:边界条件是指在程序中判断或循环的操作接线的边缘条件,软件经常在这类边界上出现错误
4.单元测试的测试用例设计原则
设计步骤:
(1)为系统运行设计测试用例
(2)为正面测试设计测试用例
(3)为负面测试设计测试用例
(4)为满足特殊需求设计用例
(5)为代码覆盖设计测试用例
(6)为覆盖率指标完成测试用例的设计
5.集成测试的基本概念
集成测试时介于单元测试和系统测试之间的过度阶段,与软件概要设计阶段相对应,是单元测试的扩展和延伸
集成测试和系统测试的区别:
(1)测试对象:集成测试的测试对象是通过了单元测试的各个模块组成的构建或者子系统,而系统测试除了软件之外还包括计算机硬件及相关的外围设备等
(2)测试方法:集成测试主要是黑盒白盒测试结合,又称为灰盒测试,系统测试主要是黑盒测试
(3)测试内容:集成测试的内容是各个程序单元或构件间的接口,以及单元集成之后的功能,系统测试的内容是验证整个系统的功能和其他肺功能需求是否实现
(4)测试目的:集成测试的目的是为了发现单元之间接口的错误,系统测试的目的是通过与系统需求说明书相比较之后发现软件与系统定义不符合或矛盾的地方
(5)测试角度:集成测试多是站在测试人员的角度开展的以便发现更多的问题,系统测试则更多是站在用户的角度开展的
6.集成测试策略
集成测试的策略是指被测软件模块的集成方式
(1)基于分解的集成策略
基于分解的集成策略又分为增量式和非增量式
一次性集成方式:
是一种非增量式的集成测试,将所有系统构件一次性集成到一起进行测试,目的是在最短的时间内将系统组装起来,使用最少的测试来验证整个系统
适用范围:
一个维护性或功能增强型的项目,修改或增强的部分很少
被测系统比较小,并且它的每个构件都经过了充分的单元测试
产品使用了严格的净室软件工程过程,每个开发阶段的质量和单元测试的质量都非常高
自顶向下的增量式集成:
此方式采用了与设计一样的顺序,将单元按系统结构的层次,沿控制层次自顶向下逐步集成
适用范围:
产品控制结构比较清晰稳定
产品的高层接口变化很小,底层接口可能经常需要修改
产品的控制模块具有较大的技术风险,需要尽早被验证
希望尽早能够看到产品的系统功能行为
自底向上的增量式集成:
适用范围:
底层接口比较稳定,高层接口变化比较频繁的产品
底层单元比较早被开发完毕的产品
混合的增量式(三明治)集成
该方式将系统划分成3层,中间一层为目标层,对上一层采用自顶向下,对下一层采用自底向上,最后测试在目标层汇总
这种方式结合了自顶向下和自底向上的优点,缺点是对目标层测试不够彻底,大部分软件开发项目都可以使用
(2)基于功能的集成
该策略从功能的角度出发,按照功能的关键程度对模块的继承顺序进行组织
优点是:采用该方法,可以尽快的看到优先级高的功能的实现,并验证这些功能的正确性
适用范围:
关键功能具有较大风险的产品
技术探索型的项目,其功能的实现远比质量更关键
对于功能实现没有把握的产品