Project-Aware Validation in Software Defect Prediction: A Controlled Simulation and Real-World Benchmark Study of Evaluation Optimism
本研究通过受控模拟和对真实世界基准测试的二次分析表明,在软件缺陷预测中使用混合随机训练/测试划分,与具备项目感知能力的验证方法相比,会产生系统性乐观的性能估计,从而凸显了建立尊重项目边界的评估协议的紧迫需求。
原始论文采用 CC BY 4.0 许可(https://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
在软件的世界里,代码是构建从银行系统到医疗设备等一切事物的基石。然而,正如任何人类制造的结构一样,它也容易出现裂纹和缺陷。软件工程师和研究人员长期以来一直试图构建能够预测这些缺陷(或称“故障”)最可能隐藏在何处的计算机程序,甚至是在软件发布之前。其目标是及早发现错误,从而节省时间并防止代价高昂的失败。为了测试这些预测程序是否有效,研究人员通常会收集来自许多不同软件项目的海量代码,将它们全部混合成一大堆,然后将其随机分成一个训练组和一个测试组。如果预测程序在测试组上表现良好,则认为它已准备好投入实战。这种方法既方便又被广泛使用,但它依赖于一个隐藏的假设:即来自一个项目的代码出现在另一个项目中的可能性,与它出现在其自身项目中的可能性是一样的。实际上,软件项目是截然不同的生态系统。它们拥有各自独特的历史、编码风格和团队。一个在这些不同世界混合数据上训练的模型,学习到的可能是它所见过的特定项目的奇特性,而不是学习如何在一个全新的、未见过的项目中寻找缺陷。
独立研究员弗拉迪米尔·托米洛夫(Vladimir Tomislav)最近的一项研究调查了这种常见的测试方法是否给了研究人员一种虚假的信心。该研究提出了一个简单但至关重要的问题:如果我们针对来自特定项目的从未见过的数据来测试预测模型,它的表现是否还能像标准测试所暗示的那样出色?为了找到答案,研究人员没有依赖单一的历史数据集。相反,他构建了一个受控模拟环境,可以在其中创建具有已知规则的人造软件项目。在这个模拟中,他为六个不同的项目生成了数据,确保每个项目都有其独特的特征,就像现实世界的软件团队运作方式各异一样。随后,他使用两种不同的方法在这些数据上训练预测模型。第一种方法是标准做法:将所有数据混合在一起并进行随机拆分。第二种方法更为严谨:模型在五个项目上进行训练,然后严格在第六个它从未见过的项目上进行测试。这种“留一项目法”(leave-one-project-out)模拟了将工具部署到新环境时面临的真实挑战。
模拟结果清晰且一致。当模型使用标准的随机混合进行测试时,它们的表现看起来比实际情况更准确。对于测试的最复杂模型而言,标准方法将其发现缺陷的能力高估了约三个百分点。虽然三个点听起来可能很小,但在软件预测领域,这代表了预期与现实之间的显著差距。研究发现,这些模型本质上是在记忆其训练项目的特定模式,而不是在学习寻找漏洞的通用规则。当研究人员迫使模型在完全新的项目上证明自己时,其性能明显下降。这种乐观的随机拆分得分与现实的新项目得分之间的差距并非偶然;它出现在不同类型的预测算法中,并且即使研究人员调整了模拟难度,这一现象依然成立。
为了确保这些发现不仅仅是计算机模拟产生的偏差,研究人员还查看了现实世界的数据。他重新检查了一个涵盖了十一个主要开源软件项目的已发表基准测试。在这次现实世界的检查中,他比较了模型在针对其训练过的同一个项目进行测试时,与针对其从未见过的项目进行测试时的表现。模式是完全一致的。在所有这十一个项目中,模型在熟悉领域测试时的表现都比在陌生领域测试时要好得多。这种差异在现实世界中甚至更大,高估的范围在六到十六个百分点之间。这证实了该问题不仅是模拟中的理论问题,而且是影响当今我们评估软件工具的一个真实现象。
研究还探讨了不同类型的模型如何应对这一挑战。事实证明,那些旨在寻找复杂模式的更复杂的模型,最容易受到这种高估的影响。它们是最渴望记忆训练项目特定细节的模型,从而导致在面对新数据时性能下降最为严重。较简单的模型依赖于更少、更宽泛的规则,因此更加稳定。它们在简单的测试中表现并不那么惊艳,但在游戏规则改变时,它们能更好地维持表现。这表明,在追求构建最先进预测工具的过程中,研究人员可能会倾向于选择那些擅长猜测过去、却不擅长预测未来的模型。
这些发现对于任何构建或使用软件缺陷预测工具的人来说都具有重要意义。这项研究并不是声称这些工具是无用的,但它确实指出我们衡量其成功的方式存在缺陷。如果一名研究人员基于随机混合的数据报告其新工具具有高度准确性,那么他报告的数字很可能对于实际应用来说过高了。研究建议,测试一个旨在用于新项目的工具,唯一公平的方法是将其测试在从未见过的项目上。这需要实验设计方式的转变,从将所有数据混合在一起的便利性,转向更诚实的、逐个项目的评估。通过这样做,软件社区可以避免部署那些在实验室中看起来完美、但在实际应用中表现挣扎的工具所带来的失望,从而确保我们构建的工具真正能够应对复杂多变的软件开发世界。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。