{ "info": { "author": "Renata Hodovan, Akos Kiss", "author_email": "hodovan@inf.u-szeged.hu, akiss@inf.u-szeged.hu", "bugtrack_url": null, "classifiers": [], "description": "======\nPicire\n======\n*Parallel Delta Debugging Framework*\n\n.. image:: https://badge.fury.io/py/picire.svg\n :target: https://badge.fury.io/py/picire\n.. image:: https://travis-ci.org/renatahodovan/picire.svg?branch=master\n :target: https://travis-ci.org/renatahodovan/picire\n.. image:: https://ci.appveyor.com/api/projects/status/my0fospjoyns9lm4/branch/master?svg=true\n :target: https://ci.appveyor.com/project/renatahodovan/picire/branch/master\n.. image:: https://coveralls.io/repos/github/renatahodovan/picire/badge.svg?branch=master\n :target: https://coveralls.io/github/renatahodovan/picire?branch=master\n\n\nPicire (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_ ~= 2.7 or >= 3.4\n* pip_ and setuptools Python packages (the latter is automatically installed by\n pip).\n\n.. _Python: https://www.python.org\n.. _pip: https://pip.pypa.io\n\n\nInstall\n=======\n\nThe quick way::\n\n pip install picire\n\nAlternatively, by cloning the project and running setuptools::\n\n python setup.py install\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 ``: Defines the maximum number of parallel jobs.\n\n* ``--combine-loops``: The base algorithm had a dependency between subset and\n complement-based reduce loops, but because of the sequential nature of its\n implementation, it had no effect on efficiency. However, in parallel mode,\n this separation becomes a potential sub-optimality. With this option, the\n two reduce loops run combined for additional performance. Further details\n about the algorithm variants are available in the cited papers.\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 $1 2>&1 | grep -q \"Assertion failed\";\n\n**Remarks:**\n\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= --test= \\\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)\n* Mac OS X (El Capitan 10.11 / Sierra 10.12 / High Sierra 10.13 / Mojave 10.14)\n* Windows (Server 2012 R2 / Windows 10)\n\n\nAcknowledgement and Citations\n=============================\n\nThis software uses the delta debugging algorithm as described in (A. Zeller:\n\"Yesterday, my program worked\", ESEC/FSE 1999) and (R. Hildebrandt, A. Zeller:\n\"Simplifying failure-inducing input\", ISSTA 2000).\n\nFurther improvements are described in (R. Hodovan, A. Kiss: \"Practical\nImprovements to the Minimizing Delta Debugging Algorithm\", ICSOFT-EA 2016)\nand (R. Hodovan, A. Kiss, T. Gyimothy: \"Tree Preprocessing and Test Outcome\nCaching for Efficient Hierarchical Delta Debugging\", AST 2017).\n\n\nCopyright and Licensing\n=======================\n\nLicensed under the BSD 3-Clause License_.\n\n.. _License: LICENSE.rst", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/renatahodovan/picire", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "picire", "package_url": "https://pypi.org/project/picire/", "platform": "", "project_url": "https://pypi.org/project/picire/", "project_urls": { "Homepage": "https://github.com/renatahodovan/picire" }, "release_url": "https://pypi.org/project/picire/19.3/", "requires_dist": null, "requires_python": "", "summary": "Picire Parallel Delta Debugging Framework", "version": "19.3" }, "last_serial": 4994641, "releases": { "16.5": [ { "comment_text": "", "digests": { "md5": "cba3e3edf0485af95abd6252580793b7", "sha256": "b78bc80c2bbdbebbe05944416245b8da326815e9b1019a239c2d9a4bac1bd2e3" }, "downloads": -1, "filename": "picire-16.5.tar.gz", "has_sig": false, "md5_digest": "cba3e3edf0485af95abd6252580793b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15788, "upload_time": "2016-05-13T15:42:30", "url": "https://files.pythonhosted.org/packages/77/3f/f70367410b1537de9b44e22894b0df61defba846dce8a569cd36886300b2/picire-16.5.tar.gz" } ], "16.7": [ { "comment_text": "", "digests": { "md5": "4c6fb7268384b49d46896d2cea4702d8", "sha256": "fc608c57336879f0d9f84412d93541beccb9b73f510034273df2f534a4abeee2" }, "downloads": -1, "filename": "picire-16.7.tar.gz", "has_sig": false, "md5_digest": "4c6fb7268384b49d46896d2cea4702d8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16549, "upload_time": "2016-07-18T01:02:37", "url": "https://files.pythonhosted.org/packages/ab/21/293ed764eb737f7a5a8a844dca4898da26fa9dac6545e2adf3401d617759/picire-16.7.tar.gz" } ], "17.1": [ { "comment_text": "", "digests": { "md5": "bcf41ad880c8b33127fd3d5a000f1160", "sha256": "366a83f5197fb03da74e6eb8e8298fe47b41e07fb68152f0ea3c4baadf12f8fc" }, "downloads": -1, "filename": "picire-17.1.tar.gz", "has_sig": false, "md5_digest": "bcf41ad880c8b33127fd3d5a000f1160", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17095, "upload_time": "2017-01-10T16:45:52", "url": "https://files.pythonhosted.org/packages/4c/52/25a9685e56db704189ba1b0ddc29a1d4f5ed726db362b867360614aa6a96/picire-17.1.tar.gz" } ], "17.10": [ { "comment_text": "", "digests": { "md5": "2060ca56190d420adabad72cfd3245eb", "sha256": "3df3d2874b40bb4b8b1b46bc97872146fe560ff64a25afecdc92527d4cb658ea" }, "downloads": -1, "filename": "picire-17.10.tar.gz", "has_sig": false, "md5_digest": "2060ca56190d420adabad72cfd3245eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18262, "upload_time": "2017-10-26T14:54:02", "url": "https://files.pythonhosted.org/packages/0a/8b/430481ab4b04aa9d7b09262ffc9144b03abe3e924e8c9f42a464ee76aee7/picire-17.10.tar.gz" } ], "17.6": [ { "comment_text": "", "digests": { "md5": "e799ee415887a54d25974978de18952c", "sha256": "0c49ab5854c02f11462c500709ffaac684ab8c1968dad8b099da6979860e3ad5" }, "downloads": -1, "filename": "picire-17.6.tar.gz", "has_sig": false, "md5_digest": "e799ee415887a54d25974978de18952c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17347, "upload_time": "2017-06-17T15:44:44", "url": "https://files.pythonhosted.org/packages/f0/77/1cfac9bcff5435a351ae6f6c4fe33ecebb0a14275b0043b538b90f33391b/picire-17.6.tar.gz" } ], "18.1": [ { "comment_text": "", "digests": { "md5": "5bc73029383cfac5fd3fcefc26c45040", "sha256": "5807565377599931dd1d1c464476a2dcda6c63ef391606edcfe1f8aee273d92a" }, "downloads": -1, "filename": "picire-18.1.tar.gz", "has_sig": false, "md5_digest": "5bc73029383cfac5fd3fcefc26c45040", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18826, "upload_time": "2018-01-04T18:56:32", "url": "https://files.pythonhosted.org/packages/2f/91/7dbf1166ca9e56e281537494157c2b66697d47d67f95edf3735d07494ca0/picire-18.1.tar.gz" } ], "18.10": [ { "comment_text": "", "digests": { "md5": "f0b6543ad70fc673e958273e4136e01b", "sha256": "9db20ff3360e6a5164bda4e7712a43ff3348257a0eaf4e9cb1f2b572c8af19d1" }, "downloads": -1, "filename": "picire-18.10.tar.gz", "has_sig": false, "md5_digest": "f0b6543ad70fc673e958273e4136e01b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19521, "upload_time": "2018-10-29T17:50:07", "url": "https://files.pythonhosted.org/packages/9b/fb/15c2107e0136fc2b7e8b3f31a8bc7e949f0d866c3329a3cf861e6754f77c/picire-18.10.tar.gz" } ], "19.3": [ { "comment_text": "", "digests": { "md5": "38e579a0addb0f13a2fd6bf5f8e38c7b", "sha256": "28a56afc22e6fcdc9101b0e78d8848dddcbd5d042e7655a6fac6693aa3ae870a" }, "downloads": -1, "filename": "picire-19.3.tar.gz", "has_sig": false, "md5_digest": "38e579a0addb0f13a2fd6bf5f8e38c7b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21544, "upload_time": "2019-03-27T20:19:23", "url": "https://files.pythonhosted.org/packages/ad/ce/4f5dfd092c7f9bbcb9dda7305081baa4679bbcad96ef301ce8be4525a5b3/picire-19.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "38e579a0addb0f13a2fd6bf5f8e38c7b", "sha256": "28a56afc22e6fcdc9101b0e78d8848dddcbd5d042e7655a6fac6693aa3ae870a" }, "downloads": -1, "filename": "picire-19.3.tar.gz", "has_sig": false, "md5_digest": "38e579a0addb0f13a2fd6bf5f8e38c7b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21544, "upload_time": "2019-03-27T20:19:23", "url": "https://files.pythonhosted.org/packages/ad/ce/4f5dfd092c7f9bbcb9dda7305081baa4679bbcad96ef301ce8be4525a5b3/picire-19.3.tar.gz" } ] }