Executing code is essential for various program analysis tasks, e.g., to
detect bugs that manifest through exceptions or to obtain execution traces for
further dynamic analysis. However, executing an arbitrary piece of code is
often difficult in practice, e.g., because of missing variable definitions,
missing user inputs, and missing third-party dependencies. This paper presents
LExecutor, a learning-guided approach for executing arbitrary code snippets in
an underconstrained way. The key idea is to let a neural model predict missing
values that otherwise would cause the program to get stuck, and to inject these
values into the execution. For example, LExecutor injects likely values for
otherwise undefined variables and likely return values of calls to otherwise
missing functions. We evaluate the approach on Python code from popular
open-source projects and on code snippets extracted from Stack Overflow. The
neural model predicts realistic values with an accuracy between 79.5% and
98.2%, allowing LExecutor to closely mimic real executions. As a result, the
approach successfully executes significantly more code than any available
technique, such as simply executing the code as-is. For example, executing the
open-source code snippets as-is covers only 4.1% of all lines, because the code
crashes early on, whereas LExecutor achieves a coverage of 51.6%.Comment: Accepted in research track of the ACM Joint European Software
Engineering Conference and Symposium on the Foundations of Software
Engineering (ESEC/FSE) 202