Risk Based Software Test Prioritization Using Machine Learning Defect Prediction on Five Open Source Repositories
本文揭示了标准基于风险的软件测试中存在一种会导致机器学习性能虚高的致命标签-特征循环性,随后提出了一种使用泄漏特征移除和严格评估的严谨协议,旨在证明其相对于强基准模型仅有 3.64% 的微小但具有统计学稳健性的提升,同时揭示了这些模型在时间维度上无法实现泛化。
原始论文采用 CC BY 4.0 许可(https://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
在现代软件开发那变幻莫测、广阔无垠的领域中,代码编写、测试和更新的速度之快,足以让任何人类团队都感到难以招架。为了跟上这种节奏,工程师们依赖自动化系统,在每次做出更改时运行数以千计的检查。这些被称为“测试”的检查,是捕捉错误并在其到达用户端之前将其拦截的安全网。然而,随着软件规模的增长,测试的数量增长得更快,最终变得如此庞大,以至于运行每一个测试都需要耗费过长的时间。等待一轮完整的检查会延迟新功能的发布,从而拖慢整个创作过程。这造成了一个艰难的困境:团队需要保持快速,但又无法承担跳过安全检查的代价。许多人转向的解决方案是基于风险的测试,这是一种试图猜测哪些代码部分最容易出错并优先检查这些部分的策略。其希望在于能够快速发现错误,而不把时间浪费在那些稳定的系统部分上。
多年来,研究人员一直试图教会计算机进行这些猜测,即使用机器学习的方法,这是一种通过软件从过去的数据中学习模式的方法。他们向计算机输入关于文件如何被更改、谁更改了它们以及更改频率的信息。目标是建立一个模型,使其能够观察一个文件并说:“这个文件有风险;先检查它。”但独立研究员维杰·普拉萨德·贾瓦迪(Vijay Prasad Javvadi)的一项新研究揭示,许多之前的尝试都是建立在一个根本性的错误之上的。研究表明,用于教导计算机识别什么是“多缺陷”文件的原始数据,往往就是用于进行预测的同一组数据。这就像是要求一名学生预测考试成绩,却在暗中将答案作为复习指南递给他们。计算机并不是在学习预测未来,它只是在阅读它本该去猜的标签。
贾瓦迪着手通过移除这种数据泄漏并从一套干净的规则重新开始来修复这个问题。他从五个大型且知名的开源项目中收集了数据,检查了近三十万个文件。在旧有的、有缺陷的方法中,如果一个文件曾因修复漏洞而被修改过,计算机就会被告知该文件是“易发生缺陷”的,并且会被给予该文件修复次数的确切计数作为预测线索。贾瓦迪移除了这些误导性的线索。他迫使计算机仅依赖其他信号,例如文件被触动的次数、有多少不同的人参与了该文件的开发,以及增加了或删除了多少代码。随后,他将这些智能模型与一种非常简单的、非智能的方法进行了比较:仅仅根据文件被更改的次数对其进行排序。
结果令人警醒。当这些误导性的线索被移除后,复杂的机器学习模型并没有崩溃,但也并未创造奇迹。最智能的模型——一种被称为“随机森林”的算法——在仅查看前 10% 最可疑的文件时,成功识别了约 46.5% 的缺陷文件。这确实是一种进步,但也是温和的。更重要的是,仅仅通过计算文件被更改次数的简单方法几乎同样有效,捕捉到了大约 43% 的坏文件。智能模型仅比简单的计数法高出大约三到四个百分点的优势。这表明,虽然机器学习可以提供帮助,但寻找漏洞的最强有力信号通常仅仅是文件被编辑的历史记录。
研究还揭示了这些预测在预测未来方面的一个惊人局限性。当研究人员尝试在全新的文件(即刚刚创建且尚未积累足够更改历史的文件)上测试这些模型时,模型完全失效了。它们的表现并不比随机猜测好。这是因为对“多缺陷”文件的定义依赖于过去修复的历史。一个全新的文件没有历史,因此模型无法得知它最终是否会变得有问题。这一发现提出了警告:这些工具非常擅长描述哪些文件目前基于其过去具有风险,但它们无法可靠地预测哪些全新的文件在明天会变得具有风险。
最后,这项研究为如何优先进行软件测试提供了更清晰、更诚实的图景。它证实了旧方法由于隐藏的缺陷而导致了数据虚高,但也证明了经过修正的方法仍然具有价值。工程团队的最佳路径不是依赖复杂的“黑盒”预测,而是结合使用简单的、可理解的信号和一个轻量级的机器学习模型。该研究建议使用一种特定的快速算法,使其能在不到一毫秒内做出预测,从而在开发者输入代码时实现即时运行。这种方法并不承诺能捕捉到每一个错误,但它提供了一种统计学上合理的方式,将有限的测试时间集中在最可能需要测试的文件上,从而在速度的需求与安全的必要性之间取得平衡。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。