今天给大家推荐的是软工会议ICSE 2020的一篇关于JAVA程序漏洞自动修补的综述。
论文名:On the Efficiency of Test Suite based Program Repair–A Systematic Assessment of 16 Automated Repair Systems for Java Programs
Test-based 的程序漏洞自动修补是过去十年软工研究的热点。虽然最近的文献解决了一些benchmark的bug,但是一些研究认为目前先进的研究仍然还有局限性。比如:
- 生成的补丁的正确性存在问题。
- 评价方案可能会对错误定位结果的处理产生误导。
然而,目前没有工作去解决补丁生成效率,以及修补程序的可行性。
所以,这篇文章就去评估基于test suite的程序修补系统的效率来回答这个问题。
最后作者得到了三个结论:
- 许多生成的不相关的补丁是由于改变了错误代码的位置导致的
- 如果追踪搜索空间的话,会发现fault localization对于补丁生成的效率影响很小
- template-based的自动修补系统,虽然大家都认为是最高效地修补大量bug的方法,但实际是效率最低的,因为会生成最多的不相关的补丁候选
作者选取的Automated Program Repair(APR)系统如下表所示:
通常的代码修补过程:
作者评估主要回答这三个问题:
- Repairability across time:how many bugs can be fixed by test suite based repair approaches?(能修补多少bug?)
- Patch generation efficiency:how many patch candidates are generated and checked before fixing a given bug?(能生成多少候选补丁?)
- Fault Localization noise impact on efficiency:whether some repair strategies are more or less resilient to repair attempts on wrong code locations?(修补策略和错误代码位置的关系)
第一个问题的结果:
第二个问题的结果:
第三个问题的结果:
总结:现在综述的写法都有做一些评估性质的实验。这是第一次看漏洞自动修补相关的论文,原来这个领域发展的还是比漏洞自动利用(AEG)要快一点,都有比较多成熟的指标和benchmark来测试系统的优劣了。以后写综述,或许可以参照这类文章的写法来。另外,对于要从事漏洞自动修补(APR)的研究的话,也可以从这篇文章开始,了解有哪些工作,有哪些benchmark。还可以从这篇文章的Related Work部分找到一些相关综述来看看。