Ensemble de méthodes de décomposition du code source.
$ git clone [email protected]:acheshkov/program_slicing.git$ cd program_slicing$ git submodule update --recursive --init$ pip3 install ./program_slicingVous devriez avoir accès à Global Network pour utiliser PIP. Python 3.9 avec le compilateur C correspondant est requis. Exécutez la console Python pour vérifier la version du compilateur C.
Ce projet peut être utilisé via une interface de ligne de commande , ou il peut être inclus dans tout autre projet Python en tant que sous-module.
tranche
Utilisez cette commande si vous souhaitez décomposer les fichiers source par une tranche de calcul complète (Nikolaos Tsantalis et Alexander Chatzigeorgiou. 2011. Identification des opportunités de refactorisation de méthode d'extrait pour la décomposition des méthodes).
$ python cli.py slice [-h]
[-o OUTPUT]
sourceArguments de position:
Source - dossier source, fichier ou URL
Arguments facultatifs:
-O , - Output Output - Fichier de sortie ou répertoire: Selon ce que vous définissez en tant que sortie, vous obtiendrez un dossier plein de décompositions de tranche ou d'un seul fichier avec. Il utilise STDOUT s'il n'est pas spécifié
-H , --help - Montrez ce message d'aide et sortez
Exemples:
$ 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 MyResultPathGraphique de dépendance du contrôle - Structure qui représente le graphique de dépendance au contrôle (héréditaire de NetworkX.Digraph ) avec des méthodes correspondantes.
from program_slicing . graph . cdg import ControlDependenceGraphGraphique de flux de contrôle - Structure qui représente le graphique de flux de contrôle (hérité de NetworkX.Digraph ) avec des méthodes correspondantes.
from program_slicing . graph . cfg import ControlFlowGraphGraphique de dépendance des données - Structure qui représente le graphique de dépendance des données (hérité de Networkx.Digraph ) avec des méthodes correspondantes.
from program_slicing . graph . ddg import DataDependenceGraphGraphique de dépendance du programme - Structure qui représente le graphique de dépendance du programme (hérité de NetworkX.Digraph ) avec des méthodes correspondantes.
from program_slicing . graph . pdg import ProgramDependenceGraphInstruction - Structure qui représente le graphique de dépendance au contrôle , le graphique de dépendance des données ou les nœuds de graphe de dépendance du programme .
from program_slicing . graph . statement import StatementStateType - Structure qui énumère les types d'instructions .
from program_slicing . graph . statement import StatementTypei = 0 , i += 1 , i++ , etc.).{} ou le corps vide dans if (...) a = 0 ).if , try , catch , switch ).for et while ).break , continue , throw , return et même else ).Bloque de base - Structure qui représente les nœuds de graphe de flux de contrôle .
from program_slicing . graph . basic_block import BasicBlockProgram Graphs Manager - Structure qui contient différents types de graphiques de programme (tels que le graphique de flux de contrôle ou le graphique de dépendance au contrôle ) basé sur le même code source et fournit un ensemble de méthodes pour leur analyse.
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 ))Propriétés:
start_point , puis en diminuant leur end_point .SCOPE , BRANCH , LOOP , FUNCTION ou EXIT ).SCOPE , BRANCH , LOOP ou FUNCTION .Méthodes publiques:
FUNCTION minimale dans laquelle l' instruction donnée est placée.SCOPE , LOOP , BRANCH ) qui contient une instruction donnée.VARIABLE qui représentent les variables modifiées dans l'ensemble donné des instructions .VARIABLE qui représentent les variables impliquées (y compris l'utilisation) dans l'ensemble donné des instructions .Méthodes de classe:
Parse - Ensemble de fonctions qui permettent de créer différents graphiques de la chaîne de code source spécifiée et de la spécification du langage de programmation.
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 )Convertir - Il existe également une option pour convertir un type de graphique en un autre:
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 )