软件测试(五) 单元测试与集成测试

本文是软件测试课程课堂笔记总结

大纲

单元测试定义

单元:明确功能、规格定义、接口定义的软件设计最小单位
单元测试:也称为模块测试,是对软件基本组成单元进行测试,目的在于模块内部可能存在的差错
单元测试内容:

  1. 单元的内部结构:单元的逻辑和数据流,一般采用白盒测试
  2. 单元的外部结构:单元的功能和可观测行为,一般采用黑盒测试

单元测试环境

进行单元测试时,如果模块不是独立的程序,需要辅助测试模块
辅助测试模块:

  1. 驱动模块(Driver):代替所测模块的主程序,接受测试数据-调用所测模块传递数据-输出测试结果,主要用于底层测试模块
  2. 桩模块(Stub):代替所测模块的子模块,用于给所测模块提供数据处理接口,主要用于顶层测试模块
    由被测模块、驱动模块、桩模块共同组成一个单元测试环境

单元测试具体内容

  1. 模块接口测试:是单元测试的基础,检测数据正确流入、流出模块,如IO参数个数、次序、格式、文件属性等
  2. 局部数据结构测试:保证临时存储在模块内的数据在程序执行时完整、正确,如数据类型、变量初始化、变量名、溢出、地址异常
  3. 独立路径测试:通过全局数据发现因计算错误、比较错误、判断错误等造成的错误
  4. 错误处理测试:预设各种出错处理方案,如输出错误信息难以理解、异常处理不当等
  5. 边界条件测试:针对边界值及其左右设计测试用例,可能发现新的错误

集成测试定义

集成测试定义:又称作组装测试,在单元测试的基础上,将所有模块按照设计要求组装成子系统或系统进行测试,检查这些单元之间的接口是否存在问题,如数据丢失、模块间相互影响、组合后不能实现主功能
集成测试内容:
1.单元间的接口
2.集成后的功能
集成测试层次:根据集成的力度不同可分为3个层次
1.模块内集成测试
2.子系统内集成测试:将功能模块组个成子系统进行测试
3.子系统间集成测试:将子系统之间组合起来进行测试
集成测试方法:
1.静态测试:针对概要设计
2.动态测试:灰盒测试

灰盒测试

灰盒测试定义:介于白盒测试与黑盒测试之间的一种测试,灰盒测试多用于集成测试阶段,不仅关注输出、输入的正确性,同时也关注程序内部的情况。灰盒测试不像白盒那样详细、完整,但又比黑盒测试更关注程序的内部逻辑,常常是通过一些表征性的现象、事件、标志来判断内部的运行状态。

集成策略

根据集成中各模块如何组合可分为渐增式与非渐增式
非渐增式集成策略:先分别测试每个模块,再将所有模块按设计要求放在一起结合成所需要的程序
渐增式集成策略:将下一个要测试的模块与已测试好的模块或者系统结合进行测试

非渐增式集成策略方法

主要采用Big Bang集成方法

优点:方法简单,测试人员可以并行测试,资源利用率高
缺点:

  1. 必须为每个模块准备相应的驱动模块和桩模块,测试成本高
  2. 集成后出现错误难以纠正

渐增式集成策略方法

根据不同的实施次序可分为三个方法:

  1. 自顶向下(Top-Down)
  2. 自底向上(Bottom-Up)
  3. 混合策略(Modified Top-down)

自顶向下增量测试(Top-Down)

步骤:

  1. 主控模块作为测试驱动器
  2. 根据集成的方式(深度或广度),将下层桩模块一次一次替换成真正模块
  3. 每个模块被集成时,都需要先进行单元测试,重复2直到整个系统被测试完成


    优点:
  4. 较早验证了主要控制和判断点
  5. 深度优先可较早实现验证一个完整的功能
  6. 只需要一个驱动,减少驱动模块开销
    缺点:
  7. 底层组件测试被推迟
  8. 需要很多桩模块,桩模块开销大
    适用范围:
  9. 产品结构清晰稳定
  10. 高层接口稳定,底层接口变化频繁
  11. 希望尽早看到产品的系统功能行为

自底向上增量测试(Bottom-Up)

最常用的集成策略
步骤:

  1. 使用驱动模块对模块依赖树的底层叶子模块进行测试
  2. 实际模块代替驱动模块,将其与已测试的子模块组成更大的模块进行测试
  3. 重复2直到系统最顶层模块被加入已测系统中

    优点:
  4. 底层模块更多更早验证
  5. 桩模块开销小
    缺点:
  6. 驱动模块开销大
  7. 对高层验证被推迟,设计上的错误较难及时发现
    适用范围:
  8. 高层接口变化频繁,底层接口稳定
  9. 底层组件较早被完成的系统

混合增量测试(Modified Top-down)

步骤:

  1. 将系统分层上层,顶层、目标层、底层
  2. 顶层模块采用自顶向下集成
  3. 底层模块采用自底向上集成

    优点:集合了自顶向下和自底向上策略的优点
    缺点:中间层测试不充分
    适用范围:大多数软件开发项目

几种集成测试方法性能比较