Facebook的Getafix:如何实现自动修复Bug

作者:蛮不讲李2024.02.17 19:37浏览量:8

简介:Facebook的Getafix工具通过学习工程师的代码提交,使用强大的聚类算法来发现和修复bug。它不仅提高了修复bug的效率,而且使代码改动更易于理解。

在软件开发中,自动修复Bug是一个极具挑战性的任务。Facebook通过开发Getafix工具,成功地实现了这一目标。Getafix在同类工具中是第一个达到Facebook这样规模的,并且已经应用于生产环境,为亿万用户的app不断改进稳定性和性能。

Getafix的目的是让计算机去处理那些常规、固定的bug。通过分析数以千计的人类工程师提交的代码,以及这些代码的各种语境,Getafix能够发现一些隐藏的bug逻辑,修复之前的自动修复工具修不了的bug。这种高效的实践得以让它能够用于生产环境。

Getafix相比之前的自动纠错工具,最大的提升点在于它能够从过去提交的代码中寻找到一种修bug的模式。它用到了一种强大的聚类算法(hierarchical clustering),并且,它还会分析出bug行数的上下文,来给出一个最恰当的解决方案。这种算法可以发现代码中的相似模式,并据此进行分类,然后基于这些分类来预测和修复bug。

为了能够创造一个自动修bug的工具,我们可以让它去学习之前的代码提交,它就能从中学到一些套路并为新bug提供最佳的解决方案。通过这种方式,Getafix可以缩小修bug所做的代码改动的范围,这样它就能快速创造一个补丁,而不需要去通过遍历暴力破解。同时,因为Getafix会从过去的代码中自动学习,所以它提交的代码改动对于人类来说都是简单易懂的。

对于Infer找到的null dereference bug,Getafix可以做到自动修复,同时,他也能通过对比新旧版本代码来解决一些代码质量问题。Infer是一个静态工具,用于在编译时发现潜在的bug。通过与Infer的集成,Getafix能够利用Infer找到的bug信息,进一步提高其修复bug的准确性和效率。

除了自动修复bug,Getafix还能为静态工具Infer提供解决方案。这使得Getafix不仅是一个独立的工具,还可以与其他工具集成,进一步提高软件开发过程中的自动化和智能化水平。

总的来说,Facebook的Getafix工具通过学习工程师的代码提交,使用强大的聚类算法来发现和修复bug。它不仅提高了修复bug的效率,而且使代码改动更易于理解。这种技术对于提高软件开发效率和软件质量具有重要意义,未来有望在更多领域得到广泛应用。