随着信息技术的飞速发展,软件测试作为软件质量的保证手段,其重要性程度越来越高。回归测试是软件测试的重要组成部分,随着软件规模的扩大,它占据的比重越来越大,且发生得更加频繁,因此产生了大量的回归测试用例。为了提高测试效率,在回归测试中引入测试用例优先级排序技术(Test Case Prioritization,TCP),即通过调整测试用例执行顺序,让携带更多信息的用例更早执行,从而更快检测到软件中的潜在缺陷。本文针对现有排序算法的不足,提出了融合缺陷预测和改进覆盖信息的测试用例优先级算法。具体来说,主要贡献包括以下几个方面:
(1)现有的基于代码覆盖的排序算法中存在两个问题,一是默认所有代码单元提供给故障检测的信息是相同的,二是排序过程中多个测试用例覆盖率相同时会出现随机选取。为了解决上述问题,本文从方法间的调用关系出发,提出了方法权重分配模型,并利用该模型改进覆盖率的计算方式,在此基础上提出基于改进贪婪算法的总体排序策略和附加排序策略,让携带更多信息的方法被更快覆盖。在Defects4j数据集上进行验证,结果表明两种排序策略均能提高故障检测率并能减少排序过程中随机现象的发生。
(2)为了解决基于搜索的排序算法收敛速度慢、最终解的质量不稳定等问题,本文提出基于改进覆盖的双种群遗传测试用例优先级排序算法(Dual Genetic Algorithm-Test Case Prioritization,DGA-TCP)。DGA-TCP通过设置多样性较高的初始解,并在两个进化种群中使用不同的控制参数来协同进化,达到扩大解搜索空间的目的,以降低算法陷入局部最优的风险;同时使用引入权重因子的平均方法覆盖率作为适应度函数,利用Boltzmann选择法实现不同进化阶段选择压力的自适应变化,期望加快算法后期收敛速度。通过对比实验,证明了DGA-TCP算法在收敛到更优解的同时减少了进化代数,且在统计学中具有显著优越性。
(3)为了利用项目的更改历史信息,本文提出融合缺陷预测与覆盖信息的测试用例优先级排序算法。首先构建基于时间加权风险和代码实现复杂度的文件级缺陷预测算法,将时间加权风险中的规范时间戳简化为项目版本,并关注每一次的代码版本更新和被多个开发人员共同修改的文件,使用代码行数、圈复杂度和嵌套深度来衡量代码的实现复杂度;然后将缺陷预测与基于覆盖的排序算法融合,进一步提升了排序效率;最后实验证明了该排序算法可以提高故障检测率,并且通过Friedman检验验证了算法性能的提升是具有统计学意义的。
暂无评论