软件测试总结
概述
软件测试是为了发现程序中的错误而执行程序的过程。测试是软件质量保证的重要手段。
测试分类
按是否运行程序分
-
静态测试:不运行程序,通过人工监测或计算机辅助分析
- 控制流分析:检查没有使用的语句、无法到达的语句
- 数据流分析:检查引用未定义的变量
- 接口分析:检查接口一致性、函数参数一致性
-
动态测试:运行程序,检查实际输出与预期结果的差异
- 白盒测试(结构测试)
- 黑盒测试(功能测试)
- 灰盒测试(介于两者之间)
白盒测试(结构测试)
核心思想:关注程序内部结构和逻辑,基于代码结构设计测试用例。
覆盖标准(从弱到强)
1. 语句覆盖(Statement Coverage)
- 定义:设计测试用例使程序中每条可执行语句至少被执行一次
- 强度:最弱的覆盖标准
- 缺点:无法发现逻辑运算中的错误
- 示例:
测试用例:A=true, B=true(覆盖语句1)if (A && B) { 语句1; }
2. 判定覆盖(Decision Coverage)/ 分支覆盖(Branch Coverage)
- 定义:设计测试用例使程序中每个判定的真假分支至少执行一次
- 强度:比语句覆盖强
- 缺点:忽略了判定中条件的组合
- 示例:
测试用例:A=true, B=true(执行语句1);A=false(执行语句2)if (A && B) { 语句1; } else { 语句2; }
3. 条件覆盖(Condition Coverage)
- 定义:设计测试用例使每个判定中每个条件的可能取值至少执行一次
- 强度:比判定覆盖强(在某些情况下)
- 缺点:不一定满足判定覆盖
- 示例:
条件A:true, false;条件B:true, false 测试用例:A=true, B=false;A=false, B=trueif (A && B) { 语句1; }
4. 判定-条件覆盖(Decision-Condition Coverage)
- 定义:同时满足判定覆盖和条件覆盖
- 强度:比单独的判定覆盖和条件覆盖强
- 缺点:忽略了条件的组合情况
- 示例:
测试用例:A=true, B=true(执行语句1);A=false, B=false(执行语句2)if (A && B) { 语句1; } else { 语句2; }
5. 条件组合覆盖(Condition Combination Coverage)
- 定义:设计测试用例使每个判定中条件的所有可能组合至少执行一次
- 强度:比判定-条件覆盖强
- 缺点:测试用例数量增长快,覆盖路径有限
- 示例:
条件组合:A=true,B=true;A=true,B=false;A=false,B=true;A=false,B=falseif (A && B) { 语句1; }
6. 路径覆盖(Path Coverage)
- 定义:设计测试用例使程序中所有可能的路径至少执行一次
- 强度:最强的覆盖标准
- 优点:全面覆盖程序逻辑
- 缺点:测试用例数量可能很大,循环结构路径无限
- 示例:
路径:A真B真、A真B假、A假B真、A假B假if (A) { 语句1; } if (B) { 语句2; }
覆盖标准排序(从弱到强)
语句覆盖 < 判定覆盖 < 条件覆盖 < 判定-条件覆盖 < 条件组合覆盖 < 路径覆盖
考试重点
- 覆盖标准的强弱关系:必须牢记从弱到强的顺序
- 测试用例设计:能够根据代码设计满足特定覆盖标准的测试用例
- 覆盖标准的优缺点:理解每个标准的局限性
黑盒测试(功能测试)
核心思想:关注输入输出,不关心内部结构,基于需求规格设计测试用例。
主要方法
1. 等价类划分
- 原理:将输入数据划分为若干等价类,从每个类中选取代表值作为测试用例
- 分类:
- 有效等价类:合理的输入数据
- 无效等价类:不合理的输入数据
- 示例:输入范围1-100
- 有效等价类:1-100之间的整数
- 无效等价类:小于1的数、大于100的数、非整数
2. 边界值分析
- 原理:选取边界值作为测试用例,错误往往发生在边界
- 分类:
- 上点:边界上的点
- 离点:离边界最近的点
- 内点:范围内的点
- 示例:输入范围1-100
- 测试用例:0,1,2,99,100,101
3. 错误推测
- 原理:基于经验和直觉推测程序中可能存在的错误
- 方法:列举程序中可能的错误和容易发生错误的特殊情况
- 示例:输入为空、输入为0、输入为负数等特殊情况
4. 因果图
- 原理:分析输入条件(因)和输出结果(果)之间的关系
- 步骤:
- 分析输入条件和输出结果
- 画出因果图
- 将因果图转换为判定表
- 根据判定表设计测试用例
- 优点:考虑了输入条件的组合
5. 判定表
- 原理:分析多个输入条件的组合对输出的影响
- 组成:
- 条件桩:所有输入条件
- 动作桩:所有输出结果
- 条件项:输入条件的取值组合
- 动作项:输出结果
- 示例:
条件1 条件2 动作 T T 动作1 T F 动作2 F T 动作3 F F 动作4
6. 场景法
- 原理:模拟用户操作场景,设计测试用例
- 步骤:
- 分析基本流和备选流
- 设计场景
- 为每个场景设计测试用例
- 优点:贴近实际用户使用情况
考试重点
- 等价类划分:如何划分有效和无效等价类
- 边界值分析:如何确定边界值
- 因果图和判定表:如何分析条件组合
灰盒测试
- 定义:介于白盒和黑盒测试之间
- 特点:关注输入输出,也关注内部结构
- 应用:集成测试、系统测试
测试阶段
1. 单元测试
- 依据:详细设计文档
- 对象:模块(函数、类)
- 方法:白盒测试为主
- 内容:模块接口、局部数据结构、边界条件、独立路径、错误处理
2. 集成测试
- 依据:概要设计文档
- 对象:模块间接口
- 方法:灰盒测试
- 策略:
- 自顶向下集成
- 自底向上集成
- 三明治集成
3. 系统测试
- 依据:需求规格说明书
- 对象:整个系统
- 方法:黑盒测试
- 内容:功能测试、性能测试、安全测试、兼容性测试
4. 确认测试
- 依据:需求规格说明书
- 对象:软件产品
- 方法:黑盒测试
- 内容:验证软件与需求的一致性
考试重点总结
白盒测试重点
- 覆盖标准的强弱关系:必须牢记
- 测试用例设计:能够根据代码设计测试用例
- 覆盖标准的适用场景:根据测试要求选择合适的覆盖标准
黑盒测试重点
- 等价类划分:有效和无效等价类的划分方法
- 边界值分析:边界值的确定方法
- 因果图和判定表:条件组合分析
易错点
- 覆盖标准的强弱:语句覆盖最弱,路径覆盖最强
- 条件覆盖不一定满足判定覆盖:这是常见错误
- 路径覆盖的局限性:循环结构路径无限
记忆口诀
- 白盒覆盖:语句判定条判条路(语句覆盖、判定覆盖、条件覆盖、判定-条件覆盖、条件组合覆盖、路径覆盖)
- 黑盒方法:等边因判场错(等价类、边界值、因果图、判定表、场景法、错误推测)
答题技巧
- 白盒测试:看代码结构,设计覆盖特定路径的测试用例
- 黑盒测试:看需求规格,设计覆盖输入输出的测试用例
- 覆盖标准选择:根据测试要求选择合适的覆盖标准
相关笔记
创建时间:2026年5月10日