Question

I've just been introduced to the term "program slicing." It makes perfect sense that one would want such functionality, but does it exist anywhere?

The term is 20 years old now, and I see there are lots of publications, research papers, etc. But where are the actual tools? Are people actually putting this concept into practice, or just studying it academically?

What's out there, and for what languages?

Edit: I guess what I'm looking for, what I'd reward as an Accepted answer, is a reference to some publication/organization/etc that's particularly geared towards program slicing and maintains a list of tools/techniques/etc.

Was it helpful?

Solution

[EDIT] (in reponse to OP revised question)

I've been following the literature for quite a long time. I don't think there's a "program slicing" central that has a list of the kind you want. Most of the program slicers that have been built were some kind of university experiment (means they didn't work in production and aren't available for practical purposes). You can find out about them by searching scholar.google.com with the term, guess what, "program slicing"; I suspect you already know this. The "biggies" I think you already have here.

This survey is bit old but done by a stellar researcher: http://www.cse.buffalo.edu/LRG/CSE605/Papers/slicing-survey-tip.pdf. This one is more recent: http://dl.acm.org/citation.cfm?id=1050865.

CodeSurfer is a commercial tool for performing static slicing on C programs. I believe they also handle C++. A significant plus not available with other tools is a UI for exploring code slices interactively.

Indus is University research tool for doing static code slicing on Java. I'm not sure if this is still under active development.

There seem to be a variety of "dynamic" program slicing tools for Java built by universities. None of them are under active development or use that I know about.

My company offers the DMS Software Reengineering Toolkit, which contains general machinery for program control and data flow analysis including building custom static code slicers. DMS has been used to build slices of large C programs as well as industrial process control programs. (I'd provide a link, but SO people seem to hate it when I do).

OTHER TIPS

The Frama-C platform, which is dedicated to the analysis of C code, has a full-fledged interprocedural slicing plugin. See for example this page, where an user uses this plugin to simplify a program he was analyzing.

Please have a look at Giri.

Dynamic program slicing is a technique that can precisely determine which instructions affected a particular value in a single execution of a program. Giri implements dynamic backwards slicing in LLVM compiler.

This project was first developed by Swarup Kumar Sahoo, John Criswell, and Dr. Vikram S. Adve from UIUC. It was selected by the Google Summer of Code (GSoC) 2013, under its umbrella project LLVM. Mingliang Liu from Tsinghua University joined to improve Giri in June, 2013. It's an ongoing project and pull requests are heavily appreciated.

Have a look at Wala for Java. WALA includes a slicer, based on context-sensitive tabulation of reachability in the system dependence graph.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top