Faceboook创建了一个可以自动修复bug的工具
最近Facebook的工程师们撰写了一份文档,解释了他们如何编写了一个可以自动修复bug的工具。在这篇论文中,他们介绍了𝗦𝗔𝗣𝗙𝗜𝗫,这是一个自动检测和修复软件bug的工具。该工具对Facebook App Family中的六个重要安卓应用程序提供了修复建议,这些应用程序包括Facebook、Messenger、Instagram、FBLite、Workplace和Workchat。
工作原理
步骤1:检测崩溃 - 另一个名为𝗦𝗮𝗽𝗶𝗲𝗻𝘇的工具用于查找应用程序崩溃情况。当Sapienz识别出崩溃时,它会被记录到数据库中。
步骤2:确定问题 - SAPFIX可以准确定位导致问题的代码行。它首先检查崩溃是否可重现。如果不可重现,崩溃将被丢弃。它使用一种称为”基于频谱的错误定位”的技术来确定最可能导致崩溃的代码行。
步骤3:提供修复建议 - 使用预定义的模板或代码变异,SAPFIX提出了一个解决方案。在确定故障位置后,SAPFIX尝试生成一个补丁。它采用了以下两种策略:
- 基于模板的修复 - SAPFIX使用预定义的模板为常见bug提供修复建议。这些模板是根据标准开发者实践设计的。
- 基于变异的修复 - 如果基于模板的方法失败,SAPFIX将采用基于变异的系统。它会对故障位置应用一系列代码变异,生成潜在的修复方案。
步骤4:测试修复 - 提议的解决方案会经过测试以确保其有效性。它使用𝗦𝗮𝗽𝗶𝗲𝗻𝘇的测试用例来检查补丁的有效性。如果补丁通过所有测试,则被视为有效的修复方案。在补丁验证完成后,SAPFIX使用𝗜𝗻𝗳𝗲𝗿(一种静态分析工具)对提议的修复方案进行进一步分析。Infer会检查补丁是否引入了任何新的潜在问题。
步骤5:审查 - 开发人员拥有最终决定权,对修复方案进行审查和批准。