目录
1. 调试与评估
2. 单元测试的管理
1. 单元测试的文档
3. 系统集成的模式与方法
1. 集成测试前的准备
2. 集成测试的模式
3. 大棒集成方法 ( Big-bang Integration)
4. 自顶向下和自底向上集成方法
1. 自顶向下法 ( Top-down Integration )
2. 自底向上法 ( Bottom-up Integration )
3. 混合策略 ( Modified Top-down Integration )
4. 三明治集成方法 ( Sandwich Integration )
5. 持续集成
6. 集成测试流程
调试与测试的对象及采用的方法有很大程度上的相似,调试还用到断点控制等排错方法,但其目的却完全不同。测试是为了找出软件中存在的缺陷,而调试是为了解决存在的缺陷。
软件单元功能与设计需求一致。
软件单元接口与设计需求一致。
能够正确处理输入和运行中的错误。
在单元测试中发现的错误已经得到修改并且通过了测试。
达到了相关的覆盖率的要求。
完成软件单元测试报告
过程:
在详细设计阶段完成单元测试计划。
建立单元测试环境,完成测试设计和开发。
执行单元测试用例,并且详细记录测试结果。
判定测试用例是否通过。
提交《单元测试报告》。
单元测试的文档
1、《软件需求规格说明书》、《软件详细设计说明书》 -----> 《单元测试计划》
2、《单元测试计划》、《软件详细设计说明书》-----> 《单元测试用例》
3、《单元测试用例》文档及《软件需求规格说明书》、《软件详细设计说明书》-----> 《缺陷跟踪报告》/《缺陷检查表》
4、《单元测试用例》、《缺陷跟踪报告》、《缺陷检查表》-----> 《单元测试检查表》
5、评估 -----> 单元测试报告》
集成测试定义
定义
集成测试又称“组装测试”、“联合测试”。集成测试遵循特定的策略和步骤将已经通过单元测试的各个软件单元(或模块)逐步组合在一起进行测试,以期望通过测试发现各软件单元接口之间存在的问题。
集成测试对象
理论上凡是两个单元(如函数单元)的组合测试都可以叫做集成测试。实际操作中,通常集成测试的对象为模块级的集成和子系统间的集成,其中子系统集成测试称为组件测试。
集成测试目的与意义
考虑以下问题:
在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失;
各个子功能组合起来,能否达到预期要求的总体功能;
一个模块的功能是否会对另一个模块的功能产生不利的影响;
全局数据结构是否有问题 单个模块的误差积累起来,是否会放大,从而达到不可接受的程度。
共享资源访问的测试 ( 要想发现并排除在模块连接中可能发生的上述问题,就需要进行 集成测试。)
集成测试有以下不可替代的特点:
单元测试具有不彻底性,对于模块间接口信息内容的正确性、相互调用关系是否符合设计无能为力。只能靠集成测试来进行保障。
同系统测试相比,由于集成测试用例是从程序结构出发的,目的性、针对性更强,测试项发现问题的效率更高,定位问题的效率也较高;
定位问题较快,发现问题后比较容易定位,所以能够有效地加快进度,减少隐患。
集成测试(when)
在开始体系结构设计的时候开始制定测试方案;
在进入详细设计之前完成集成测试方案;
在进入系统测试之前结束集成测试。
集成测试(who)
集成测试可以在开发部进行,也可以由独立的测试部执行。
开发部尽量进行集成测试,测试部有选择地进行集成测试。
集成测试原则
集成测试是产品研发中的重要工作,需要为其分配足够的资源和时间。
集成测试需要经过严密的计划,并严格按计划执行。
应采取增量式的分步集成方式,逐步进行软件部件的集成和测试。
应重视测试自动化技术的引入与应用,不断提高集成测试效率。
应该注意测试用例的积累和管理,方便进行回归并进行测试用例补充。
集成测试内容
集成功能测试
接口测试
全局数据结构测试
资源测试
任务优先级冲突测试
性能和稳定性测试
集成测试、单元测试与系统测试的差别
测试类型 | 对象 | 目的 | 测试依据 | 测试方法 |
---|---|---|---|---|
单元测试 | 模块内部的程序错误 | 消除局部模块的逻辑和功能上的错误和缺陷 | 模块逻辑设计,模块外部说明 | 大量采用白盒测试方法 |
集成测试 | 模块间的集成和调用关系 | 找出与软件设计相关的程序结构,模块调用关系,模块间接口方面的问题 | 程序结构设计 | 结合使用白盒与黑和测试方法,采用较多黑盒方法构造测试用例 |
系统测试 | 整个系统,包括系统中的硬件等 | 对整个系统进行一系列的整体、有效性测试 | 系统结构设计,目标说明书,需求说明书等 | 黑盒测试 |
由以上可以看出,整个软件系统的测试过程是:先对各个软件模块进行单元测试,然后把经过单元测试的各个模块组装起来进行集成测试,最后把经过集成测试的子系统合成软件版本,对照需求规格,在实际环境下,进行系统功能验证。
人员安排 、测试计划、测试内容 、集成模式、测试方法
渐增式测试模式与非渐增式测试模式:
非渐增式测试模式:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,如大棒模式。
渐增式测试模式:把下一个要测试的模块同已经测试好的模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。
各自的优缺点:
非渐增式测试模式优缺点:工作量较小;发现模块间接口错误较晚;发现错误较难诊断,可以并行测试。
渐增式测试模式优缺点:要编写的软件较多,工作量较大;发现模块间接口错误较早;测试执行更彻底;需要较多的机器时间。
采用大棒集成方法,先是对每一个子模块进行测试(单元测试阶段),然后将所有模块一次性的全部集成起来进行集成测试 。
因为所有的模块一次集成的,所以很难确定出错的真正位置、所在的模块、错误的原因。这种方法并不推荐在任何系统中使用,适合在规模较小的应用系统中使用。
非增量式集成测试实例
评述:模块d1、d2、d3、d4、d5是对各个模块做单元测试时建立的驱动模块,s1、s2、s3、s4、s5是为单元测试而建立的桩模块。这种一次性集成方式将所测模块连接起来进行测试,但是一次试运行成功地可能性并不大。其结果发现有错误,但茫然找不到原因,差错和改错都会遇到困难。
适应于一个维护型或被测试系统较小的项目。
非增量式策略——优缺点:
优点: ①方法简单 ②允许多测试人员同时并行工作,人力物力资源利用率较高
缺点: ①必须为每个模块准备相应的驱动模块和桩模块,测试成本较高 ②一旦集成后包含多种错误,难以纠正。
驱动程序/驱动模块(driver),用以模拟被测模块的上级模块。驱动模块在集成测试中接受测试数据,把相关的数据传送给被测模块,启动被测模块,并打印出相应的结果。
桩程序/桩模块(stub),也有人称为存根程序,用以模拟被测模块工作过程中所调用的模块。桩模块由被测模块调用,它们一般只进行很少的数据处理,例如打印入口和返回,以便于检验被测模块与其下级模块的接口。
自顶向下法,从主控模块(主程序)开始,沿着软件的控制层次向下移动,逐渐把各个模块结合起来。
组装过程可以采用深度优先策略和宽度优先策略
深度优先:从最顶层单元开始,持续向下到下一层,选择一个分支,自顶而下一个一个的集成这条分支上的所有单元,直到最底层,然后转向另一个分支,重复这样的集成操作直到所有的单元都集成进来。
广度优先:从最顶层单元开始,持续向下到下一层, 一个个完成下一层上所有单元集成后,再转向下面一层,重复这样的集成操作直到所有的单元都集成进来。
1. 自顶向下增量测试
自顶向下集成测试的整个过程由3个步骤完成:
主控模块作为测试驱动器。
根据集成的方式(深度或广度),下层的桩模块一次一次地被替换为真正的模块。
在每个模块被集成时,都必须进行单元测试。 重复第2步,直到整个系统被测试完成。
自顶向下法——优缺点
优点:
不需要测试驱动程序;
能够在测试阶段的早期实现并验证系统的主要功能;
能在早期发现上层模块中的接口错误。
缺点:
需要桩程序,要使桩模块能够模拟实际子模块的功能十分困难;
底层验证被推迟; 同时涉及复杂算法,真正输入/输出的模块一般在底层,
他们是最容易出问题的模块,到测试和集成的后期才遇到这些模块,一旦发现问题导致过多的回归测试。
自顶向下增量式集成适用范围:
产品控制结构比较清晰和稳定;
高层接口变化较小;
底层接口未定义或经常可能被修改;
产口控制组件具有较大的技术风险,需要尽早被验证;
希望尽早能看到产品的系统功能行为。
自底向上法,测试从原子模块(软件结构最底层的模块)开始集成以进行测试。自底向上进行集成和测试时,需要为所测模块或子系统编制相应的驱动模块。
自底向上增量式集成测试步骤:
起始于模块依赖关系树的底层叶子模块,也可以把两个或多个叶子模块合并到一起进行测试
使用驱动模块对步骤1选定的模块(或模块组)进行测试
用实际模块代替驱动模块,与它已测试的直属子模块组装成一个更大的模块进行测试
重复上面的行为,直到系统最顶层模块被加入到已测系统中
自底向上法——优缺点
与自顶向下法刚好相反。
优点:
不需要桩程序;
同时由于涉及到复杂算法和真正输入/输出的模块最先得到集成和测试,可以把最容易出问题的部分在早期解决;
自底向上增值的方式可以实施多个模块的并行测试,提高测试效率。
缺点:
“程序一直未能作为一个实体存在,直到最后一个模块加上去后才形成一个实体”。也就是说,在自底向上集成和测试的过程中,对主要的控制直到最后才接触到。
驱动的开发工作量大;
自底向上增量式集成适用范围:
适用范围:
适应于底层接口比较稳定;
高层接口变化比较频繁;
底层组件较早被完成。
混合法:对软件结构中较上层,使用的是“自顶向下”法;对软件结构中较下层,使用的是“自底向上”法,两者相结合。
混合式集成
把系统划分成三层,中间一层为目标层,目标层之上采用自顶向下集成,之下采用自底向上集成
集成步骤
首先对目标层之上一层使用自顶向下集成,因此测试A,使用桩代替B,C,D
其次对目标层之下一层使用自底向上集成,因此测试E,F,使用驱动代替B,D
其三,把目标层下面一层与目标层集成,因此测试(B,E),(D,F),使用驱动代替A
最后,把三层集成到一起,因此测试(A,B,C,D,E,F)
优缺点分析
优点: 集合了自顶向下和自底向上两种策略的优点
缺点: 中间层测试不充分,在真正集成之前每一个独立的模块没有完全测试过。
适用范围: 适应于大部分软件开发项目
通常系统集成都会采用持续集成的策略,软件开发中各个模块不是同时完成,根据进度将完成的模块尽可能早的进行集成,有助于尽早发现Bug,避免集成中大量Bug涌现。
而且容易定位Bug、修正Bug,最终提高软件开发的质量与效率。
集成测试主要由系统部的系统设计人员、软件评测部完成,开发人员也参与集成测试。集成测试相对来说是挺复杂的,而且对于不同的技术、平台和应用差异也比较大,更多是和开发环境融合在一起。集成测试所确定的测试的内容,主要来源于设计模型。
集成测试流程
1. 集成测试计划
输入 :需求规格说明书、概要设计文档、 产品开发计划路标
输出:集成测试计划
活动步骤
确定被测试对象和测试范围
评估集成测试被测试对象的数量及难度,即工作量
确定角色分工和划分工作任务
标识出测试各阶段的时间、任务、约束等条件
考虑一定的风险分析及应急计划
考虑和准备集成测试需要的测试工具、测试仪器、环境等资源
考虑外部技术支援的力度和深度,以及相关培训安排
定义测试完成标准
2. 集成测试分析和设计
集成测试分析和设计
集成测试分析和设计的主要目的是制定测试大纲(测试方案)。集成测试大纲规定了今后的集成测试内容、测试方法以及可测性接口,以后所有集成测试均在该大纲的框架下进行,所以,制定一份完善的集成测试大纲非常重要。
输入:需求规格说明书 概要设计 集成测试计划
输出:集成测试设计方案
活动步骤
被测对象结构分析
集成测试模块分析
集成测试接口分析
集成测试策略分析
集成测试工具分析
集成测试环境分析
集成测试工作量估计和安排
3. 实施阶段
输入:需求规格说明书 概要设计 集成测试计划 集成测试设计
输出:集成测试用例 集成测试规程 集成测试代码、集成测试脚本、集成测试工具(如果有)
活动步骤
集成测试用例设计
集成测试规程设计
集成测试代码设计(如果需要)
集成测试脚本(如果需要)
集成测试工具(如果需要)
4. 执行阶段
输入
需求规格说明书
概要设计
集成测试计划
集成测试设计
集成测试用例
集成测试规程
集成测试代码(如果有)
集成测试脚本(如果有)
集成测试工具(如果有)
详细设计
代码
单元测试报告
输出
集成测试报告
活动步骤
执行集成测试用例
回归集成测试用例
撰写集成测试报告