{"id":18609583,"url":"https://github.com/secure-software-engineering/spllift","last_synced_at":"2025-04-10T22:31:32.499Z","repository":{"id":5495585,"uuid":"6694183","full_name":"secure-software-engineering/SPLlift","owner":"secure-software-engineering","description":null,"archived":false,"fork":false,"pushed_at":"2015-06-01T13:58:30.000Z","size":40038,"stargazers_count":14,"open_issues_count":1,"forks_count":3,"subscribers_count":16,"default_branch":"develop","last_synced_at":"2025-03-25T05:41:35.440Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/secure-software-engineering.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2012-11-14T20:13:53.000Z","updated_at":"2023-04-15T14:43:39.000Z","dependencies_parsed_at":"2022-09-02T12:10:37.305Z","dependency_job_id":null,"html_url":"https://github.com/secure-software-engineering/SPLlift","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/secure-software-engineering%2FSPLlift","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/secure-software-engineering%2FSPLlift/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/secure-software-engineering%2FSPLlift/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/secure-software-engineering%2FSPLlift/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/secure-software-engineering","download_url":"https://codeload.github.com/secure-software-engineering/SPLlift/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248309660,"owners_count":21082254,"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","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":[],"created_at":"2024-11-07T03:06:31.127Z","updated_at":"2025-04-10T22:31:27.487Z","avatar_url":"https://github.com/secure-software-engineering.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Logo](website/spllift-logo.png)\n\n\u003ca href=\"website/spllift-poster.pdf\"\u003e\u003cimg src=\"website/spllift-poster.png\" align=right\u003e\u003c/a\u003e\nSPLlift\n=====================\nSPLlift is an approach that lets you automatically reuse inter-procedural static data-flow analyses implemented in the IFDS framework also for entire Software Product Lines (SPLs). If, for normal programs, the analysis reports that a piece of analysis information may or may not hold at a given statement, the SPL-version reports a Boolean constraint telling you under which feature combinations this fact could hold at that statement. This all can be done without having to change a single line of code on the side of the client analysis.\n\nFor example, assume a taint analysis that reports cases in which the return value of `password()` flows into `print(..)`. For the following product line, SPLlift would report that such a case can occur if and only if `F` and `H` are disabled and `G` is enabled:\n\n![Screenshot of CIDE](website/screenshot.png \"Screenshot of CIDE\")\n\nWho are the developers of SPLlift?\n----------------------------------\nSPLlift is a joint development of Eric Bodden Claus Brabrand, Tarsis Toledo, Marcio Ribeiro, Paulo Borba and Mira Mezini. It is currently maintained by [Eric Bodden][5].\n\nWhy is SPLlift called SPLlift?\n------------------------------\nIt is called SPLlift because it allows existing analyses that are designed for \"normal Java programs\" to be lifted to analyses that operate on entire software product lines.\n\nAre there any publications on SPLlift?\n--------------------------------------\nYes, there are:\n\n[SPLlift – Statically Analyzing Software Product Lines in Minutes Instead of Years][9] (Eric Bodden, Mira Mezini, Claus Brabrand, Társis Tolêdo, Márcio Ribeiro, Paulo Borba), In ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI 2013), 2013.\n\n[Transparent and Efficient Reuse of IFDS-based Static Program Analyses for Software Product Lines][4] (Eric Bodden, Társis Tolêdo, Márcio Ribeiro, Claus Brabrand, Paulo Borba, Mira Mezini), Technical report TUD-CS-2012-0239, EC SPRIDE, Technische Universität Darmstadt, 2012.\n\nThere is also a \u003ca href=\"website/spllift-poster.pdf\"\u003eposter on SPLlift available for download\u003c/a\u003e.\n\nWhat is IFDS/IDE?\n-----------------\n[IFDS][1] is a general framework for solving inter-procedural, finite, distributive subset problems in a flow-sensitive, fully context-sensitive manner. From a user's perspective, IFDS allows static program analysis in a template-driven manner. Users simply define flow functions for an analysis problem but don't need to worry about solving the analysis problem. The latter is automatically taken care of by the solver, in this case by [Heros][3].\n[IDE][2] is an extension of IFDS that allows more expressive computations. Heros implements an IDE solver and supports IFDS problems as special cases of IDE. SPLlift replaces this \"adapter\" by a more expressive one that automatically tracks feature constraints as shown in this figure:\n\n![SPLLift schema](website/spllift-schema.png \"SPLLift schema\")\n\nHow can I contribute to SPLlift?\n--------------------------------\nContributions are more than welcome! It is easiest to fork the project on Github. Then make your modifications on the fork and send us a pull request. This will allow us easy re-integration.\n\n[1]: http://dx.doi.org/10.1145/199448.199462\n[2]: http://dx.doi.org/10.1016/0304-3975(96)00072-2\n[3]: https://github.com/Sable/heros/\n[4]: http://www.bodden.de/pubs/btr+12transparent.pdf\n[5]: http://www.bodden.de/\n\nWhich dependencies does SPLlift have?\n-------------------------------------\nSPLlift is based on [Heros][3], [Soot][6], [CIDE][7] and [JavaBDD][8]. Thanks to the developers of those tools for making them available!\n\nHow do I build and run SPLlift?\n-------------------------------\nIssue the following commands to clone the repositories of SPLlift and its dependencies:\n\u003cpre\u003e\ngit clone https://github.com/Sable/heros.git\ngit clone https://github.com/Sable/soot.git\ngit clone https://github.com/Sable/jasmin.git\ngit clone https://github.com/secure-software-engineering/SPLlift.git\n\u003c/pre\u003e\nThis should give you four folders (i.e., four local git repositories) with \"develop\" branches checked out for each repository.\n\nSecond, install [CIDE][7] in your Eclipse IDE by using the following update site:\n\u003cpre\u003e\nhttp://wwwiti.cs.uni-magdeburg.de/iti_db/research/cide/update/\n\u003c/pre\u003e\n\nOpen eclipse and (we use version 3.7.1) import all projects from the above four folders into your workspace. The projects should build right out of the box. You can test SPLlift through an eclipse run configuration.\n\nDo you have questions? Please let us know!\n\n[1]: http://dx.doi.org/10.1145/199448.199462\n[2]: http://dx.doi.org/10.1016/0304-3975(96)00072-2\n[3]: https://github.com/Sable/heros/\n[4]: http://www.bodden.de/pubs/btr+12transparent.pdf\n[5]: http://www.bodden.de/\n[6]: https://github.com/Sable/soot\n[7]: http://wwwiti.cs.uni-magdeburg.de/iti_db/research/cide/\n[8]: http://javabdd.sourceforge.net/\n[9]: http://www.bodden.de/pubs/bmb+13spllift.pdf\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsecure-software-engineering%2Fspllift","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsecure-software-engineering%2Fspllift","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsecure-software-engineering%2Fspllift/lists"}