软件实现与测试
1 软件实现概述
1.1 软件实现定义
软件实现:将设计转换为可执行程序的过程,包括编码、测试和调试等活动。
1.2 程序设计语言分类
| 类型 | 说明 | 示例 |
|---|---|---|
| 过程式语言 | 以过程为中心 | C、Pascal |
| 面向对象语言 | 以对象为中心 | Java、C++、Python |
| 函数式语言 | 以函数为中心 | Haskell、Lisp |
| 脚本语言 | 解释执行 | JavaScript、Python、Ruby |
| 查询语言 | 数据库操作 | SQL |
2 软件测试概述
2.1 测试定义
软件测试:在规定条件下对程序进行操作,以发现错误,衡量软件质量,并评估是否满足设计要求的过程。
2.2 测试目的
- 发现软件错误
- 验证软件功能
- 评估软件质量
- 为决策提供依据
2.3 测试原则
- 尽早和不断地测试
- 避免自测
- 关注测试用例的设计
- 注意群集现象
- 严格执行测试计划
- 全面检查测试结果
- 妥善保存测试文档
3 测试方法
3.1 黑盒测试
黑盒测试:不考虑程序内部结构,只根据需求规格说明书检查程序的功能。
黑盒测试方法:
| 方法 | 说明 |
|---|---|
| 等价类划分 | 将输入数据划分为有效等价类和无效等价类 |
| 边界值分析 | 测试边界值及其附近值 |
| 决策表 | 列出所有可能的条件组合 |
| 因果图 | 分析输入条件之间的因果关系 |
| 正交试验法 | 使用正交表设计测试用例 |
3.2 白盒测试
白盒测试:考虑程序内部逻辑结构,测试内部路径和条件。
白盒测试方法:
| 方法 | 说明 |
|---|---|
| 语句覆盖 | 每条语句至少执行一次 |
| 判定覆盖 | 每个判定至少取真和假各一次 |
| 条件覆盖 | 每个条件的所有可能取值至少出现一次 |
| 判定/条件覆盖 | 同时满足判定覆盖和条件覆盖 |
| 条件组合覆盖 | 所有条件的各种组合都至少出现一次 |
| 路径覆盖 | 覆盖所有可能的执行路径 |
3.3 McCabe环路复杂度
McCabe环路复杂度:衡量程序复杂性的度量。
计算公式:
V(G) = E - N + 2
其中:
- E:控制流图的边数
- N:控制流图的节点数
或:
V(G) = 判定节点数 + 1
4 测试策略
4.1 测试阶段
| 阶段 | 说明 |
|---|---|
| 单元测试 | 测试最小的软件单元 |
| 集成测试 | 测试模块之间的接口 |
| 系统测试 | 测试整个系统是否满足需求 |
| 验收测试 | 用户测试系统是否满足验收标准 |
4.2 集成测试策略
| 策略 | 说明 |
|---|---|
| 自顶向下 | 从主模块开始,逐步向下集成 |
| 自底向上 | 从底层模块开始,逐步向上集成 |
| 三明治集成 | 自顶向下和自底向上相结合 |
4.3 验收测试类型
- α测试:用户在开发环境下测试
- β测试:用户在实际使用环境下测试
5 测试管理
5.1 测试计划
测试计划内容包括:
- 测试范围
- 测试策略
- 测试资源
- 测试进度
- 测试风险
5.2 测试用例
测试用例要素:
- 测试用例ID
- 测试项
- 输入数据
- 预期结果
- 实际结果
- 测试状态
5.3 缺陷管理
缺陷生命周期:
- 发现缺陷
- 提交缺陷报告
- 分配缺陷
- 修复缺陷
- 验证缺陷
- 关闭缺陷
缺陷严重程度:
- 致命:系统崩溃、数据丢失
- 严重:主要功能无法使用
- 一般:次要功能问题
- 轻微:界面问题、建议
参考资源
- 系统分析师教材(第二版)相关章节
- 文老师软考教育