Set metode untuk dekomposisi kode sumber.
$ git clone [email protected]:acheshkov/program_slicing.git$ cd program_slicing$ git submodule update --recursive --init$ pip3 install ./program_slicingAnda harus memiliki akses ke jaringan global untuk menggunakan PIP. Python 3.9 dengan kompiler C yang sesuai diperlukan. Jalankan Python Console untuk memeriksa versi C Compiler.
Proyek ini dapat digunakan melalui antarmuka baris perintah , atau dapat dimasukkan ke dalam proyek Python lainnya sebagai submodule.
mengiris
Gunakan perintah ini jika Anda ingin menguraikan file sumber dengan irisan komputasi lengkap (Nikolaos tsantalis dan Alexander ChatzigeoRgiou. 2011. Identifikasi metode refactoring metode ekstrak untuk dekomposisi metode).
$ python cli.py slice [-h]
[-o OUTPUT]
sourceArgumen Posisi:
Sumber - Folder Sumber, File atau URL
Argumen opsional:
-O , -Output Output -File atau direktori output: Bergantung pada apa yang Anda tetapkan sebagai output, Anda akan mendapatkan folder penuh dekomposisi irisan atau satu file dengannya. Itu menggunakan stdout jika tidak ditentukan
-h , --help -tunjukkan pesan bantuan ini dan keluar
Contoh:
$ 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 MyResultPathGrafik Ketergantungan Kontrol - Struktur yang mewakili grafik ketergantungan kontrol (diwarisi dari NetworkX.Digraph ) dengan metode yang sesuai.
from program_slicing . graph . cdg import ControlDependenceGraphGrafik Aliran Kontrol - Struktur yang mewakili grafik aliran kontrol (diwarisi dari Networkx.Digraph ) dengan metode yang sesuai.
from program_slicing . graph . cfg import ControlFlowGraphGrafik Ketergantungan Data - Struktur yang mewakili grafik ketergantungan data (diwarisi dari NetworkX.Digraph ) dengan metode yang sesuai.
from program_slicing . graph . ddg import DataDependenceGraphGrafik Ketergantungan Program - Struktur yang mewakili grafik ketergantungan program (diwarisi dari NetworkX.Digraph ) dengan metode yang sesuai.
from program_slicing . graph . pdg import ProgramDependenceGraphPernyataan - Struktur yang mewakili grafik ketergantungan kontrol , grafik ketergantungan data atau node grafik ketergantungan program .
from program_slicing . graph . statement import StatementPernyataan TYPET - Struktur yang menyebutkan jenis pernyataan .
from program_slicing . graph . statement import StatementTypei = 0 , i += 1 , i++ , dll).{} atau bodi kosong di if (...) a = 0 ).if , try , catch , switch ).for dan while ).break , continue , throw , return dan bahkan else ).Blok Dasar - Struktur yang mewakili node grafik aliran kontrol .
from program_slicing . graph . basic_block import BasicBlockProgram Graphs Manager - Struktur yang berisi berbagai jenis grafik program (seperti grafik aliran kontrol atau grafik ketergantungan kontrol ) berdasarkan kode sumber yang sama dan menyediakan serangkaian metode untuk analisisnya.
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 ))Properti:
start_point mereka, kemudian dengan mengurangi end_point mereka.SCOPE , BRANCH , LOOP , FUNCTION atau pernyataan EXIT ).SCOPE , BRANCH , LOOP atau pernyataan FUNCTION .Metode publik:
FUNCTION minimal di mana pernyataan yang diberikan ditempatkan.SCOPE , LOOP , BRANCH ) yang berisi pernyataan yang diberikan.VARIABLE yang mewakili variabel yang diubah dalam set pernyataan yang diberikan.VARIABLE yang mewakili variabel yang terlibat (termasuk penggunaan) dalam set pernyataan yang diberikan.Metode Kelas:
Parse - Set fungsi yang memungkinkan untuk membangun grafik yang berbeda dari string kode sumber yang ditentukan dan spesifikasi bahasa pemrograman.
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 )Konversi - Ada juga opsi untuk mengonversi satu jenis grafik ke yang lain:
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 )