ชุดของวิธีการสำหรับการสลายตัวของซอร์สโค้ด
$ git clone [email protected]:acheshkov/program_slicing.git$ cd program_slicing$ git submodule update --recursive --init$ pip3 install ./program_slicingคุณควรเข้าถึงเครือข่ายทั่วโลกเพื่อใช้ PIP Python 3.9 ที่มีคอมไพเลอร์ C ที่สอดคล้องกันเป็นสิ่งจำเป็น เรียกใช้คอนโซล Python เพื่อตรวจสอบเวอร์ชันของคอมไพเลอร์ C
โครงการนี้สามารถใช้ผ่าน อินเตอร์เฟสบรรทัดคำสั่ง หรือสามารถรวมอยู่ในโครงการ Python อื่น ๆ เป็น submodule
ชิ้น
ใช้คำสั่งนี้หากคุณต้องการย่อยสลายไฟล์ต้นฉบับโดยการคำนวณอย่างสมบูรณ์ (Nikolaos Tsantalis และ Alexander Chatzigeorgiou. 2011. การระบุวิธีการแยกแยะวิธีการปรับเปลี่ยนโอกาสสำหรับการสลายตัวของวิธีการ)
$ python cli.py slice [-h]
[-o OUTPUT]
sourceข้อโต้แย้งตำแหน่ง:
แหล่งที่มา - โฟลเดอร์ต้นทางไฟล์หรือ URL
อาร์กิวเมนต์เสริม:
-O , - เอาต์พุตเอาต์พุต -ไฟล์เอาต์พุตหรือไดเรกทอรี: ขึ้นอยู่กับสิ่งที่คุณตั้งค่าเป็นเอาต์พุตคุณจะได้รับโฟลเดอร์ที่เต็มไปด้วยการสลายตัวของชิ้นหรือไฟล์เดียวด้วย ใช้ stdout หากไม่ได้ระบุ
-H , -HELP -แสดงข้อความช่วยเหลือและออกนี้
ตัวอย่าง:
$ 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 MyResultPathกราฟการพึ่งพาการควบคุม - โครงสร้างที่แสดงถึง กราฟการพึ่งพาการควบคุม (สืบทอดมาจาก NetworkX.Digraph ) ด้วยวิธีการที่สอดคล้องกัน
from program_slicing . graph . cdg import ControlDependenceGraphกราฟการไหลของการควบคุม - โครงสร้างที่แสดงถึง กราฟการควบคุมการไหล (สืบทอดมาจาก NetworkX.Digraph ) ด้วยวิธีการที่สอดคล้องกัน
from program_slicing . graph . cfg import ControlFlowGraphกราฟการพึ่งพาข้อมูล - โครงสร้างที่แสดงถึง กราฟการพึ่งพาข้อมูล (สืบทอดมาจาก NetworkX.Digraph ) ด้วยวิธีการที่สอดคล้องกัน
from program_slicing . graph . ddg import DataDependenceGraphกราฟการพึ่งพาโปรแกรม - โครงสร้างที่แสดงถึง กราฟการพึ่งพาโปรแกรม (สืบทอดมาจาก NetworkX.Digraph ) ด้วยวิธีการที่สอดคล้องกัน
from program_slicing . graph . pdg import ProgramDependenceGraphคำสั่ง - โครงสร้างที่แสดงถึง กราฟการพึ่งพาการควบคุม กราฟการพึ่งพาข้อมูล หรือโหนด กราฟการพึ่งพาโปรแกรม
from program_slicing . graph . statement import Statementคำแถลงการณ์ - โครงสร้างที่ระบุประเภท คำสั่ง
from program_slicing . graph . statement import StatementTypei = 0 , i += 1 , i++ , ฯลฯ ){} หรือร่างว่างใน if (...) a = 0 )if try , catch , switch )for และ while )break , continue , throw , return และยิ่ง else )บล็อกพื้นฐาน - โครงสร้างที่แสดงถึงโหนด กราฟการไหลของการควบคุม
from program_slicing . graph . basic_block import BasicBlockตัวจัดการกราฟโปรแกรม - โครงสร้างที่มีกราฟโปรแกรมประเภทต่าง ๆ (เช่น กราฟการไหลของการควบคุม หรือ กราฟการควบคุมการควบคุม ) ขึ้นอยู่กับซอร์สโค้ดเดียวกันและจัดเตรียมชุดของวิธีการสำหรับการวิเคราะห์
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 ))คุณสมบัติ:
start_point ของพวกเขาจากนั้นโดยการลดลงของ end_point ของพวกเขาBRANCH ที่ไม่ใช่ SCOPE สาขา LOOP FUNCTION หรือ คำ EXIT )SCOPE BRANCH LOOP หรือ FUNCTION ทั้งหมดวิธีการสาธารณะ:
FUNCTION ขั้นต่ำที่วาง คำสั่ง ที่กำหนดSCOPE , LOOP , BRANCH ) คำสั่ง ที่มี คำสั่ง ที่กำหนดVARIABLE ที่แสดงถึงตัวแปรที่เปลี่ยนแปลงในชุด คำสั่ง ที่กำหนดVARIABLE ที่แสดงถึงตัวแปรที่เกี่ยวข้อง (รวมถึงการใช้งาน) ในชุด คำสั่ง ที่กำหนดวิธีการเรียน:
Parse - ชุดของฟังก์ชั่นที่อนุญาตให้สร้างกราฟที่แตกต่างจากสตริงซอร์สโค้ดที่ระบุและข้อกำหนดภาษาการเขียนโปรแกรม
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 )แปลง - นอกจากนี้ยังมีตัวเลือกในการแปลงกราฟประเภทหนึ่งเป็นอื่น:
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 )