Static Automated Program Repair for Heap Properties

Static Automated Program Repair for Heap Properties
复制标题

DOI:
10.1145/3180155.3180250
复制
发表时间:
2018-05
期刊:
2018 IEEE/ACM 40th International Conference on Software Engineering (ICSE)
影响因子:
--
通讯作者:
R. V. Tonder;Claire Le Goues
R. V. Tonder;Claire Le Goues
中科院分区:
其他
文献类型:
--
作者:
R. V. Tonder;Claire Le Goues

文献摘要

被引文献

相似文献

静态分析工具证明了在现实世界代码中查找错误的有效性。此类工具越来越广泛地采用以提高实践中的软件质量。自动化程序维修(APR)有可能进一步降低改善软件质量的成本。但是,这些有效的发现工具与APR之间存在断开连接。 APR的最新进展依赖于测试用例,使其不适用于新发现的错误或难以确定测试的错误(例如内存泄漏)。此外,为满足测试套件而产生的补丁质量是一个关键挑战。我们通过调整实用静态分析和验证技术的进步来解决这些挑战,以实现一种新技术,然后在没有测试案例的情况下准确修复实际错误。我们使用分离逻辑提出了一种新的自动化程序维修技术。在高水平上,我们的技术原因是对现有程序片段的语义效果的原因,以修复与一般指针安全属性相关的故障:资源泄漏,内存泄漏和无效递减。该过程自动将确定的片段转化为源级贴片,并验证有关报告的故障的贴剂正确性。在这项工作中,我们对迄今为止在现实世界代码中自动修复未发现的错误的最大研究。我们通过正确修复了55个错误,包括11个现实世界项目中的11个错误,包括11个未发现的错误来证明我们的方法。
Static analysis tools have demonstrated effectiveness at finding bugs in real world code. Such tools are increasingly widely adopted to improve software quality in practice. Automated Program Repair (APR) has the potential to further cut down on the cost of improving software quality. However, there is a disconnect between these effective bug-finding tools and APR. Recent advances in APR rely on test cases, making them inapplicable to newly discovered bugs or bugs difficult to test for deterministically (like memory leaks). Additionally, the quality of patches generated to satisfy a test suite is a key challenge. We address these challenges by adapting advances in practical static analysis and verification techniques to enable a new technique that finds and then accurately fixes real bugs without test cases. We present a new automated program repair technique using Separation Logic. At a high-level, our technique reasons over semantic effects of existing program fragments to fix faults related to general pointer safety properties: resource leaks, memory leaks, and null dereferences. The procedure automatically translates identified fragments into source-level patches, and verifies patch correctness with respect to reported faults. In this work we conduct the largest study of automatically fixing undiscovered bugs in real-world code to date. We demonstrate our approach by correctly fixing 55 bugs, including 11 previously undiscovered bugs, in 11 real-world projects.