1. 测试阶段
测试与开发的对应关系
| 开发阶段 | 测试阶段 |
|---|---|
| 需求分析 | 系统测试 |
| 概要设计 | 集成测试 |
| 详细设计 | 单元测试 |
| 编码实现 | — |
单元测试
- 测试对象:模块或组件
- 目的:验证每个模块的功能正确性
- 测试依据:详细设计文档
集成测试
集成测试将已通过单元测试的模块组装起来进行测试。
集成策略
| 策略 | 特点 | 需要编写的模块 |
|---|---|---|
| 自顶向下 | 从主控模块开始,逐步加入下层模块 | 需要编写桩模块(模拟下层模块) |
| 自底向上 | 从底层模块开始,逐步组装上层模块 | 需要编写驱动模块(模拟上层调用) |
- 自顶向下:不需要编写驱动模块,需要编写桩模块
- 自底向上:不需要编写桩模块,需要编写驱动模块
系统测试
- 测试对象:完整的软件系统
- 目的:验证系统是否满足需求规格说明
- 测试依据:需求规格说明书
2. 测试方法
黑盒测试
黑盒测试(功能测试)不考虑程序内部结构,只关注输入和输出。
常用方法
| 方法 | 说明 |
|---|---|
| 等价类划分 | 将输入数据划分为若干等价类,每类选取代表性数据测试 |
| 边界值分析 | 对输入输出的边界值进行测试 |
| 错误推测法 | 根据经验推测可能出现的错误 |
| 因果图法 | 分析输入条件之间的因果关系 |
白盒测试
白盒测试(结构测试)需要了解程序内部结构,对代码进行测试。
常用方法
| 方法 | 说明 |
|---|---|
| 语句覆盖 | 每条语句至少执行一次 |
| 判定覆盖(分支覆盖) | 每个判定的真假分支至少执行一次 |
| 条件覆盖 | 每个条件的各种可能值至少满足一次 |
| 判定/条件覆盖 | 同时满足判定覆盖和条件覆盖 |
| 条件组合覆盖 | 每个判定中条件的各种组合至少出现一次 |
| 路径覆盖 | 每条可能的路径至少执行一次 |
覆盖强度
语句覆盖 < 判定覆盖 < 条件覆盖 < 判定/条件覆盖 < 条件组合覆盖 < 路径覆盖
3. McCabe度量法
McCabe度量法(环路复杂度)用于衡量程序的复杂程度。
计算公式
V(G) = m - n + 2
其中:
- V(G):环路复杂度
- m:有向图中的边数
- n:有向图中的节点数
另一种计算方法
V(G) = 判定节点数 + 1
应用
- 确定程序中独立路径的数量
- 为白盒测试提供测试用例数量的参考
4. 常见题型
- 白盒测试 + McCabe度量法
- 伪代码 + 白盒测试 + McCabe度量法
5. 软件维护
维护类型
| 类型 | 说明 |
|---|---|
| 改正性维护 | 修复软件中的错误 |
| 适应性维护 | 使软件适应环境变化 |
| 完善性维护 | 增加新功能、改进性能 |
| 预防性维护 | 预防潜在问题 |
重要说明
- 在软件工程的每一个阶段都应考虑并提高软件的可维护性
- 软件维护通常比软件开发投入的时间、人力、精力更大
- 完善性维护是软件维护中占比最大的类型
评论