SlipCover: Near Zero-Overhead Code Coverage for Python
Juan Altmayer Pizzorno, Emery D. Berger
Abstract
Coverage analysis is widely used but can suffer from high overhead. This overhead is especially acute in the context of Python, which is already notoriously slow (a recent study observes a roughly 30× slowdown vs. native code). We find that the state-of-the-art coverage tool for Python, coverage.py, introduces a median overhead of 180% with the standard Python interpreter. Slowdowns are even more extreme when using PyPy, a JIT-compiled Python implementation, with coverage.py imposing a median overhead of 1,300%. This performance degradation reduces the utility of coverage analysis in most use cases, including testing and fuzzing, and precludes its use in deployment. This paper presents SlipCover, a novel, near-zero overhead coverage analyzer for Python. SlipCover works without modifications to either the Python interpreter or PyPy. It first processes a program's AST to accurately identify all branches and lines. SlipCover then dynamically rewrites Python bytecodes to add lightweight instrumentation to each identified branch and line. At run time, SlipCover periodically de-instruments already-covered lines and branches. The result is extremely low overheads-a median of just 5%-making SlipCover suitable for use in deployment. We show its efficiency can translate to significant increases in the speed of coverage-based clients. As a proof of concept, we integrate Slip-Cover into TPBT, a targeted property-based testing system, and observe a 22× speedup. CCS CONCEPTS • Software and its engineering → Software testing and debugging.
Ask about this paper
Your agent reads all of it.
Lune indexed this paper to the last equation, along with the top-tier papers that cite it. Ask a question and the answer quotes them.
Your agent calls
Luneget_paper_fulltext
Free to start. No credit card required.
Terminal
Install the CLIlune papers fulltext ec87d3d9-a37b-4a6b-b80d-0e511e89bdd9Cited by top-tier papers3
- CoverUp: Effective High Coverage Test Generation for PythonJuan Altmayer Pizzorno, Emery D. BergerFSE 2025 · 13 citations
- The Path Not Taken: Duality in Reasoning about Program ExecutionEshgin Hasanov, Md. Mahadi Hassan, Santu Karmaker, Aashish YadavallyACL 2026
- CRISPE: Semantic-Guided Execution Planning and Dynamic Reasoning for Enhancing Code Coverage PredictionHridya Dhulipala, Aashish Yadavally, Smit Soneshbhai Patel, Tien N. NguyenFSE 2025
Builds on2
- Full-Speed Fuzzing: Reducing Fuzzing Overhead through Coverage-Guided TracingStefan Nagy, Matthew HicksS&P 2019 · 156 citations
- Investigating Managed Language Runtime Performance: Why JavaScript and Python are 8x and 29x slower than C++, yet Java and Go can be Faster?David Lion, Adrian Chiu, Michael Stumm, Ding YuanUSENIX ATC 2022 · 31 citations
Related papers
- Pyriscope: Precise and Low-Overhead Python Control Flow Tracing via Sparse Hardware-Based EventsXinchen Yao, Wu Daiyou, Zhiqiang ZuoOOPSLA 2026
- RIFF: Reduced Instruction Footprint for Coverage-Guided FuzzingMingzhe Wang, Jie Liang, Chijin Zhou, Yu Jiang et al.USENIX ATC 2021 · 36 citations
- Zeror: Speed Up Fuzzing with Coverage-sensitive Tracing and SchedulingChijin Zhou, Mingzhe Wang, Jie Liang, Zhe Liu et al.ASE 2020 · 35 citations
- DynaPyt: a dynamic analysis framework for PythonAryaz Eghbali, Michael PradelFSE 2022 · 30 citations
- Odin: on-demand instrumentation with on-the-fly recompilationMingzhe Wang, Jie Liang, Chijin Zhou, Zhiyong Wu et al.PLDI 2022 · 19 citations
