Appearance
考点清单
- [x] 测试原则(尽早测试/非开发者测试/正向+反向用例)
- [x] 静态测试 vs 动态测试
- [x] 黑盒测试 vs 白盒测试
- [x] 测试阶段(单元/集成/确认/系统/配置项/回归)
- [x] Alpha/Beta/验收测试区别
- [x] 黑盒测试用例设计(等价类/边界值/错误推测/因果图)
- [x] 白盒测试用例设计(语句/判定/条件/判定条件组合/路径覆盖)
- [x] 调试方法(蛮力法/回溯法/原因排除法)
- [x] McCabe 环路复杂度计算(m-n+2)
- [x] 软件度量(外部属性/内部属性)
笔记
一、测试原则 ★
测试是为了发现错误而执行程序的过程,成功的测试是发现了至今尚未发现的错误的测试。
核心原则:
- 应尽早并不断进行测试
- 测试工作应避免由原开发软件的人或小组承担
- 设计测试方案时,要确定输入数据和预期的输出结果
- 既包含有效合理的用例,也包含不合理失效的用例
- 检验程序是否做了该做的事,且是否做了不该做的事
- 严格按照测试计划进行,妥善保存测试计划和测试用例
- 测试用例可以重复使用或追加测试
二、测试方法分类 ★
| 对比维度 | 静态测试 | 动态测试 |
|---|---|---|
| 方式 | 被测程序不在机器上运行 | 实际运行程序 |
| 手段 | 人工检测 + 计算机辅助静态分析 | 白盒测试 + 黑盒测试 |
| 文档测试 | 以检查单形式进行 | — |
| 代码测试 | 桌前检查、代码审查、代码走查 | — |
| 效果 | 有效发现 30%-70% 逻辑设计和编码错误 | — |
黑盒测试 vs 白盒测试:
| 对比 | 黑盒测试 | 白盒测试 |
|---|---|---|
| 别名 | 功能性测试 | 结构性测试 |
| 特点 | 不了解代码结构 | 明确代码流程 |
| 依据 | 根据功能设计用例 | 根据代码逻辑设计用例 |
| 目标 | 测试软件功能 | 进行用例覆盖 |
三、测试阶段 ★
| 阶段 | 测试对象 | 测试依据 | 目的 |
|---|---|---|---|
| 单元测试 | 可独立编译的模块/类 | 软件详细设计说明书 | 模块功能正确性 |
| 集成测试 | 模块间接口 | 软件概要设计文档 | 检查模块间接口关系 |
| 确认测试 | 完整软件 | SRS | 验证功能/性能与用户需求一致 |
| 系统测试 | 完整的集成计算机系统 | 用户需求/开发合同 | 验证与系统正确连接,满足设计要求 |
| 配置项测试 | 软件配置项 | SRS | 检验与 SRS 一致性 |
| 回归测试 | 变更后的软件 | — | 验证变更正确性+不影响原有功能 |
确认测试按用户参与程度:
| 类型 | 说明 |
|---|---|
| 内部确认测试 | 开发组织内部按 SRS 测试 |
| Alpha 测试 | 用户在开发环境下测试 |
| Beta 测试 | 用户在实际使用环境下测试,通过后交付 |
| 验收测试 | 交付前以用户为主的测试,依据 SRS/合同 |
系统测试最重要的工作是功能测试与性能测试。功能测试主要用黑盒测试,性能测试指标:响应时间、吞吐量、并发用户数、资源利用率。
四、测试用例设计 ★
黑盒测试用例
| 方法 | 说明 |
|---|---|
| 等价类划分 | 按特性归类,每类选取一个代表。有效等价类:尽可能多覆盖;无效等价类:每次仅覆盖一个 |
| 边界值划分 | 取范围两端值及范围外相邻值(如 0-150 → 0, 150, -1, 151) |
| 错误推测 | 凭经验推测可能出问题的地方 |
| 因果图 | 由结果反推原因 |
白盒测试用例(覆盖级别从低→高)
| 级别 | 说明 |
|---|---|
| 语句覆盖 SC | 所有语句至少执行一遍,覆盖层级最低 |
| 判定覆盖 DC | 所有判断的真假分支都覆盖一次 |
| 条件覆盖 CC | 每个判断条件内的每个独立条件都执行一遍真和假 |
| 判定条件组合覆盖 CDC | 同时满足判定覆盖和条件覆盖 |
| 路径覆盖 | 所有可行路径都覆盖,覆盖层级最高 |
覆盖层级口诀:语句<判定<条件<判定条件组合<路径。
五、调试
测试是发现错误,调试是找出错误的代码和原因。
调试方法:
| 方法 | 说明 |
|---|---|
| 蛮力法 | 全面排查 |
| 回溯法 | 从出错位置往回找 |
| 原因排除法 | 找出所有可能原因逐一排除,含演绎法、归纳法、二分法 |
调试后需要进行回归测试。
六、McCabe 环路复杂度
环路复杂度 = m - n + 2,其中 m = 有向边数(分支连线),n = 节点数(语句框)。
七、软件度量
| 属性类型 | 说明 | 特点 |
|---|---|---|
| 外部属性 | 面向管理者和用户,如性能指标 | 可直接测量 |
| 内部属性 | 软件产品本身的属性,如可靠性 | 只能间接测量 |