中文

Flakify:一种基于语言模型的黑盒式不稳定测试预测器

软件工程 2022-09-02 v3

摘要

软件测试用于确保代码变更不会对现有功能产生不利影响。然而,测试用例可能是不稳定的(flaky),即对于同一版本的源代码,在多次执行中时而通过时而失败。不稳定测试用例会给软件开发带来额外开销,因为它们可能导致对生产代码或测试代码进行不必要的调试尝试。当前最先进的基于机器学习的不稳定测试用例预测器依赖于预定义的特征集合,这些特征要么是项目特定的,要么需要访问生产代码,而软件测试工程师并非总能获得生产代码。因此,本文提出 Flakify,一种基于语言模型的黑盒式不稳定测试用例预测器。Flakify 仅依赖测试用例的源代码,因此不需要 (a) 访问生产代码(黑盒),(b) 重新运行测试用例,(c) 预定义特征。为此,我们采用了预训练语言模型 CodeBERT,并使用测试用例的源代码对其进行微调以预测不稳定测试用例。我们在两个公开的不稳定测试用例数据集(FlakeFlagger 和 IDoFT)上评估了 Flakify,并使用两种不同评估流程(交叉验证和按项目验证)将我们的技术与 FlakeFlagger 方法进行比较。Flakify 在两种评估流程下于两个数据集上均取得了高 F1 分数,并且在 FlakeFlagger 数据集上评估时,其精确率和召回率分别比 FlakeFlagger 高出 10 和 18 个百分点,从而将浪费在不必要的测试用例和生产代码调试上的成本按相同比例降低。Flakify 在用于预测新项目中的测试用例时也取得了显著更高的预测结果,表明其相对于 FlakeFlagger 具有更好的泛化能力。我们的结果进一步表明,FlakeFlagger 的黑盒版本并非预测不稳定测试用例的可行方案。

关键词

引用

@article{arxiv.2112.12331,
  title  = {Flakify: A Black-Box, Language Model-based Predictor for Flaky Tests},
  author = {Sakina Fatima and Taher A. Ghaleb and Lionel Briand},
  journal= {arXiv preprint arXiv:2112.12331},
  year   = {2022}
}