PYCG สร้างกราฟการโทรสำหรับรหัส Python โดยใช้การวิเคราะห์แบบคงที่ รองรับได้อย่างมีประสิทธิภาพ
คุณสามารถอ่านวิธีการเต็มรูปแบบรวมถึงการประเมินผลที่สมบูรณ์บนกระดาษ ICSE 2021
คุณสามารถอ้างอิง PYCG ดังนี้ Vitalis Salis, Thodoris Sotiropoulos, Panos Louridas, Diomidis spinellis และ Dimitris mitropoulos PYCG: การสร้างกราฟการโทรที่ใช้งานได้จริงใน Python ใน การประชุมนานาชาติครั้งที่ 43 เกี่ยวกับวิศวกรรมซอฟต์แวร์, ICSE '21 , 25–28 พฤษภาคม 2564
PYCG ถูกเก็บถาวร เนื่องจากความพร้อมใช้งานที่ จำกัด จึงไม่มีการวางแผนการพัฒนาเพิ่มเติม ยินดีที่จะช่วยเหลือทุกคนที่ต้องการสร้างส้อมเพื่อพัฒนาต่อไป
PYCG ถูกนำไปใช้ใน Python3 และต้องใช้ Python เวอร์ชัน 3.4 หรือสูงกว่า นอกจากนี้ยังไม่มีการพึ่งพา อย่างง่าย:
pip install pycg
~ >>> pycg -h
usage: __main__.py [-h] [--package PACKAGE] [--fasten] [--product PRODUCT]
[--forge FORGE] [--version VERSION] [--timestamp TIMESTAMP]
[--max-iter MAX_ITER] [--operation {call-graph,key-error}]
[--as-graph-output AS_GRAPH_OUTPUT] [-o OUTPUT]
[entry_point ...]
positional arguments:
entry_point Entry points to be processed
optional arguments:
-h, --help show this help message and exit
--package PACKAGE Package containing the code to be analyzed
--fasten Produce call graph using the FASTEN format
--product PRODUCT Package name
--forge FORGE Source the product was downloaded from
--version VERSION Version of the product
--timestamp TIMESTAMP
Timestamp of the package's version
--max-iter MAX_ITER Maximum number of iterations through source code. If not specified a fix-point iteration will be performed.
--operation {call-graph,key-error}
Operation to perform. Choose call-graph for call graph generation (default) or key-error for key error detection on dictionaries.
--as-graph-output AS_GRAPH_OUTPUT
Output for the assignment graph
-o OUTPUT, --output OUTPUT
Output path
อาร์กิวเมนต์บรรทัดคำสั่งต่อไปนี้ควรใช้เฉพาะเมื่อ --fasten ถูกพิสูจน์:
--product : ชื่อของแพ็คเกจ--forge : แหล่งที่มาของแพ็คเกจถูกดาวน์โหลดจาก--version : เวอร์ชันของแพ็คเกจ--timestamp : การประทับเวลาของเวอร์ชันของแพ็คเกจ ขอบการโทรอยู่ในรูปแบบของรายการ adjacency ที่ขอบ (src, dst) แสดงเป็นรายการของ dst ในรายการที่กำหนดให้กับคีย์ src :
{
"node1": ["node2", "node3"],
"node2": ["node3"],
"node3": []
}
สำหรับคำอธิบายที่ทันสมัยของรูปแบบ Fasten โปรดดูวิกิยึด
ขณะนี้เรากำลังทดลองเกี่ยวกับการระบุการเข้าถึงพจนานุกรมที่ไม่ถูกต้องที่อาจเกิดขึ้นในพจนานุกรม Python (ข้อผิดพลาดสำคัญ) รูปแบบเอาต์พุตสำหรับข้อผิดพลาดของคีย์คือรายการพจนานุกรมที่มี:
[{
"filename": "mod.py",
"lineno": 2,
"namespace": "mod.<dict1>",
"key": "key2"
},
{
"filename": "mod.py",
"lineno": 8,
"namespace": "mod.<dict1>",
"key": "nokey"
}]
จุดเริ่มต้นทั้งหมดเป็นที่รู้จักและเราต้องการรูปแบบ JSON ง่ายๆ
~ >>> pycg --package pkg_root pkg_root/module1.py pkg_root/subpackage/module2.py -o cg.json
จุดเข้าทั้งหมดไม่เป็นที่รู้จักและเราต้องการรูปแบบ JSON ง่ายๆ
~ >>> pycg --package django $(find django -type f -name "*.py") -o django.json
เราต้องการรูปแบบการยึด:
~ >>> pycg --package pypi_pkg --fasten --product "pypipkg" --forge "PyPI"
--version "0.1" --timestamp 42
pypi_pkg/module1.py pkg_root/subpackage/module2.py -o cg.json
จากไดเรกทอรีรากให้ติดตั้งแพ็คเกจจำลองก่อน:
pip3 install mock
τhenเพียงแค่เรียกใช้การทดสอบโดยดำเนินการ:
make test