Ein Programm -Slicer für Java, basierend auf dem Systemabhängigkeitsgraphen (SDG). Programmschnitte ist eine Softwareanalysetechnik, um die Teilmenge von Aussagen zu extrahieren, die für den Wert einer Variablen in einer bestimmten Anweisung (das Slicing -Kriterium ) relevant sind. Die Untergruppe der Anweisungen wird als Scheibe bezeichnet und kann zum Debuggen, Parallelisierung, Klonerkennung usw. verwendet werden. Dieses Repository enthält zwei Module:
sdg-core , eine Bibliothek, die Slices aus dem Java-Quellcode über die SDG erhält, eine Datenstruktur, die Aussagen als Knoten und ihre Abhängigkeiten als Bögen darstellt.sdg-cli , ein Befehlszeilen-Client für sdg-core , das als Eingabe eines Java-Programms und des Slicing-Kriteriums eingibt und die entsprechende Slice ausgibt. WARNUNG: Alle Methodenaufrufe müssen auf eine Methodenerklärung gelöst werden. Wenn Ihr Java -Programm zusätzliche Bibliotheken benötigt, muss ihr Quellcode verfügbar sein und in die Analyse mit der Option -i enthalten sein. Jeder Methodenaufruf, der nicht behoben werden kann, führt zu einem Laufzeitfehler.
Javasdgslicer verwaltet seine Abhängigkeiten über Maven, sodass Sie die JDK (≥11) und Maven installieren und dann ausführen müssen
mvn package -Dmaven.test.skip
Ein fettes Glas, das alle Abhängigkeiten des Projekts enthält, kann sich dann unter ./sdg-cli/target/sdg-cli-{version}-jar-with-dependencies.jar <Version soli- <Versionen-jar-with-pendenzen.jar befinden.
Das Schnittkriterium kann mit der Flag -c {file}#{line}:{var} angegeben werden, wobei die Datei, die Zeile und die Variable angegeben werden können. Wenn die Variable in der angegebenen Zeile mehrfach erscheint, werden alle ausgewählt.
Wenn wir in Bezug auf die variable sum in Zeile 11 nach dem Programm schneiden möchten,
public class Example {
public static void main(String[] args) {
int sum = 0;
int prod = 0;
int i;
int n = 10;
for (i = 0; i < 10; i++) {
sum += 1;
prod += n;
}
System.out.println(sum);
System.out.println(prod);
}
}
Das Programm kann auf Example.java gespeichert werden, und der Slicer läuft mit:
java -jar sdg-cli.jar -c Example.java#11:sum
Eine detailliertere Beschreibung der verfügbaren Optionen ist mit:
java -jar sdg-cli.jar --help
Unser Slicer benötigt das Eingabe -Java -Programm, um kompiliert zu werden, sodass alle Bibliotheken mit dem Flag -i bereitgestellt werden müssen. In den Fällen, in denen der Quellcode nicht verfügbar ist, können Sie die erforderlichen Bibliotheken in den Java -Klassenpfad einbeziehen, indem Sie den folgenden Anruf verwenden:
java -cp your-libraries.jar -jar sdg-cli.jar -c Example.java#11:sum
Dieser Ansatz erzeugt Slices mit geringerer Qualität, da der Inhalt der Bibliotheksaufrufe unbekannt ist.
Ein gutes Beispiel für sdg-core , um einen Slice aus dem Quellcode zu erhalten, finden Sie unter Slicer.java#Slice (), wobei die folgenden Schritte durchgeführt werden:
CompilationUnit zu erstellen.SlicingCriterion erzeugt und das Schicht erhalten.CompilationUnit konvertiert (jeweils eine Datei).CompilationUnit wird in ihre entsprechende Datei abgeladen. Wenn das Diagramm von Interesse ist, kann es im dot oder PDF -Format über SDGLog#generateImages() ausgegeben werden, wie in PHPSLICE.Java#124 zu sehen ist (diese Klasse zeigt einen Frontend für einen unveröffentlichten Web -Java -Slicer).