第7章05 回归测试
7.1 本章定位
本章关注软件演化和维护阶段的测试问题:软件修改后,如何保证未改变代码的功能不受影响。主观题很适合给出“修改某模块/需求变更/修复 Bug”的场景,要求设计回归测试范围和用例选择策略。
7.2 回归测试定义
回归测试是在程序修改之后,在==保持原有测试覆盖==的前提下,对软件进行重新测试,以验证修改没有引入新的错误。
为什么需要回归测试:软件在演化与维护过程中发生修改,但未修改部分仍可能被影响
- 软件在演化和维护中经常发生修改;
- 修改可能破坏未改变代码的功能;
- 回归测试是软件测试体系的必要组成部分;
- 系统一旦经过修改,就需要进行回归测试。
7.3 回归测试与一般测试的不同
7.4 回归测试过程
标准7步流程
- 提出修改需求
- 修改软件工件(代码/文档/模型)
- ==选择==和==生成==测试用例(T1 + T2)
- 执行测试
- 识别失败结果
- 确认错误
- 排除错误
课件在回归测试用例产生处给出:
- 为测试新改变代码,生成新的测试用例 $T1$;
- 对原有测试用例组进行有效性重确认 $T \rightarrow T0$;
- 从 $T0$ 中选择部分测试用例 $T2$;
- 执行测试用例组 $T1 + T2$;
- 比较执行结果与预期结果。
7.5 回归测试策略
1.全部重新测试 Retest All
含义:重新执行之前所有测试用例。
优点:
- 不需要花精力选择测试用例;
- 当测试用例数量不多,或系统大部分发生改变时适用。
缺点:
- 测试用例很多且改动很小时非常浪费。
2.选择性重新测试 Selective Retest
含义:选择和使用已有测试用例的一个子集重新测试。
优点:
- 当测试用例很多且系统改变只涉及一部分时,可节省成本。
缺点:
- 需要费精力对==测试用例进行选择==
- 若选择不当,可能遗漏受影响功能。
选择时常用算法是选择与特定模块相关的所有测试用例,以及所有集成测试用例。
7.6 测试用例选择与可追溯性
选择性回归测试需要依据可追溯性原则:
$$ 需求 \rightarrow 代码 \rightarrow 测试用例 $$
所有黑盒测试和白盒测试用例都应能追溯到相关需求、代码或变更点。
7.7 波及效应分析 REA
波及效应分析(Ripple Effect Analysis, REA)用于发现所有受影响部分,包括潜在受影响部分,以保证软件改变后仍保持一致性。
分析对象包括:
- 需求的波及效应分析;
- 设计的波及效应分析;
- 代码的波及效应分析;
- 测试用例的波及效应分析。
也需要跨阶段分析:从需求文档到设计文档,再到代码,最后到测试用例。
波及效应分析步骤
- 识别发生改变的部分;
- 识别潜在受影响组件;
- 决定这些潜在受影响组件中哪些需要改变;
- 迭代分析,直到不再有任何波及。
波及效应分类
直接波及是波及效应分析过程中要进行进一步改变的第一候选集。如果直接波及后不需要进一步的改变,那么诱发波及就不需要分析,以节省波及效应分析时间
课件提示:程序切片能自动化帮助识别潜在波及影响。
两种分析方法
① 字符串匹配(人工)
- 基于关键词/引用关系
- 不理解执行逻辑
② 程序切片(Program Slicing)(重点)
- 可以分析:
- 直接依赖
- 间接依赖
- 可自动化
==回归测试用例生成==
- 为了测试那些新改变的代码,要生成新的测试用例T1;
- 对原有的测试用例组进行有效性重确认T→ T0;并从中T0选择部分测试用例T2;
- 执行测试用例组T1+ T2;
- 比较测试用例的执行结果与预期结果;
- 测试失败,查明导致失败的模块或修改。
7.8 自动化回归测试
回归测试频繁执行,测试用例数量大,适合使用自动化工具:
- 自动执行测试脚本;
- 自动比较实际结果和预期结果;
- 帮助分析波及效应;
- 降低重复测试成本。
但自动化不能替代测试选择和波及分析。
7.9 回归测试情景题答题模板
题目给出软件修改场景时:
- 明确修改类型:需求变更、缺陷修复、重构、环境变化等。
- 定位变更工件:需求、设计、代码、数据库、配置、接口。
- 做波及效应分析:列直接受影响模块和可能诱发影响模块。
- 选择策略:改动大或用例少,选全部重新测试;改动小且用例多,选选择性重新测试。
- 生成新用例 $T1$:覆盖新增或修改功能。
- 从旧用例中选 $T2$:覆盖受影响模块、接口和关键业务流程。
- 执行 $T1+T2$,记录失败并分析是否由修改引入。
- 必要时更新测试计划、测试用例和追溯关系。
常见扣分点:
- 只测修改点,不测受影响模块;
- 不说明选择测试用例的依据;
- 忽略旧测试用例有效性重确认;
- 不区分直接波及和诱发波及;
- 没有写预期结果对比。
7.10 小测关联
第二次小测直接考查回归测试不多,但开发者测试章节已把回归测试列为 V 模型相关测试活动。期末更可能以场景题考选择性回归测试和波及效应分析。
7.11 本章复习检查题
填空题
- 回归测试策略主要包括________和________。
- 波及效应分析包括需求、设计、代码和________的波及效应分析。
- 回归测试用例组可以表示为新生成用例 $T1$ 加旧用例中选择出的________。
选择题
- 当测试用例数量很多且系统只发生小范围修改时,更适合:A. 全部重新测试 B. 选择性重新测试 C. 不测试 D. 只做代码审查
- 识别修改影响范围时最相关的是:A. 波及效应分析 B. Alpha 测试 C. 字体测试 D. 容量测试
判断题
- 回归测试只需要测试被修改的那一行代码。
- 程序切片可以辅助识别潜在波及影响。
- 全部重新测试一定总是最经济。
参考答案
- 填空:全部重新测试、有选择的重新测试;测试用例;$T2$。
- 选择:B;A。
- 判断:错;对;错。