单元测试、集成测试、系统测试

177 阅读8分钟

单元测试

单元:指的是软件中具有明确的功能与完整的规格、接口定义,可以清晰的与软件中其他部分区分开来的某一个部分。单元没有标准划分法,通常可以实现某些软件功能的类或者方法即可被视为一个单元。

单元测试(模块测试):指的是对软件组成中的最小可测试单元进行的测试。是编码阶段结束后、测试工作开始时的第一项测试工作。

image-20240901093039704.png

测试内容

单元测试主要针对以下五个方面对软件单元进行测试:

  • 边界条件
  • 异常处理
  • 模块接口
  • 局部数据结构
  • 程序路径

辅助模块

在执行单元测试时,如果被测试模块并不是一个独立的程序,那么就需要设置辅助测试模块

  • 驱动模块(Drive):用于模拟被测试模块的上一级模块。通常负责接收测试数据、将数据传递给被测模块、启动被测模块、输出测试结果等。
  • 桩模块(Stub):用于模拟被测模块在下一级所调用的子模块,负责进行少量的数据处理。

集成测试

即使软件中的各个单元经过单元测试后发现均无问题,将这些单元集成到一起后,各单元在协同工作时仍然可能出现预料之外的问题。

集成测试(Integration Test)(综合测试、组装测试、联合测试)

指的是在单元测试工作完成之后,按照软件在设计阶段时所确定的结构图将每一个模块连接起来,进行进一步测试的流程。

目标软件中的各单元连接完毕后可以正常协同工作、软件行为正常。

集成测试设计依据:概要设计说明书、详细设计说明书

测试内容

  • 数据在软件各单元的接口之间传输时是否会出现丢失。
  • 某个模块是否会破坏另一个模块的功能。
  • 各个子功能组装完毕后能否实现主功能。
  • 全局数据结构是否存在问题。
  • 是否存在误差堆积的问题。

测试形式

  • 非增量式测试

  • 增量式测试

    • 自顶向下

      • 深度优先
      • 广度优先
    • 自底向上

    • 混合增量

【非增量式测试】

使用一步到位的方法来构造测试,在软件各个相关联模块均完成单元测试后,直接将多个模块集成起来,共同开展集成测试工作。在实际工作中,一般不使用非增量式测试

优点,节省时间。

缺点,难以定位与修复缺陷、可能导致新旧缺陷混杂。

【增量式测试】

使用逐步集成的方法来构造测试

【自顶向下】

首先找到主控模块(关键模块),主控模块通常至少具备以下特征之一

  • 满足软件的主要需求。
  • 在软件的模块结构中位于较高层次。
  • 复杂且易出错。
  • 有明确定义了的性能要求。

将主控模块作为测试驱动器,根据集成方式,将下层的桩模块依次替换为真正的软件模块进行测试。在每个模块被集成时,都要先进行单元测试。按照深度优先或广度优先的方式进行集成。

【自底向上】

从底层模块逐渐向主控模块进行测试

【混合增量】

将自顶向下与自底向上两种形式混合使用,同时利用二者优点并摒弃缺点。在实际工作中,一般会优先测试输入输出模块引入了新算法的模块(衍变了的自顶向下形式)

自顶向下增量式测试自底向上增量式测试
优点可以做到逐步求精、可以直接的看到系统框架、容易发现上层接口存在的缺陷、不需要驱动模块。容易发现底层模块中存在的缺陷、驱动模块可以模拟所有调用参数,便于生成测试数据。
缺点需要提供桩模块、底层模块中的缺陷发现时间较晚、如果未接入输入输出模块的话,难以在桩模块中表示测试数据。直至最后一个模块继承完毕后才可以看到系统框架。

系统测试

将软件产品看作为一个整体,对包括功能、性能、兼容性、安全性、易用性等方面进行测试。

实际运行环境下开展测试工作。系统测试工作由黑盒测试工程师专门测试工程师(例如性能测试工程师、安全测试工程师等)负责。

系统测试主要分为以下几种:

  • 功能测试
  • 兼容性测试
  • 界面测试
  • 易用性测试
  • 性能测试
  • 安全性测试
  • 国际化/本地化测试
  • 安装测试
  • 文档测试

功能测试

对软件产品的各个功能点进行验证的测试流程。功能测试以需求规格说明书功能性测试用例为依据逐项进行测试,检查软件产品是否满足用户需求。测试内容主要包括业务测试通过测试失败测试

增、删、查、改功能的常用功能测试点示例

  • 增加

    • 必填栏位测试。
    • 栏位值是否可以重复。
    • 栏位格式是否正确。
    • 栏位新增权限测试。
    • 自动填充栏位测试。
    • 提交与重置功能是否可以正常工作。
    • 提交成功时,数据库中是否增添了对应的数据。
    • 提交失败时,数据库中是否错误的增添了对应的数据。
    • 通过与失败时的提示信息是否正确。
    • 时间限制功能测试。
  • 删除

    • 二次确认功能测试。
    • 是否在数据库中彻底删除对应的数据。
    • 全选删除、取消全选功能测试。
    • 未选中任何待删除数据时,删除按钮能否成功按下。
    • 多页显示时,删除某一页中的所有数据后,能否自动弹回至上一页。
    • 删除权限验证测试。
  • 查询

    • 是否可以成功查询数据库中的已有数据。
    • 将查询条件或查询内容置空后进行测试。
    • 输入特殊字符作为查询内容进行测试。
    • 查询结果能否正常分为多页。
    • 重置查询条件的按钮是否可以正常工作。
    • 在查询内容中插入空格,测试能否正常查询到结果。
    • 使用边界值划分法测试查询条件的边界。
    • 使用多个条件进行查询,测试查询结果是否同时符合所有条件。
    • 模糊查询功能测试。
  • 修改

    • 必填栏位测试。
    • 栏位值是否可以重复。
    • 栏位格式是否正确。
    • 自动填充栏位测试。
    • 测试能否正常带出所需资料。
    • 修改权限验证测试。
    • 测试只读数据能否被修改。
    • 提交与重置功能是否可以正常工作。
    • 测试修改完毕后能否成功显示新数据。

兼容性测试

对软件产品在特定的硬件平台以及不同的软件、操作系统、网络等环境中能否正常运行的测试流程。

兼容性测试的作用

  • 尽可能的提高软件产品的质量。
  • 尽可能的让软件产品与其他第三方软件 “和平共处”。
  • 尽可能的确保软件产品的存在价值。
  • 尽可能的使软件产品的市场更加广阔。

兼容性测试的主要关注内容

  • 向前兼容:可以使用软件的未来版本
  • 向后兼容:可以使用软件的过去版本
  • 不同版本间兼容:实现测试平台与软件的多个版本间可以正常工作
  • 标准与规范:遵守相应的软件平台标准与规范
  • 数据共享兼容:支持并遵守相应的标准,允许用户从软件中向外部传输数据。

兼容性测试用例的制定原则

  • 流行程度:优先在主流平台中开展测试。
  • 类型:优先针对常用类型的平台开展测试。
  • 厂商:优先针对主流厂商的平台开展测试。
  • 年限:优先选择未被淘汰掉的平台开展测试。

界面测试

对软件产品的用户界面进行验证的测试流程。界面测试通常用于验证软件产品的界面布局是否合理、风格是否一致、控件位置是否合理、文字是否准确、内容是否美观等。

界面测试的主要关注内容:

  • 风格
  • 正确性
  • 一致性
  • 合理性
  • 美观性
  • 协调性

易用性测试

对软件产品在使用上的合理性方便性进行验证

软件产品应当尽可能的实现三容易,即容易理解、容易学习、容易操作