Can Large Language Models Write Good Property-Based Tests?
Vasudev Vikram, Caroline Lemieux, Joshua Sunshine, Rohan Padhye
TL;DR
The paper tackles the challenge of adopting property-based testing by leveraging API documentation and large language models to automatically synthesize PBTs. It introduces Proptest-AI with single-stage and two-stage prompting strategies and an evaluation framework focusing on validity, soundness, and property coverage via property mutants. Empirical results across 40 Python API methods and three LLMs show that GPT-4 with two-stage prompting yields valid and sound PBTs on average in 2.4 samples, with about 20.5% property coverage. The work demonstrates a feasible direction for automating substantial portions of PBT authoring and provides a rigorous methodology for evaluating the quality of LLM-generated tests.
Abstract
Property-based testing (PBT), while an established technique in the software testing research community, is still relatively underused in real-world software. Pain points in writing property-based tests include implementing diverse random input generators and thinking of meaningful properties to test. Developers, however, are more amenable to writing documentation; plenty of library API documentation is available and can be used as natural language specifications for PBTs. As large language models (LLMs) have recently shown promise in a variety of coding tasks, we investigate using modern LLMs to automatically synthesize PBTs using two prompting techniques. A key challenge is to rigorously evaluate the LLM-synthesized PBTs. We propose a methodology to do so considering several properties of the generated tests: (1) validity, (2) soundness, and (3) property coverage, a novel metric that measures the ability of the PBT to detect property violations through generation of property mutants. In our evaluation on 40 Python library API methods across three models (GPT-4, Gemini-1.5-Pro, Claude-3-Opus), we find that with the best model and prompting approach, a valid and sound PBT can be synthesized in 2.4 samples on average. We additionally find that our metric for determining soundness of a PBT is aligned with human judgment of property assertions, achieving a precision of 100% and recall of 97%. Finally, we evaluate the property coverage of LLMs across all API methods and find that the best model (GPT-4) is able to automatically synthesize correct PBTs for 21% of properties extractable from API documentation.
