回归测试
测试用例优先级(Test Case Prioritization,TCP)
定义:通过设定特定优先级准则(执行时间,代码覆盖等),对测试用例进行优先级排序以优化其执行次序,旨在最大化优先级目标,例如最大化测试用例集的早期缺陷检测速率。
测试用例选择(Test Case Selection,TCS)
定义:旨在从已有测试用例集中选择出所有可检测代码修改的测试用例。
适用场景:适用于因测试预算不足以致不能执行完所有测试用例的测试场景。
特征表示
优先级策略
基于贪心的 TCP 策略
全局贪心策略:
- 每轮优先挑选覆盖最多代码单元的测试用例。
- 多个用例相同随机选择。
增量贪心策略:
- 每轮优先挑选覆盖最多,且未被已选择用例覆盖代码单元的测试用例。
- 所有代码单元均已被覆盖则重置优先级排序过程
- 多个用例相同随机选择
假设有 n 个测试用例以及 m 个代码单元,共需排序 n 轮,每轮选择一个测试用例。第 k 轮时,存在 n - k + 1 个待排序用例,每个用例需与 m 个代码单元计算情况,那么时间复杂度为 \(O(n^2m)\)
基于相似性的 TCP
自适应随机策略
基本定义:每轮优先与已选择测试用例集差异性最大的测试用例。让测试用例均匀地分布在输入域中。
基于搜索的 TCP
基本定义:探索用例优先级排序组合的状态空间,以此找到检测错误更快的用例序列。
基于机器学习的 TCP
编译器场景中的测试用例优先级
基本定义:对测试用例特征进行学习,根据预测的缺陷检测概率进行优先级排序。
评估指标
指标:平均故障检测百分比(Average Percentage of Faults Detected, APFD)
说明:当给定测试用例的执行次序时,该评测指标可以给出测试用例执行过程中检测到缺陷的平均累计比例。
特点:其取值范围介于 0~100% 之间,取值越高,则缺陷检测速度越快。
一般性描述:给定程序包含 m 个故障 \(F = \{f_1, f_2, \dots, f_m \}\) 和 n 个测试用例 \(T = \{ t_1, t_2, \dots, t_n\}\) ,\(T'\) 为 \(T\) 的一个优先级序列,\(TF_i\) 为该测试用例序列 \(T'\) 中第一个检测到故障 \(f_i\) 的测试用例下标,则该优先级序列 \(T'\) 的 \(APFD\) 值计算公式为:
\[ APFD = 1 - \frac{TF_1 + TF_2 + \dots + TF_m}{n \times m} + \frac{1}{2n} \]