12

Ich habe gerade den Begriff "Programm Slicing" eingeführt. Es macht durchaus Sinn, dass man solche Funktionalität möchte, aber existiert sie irgendwo?Welche Programm Slicing Tools existieren tatsächlich?

Der Begriff ist jetzt 20 Jahre alt, und ich sehe, es gibt viele Publikationen, Forschungsarbeiten, etc. Aber wo sind die eigentlichen Werkzeuge? Setzen die Menschen dieses Konzept tatsächlich um oder studieren es nur akademisch?

Was gibt es, und für welche Sprachen?

Bearbeiten: Ich denke, was ich suche, was ich als Accepted Antwort belohnen würde, ist ein Verweis auf eine Veröffentlichung/Organisation/etc, die speziell auf Programm-Slicing ausgerichtet ist und eine Liste von Tools/Techniken/etc.

Antwort

8

[EDIT] (in reponse zu OP überarbeitet Frage)

Ich habe nach der Literatur für eine recht lange Zeit. Ich glaube nicht, dass es eine "Programmscheibe" gibt, die eine Liste der gewünschten Art hat. Die meisten der Programm-Schneidemaschinen, die gebaut wurden, waren eine Art Universitätsexperiment (dh sie arbeiteten nicht in der Produktion und sind nicht für praktische Zwecke verfügbar). Sie können sich darüber informieren, indem Sie auf scholar.google.com den Begriff "rate rate" ("Programm-Slicing") eingeben. Ich vermute, das weißt du schon. Die "Biggies", denke ich, hast du schon hier.

Diese Umfrage ist etwas alt, aber von einem stellaren Forscher gemacht: http://www.cse.buffalo.edu/LRG/CSE605/Papers/slicing-survey-tip.pdf. Dieser ist neuer: http://dl.acm.org/citation.cfm?id=1050865.

CodeSurfer ist ein kommerzielles Tool zum Ausführen von statischem Slicing in C-Programmen. Ich glaube, dass sie auch mit C++ umgehen. Ein wesentliches Plus, das bei anderen Tools nicht verfügbar ist, ist eine Benutzeroberfläche zum interaktiven Durchsuchen von Codeschnitten.

Indus ist Universitäts-Recherche-Tool für die statische Code-Slicing auf Java. Ich bin mir nicht sicher, ob das noch in der aktiven Entwicklung ist.

Es scheint eine Vielzahl von "dynamischen" Programm-Slicing-Tools für Java zu geben, die von Universitäten entwickelt wurden. Keiner von ihnen ist unter aktiver Entwicklung oder Verwendung, die ich kenne.

Meine Firma bietet das DMS Software Reengineering Toolkit, das allgemeine Maschinen für Programmsteuerung und Datenflussanalyse einschließlich der Erstellung von benutzerdefinierten statischen Code-Slicer enthält. DMS wurde zum Erstellen von Schichten großer C-Programme sowie für industrielle Prozesssteuerungsprogramme verwendet. (Ich würde einen Link bereitstellen, aber SO Leute scheinen es zu hassen, wenn ich es tue).

6

Die Frama-C platform, die für die Analyse von C-Code gewidmet ist, hat eine vollwertige interprocedural slicing plugin. Siehe zum Beispiel this page, wo ein Benutzer dieses Plugin verwendet, um ein Programm, das er analysierte, zu vereinfachen.

1

Werfen Sie einen Blick auf Wala für Java. WALA beinhaltet einen Slicer, basierend auf einer kontextsensitiven Tabellierung der Erreichbarkeit im Systemabhängigkeitsgraphen.

2

Bitte sehen Sie sich Giri an.

Dynamisches Programm Slicing ist eine Technik, die genau bestimmen kann, welche Anweisungen einen bestimmten Wert in einer einzigen Ausführung eines Programms beeinflusst. Giri implementiert dynamisches Rückwärts-Slicing im LLVM-Compiler.

Dieses Projekt wurde zuerst von Swarup Kumar Sahoo, John Criswell und Dr. Vikram S entwickelt.Adve von UIUC. Es wurde vom Google Summer of Code (GSoC) 2013 unter seinem Dachprojekt LLVM ausgewählt. Mingliang Liu von der Tsinghua Universität schloss sich im Juni 2013 an, um Giri zu verbessern. Es ist ein laufendes Projekt und Anfragen werden sehr geschätzt.