中文

完美是测试预言机的敌人

软件工程 2023-04-07 v2 人工智能 机器学习

摘要

测试预言机的自动化是软件测试中最具挑战性的方面之一,但与自动化测试输入生成相比受到的关注仍相对较少。测试预言机依赖于能够区分正确与错误行为的真值,以判定测试是失败(检测到缺陷)还是通过。使预言机问题具有挑战性且不可判定的是这样一种假设:真值应知晓确切的期望、正确或错误行为。然而,我们认为即便不知晓确切的正确或错误行为,而仅知晓这两者可能如何不同,仍可以构建准确的预言机。本文提出 SEER,一种基于学习的方法,在缺少测试断言或其他类型预言机的情况下,能判定给定被测方法 (MUT) 上的单元测试通过或失败。为构建真值,SEER 将单元测试与 MUT 的实现联合嵌入统一向量空间,使得测试的神经网络表示与其所通过的 MUT 的表示相似,而与其所失败的 MUT 的表示不相似。构建于该向量表示之上的分类器充当预言机,在测试输入检测到 MUT 中缺陷时生成“失败”标签,否则生成“通过”标签。我们在来自一组多样化开源 Java 项目的超过 5K 个单元测试上应用 SEER 的广泛实验表明,所生成的预言机 (1) 在预测失败或通过标签方面有效,总体准确率、精确率、召回率和 F1 度量分别达 93%、86%、94% 和 90%;(2) 可泛化,对训练或验证集之外项目的单元测试预测标签时性能下降可忽略;(3) 高效,平均仅用 6.5 毫秒即可检测缺陷存在。

关键词

引用

@article{arxiv.2302.01488,
  title  = {Perfect is the enemy of test oracle},
  author = {Ali Reza Ibrahimzada and Yigit Varli and Dilara Tekinoglu and Reyhaneh Jabbarvand},
  journal= {arXiv preprint arXiv:2302.01488},
  year   = {2023}
}

备注

Published in ESEC/FSE 2022