{"id":22306182,"url":"https://github.com/renatahodovan/picire","last_synced_at":"2025-09-05T08:09:43.499Z","repository":{"id":54882869,"uuid":"58747450","full_name":"renatahodovan/picire","owner":"renatahodovan","description":"Parallel Delta Debugging Framework","archived":false,"fork":false,"pushed_at":"2024-12-18T08:14:39.000Z","size":260,"stargazers_count":53,"open_issues_count":1,"forks_count":9,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-07-07T07:11:48.486Z","etag":null,"topics":["delta-debugging","hacktoberfest","test-automation","test-reduction"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/renatahodovan.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.rst","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-05-13T14:31:38.000Z","updated_at":"2025-06-26T00:00:42.000Z","dependencies_parsed_at":"2023-02-10T06:45:35.578Z","dependency_job_id":"275f2311-5ee7-406e-bc85-8c5dc21fb3b2","html_url":"https://github.com/renatahodovan/picire","commit_stats":{"total_commits":173,"total_committers":5,"mean_commits":34.6,"dds":"0.20231213872832365","last_synced_commit":"b738edcfd464e2565dd9943353f994a776b2ece3"},"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/renatahodovan/picire","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renatahodovan%2Fpicire","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renatahodovan%2Fpicire/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renatahodovan%2Fpicire/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renatahodovan%2Fpicire/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/renatahodovan","download_url":"https://codeload.github.com/renatahodovan/picire/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/renatahodovan%2Fpicire/sbom","scorecard":{"id":770679,"data":{"date":"2025-08-11","repo":{"name":"github.com/renatahodovan/picire","commit":"62ba44bc0a23adb5337668a4920bc543a4943811"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5,"checks":[{"name":"Code-Review","score":9,"reason":"Found 27/28 approved changesets -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/main.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/renatahodovan/picire/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/renatahodovan/picire/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/renatahodovan/picire/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/renatahodovan/picire/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/renatahodovan/picire/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/renatahodovan/picire/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/renatahodovan/picire/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/renatahodovan/picire/main.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/main.yml:60: update your workflow using https://app.stepsecurity.io/secureworkflow/renatahodovan/picire/main.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/main.yml:19","Warn: pipCommand not pinned by hash: .github/workflows/main.yml:31","Warn: pipCommand not pinned by hash: .github/workflows/main.yml:43","Warn: pipCommand not pinned by hash: .github/workflows/main.yml:59","Info:   0 out of   8 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   4 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE.rst:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/main.yml:48"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 29 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-23T02:11:19.809Z","repository_id":54882869,"created_at":"2025-08-23T02:11:19.809Z","updated_at":"2025-08-23T02:11:19.809Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273728151,"owners_count":25157136,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-05T02:00:09.113Z","response_time":402,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["delta-debugging","hacktoberfest","test-automation","test-reduction"],"created_at":"2024-12-03T19:14:52.398Z","updated_at":"2025-09-05T08:09:43.472Z","avatar_url":"https://github.com/renatahodovan.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"======\nPicire\n======\n*Parallel Delta Debugging Framework*\n\n.. image:: https://img.shields.io/pypi/v/picire?logo=python\u0026logoColor=white\n   :target: https://pypi.org/project/picire/\n.. image:: https://img.shields.io/pypi/l/picire?logo=open-source-initiative\u0026logoColor=white\n   :target: https://pypi.org/project/picire/\n.. image:: https://img.shields.io/github/actions/workflow/status/renatahodovan/picire/main.yml?branch=master\u0026logo=github\u0026logoColor=white\n   :target: https://github.com/renatahodovan/picire/actions\n.. image:: https://img.shields.io/coveralls/github/renatahodovan/picire/master?logo=coveralls\u0026logoColor=white\n   :target: https://coveralls.io/github/renatahodovan/picire\n\n\n*Picire* (pronounced as /pitsirE/) is a Python implementation of the\n`Delta Debugging`_ algorithm supporting parallelization and further\nconfiguration options. It can be used either as a command line tool\nor as a library.\n\nJust like the original algorithm, *Picire* automatically reduces \"interesting\"\ntests while keeping their \"interesting\" behaviour. A common use case is\nminimizing failing tests so that they still reproduce the original failure.\n\nThe tool (and the algorithm) works iteratively. As a first step, it splits up\nthe input into *n* chunks either by lines or characters. Then, iteratively,\nit inspects smaller test cases composed of these chunks whether they are still\ninteresting. The selection of chunks can happen two ways: either a small subset\nof the chunks is kept (subset-based reduce), or that small subset is removed\nand everything else is kept (complement-based reduce). If a new interesting\ntest case is found, it becomes the input of the next iteration. The iterations\nstop if removing any further chunks would make the test uninteresting (e.g. the\ntest is **1-minimal**).\n\n.. _`Delta Debugging`: https://www.st.cs.uni-saarland.de/dd/\n\n\nRequirements\n============\n\n* Python_ \u003e= 3.8\n\n.. _Python: https://www.python.org\n\n\nInstall\n=======\n\nTo use *Picire* in another project, it can be added to ``setup.cfg`` as an\ninstall requirement (if using setuptools_ with declarative config):\n\n.. code-block:: ini\n\n    [options]\n    install_requires =\n        picire\n\nTo install *Picire* manually, e.g., into a virtual environment, use pip_::\n\n    pip install picire\n\nThe above approaches install the latest release of *Picire* from PyPI_.\nAlternatively, for the development version, clone the project and perform a\nlocal install::\n\n    pip install .\n\n.. _setuptools: https://github.com/pypa/setuptools\n.. _pip: https://pip.pypa.io\n.. _PyPI: https://pypi.org/\n\n\nUsage\n=====\n\n*Picire* has two mandatory command line arguments: one that defines the input\ntest case to be reduced (``--input``) and another describing an executable\ntester script or program (``--test``) that can decide about the interestingness\nof an arbitrary input. This will be run in every iteration to check a test case.\n\nCommon settings\n---------------\n\n* ``--parallel``: Enables *Picire* to run in multiprocess mode. (Otherwise, the\n  original single-process variant will run.)\n\n* ``-j \u003cnum\u003e``: Defines the maximum number of parallel jobs.\n\n* ``--complement-first``: For some input types, subset-based reduce is not as\n  effective as the complement-based one (sometimes, aggressively removing too\n  big parts of the input eliminates the interestingness as well). By default,\n  *Picire* performs subset-based reduce before complement-based reduce, which\n  can result in many superfluous checks for such inputs. This flag forces to\n  start with complement checks.\n\n* ``--subset-iterator`` / ``--complement-iterator``: Guide the iteration\n  strategies of the subset and complement-based reduce loops.\n\n  * ``forward``: Start investigating subsets (or complements) from the beginning\n    of the input.\n\n  * ``backward``: Start investigating subsets (or complements) from the end of\n    the input. The goal is to reduce the number of semantic violations\n    (assuming that definitions - like variable declarations - appear before\n    uses).\n\n  * ``skip``: Completely avoids the subset or complement checks (mostly used\n    with ``--subset-iterator``).\n\nFor the detailed options, see ``picire --help``.\n\nTester script\n-------------\n\nThe tester script is expected to take one command line argument, the path of a\ntest case, and it has to exit with 0 if the test is interesting and with\nnon-zero otherwise. An example tester script that runs an arbitrary target\napplication and checks if it fails on an assertion might look like the one\nbelow::\n\n    #! /bin/bash\n    timeout --foreground 10 \u003cpath/to/the/target/application\u003e $1 2\u003e\u00261 | grep -q \"Assertion failed\";\n\n**Remarks:**\n\n* The ``\u003cpath/to/the/target/application\u003e`` should either be an absolute path to\n  the target application or the application should be on the search path (i.e.,\n  ``$PATH``).\n* ``$1`` is the single and mandatory command line argument containing the path\n  of a test case.\n* If the target application is not guaranteed to exit, then it's worth running\n  it with ``timeout`` to limit the amount of time waiting for producing the\n  expected behaviour.\n* If the target is run with timeout then the ``--foreground`` flag can also be\n  useful as it allows forwarding the ``KILL`` signals (used by the parallel\n  implementation) through the timeout's process group. This enables us to\n  stop all alive parallel processes when a new interesting configuration\n  is found already.\n* If the interestingness decision is based on the content of the output then\n  using ``grep`` (perhaps with ``-q`` or ``--quiet``) might be a right choice,\n  since it returns 0 if the pattern was found and 1 if not. Exactly the\n  return value *Picire* expects.\n\nA common form of *Picire*'s usage::\n\n    picire --input=\u003cpath/to/the/input\u003e --test=\u003cpath/to/the/tester\u003e \\\n           --parallel --subset-iterator=skip --complement-iterator=backward\n\n\nCompatibility\n=============\n\n*Picire* was tested on:\n\n* Linux (Ubuntu 14.04 / 16.04 / 18.04 / 20.04)\n* OS X / macOS (10.11 / 10.12 / 10.13 / 10.14 / 10.15 / 11)\n* Windows (Server 2012 R2 / Server version 1809 / Windows 10)\n\n\nAcknowledgement and Citations\n=============================\n\nThis software uses the delta debugging algorithm as described in:\n\n* Andreas Zeller. Yesterday, My Program Worked. Today, It Does Not. Why?\n  In Proceedings of the 7th European Software Engineering Conference Held\n  Jointly with the 7th ACM SIGSOFT Symposium on the Foundations of Software\n  Engineering (ESEC/FSE '99), volume 1687 of Lecture Notes in Computer Science\n  (LNCS), pages 253-267, Toulouse, France, September 1999. Springer.\n  https://doi.org/10.1007/3-540-48166-4_16\n* Ralf Hildebrandt and Andreas Zeller. Simplifying Failure-Inducing Input.\n  In Proceedings of the 2000 ACM SIGSOFT International Symposium on Software\n  Testing and Analysis (ISSTA '00), pages 135-145, Portland, Oregon, USA, August\n  2000. ACM.\n  https://doi.org/10.1145/347324.348938\n\nFurther improvements are described in:\n\n* Renata Hodovan and Akos Kiss. Practical Improvements to the Minimizing Delta\n  Debugging Algorithm.\n  In Proceedings of the 11th International Joint Conference on Software\n  Technologies (ICSOFT 2016) - Volume 1: ICSOFT-EA, pages 241-248, Lisbon,\n  Portugal, July 2016. SciTePress.\n  https://doi.org/10.5220/0005988602410248\n* Renata Hodovan, Akos Kiss, and Tibor Gyimothy. Tree Preprocessing and Test\n  Outcome Caching for Efficient Hierarchical Delta Debugging.\n  In Proceedings of the 12th IEEE/ACM International Workshop on Automation of\n  Software Testing (AST 2017), pages 23-29, Buenos Aires, Argentina, May 2017.\n  IEEE.\n  https://doi.org/10.1109/AST.2017.4\n* Akos Kiss. Generalizing the Split Factor of the Minimizing Delta Debugging\n  Algorithm.\n  IEEE Access, 8:219837-219846, December 2020. IEEE.\n  https://doi.org/10.1109/ACCESS.2020.3043027\n* Daniel Vince. Iterating the Minimizing Delta Debugging Algorithm.\n  In Proceedings of the 13th International Workshop on Automating Test Case\n  Design, Selection and Evaluation (A-TEST'22), pages 57-60, Singapore, November\n  2022. ACM.\n  https://doi.org/10.1145/3548659.3561314\n* Daniel Vince and Akos Kiss. Cache Optimizations for Test Case Reduction.\n  In Proceedings of the 22nd IEEE International Conference on Software Quality,\n  Reliability, and Security (QRS 2022), pages 442-453, Guangzhou, China,\n  December 2022. IEEE.\n  https://doi.org/10.1109/QRS57517.2022.00052\n\n\nCopyright and Licensing\n=======================\n\nLicensed under the BSD 3-Clause License_.\n\n.. _License: LICENSE.rst\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frenatahodovan%2Fpicire","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frenatahodovan%2Fpicire","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frenatahodovan%2Fpicire/lists"}