FANDANGO: Evolving Language-Based Testing
1.1K
FANDANGO is a language-based fuzzer that leverages formal input specifications (grammars) combined with constraints to generate diverse sets of valid inputs for programs under test. Unlike traditional symbolic constraint solvers, FANDANGO uses a search-based approach to systematically evolve a population of inputs through syntactically valid mutations until semantic input constraints are satisfied.
Modern language-based test generators often rely on symbolic constraint solvers to satisfy both syntactic and semantic input constraints. While precise, this approach can be slow and restricts the expressiveness of constraints due to the limitations of solver languages.
FANDANGO introduces a search-based alternative, using genetic algorithms to evolve inputs until they meet the specified constraints. This approach not only enhances efficiency—being one to three orders of magnitude faster in our experiments compared to leading tools like ISLa—but also allows for the use of the full Python language and libraries in defining constraints.
With FANDANGO, testers gain unprecedented flexibility in shaping test inputs and can state arbitrary goals for test generation. For example:
"Please produce 1,000 valid test inputs where the ⟨voltage⟩ field follows a Gaussian distribution but never exceeds 20 mV."
For the complete FANDANGO documentation, including tutorials, references, and advanced usage guides, visit the FANDANGO docs.
Here, you'll find the following sections:
FANDANGO has been submitted to ISSTA 2025. FANDANGO has been evaluated against ISLa, a state-of-the-art language-based fuzzer. The results show that FANDANGO is faster and more scalable than ISLa, while maintaining the same level of precision.
To reproduce the evaluation results from ISLa, please refer to their replication package, published in FSE 2022. To reproduce the evaluation results from FANDANGO, please download a development copy of the repository from the official GitHub Repository, execute: (from the root directory)
cd src/evaluation/evaluation &&
python run_evaluation.py
This script will execute FANDANGO on 5 subjects (CSV, reST, ScriptSizeC, TAR and XML). Each subject will be run for an hour, followed up by a computation on each grammar coverage (This process can take a while). The results will be printed in the terminal. Our evaluation showcases FANDANGO's search-based approach as a viable alternative to symbolic solvers, offering the following advantages:
Contributions are welcome! Please follow these steps:
git checkout -b feature-name.git commit -am 'Add new feature'.git push origin feature-name.Please ensure all tests pass and adhere to the coding style guidelines.
This project is licensed under the European Union Public Licence V. 1.2. See the LICENSE file for details.
Content type
Image
Digest
sha256:88cc81e15…
Size
58.6 MB
Last updated
8 days ago
docker pull joszamama/fandango-fuzzer