集成测试

1. 什么是集成测试?

集成测试(Integration testing)又称为组装测试联合测试子系统测试部件测试

集成测试是在单元测试的基础上,将所有模块按照设计要求组装成子系统或系统进行的测试活动,是一种旨在暴露单元接口之间、组件/系统间交互或协同工作时所存在的缺陷的测试。

2. 集成测试的层次

集成测试按层次可分为:

  1. 软件单元与软件单元的集成测试
  2. 软件子系统和子系统的集成测试
  3. 软件系统和第三方系统的集成测试
  4. 软件系统和硬件的集成测试

3. 集成测试的模式

3.1 非渐增式测试模式

大棒模式(Big-bang Integration):一次性将众多的模块集成起来进行的测试。

  • 优点:方法简单,允许多个测试人员并行工作
  • 缺点:发现错误后难以定位

3.2 渐增式测试模式

把下一个要测试的模块同已经测试好的模块结合起来进行测试,测试完以后再把下一个已测试的模块结合进来测试,逐模块地进行。

  • 优点:发现错误较容易定位
  • 缺点:整个测试工作周期长

按渐增式集成的方式,渐增式测试又可分为:

  • 自顶向下(Top-down Integration)
  • 自底向上(Bottom-up Integration)
  • 三明治方法(Sandwich Integration)

4. 自顶向下法

步骤:

  1. 对主控模块进行测试,测试时用桩(Stub)程序代替所有直接附属于主控模块的模块
  2. 根据选定的结合策略(深度优先或宽度优先),每次用一个实际模块代替一个桩程序
  3. 在结合下一个模块的同时进行测试
  4. 为了保证加入模块没有引进新的错误,可能需要进行回归测试
  5. 重复上述过程,直至完成

深度优先 vs 广度优先

  • 深度优先:先集成处于软件结构中较深层的模块
  • 广度优先:先集成处于软件结构中较浅层的模块

5. 自底向上法

步骤:

  1. 把低层模块组合成实现某个特定的软件子功能的族
  2. 写一个驱动程序(用于测试的控制程序),协调测试数据的输入和输出
  3. 对由模块组成的子功能族进行测试
  4. 去掉驱动程序,沿软件结构自下向上移动,把子功能族组合起来形成更大的子功能族
  5. 循环第2-4步

6. 三明治方法

三明治方法结合了自顶向下和自底向上两种方式,同时从顶层和底层开始集成测试。

7. 集成测试的重点

集成测试的重点在于接口测试

主要关注:

  • 模块间的数据传递
  • 模块间的调用关系
  • 模块间的控制流
  • 模块间的接口一致性

8. 相关概念

桩程序(Stub)

在自顶向下集成测试中,用于代替被测模块的下层模块,模拟被代替模块的功能。

驱动程序(Driver)

在自底向上集成测试中,用于协调测试数据的输入和输出的控制程序。

回归测试

在集成测试中,当加入新模块后,可能需要重新执行以前做过的测试,以确保没有引进新的错误。