回归测试
软件演化:
- 软件产品在开发和维护过程中,因移除软件内在缺陷、添加新的功能、重构已有代码或提高运行性能等,需要执行代码修改并触发软件演化。
- 随着以统一过程和敏捷方法为代表的增量、迭代式开发过程的流行,软件演化频率也随之迅速提高。
- 回归测试作为一种有效的方法,可有效保证代码修改的正确性并避免代码修改对被测程序其他模块产生副作用。
- 回归测试一般占软件产品测试预算的 80% 以上,占软件维护预算的 50% 以上。
现有用例策略
重新执行已有测试用例
- 用例庞大:由于版本迭代,测试用例数量较多,则项目实际预算不允许执行完所有测试用例(两万行代码需要执行7周)
- 用例冗余:在迭代过程中,存在多个用例的功能相似甚至相同。
- 用例失效:部分代码修改会影响到被测模块的原有外部接口或内在语义,并导致部分测试用例失效。
- 用例缺失:若代码修改生成新的测试需求,则需额外设计新的测试用例。
回归测试优化
- 测试用例修复:识别出因相关模块的外部接口或内在语义发生变更为失效的用例,并其进行修复。
- 测试用例选择:通过分析代码修改,从已有测试用例中选择出所有可检测代码修改的测试用例,并确保未被选择的测试用例在修改前后程序上的执行行为保持一致。
- 测试用例扩充:在代码修改影响分析基础上,对已有测试用例集的充分性进行评估,若不充分则设计新的测试用例以确保对代码修改的充分测试。
- 测试用例缩减:在满足指定测试需求覆盖前提下,识别并移除冗余测试用例来降低回归测试用例集规模。
- 测试用例优先级:当测试预算不足以执行完所有测试用例时,可以基于特定优先级准则,对测试用例进行优先级排序以优化其执行次序,旨在最大化优先级目标,例如测试用例集的缺陷检测速率。
测试用例优先级
Test Case Prioritization, TCP
定义:通过设定特定优先级准则(执行时间,代码覆盖等),对测试用例进行优先级排序以优化其执行次序,旨在最大化优先级目标,例如最大化测试用例集的早期缺陷检测速率。
测试用例选择
Test Case Selection, TCS
- 定义:旨在从已有测试用例集中选择出所有可检测代码修改的测试用例。
- 适用场景:适用于因测试预算不足以致不能执行完所有测试用例的测试场景
测试用例集约减
Test Suite Reduction, TSR
- 定义:在满足对指定测试需求的覆盖前提下,通过识别并移除冗余测试用例来降低回归测试成本。
- 使用场景:适用于因版本迭代,存在大量功能相似甚至相同的冗余测试用例的测试场景。
特征表示
基于源码特征提取:语句覆盖,分支覆盖,函数覆盖
PIE 模型了理论:一个有效的测试 ,即在执行测试后程序 外部观测到失效行为,当且仅当需要满足以下三个必要条件:
- Execution-运行:测试必须运行到包含缺陷的程序代码。
- Infection-感染:程序必须被感染出一个错误的中间状态。
- Propagation-传播:错误的中间状态必须传播到外部被观察到。
基于文本特征提取
- 覆盖信息难以获得,基于输入数据本身评估。
- 计算测试数据文本(如字符串或者向量)之间的差异性(海明距离,曼哈顿距离,编辑距离等)来表示特征。
基于缺陷特征提取
- 覆盖特征无法充分度量测试用例的缺陷检测能力。
- 使用缺陷相关的特征来表示测试用例。
- 在变更代码上使用变异测试,使用变异体检测能力度量真实缺陷检测能力。
基于模型特征提取
- 覆盖特征在大型软件或黑盒中难以获取。
- 程序模型可以很好表示版本间行为差异。
- 通过对比修改前后模型可别出模型差异.在修改后的模型上执行所有测试用例,基于测试用例对模型差异的覆盖信息进行优先级排序。
优先级策略(重点)
基于贪心的 TCP 策略
- 全局贪心策略
- 每轮优先挑选覆盖最多代码单元的测试用例。
- 多个用例相同随机选择。
- 增量贪心策略
- 每轮优先挑选覆盖最多,且未被已选择用例覆盖代码单元的测试用例。
- 所有代码单元均已被覆盖则重置优先级排序过程
- 多个用例相同随机选择
基于类似性的 TCP 策略
基于搜索的 TCP 策略
基于机器学习的 TCP 策略
评估准则
总结展望
Reference
- 南京大学本科三年级课程《自动化测试》
- 测试用例优先级有关的论文