小明开了一家奶茶店,结果顾客喝到虫子——这就是"缺陷"。小明需要一个"质检体系"来在虫子进杯子之前就把它揪出来。软件测试评审就是这套质检体系:测试是"抓活的虫",评审是"在配方阶段就防虫"。本章5节:测试方法→评审方法→验证与确认→测试自动化→面向对象测试。
🎭 本章导读:错误与缺陷的纠葛
🔬 11.1 测试方法
📊 11.1.1 软件测试三大阶段
| 阶段 | 别名 | 发现什么错误 | 计划制定期 |
|---|---|---|---|
| 单元测试 | 模块测试 | 编程和详细设计错误 | 详细设计阶段 |
| 集成测试 | 组装测试 | 模块间接口和通信 | 概要设计阶段 |
| 系统测试 | — | 全局功能性能 | 需求分析阶段 |
单元测试需编写驱动模块(调用被测模块)和桩模块(模拟被调子模块)。顶层模块不需驱动,底层模块不需桩。内聚程度高可简化测试。
集成测试分非渐增式(一次全集成,难定位错误)和渐增式(每次加一个模块,主流)。渐增式又分自顶向下(不需驱动)和自底向上(不需桩)。
系统测试含确认测试(对照需求)和验收测试。Alpha测试在开发者场所(受控),Beta测试在用户现场(不受控)。
🔦 11.1.2 白盒测试 vs 黑盒测试
白盒测试核心:逻辑覆盖。6种覆盖标准,由弱到强:
| 覆盖 | 含义 | 强度 |
|---|---|---|
| 语句覆盖 | 每条语句至少执行一次 | 最弱 |
| 判定覆盖(分支) | 每个判定的每种分支至少一次 | 较弱 |
| 条件覆盖 | 判定中每个条件取各种可能结果 | 与判定互不包含 |
| 判定/条件覆盖 | 同时满足判定+条件覆盖 | 较强 |
| 条件组合覆盖 | 条件结果所有组合至少一次 | 更强(但不含路径) |
| 路径覆盖 | 每条可能路径至少经过一次 | 较强(不含条件组合) |
注意:条件覆盖不一定包含判定覆盖,判定覆盖也不一定包含条件覆盖。条件组合覆盖满足判定/条件覆盖但不保证路径。路径覆盖不考虑条件组合,不能代替条件覆盖。
黑盒测试4种技术:
- 等价类划分:用得最多。有效等价类(合理数据,验功能)+无效等价类(非法数据,验容错)。一个用例覆盖多个有效等价类,每个无效等价类单独一个用例。
- 边值分析:边界最易出错。取恰好等于、稍小于、稍大于边界值。常与等价类结合。
- 错误推测:靠经验和直觉选最可能出错的方案。
- 因果图:输入条件与输出结果的因果关系,检查组合。
🏷️ 11.1.3 缺陷的分类和级别
5类缺陷(IEEE/Jorgensen):输入/输出错误、逻辑错误、计算错误、接口错误、数据错误。
Beizer 10级:①轻微(错别字)→②中等(误导)→③使人不悦(数字断开)→④影响使用(交易未处理)→⑤严重(丢失交易)→⑥非常严重(不正确处理)→⑦极为严重(经常不正确)→⑧无法容忍(数据库破坏)→⑨灾难性(系统无法工作)→⑩传染性(导致其他系统瘫痪)。
🔧 11.1.4 调试:排错三大策略
| 策略 | 思想 | 效率 |
|---|---|---|
| 原始类 | "计算机找错",输出存储器/寄存器内容,靠大量信息找线索 | 最低效,万般无奈用 |
| 回溯类 | 从错误征兆处沿控制流程人工回追 | 程序大时路线爆炸 |
| 排除类 | 归纳演绎,列可能原因逐一排除 | 较高效,分治思想 |
👥 11.2 评审方法:8种评审+8个注意点
8种评审:①软件需求评审→②概要设计评审→③详细设计评审→④软件验证和确认评审→⑤功能检查(释放前)→⑥物理检查(验收前)→⑦综合检查(验收时)→⑧管理评审(定期)。
8个注意点:
- 不以测试代替评审(早期可评审不可测试,缺陷发现越晚成本越高)
- 关注产品不评论人(别变"批斗大会")
- 关注实质性问题(别纠结格式措词)
- 评审会不是问题解决会(发现而非解决)
- 评审应进项目计划(别临时安排)
- 参与者应了解评审过程
- 评审前应充分了解材料
- 重视评审组织工作(时间/通知/场所/设施/气氛)
✅ 11.3 验证与确认(V&V)
验证7种:合同验证、过程验证、需求验证、设计验证、编码验证、集成验证、文档验证。
- 需求验证:明确一致无歧义、可行、可测试
- 设计验证:可实现需求、可从需求导出/追踪
- 编码验证:可实现设计、可从设计导出/追踪
- 集成验证:软硬件完整正确集成
- 文档验证:充分完备一致、及时、配置管理合规
确认:建确认过程,含编写测试需求/用例/规程→反映预期用途→执行测试→确认满足预期用途。可内部或第三方。
🤖 11.4 测试自动化
5项可自动化:①测试用例生成 ②测试执行控制(多机分布/夜间假日运行) ③结果与标准输出对比 ④不吻合结果分析记录分类通报 ⑤状况统计报表。
🧬 11.5 面向对象的测试
OO测试6阶段(对应OOA/OOD/OOP三阶段+传统三测试):
- OOA测试:测认定的对象/结构/主题/属性和实例关联/服务和消息关联
- OOD测试:测认定的类/类层次结构/类库支持
- OOP测试:测数据成员是否满足封装、类是否实现功能
- OO单元测试:最小可测试单位变为"类或对象"(非模块),不孤立测单操作
- OO集成测试:无层次控制结构,传统自顶向下/自底向上无意义。两种策略:基于线程的测试(输入/事件所需的一组类)+基于使用的测试(先测独立类再测依赖类)
- OO系统测试:参考OOA结果,检测软件能否"再现"问题空间
OO特性对测试的影响:封装降低数据非法操作测试;继承提高重用但提高错误传播概率;多态使同函数行为复杂化,需测不同类型参数。
🏆 本章总结:抓虫全流程
- 测试方法:3阶段(单元/集成/系统)+白盒6覆盖+黑盒4技术+5类缺陷+10级严重度+3种调试策略
- 评审:8种评审(需求→概设→详设→V&V→功能→物理→综合→管理)+8注意点
- V&V:验证7种(合同/过程/需求/设计/编码/集成/文档)+确认(预期用途)
- 测试自动化:5项(生成/执行/对比/分析/统计)
- OO测试:6阶段(OOA/OOD/OOP/单元/集成/系统),焦点从模块→类