一句话:提出基于结构变异与强化学习的编译器缺陷隔离方法 RecBi,利用通过测试程序排序可疑文件。
编译器缺陷影响其上构建的所有软件,但诊断极难:编译一个触发缺陷的程序通常涉及数百个可疑编译器文件,且调试信息有限。本文提出基于结构变异的强化学习编译器缺陷隔离方法 RecBi:它用结构变异算子增强局部变异,将失败测试程序转化为通过测试程序,并用强化学习指导生成;再根据通过/失败程序的执行轨迹排序可疑文件。在 GCC 和 LLVM 的 120 个真实缺陷上,RecBi 可在 Top-1/Top-5/Top-10 内隔离约 23%/58%/78% 的缺陷,较当前最优方法提升 92.86%/55.56%/25.68%。
Compiler bugs can be disastrous since they could affect all the software systems built on the buggy compilers. Meanwhile, diagnosing compiler bugs is extremely challenging since usually limited debugging information is available and a large number of compiler files can be suspicious. More specifically, when compiling a given bug-triggering test program, hundreds of compiler files are usually involved, and can all be treated as suspicious buggy files. To facilitate compiler debugging, in this paper we propose the first reinforcement compiler bug isolation approach via structural mutation, called RecBi. For a given bug-triggering test program, RecBi first augments traditional local mutation operators with structural ones to transform it into a set of passing test programs. Since not all the passing test programs can help isolate compiler bugs effectively, RecBi further leverages reinforcement learning to intelligently guide the process of passing test program generation. Then, RecBi ranks all the suspicious files by analyzing the compiler execution traces of the generated passing test programs and the given failing test program following the practice of compiler bug isolation. The experimental results on 120 real bugs from two most popular C open-source compilers, i.e., GCC and LLVM, show that RecBi is able to isolate about 23%/58%/78% bugs within Top-1/Top-5/Top-10 compiler files, and significantly outperforms the state-of-the-art compiler bug isolation approach by improving 92.86%/55.56%/25.68% isolation effectiveness in terms of Top-1/Top-5/Top-10 results.
DOI 原文 ·
@inproceedings{paperbot5898,
title = {Enhanced compiler bug isolation via memoized search},
author = {Junjie Chen and Haoyang Ma and Lingming Zhang},
booktitle = {ASE},
year = {2020},
doi = {10.1145/3324884.3416570}
}