Satz von Methoden zur Quellcode -Zerlegung.
$ git clone [email protected]:acheshkov/program_slicing.git$ cd program_slicing$ git submodule update --recursive --init$ pip3 install ./program_slicingSie sollten Zugriff auf globales Netzwerk haben, um PIP zu verwenden. Python 3.9 mit entsprechendem C -Compiler ist erforderlich. Führen Sie die Python -Konsole aus, um die Version des C -Compilers zu überprüfen.
Dieses Projekt kann über die Befehlszeilenschnittstelle verwendet werden oder in jedem anderen Python -Projekt als Submodul aufgenommen werden.
Scheibe
Verwenden Sie diesen Befehl, wenn Sie Quelldateien durch vollständige Berechnungsscheibe zerlegen möchten (Nikolaos Tsantalis und Alexander Chatzigeorgiou. 2011. Identifizierung der Extraktmethoden -Refactoring -Möglichkeiten zur Zerlegung von Methoden).
$ python cli.py slice [-h]
[-o OUTPUT]
sourcePositionsargumente:
Quelle - Quellordner, Datei oder URL
Optionale Argumente:
-O , -Ausgabeausgabe -Ausgabedatei oder Verzeichnis: Abhängig von dem, was Sie als Ausgabe festlegen, erhalten Sie den Ordner voller Schnittabschlüsse oder einer einzelnen Datei damit. Es verwendet Stdout, wenn nicht angegeben
-h , -HELP -Zeigen Sie diese Hilfebotschaft und beenden Sie aus
Beispiele:
$ python cli.py slice MyProjectPath$ python cli.py slice MyFile.java$ python cli.py slice MyProjectPath --output MyResultPath$ python cli.py slice MyFile.java --output MyResultPathKontrollabhängigkeitsgraphen - Struktur, die Kontrollabhängigkeitsgraphen (von networkx.digraph geerbt) mit entsprechenden Methoden darstellt.
from program_slicing . graph . cdg import ControlDependenceGraphKontrollflussdiagramm - Struktur, die den Kontrollflussdiagramm (von networkx.digraph geerbt) mit entsprechenden Methoden darstellt.
from program_slicing . graph . cfg import ControlFlowGraphDatenabhängigkeitsgraphen - Struktur, die Datenabhängigkeitsgraphen (von networkx.digraph geerbt) mit entsprechenden Methoden darstellt.
from program_slicing . graph . ddg import DataDependenceGraphProgrammabhängigkeitsgrafik - Struktur, die Programmabhängigkeitsgraphen (von networkx.digraph geerbt) mit entsprechenden Methoden darstellen.
from program_slicing . graph . pdg import ProgramDependenceGraphAnweisung - Struktur, die Kontrollabhängigkeitsgrafik , Datenabhängigkeitsgrafik oder Programmabhängigkeitsgraden darstellt.
from program_slicing . graph . statement import StatementAnweisungType - Struktur, die Anweisungstypen aufzählt.
from program_slicing . graph . statement import StatementTypei = 0 , i += 1 , i++ usw.).{} oder leerer Körper in if (...) a = 0 ).if , try , catch , switch ).for und while ).break , continue , throw , return und noch else ).Basic Block - Struktur, die Kontrollflussgraphen darstellen.
from program_slicing . graph . basic_block import BasicBlockProgrammdiagramm -Manager - Struktur, die verschiedene Arten von Programmdiagramme (z. B. Steuerungsgrafik- oder Kontrollabhängigkeitsgraphen ) basierend auf demselben Quellcode enthält und eine Reihe von Methoden für ihre Analyse liefert.
from program_slicing . graph . parse import Lang
from program_slicing . graph . parse import control_dependence_graph
from program_slicing . graph . parse import control_flow_graph
from program_slicing . graph . manager import ProgramGraphsManager
manager_by_source = ProgramGraphsManager ( source_code , Lang . JAVA )
manager_by_cdg = ProgramGraphsManager . from_control_dependence_graph ( control_dependence_graph ( source_code , Lang . JAVA ))
manager_by_cfg = ProgramGraphsManager . from_control_flow_graph ( control_flow_graph ( source_code , Lang . JAVA ))Eigenschaften:
start_point erhöht wird und dann durch Verringerung ihres end_point abnimmt.SCOPE , BRANCH , LOOP , FUNCTION oder EXIT enthalten sind).SCOPE , BRANCH , LOOP oder die Funktionsanweisungen FUNCTION .Öffentliche Methoden:
FUNCTION zurück , in der die angegebene Anweisung platziert wird.SCOPE , LOOP , BRANCH ) zurück, die eine bestimmte Anweisung enthält.VARIABLE , die in der angegebenen Aussage geändert werden.VARIABLE , die die beteiligten Variablen (einschließlich der Verwendung) in der angegebenen Aussage darstellen.Klassenmethoden:
Analyse - Satz von Funktionen, mit denen verschiedene Diagramme aus der angegebenen Spezifikation für Quellcode -Zeichenfolge und Programmiersprache erstellt werden können.
from program_slicing . graph . cdg import ControlDependenceGraph
from program_slicing . graph . parse import control_dependence_graph , Lang
cdg : ControlDependenceGraph = control_dependence_graph ( source_code , Lang . JAVA ) from program_slicing . graph . cfg import ControlFlowGraph
from program_slicing . graph . parse import control_flow_graph , Lang
cfg : ControlFlowGraph = control_flow_graph ( source_code , Lang . JAVA ) from program_slicing . graph . ddg import DataDependenceGraph
from program_slicing . graph . parse import data_dependence_graph , Lang
ddg : DataDependenceGraph = data_dependence_graph ( source_code , Lang . JAVA ) from program_slicing . graph . pdg import ProgramDependenceGraph
from program_slicing . graph . parse import program_dependence_graph , Lang
pdg : ProgramDependenceGraph = program_dependence_graph ( source_code , Lang . JAVA ) from tree_sitter import Tree
from program_slicing . graph . parse import tree_sitter_ast , Lang
ast : Tree = tree_sitter_ast ( source_code , Lang . JAVA )Convert - Es gibt auch eine Option, um einen Diagertyp in einen anderen umzuwandeln:
from program_slicing . graph import convert
from program_slicing . graph . cdg import ControlDependenceGraph
from program_slicing . graph . cfg import ControlFlowGraph
cdg : ControlDependenceGraph = ControlDependenceGraph ()
cfg : ControlFlowGraph = convert . cdg . to_cfg ( cdg )
new_cdg : ControlDependenceGraph = convert . cfg . to_cdg ( cfg )