تقوم PYCG بإنشاء الرسوم البيانية للمكالمات لرمز Python باستخدام تحليل ثابت. يدعم بكفاءة
يمكنك قراءة المنهجية الكاملة بالإضافة إلى تقييم كامل على ورقة ICSE 2021.
يمكنك الاستشهاد PYCG على النحو التالي. Vitalis Salis ، Thodoris Sotiropoulos ، Panos Louridas ، Diomidis Spinellis و Dimitris Mitropoulos. PYCG: توليد الرسم البياني للمكالمات العملية في بيثون. في المؤتمر الدولي 43 حول هندسة البرمجيات ، ICSE '21 ، 25-28 مايو 2021.
تم أرشفة 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 : Fasten:
--product : اسم الحزمة.--forge : مصدر تم تنزيل الحزمة من.--version : نسخة الحزمة.--timestamp : الطابع الزمني لإصدار الحزمة. حواف المكالمات في شكل قائمة متاخمة حيث يتم تمثيل الحافة (src, dst) كإدخال dst في القائمة المعينة للمفتاح src :
{
"node1": ["node2", "node3"],
"node2": ["node3"],
"node3": []
}
للحصول على وصف محدث لتنسيق التثبيت ، ارجع إلى Wiki المسبق.
نقوم حاليًا بتجربة تحديد الوصول المحتملة للقسام غير الصالح على قواميس 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