MD 更新:未知

软件测试总结

概述

软件测试是为了发现程序中的错误而执行程序的过程。测试是软件质量保证的重要手段。

测试分类

按是否运行程序分

  1. 静态测试:不运行程序,通过人工监测或计算机辅助分析

    • 控制流分析:检查没有使用的语句、无法到达的语句
    • 数据流分析:检查引用未定义的变量
    • 接口分析:检查接口一致性、函数参数一致性
  2. 动态测试:运行程序,检查实际输出与预期结果的差异

    • 白盒测试(结构测试)
    • 黑盒测试(功能测试)
    • 灰盒测试(介于两者之间)

白盒测试(结构测试)

核心思想:关注程序内部结构和逻辑,基于代码结构设计测试用例。

覆盖标准(从弱到强)

1. 语句覆盖(Statement Coverage)

  • 定义:设计测试用例使程序中每条可执行语句至少被执行一次
  • 强度:最弱的覆盖标准
  • 缺点:无法发现逻辑运算中的错误
  • 示例
    if (A && B) {
        语句1;
    }
    测试用例:A=true, B=true(覆盖语句1)

2. 判定覆盖(Decision Coverage)/ 分支覆盖(Branch Coverage)

  • 定义:设计测试用例使程序中每个判定的真假分支至少执行一次
  • 强度:比语句覆盖强
  • 缺点:忽略了判定中条件的组合
  • 示例
    if (A && B) {
        语句1;
    } else {
        语句2;
    }
    测试用例:A=true, B=true(执行语句1);A=false(执行语句2)

3. 条件覆盖(Condition Coverage)

  • 定义:设计测试用例使每个判定中每个条件的可能取值至少执行一次
  • 强度:比判定覆盖强(在某些情况下)
  • 缺点:不一定满足判定覆盖
  • 示例
    if (A && B) {
        语句1;
    }
    条件A:true, false;条件B:true, false 测试用例:A=true, B=false;A=false, B=true

4. 判定-条件覆盖(Decision-Condition Coverage)

  • 定义:同时满足判定覆盖和条件覆盖
  • 强度:比单独的判定覆盖和条件覆盖强
  • 缺点:忽略了条件的组合情况
  • 示例
    if (A && B) {
        语句1;
    } else {
        语句2;
    }
    测试用例:A=true, B=true(执行语句1);A=false, B=false(执行语句2)

5. 条件组合覆盖(Condition Combination Coverage)

  • 定义:设计测试用例使每个判定中条件的所有可能组合至少执行一次
  • 强度:比判定-条件覆盖强
  • 缺点:测试用例数量增长快,覆盖路径有限
  • 示例
    if (A && B) {
        语句1;
    }
    条件组合:A=true,B=true;A=true,B=false;A=false,B=true;A=false,B=false

6. 路径覆盖(Path Coverage)

  • 定义:设计测试用例使程序中所有可能的路径至少执行一次
  • 强度:最强的覆盖标准
  • 优点:全面覆盖程序逻辑
  • 缺点:测试用例数量可能很大,循环结构路径无限
  • 示例
    if (A) {
        语句1;
    }
    if (B) {
        语句2;
    }
    路径:A真B真、A真B假、A假B真、A假B假

覆盖标准排序(从弱到强)

语句覆盖 < 判定覆盖 < 条件覆盖 < 判定-条件覆盖 < 条件组合覆盖 < 路径覆盖

考试重点

  1. 覆盖标准的强弱关系:必须牢记从弱到强的顺序
  2. 测试用例设计:能够根据代码设计满足特定覆盖标准的测试用例
  3. 覆盖标准的优缺点:理解每个标准的局限性

黑盒测试(功能测试)

核心思想:关注输入输出,不关心内部结构,基于需求规格设计测试用例。

主要方法

1. 等价类划分

  • 原理:将输入数据划分为若干等价类,从每个类中选取代表值作为测试用例
  • 分类
    • 有效等价类:合理的输入数据
    • 无效等价类:不合理的输入数据
  • 示例:输入范围1-100
    • 有效等价类:1-100之间的整数
    • 无效等价类:小于1的数、大于100的数、非整数

2. 边界值分析

  • 原理:选取边界值作为测试用例,错误往往发生在边界
  • 分类
    • 上点:边界上的点
    • 离点:离边界最近的点
    • 内点:范围内的点
  • 示例:输入范围1-100
    • 测试用例:0,1,2,99,100,101

3. 错误推测

  • 原理:基于经验和直觉推测程序中可能存在的错误
  • 方法:列举程序中可能的错误和容易发生错误的特殊情况
  • 示例:输入为空、输入为0、输入为负数等特殊情况

4. 因果图

  • 原理:分析输入条件(因)和输出结果(果)之间的关系
  • 步骤
    1. 分析输入条件和输出结果
    2. 画出因果图
    3. 将因果图转换为判定表
    4. 根据判定表设计测试用例
  • 优点:考虑了输入条件的组合

5. 判定表

  • 原理:分析多个输入条件的组合对输出的影响
  • 组成
    • 条件桩:所有输入条件
    • 动作桩:所有输出结果
    • 条件项:输入条件的取值组合
    • 动作项:输出结果
  • 示例
    条件1条件2动作
    TT动作1
    TF动作2
    FT动作3
    FF动作4

6. 场景法

  • 原理:模拟用户操作场景,设计测试用例
  • 步骤
    1. 分析基本流和备选流
    2. 设计场景
    3. 为每个场景设计测试用例
  • 优点:贴近实际用户使用情况

考试重点

  1. 等价类划分:如何划分有效和无效等价类
  2. 边界值分析:如何确定边界值
  3. 因果图和判定表:如何分析条件组合

灰盒测试

  • 定义:介于白盒和黑盒测试之间
  • 特点:关注输入输出,也关注内部结构
  • 应用:集成测试、系统测试

测试阶段

1. 单元测试

  • 依据:详细设计文档
  • 对象:模块(函数、类)
  • 方法:白盒测试为主
  • 内容:模块接口、局部数据结构、边界条件、独立路径、错误处理

2. 集成测试

  • 依据:概要设计文档
  • 对象:模块间接口
  • 方法:灰盒测试
  • 策略
    • 自顶向下集成
    • 自底向上集成
    • 三明治集成

3. 系统测试

  • 依据:需求规格说明书
  • 对象:整个系统
  • 方法:黑盒测试
  • 内容:功能测试、性能测试、安全测试、兼容性测试

4. 确认测试

  • 依据:需求规格说明书
  • 对象:软件产品
  • 方法:黑盒测试
  • 内容:验证软件与需求的一致性

考试重点总结

白盒测试重点

  1. 覆盖标准的强弱关系:必须牢记
  2. 测试用例设计:能够根据代码设计测试用例
  3. 覆盖标准的适用场景:根据测试要求选择合适的覆盖标准

黑盒测试重点

  1. 等价类划分:有效和无效等价类的划分方法
  2. 边界值分析:边界值的确定方法
  3. 因果图和判定表:条件组合分析

易错点

  1. 覆盖标准的强弱:语句覆盖最弱,路径覆盖最强
  2. 条件覆盖不一定满足判定覆盖:这是常见错误
  3. 路径覆盖的局限性:循环结构路径无限

记忆口诀

  • 白盒覆盖:语句判定条判条路(语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖、路径覆盖)
  • 黑盒方法:等边因判场错(等价类、边界值、因果图、判定表、场景法、错误推测)

答题技巧

  1. 白盒测试:看代码结构,设计覆盖特定路径的测试用例
  2. 黑盒测试:看需求规格,设计覆盖输入输出的测试用例
  3. 覆盖标准选择:根据测试要求选择合适的覆盖标准

相关笔记


创建时间:2026年5月10日