一、学习目的与要求
集成测试是介于单元测试和系统测试之间的过渡阶段。通过本章的学习,应了解集成测试与系统测试的区别,了解集成测试与开发过程之间的关系,了解集成测试的层次和集成测试的重点,理解集成测试的概念和集成测试的过程,掌握集成测试的分析方法及集成测试的策略,掌握集成测试用例设计的方法。
二、考核知识点与考核目标
(一)集成测试概述(一般)
- 理解:集成测试的概念
介于单元测试和系统测试之间的过渡阶段,与概要设计对应,是单元测试的扩展和延伸
- 理解:集成测试与系统测试的区别
类别 | 集成测试 | 系统测试 |
---|---|---|
对象不同 | 各个模块集成的组件 | 软硬件等 |
时间不同 | 单元测试之后 | 集成测试之后 |
方法不同 | 灰盒测试 | 黑盒测试 |
内容不同 | 模块之间的接口和集成后的功能 | 整个系统的功能和内容 |
目的不同 | 发现单元之间的错误,和与概要设计不同的地方 | 比较需求说明发现不符合或矛盾的地方 |
角度不同 | 测试工作人员 | 用户 |
- 理解:集成测试与开发的关系(相辅相成)
- 理解:集成测试的重点
- 数据是否会丢失,是否正常传递
- 是否存在资源竞争
- 是否实现组合起来的父功能
- 是否兼容
- 数据结构是否正确且不被不正常修改
- 误差是否会累积扩大
- 理解:集成测试的层次
传统软件
- 模块内集成
- 子系统内集成
- 子系统间集成
面向对象应用系统
- 类内集成
- 类间集成
(二)集成测试的分析方法(重点)
- 理解:体系结构分析
- 跟踪需求分析,划分结构层次
- 分析组件间的依赖关系,确定集成模块大小
- 理解:模块分析(体系结构的细化)
模块分析角度
- 确定测试模块
- 找出相关的所有模块,并排列优先级
- 按优先级集成模块
易错模块特性
- 与多个软件需求相关,或与关键功能相关
- 处于系统架构顶层
- 本身实现逻辑复杂或容易出错
- 被多个模块调用或被频繁调用
确定关键模块建议
- 与生产者交流
- 根据镜头分析工具找出高内聚模块、被多次调用模块、顶层模块
- 需求分析
- 相关文档分析
- 理解:接口分析(以概要设计为基础)
步骤
- 确定系统边界
- 确定模块内部接口
- 确定子系统哪模块接口
- 确定子系统间接口
- 确定系统与操作系统接口
- 确定系统与硬件接口
- 确定系统与第三方软件接口
分类
- 函数或方法接口
- 消息接口
- 类接口
- 其他接口
- 理解:风险分析
- 风险类型:项目风险、商业风险、技术风险
- 风险识别:集成测试常见风险(技术风险、人员风险、物料仪器风险、管理风险、市场风险)
- 风险评估:确定风险发生的概率和后果
- 风险处理
1)风险控制:主动采取措施避免风险、消灭风险,或一旦风险发生,立即采取紧急应急方案
2)风险自留:风险后果不大
3)风险转移:转移到其他测试阶段
- 理解:可测试性分析(项目开发工作开始的需求)
- 理解:集成测试策略分析
- 可以对被测对象进行充分测试,尤其是关键模块
- 按照策略划分模块和接口清晰明了,尽可能地减少后续操作难度盒辅助工作量
- 各种资源能充分利用
(三)集成测试策略(重点)
- 理解:基于调用图的集成
成对集成:免除桩/驱动器开发工作,用实际代码代替
相邻集成:降低桩/驱动器开发工作量,用邻居代替
- 理解:基于路径的集成:结合功能测试和结构测试,需要投入标识MM路径的时间
- 理解:分层集成(通讯系统)
目的:验证稳定性和可互操作性
步骤:
- 划分层次
- 确定内部集成策略
- 确定层次间的集成策略
适用范围:有明显线性层次关系的系统
- 理解:基于功能的集成
目的:验证关键功能
步骤:
- 确定优先级别
- 分析优先级最高的功能路径
- 增加关键功能,继续步骤2,到模块全部集成
适用范围:主要功能风险性大的产品、探索型技术研发项目、注重功能实现的项目、对所实现对功能信心不强的产品
- 理解:高频集成
目的:避免遗留集成故障,控制基线偏差
步骤:
- 开发人员提供增量代码,测试人员完成测试包
- 集成测试人员将修改部分形成新的集成体并运行测试包
- 评价结果
优点:高效、可预测、并行、容易定位错误、尽早查处错误、减少桩代码
缺点:不容易发现有价值的问题、初始阶段集成不平稳、风险高
适应范围:迭代或增量过程模型开发产品
- 理解:基于进度的集成
目的:缩短进度
优点:可并行、进度快
缺点:缺乏整体性、不稳定、桩模块/驱动模块工作量大
适应范围:进度优先质量的产品
- 理解:基于风险的集成
目的:保证系统稳定性
优点:系统快速稳定开发
缺点:测试成本高
适应范围:模块风险大的项目
- 理解:基于事件的集成
目的:验证消息路径的正确性从而验证稳定性
优点:直观性强、耗时少、使用实例少、只维护顶模块驱动器
缺点:忽略接口错误、测试冗余
适应范围:面向对象系统、基于有限状态机的嵌入式系统
- 理解:基于使用的集成
目的:根据依赖关系验证稳定性
步骤:划分类的耦合关系,测试独立的类,测试服务器的类
适应范围: 面向对象软件系统
- 应用:大爆炸集成(所有单元测试模块一次性集成进行测试)
目的:缩短测试时间
优点:可并行、测试用例少、简单易行
缺点:容易遗漏潜在错误、不能全局测试、容易出现大量错误
适应范围:前期稳定产品、功能不多产品
- 应用:自顶向下集成
目的:按设计顺序测试验证稳定性
步骤:主模块为测试驱动,其他为桩模块;重复测试
优点:提前发现问题,可并行,减少驱动维护,容易错误定位
缺点:底部变更影响全部
适应范围:结构化编程产品
- 应用:自底向上集成
目的:从依赖关系最小开始验证稳定性
优点:效率提高、减少桩模块
缺点:驱动模块工作量大
适应范围:结构简单的产品
- 应用:三明治集成
目的:综合利用自顶向下集成自底向上集成
步骤:确定那一层为界
优点:减少桩模块和驱动模块的工作量
缺点:中间层不能充分测试
适应范围:多数软件开发项目
- 应用:改进的三明治集成
目的:重复发挥测试的并行性
步骤:并行测试目标层
优点:继承三明治集成优点,且中间层能充分测试
缺点:中间层选择不适当,增加驱动模块和桩模块工作量
适应范围:大多数软件开发项目
- 集成测试过程
- 制定测试计划
1)确定测试对象和范围
2)评估数量、难度和工作量
3)确定角色分工和任务划分
4)标识测试各个阶段时间任务和约束条件
5)考虑一定的风险分析和应急计划
6)考虑测试工具、环境等资源
7)考虑外援支持力度和深度- 设计集成测试:被测对象结构分析;集成测试模块、接口、策略、工具、环境分析;集成测试工作量估计和安排
- 实施集成测试:集成测试用例、规程、代码设计;集成测试脚本开发;集成测试工具选择或开发
- 执行集成测试
- 评估集成测试
(四)集成测试用例设计(重点
- 应用:集成测试用例设计
类别 | 分析技术 |
---|---|
系统运行 | 等价类划分、边界值分析、基于决策表的测试 |
正向测试 | 输入域、输出域、等价类划分、状态转换、规范导出 |
逆向测试 | 错误猜测、基于风险、基于故障、边界值分析、特殊值、状态转换 |
满足特殊需求 | 规范导出 |
高覆盖 | 功能覆盖分析、接口覆盖分析 |
补充 | 需求增加分析 |
三、习题
- 集成测试有哪些不同的集成方法?简述不同方法的特点。
集成测试通常有一次性集成、自顶向下集成、自底向上集成和混合集成 4 种集成方法。
- 一次性集成方法
1)需要的测试用例数目少,
2)测试方法简单、易行。
3)但是由于不可避免存在模块间接口、全局数据结构等方面的问题,所以一次运行成功的可能性不大;
4)如果一次集成的模块数量多,集成测试后可能会出现大量的错误,给程序的错误定位与修改带来很大的麻烦;即使集成测试通过,也会遗漏很多错误进入系统测试。- 自顶向下集成在测试的过程中,
1)可以较早地验证主要的控制和判断点;
2)一般不需要驱动程序,减少了测试驱动程序开发和维护的费用;
3)可以和开发设计工作一起并行执行集成测试,能够灵活的适应目标环境;
4)容易进行故障隔离和错误定位。但是在测试时需要为每个模块的下层模块提供桩模块,桩模块的开发和维护费用大;
5)桩模块不能反映真实情况,重要数据不能及时回送到上层模块,导致测试不充分;
6)涉及复杂算法和真正 I/O 的底层模块最易出问题,在后期才遇到导致过多的回归测试。- 自底向上集成
1)可以尽早的验证底层模块的行为;
2)提高了测试效率;
3)一般不需要桩模块;
4)容易对错误进行定位。
5)但是直到最后一个模块加进去之后才能看到整个系统的框架;
6)驱动模块的设计工作量大;
7)不能及时发现高层模块设计上的错误。- 混合集成具有自顶向下和自底向上两种集成策略的优点,但是在被集成之前,中间层不能尽早得到充分的测试。