PYCG генерирует графики вызовов для кода Python, используя статический анализ. Это эффективно поддерживает
Вы можете прочитать полную методологию, а также полную оценку на статье ICSE 2021.
Вы можете цитировать PYCG следующим образом. Vitalis Salis, Thodoris Sotiropoulos, Panos Louridas, Diomidis Spinellis и Dimitris Mitropoulos. PYCG: Практическое генерация графа вызовов в Python. На 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 .
--product : название пакета.--forge : Источник Пакет был загружен с.--version : версия пакета.--timestamp : TimeStamp версии пакета. Кренки вызовов находятся в форме списка смежности, где Edge (src, dst) представлен как запись dst в списке, назначенном ключе src :
{
"node1": ["node2", "node3"],
"node2": ["node3"],
"node3": []
}
Для актуального описания формата застежки относится к вики-застежке.
В настоящее время мы экспериментируем по выявлению потенциальных недопустимых доступа в словаря на словарях 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
Из корневого каталога сначала установите Mock Package:
pip3 install mock
Τhen, просто запустите тесты, выполнив:
make test