DyPyBench: A Benchmark of Executable Python Software

Islem Bouzenia,Bajaj Piyush Krishan,Michael Pradel
DOI: https://doi.org/10.1145/3643742
2024-03-01
Abstract:Python has emerged as one of the most popular programming languages, extensively utilized in domains such as machine learning, data analysis, and web applications. Python's dynamic nature and extensive usage make it an attractive candidate for dynamic program analysis. However, unlike for other popular languages, there currently is no comprehensive benchmark suite of executable Python projects, which hinders the development of dynamic analyses. This work addresses this gap by presenting DyPyBench, the first benchmark of Python projects that is large scale, diverse, ready to run (i.e., with fully configured and prepared test suites), and ready to analyze (by integrating with the DynaPyt dynamic analysis framework). The benchmark encompasses 50 popular opensource projects from various application domains, with a total of 681k lines of Python code, and 30k test cases. DyPyBench enables various applications in testing and dynamic analysis, of which we explore three in this work: (i) Gathering dynamic call graphs and empirically comparing them to statically computed call graphs, which exposes and quantifies limitations of existing call graph construction techniques for Python. (ii) Using DyPyBench to build a training data set for LExecutor, a neural model that learns to predict values that otherwise would be missing at runtime. (iii) Using dynamically gathered execution traces to mine API usage specifications, which establishes a baseline for future work on specification mining for Python. We envision DyPyBench to provide a basis for other dynamic analyses and for studying the runtime behavior of Python code.
Software Engineering
What problem does this paper attempt to address?
The problem addressed in this paper is that there is currently a lack of comprehensive benchmark test suites for executable Python projects, which hinders the development and evaluation of dynamic analysis techniques. DyPyBench is a solution to this problem, and it is a pioneering large-scale, diverse, ready-to-use, and analyzable Python project benchmark. This benchmark includes 50 popular open-source projects from different application domains, totaling 681k lines of Python code and 30k test cases. DyPyBench enables various testing and dynamic analysis applications, such as: 1. Collecting dynamic call graphs and comparing them with statically computed call graphs, revealing the limitations of existing techniques for constructing Python call graphs. 2. Using DyPyBench to build a training dataset for LExecutor (a neural model) that predicts missing values at runtime. 3. Mining API usage patterns from collected execution traces to establish baselines for future Python specification mining efforts. Through these applications, DyPyBench aims to provide a foundation for other dynamic analyses and study the runtime behavior of Python code. The paper also describes how to select projects, prepare them for execution and analysis, and integrate with the DynaPyt dynamic analysis framework to simplify dynamic analysis of Python projects.