论文部分内容阅读
如何将测试工作量合理分配到软件模块以有效检测缺陷是软件开发组织面临的重要挑战。结构复杂性导向(SCA,structural-complexity-guided allocation)和缺陷预测模型导向(FPA,fault-prediction-model-guided allocation)是近年来提出的测试工作量分配方法:前者依据模块的结构复杂性来分配,后者依据缺陷预测的结果来分配。然而,当前的SCA方法只简单利用模块规模的信息,而当前的FPA方法则要求缺陷预测具有相当高的预测准确性。特别地,先前工作只在"功能"粒度(一个"功能"由多个模块实现)上对SCA和FPA的有效性进行了评估,我们不清楚它们在更常见的模块粒度上的有效性。为解决上述问题,本文在模块粒度上分析测试工作量分配方法的有效性,主要工作如下:(1)对SCA进行扩展:现有方法在结构复杂性度量的选择上缺乏多样性,只考虑最简单的基于模块大小的分配策略。为对SCA方法做一个更加全面的研究,本文一方面对代码变更度量进行进一步的拓展,另一方面添加了基于圈复杂性度量的策略。实验结果表明某些基于代码变更度量的策略简单有效且性能表现较为稳定,能够给测试工作的分配带来非常有指导性的建议;相反,圈复杂度可能并不能很好地指导测试工作量的分配,尽管之前已有很多文献表明圈复杂度可以对缺陷预测起到很大的帮助。(2)在新条件下验证FPA:当前的FPA方法一方面要求预测粒度为"功能"级别,另一方面要求缺陷预测模型具有较高的准确性(Norm(Popt)>0.78)。然而,在真实的开发场景中,缺陷预测大多针对模块(类/文件)粒度。先前的研究表明,在模块粒度的缺陷预测下,缺陷预测模型一般达不到当前FPA方法所要求的准确性。本文在类粒度的基础上对当前的FPA方法的有效性进行了实证分析,实验结果表明FPA系列策略普遍表现不佳。(3)提出新的分配策略RGA:本文将软件可靠性增长模型应用到测试工作量分配场景中,提出了 RGA(reliability-growth-model-guided allocation)方法。RGA首先学习前期版本的缺陷信息得到当前版本的缺陷分布,然后求解当前版本理论上的最优工作量分配方案。实验结果表明,RGA优于SCA和FPA:一方面,在相同的总测试工作量下,RGA方法能发现最多的缺陷数目;另一方面,RGA方法在多个软件版本上的性能比SCA和FPA更稳定。