Integration Test(集成测试)
一. 概念:
集成:是指把多个单元组合起来形成更大的单元。
集成测试:是在假定各个单元已经通过单元测试的前提下,检查各个软件单元之间的相互接口是否正确。
二. 集成测试与单元测试之间的关系:
三. 集成测试与系统测试的区别:
四. 集成测试的层次与原则:
1. 层次:
对于传统软件来说,按集成粒度不同,可以把集成测试分为3个层次,即:集成测试、子系统内集成测试、子系统间集成测试
对于面向对象的应用系统来说,按集成粒度不同,可以把集成测试分为2个层次:类内集成测试、类间集成测试
2. 原则:
所有公共接口必须被测试到。
关键模块必须进行充分测试。
集成测试应当按一定层次进行。
集成测试策略选择应当综合考虑质量、成本和进度(Q.C.D)三者之间的关系。
集成测试应当尽早开始,并以概要设计为基础。
在模块和接口的划分上,测试人员应该和开发人员进行充分沟通。
当测试计划中的结束标准满足时,集成测试才能结束。
当接口发生修改时,涉及到的相关接口都必须进行回归测试。
集成测试应根据集成测试计划和方案进行,不能随意测试。
项目管理者应保证测试用例经过审核。
测试执行结果应当如实的记录。
五. 集成测试策略:
1. 非渐增式集成:
非渐增式集成方法首先对每个子模块进行测试(即单元测试),然后将所有模块全部集成起来一次性进行集成测试。
优点:(1)在有利的情况下,可以迅速完成集成测试。
(2)集成测试用例最少。
(3)比较简单。
(4)多名测试人员可以并行工作。
缺点:(1)复杂的程序遇到问题时很难定位和修改。
(2)很难一次运行成功。
(3)很多接口很容易漏检。
2. 渐增式集成:
把程序划分成小段来构造和测试,在这个过程中比较容易定位和改正错误。
(1)自顶向下:自顶向下集成(Top-Down Integration):从主控模块开始,沿着程序 控制层次向下移动,逐渐把各模块组合起来。可以使用深度优先或是广度优先的组合策略。
步骤:
①对主控模块进行测试,用桩模块替代被主控模块调用的子模块
②根据选定的策略(深度/广度),每次用一个实际模块代换一个桩模块
③进行集成测试
④为了保证加入的模块没有引进新的错误,根据需要进行回归测试。②-④循环。
优点:
能够在测试的早期对主要的控制模块进行检验
深度优先的结合策略可以在早期实现软件的一个完整功能,并可验证其功能。增强开发人员及用户的信心
缺点:
没有底层返回来真实数据流,需要推迟许多需要真实数据支持的测试
(2)自底向上:(Bottom-Up Integration)自底向上测试从软件结构最底层的模块开始组装和测试。因为是从底部向上结合模块,总能得到所需的下层模块处理功能,所以不需要桩模块。
步骤:
①把底层模块组合成实现某个特定子功能的族
②编写测试驱动程序,协调测试数据的输入输出
③对该子功能族进行测试
④去掉测试驱动程序,自底向上移动,把子功能组合成更大的子功能族。②-④循环。
优点:
允许对底层模块的早期验证。
可在任何一个叶子节点就绪的情况下进行集成测试。
可以并行进行集成对被测模块可测性。
要求比自顶向下集成策略低。
减少了桩模块的工作量。
支持故障隔离。
缺点:
驱动模块开发量大。
对高层测试被推迟到最后,整体设计的错误发现较晚。
集成到顶层时将变得越来越复杂
(3)三明治集成:三明治集成(Sandwich Integration)是一种混合增量式测试策略,综合了自顶向下和自底向上两种集成方法的优点。这种方法桩模块和驱动模块的开发工作都比较小,不过代价是在一定程度上增加了缺陷的定位难度。
步骤:
①选定结构中的某一层为目标层
②对目标层所在层下面的各层使用自底向上的集成策略
③对目标层上面层次使用自顶向下的集成策略
④对目标层与其下一层集成
⑤把②③④的结果集成系统整体进行测试
优点:结合了自顶向下和自底向上两种策略的优点。
缺点:目标层在集成前测试不充分。