Skip to main content

Picireny

Hierarchical Delta Debugging Framework

https://img.shields.io/pypi/v/picireny?logo=python&logoColor=white https://img.shields.io/pypi/l/picireny?logo=open-source-initiative&logoColor=white https://img.shields.io/github/workflow/status/renatahodovan/picireny/main/master?logo=github&logoColor=white https://img.shields.io/coveralls/github/renatahodovan/picireny/master?logo=coveralls&logoColor=white

Picireny is a Python implementation of the Hierarchical Delta Debugging (HDD in short) algorithm adapted to use ANTLR v4 for parsing both the input and the grammar(s) describing the format of the input. It relies on Picire to provide the implementation of the core Delta Debugging algorithm along with various tweaks like parallelization. Just like the Picire framework, Picireny can also be used either as a command line tool or as a library.

Both Hierarchical Delta Debugging and Delta Debugging automatically reduce “interesting” tests while keeping their “interesting” behaviour. (E.g., “interestingness” may mean failure-inducing input to a system-under-test.) However, HDD is an improvement that tries to investigate less test cases during the reduction process by making use of knowledge on the structure of the input.

The tool (and the algorithm) works iteratively in several ways. As a first step, it splits up the input into tokens and organizes them in a tree structure as defined by a grammar. Then, iteratively, it invokes Delta Debugging on each level of the tree from top to bottom, and DD is an iterative process itself, too. Finally, the nodes kept in the tree are “unparsed” to yield a reduced but still “interesting” output.

Requirements

  • Python >= 3.5

  • Java SE >= 7 JRE or JDK (the latter is optional, only needed if Java is used as the parser language)

Install

To use Picireny in another project, it can be added to setup.cfg as an install requirement (if using setuptools with declarative config):

[options]
install_requires =
    picireny

To install Picireny manually, e.g., into a virtual environment, use pip:

pip install picireny

The above approaches install the latest release of Picireny from PyPI. Alternatively, for the development version, clone the project and perform a local install:

pip install .

Usage

Picireny uses the same CLI as Picire and hence accepts the same options. On top of the inherited ones, Picireny accepts several further arguments:

  • --grammar (optional): List of grammars describing the input format. (You can write them by hand or simply download them from the ANTLR v4 grammars repository.)

  • --start (optional): Name of the start rule (optionally prefixed with a grammar name) as [grammarname:]rulename.

  • --replacements (optional): Json file containing rule names and minimal replacement strings (otherwise these are calculated automatically) (see schema).

  • --format (optional): Json file describing the input format (see schema and example). This descriptor can incorporate all the above (--grammar, --start and --replacements) properties, along with the possibility of island grammar definitions. If both --format and the aforementioned arguments are present, then the latter will override the appropriate values of the format file.

  • --antlr (optional): Path to the ANTLR tool jar.

  • --parser (optional): Language of the generated parser. Currently ‘python’ (default) and ‘java’ targets (faster, but needs JDK) are supported.

Note: although, all the arguments are optional, the grammar files and the start rule of the top-level parser must be defined with an arbitrary combination of the --format, --grammars, and --start arguments.

Example usage to reduce an HTML file:

picireny --input=<path/to/the/input.html> --test=<path/to/the/tester> \
         --grammar HTMLLexer.g4 HTMLParser.g4 --start htmlDocument \
         --parallel --subset-iterator=skip --complement-iterator=backward

Compatibility

Picireny was tested on:

  • Linux (Ubuntu 14.04 / 16.04 / 18.04 / 20.04)

  • OS X / macOS (10.11 / 10.12 / 10.13 / 10.14 / 10.15 / 11)

  • Windows (Server 2012 R2 / Server version 1809 / Windows 10)

Acknowledgement and Citations

Picireny is motivated by the idea of Hierarchical Delta Debugging:

  • Ghassan Misherghi and Zhendong Su. HDD: Hierarchical Delta Debugging. In Proceedings of the 28th International Conference on Software Engineering (ICSE ‘06), pages 142-151, Shanghai, China, May 2006. ACM. https://doi.org/10.1145/1134285.1134307

The details of the modernized re-implementation and further improvements are published in:

  • Renata Hodovan and Akos Kiss. Modernizing Hierarchical Delta Debugging. In Proceedings of the 7th International Workshop on Automating Test Case Design, Selection, and Evaluation (A-TEST 2016), pages 31-37, Seattle, Washington, USA, November 2016. ACM. https://doi.org/10.1145/2994291.2994296

  • Renata Hodovan, Akos Kiss, and Tibor Gyimothy. Tree Preprocessing and Test Outcome Caching for Efficient Hierarchical Delta Debugging. In Proceedings of the 12th IEEE/ACM International Workshop on Automation of Software Testing (AST 2017), pages 23-29, Buenos Aires, Argentina, May 2017. IEEE. https://doi.org/10.1109/AST.2017.4

  • Renata Hodovan, Akos Kiss, and Tibor Gyimothy. Coarse Hierarchical Delta Debugging. In Proceedings of the 33rd IEEE International Conference on Software Maintenance and Evolution (ICSME 2017), pages 194-203, Shanghai, China, September 2017. IEEE. https://doi.org/10.1109/ICSME.2017.26

  • Akos Kiss, Renata Hodovan, and Tibor Gyimothy. HDDr: A Recursive Variant of the Hierarchical Delta Debugging Algorithm. In Proceedings of the 9th ACM SIGSOFT International Workshop on Automating Test Case Design, Selection, and Evaluation (A-TEST 2018), pages 16-22, Lake Buena Vista, Florida, USA, November 2018. ACM. https://doi.org/10.1145/3278186.3278189

  • Daniel Vince, Renata Hodovan, Daniella Barsony, and Akos Kiss. Extending Hierarchical Delta Debugging with Hoisting. In Proceedings of the 2nd ACM/IEEE International Conference on Automation of Software Test (AST 2021), pages 60-69, Madrid, Spain (Virtual), May 2021. IEEE. https://doi.org/10.1109/AST52587.2021.00015

Metadata

Release files for picireny 21.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for picireny 21.8
File Size Uploaded Provenance
picireny-21.8.tar.gz 51.4 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for picireny 21.8
File Interpreter ABI Platform
picireny-21.8-py3-none-any.whl Python 3 none any Details

Total release size: 131.0 kB

Release files / picireny-21.8.tar.gz

Download URL picireny-21.8.tar.gz
Size 51.4 kB
Tags Source
SHA-256 checksum
How to use checksums
a20fd7502afef59325a142fe88ee61205a4decfb222b4b11a1e2952f3785db52
BLAKE2b-256 checksum
How to use checksums
9a0c794eaad4e90c86227c2a00900b70651d481ca4afeaa6c4b412de4393aec0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.6

Release files / picireny-21.8-py3-none-any.whl

Download URL picireny-21.8-py3-none-any.whl
Size 79.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2cb9da538f3e3b2f66e52ebb7fc3b6016ac8d49bff4f3f5d55ded2681e37e3cb
BLAKE2b-256 checksum
How to use checksums
6b7b3b1aea0157d3eefaf3ffe2e37b7ad54a6630ebc560ac747a6bf98a094764
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.2 importlib_metadata/4.6.4 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.6

Security for picireny 21.8

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page