У меня большой исходный репозиторий, разбитый на несколько проектов. Я хотел бы подготовить отчет о состоянии исходного кода с указанием проблемных областей, которые необходимо решить.
В частности, я хотел бы вызвать подпрограммы с высокой цикломатической сложностью, выявить повторение и, возможно, запустить некоторый статический анализ, похожий на линт, чтобы обнаружить подозрительные (и, следовательно, вероятно, ошибочные) конструкции.
Как я могу построить такой отчет?






Для статического анализа есть пиллинт и Pychecker. Лично я использую pylint, поскольку он кажется более всеобъемлющим, чем pychecker.
Для цикломатической сложности вы можете попробовать эта программа на Perl или этот статья, который вводит программу Python, чтобы сделать то же самое.
Благодаря Pydev вы можете очень легко интегрировать pylint в Eclipse IDE и получать отчет о коде каждый раз, когда вы сохраняете измененный файл.
Для измерения цикломатической сложности есть хороший инструмент, доступный по адресу traceback.org. Страница также дает хороший обзор того, как интерпретировать результаты.
+1 за пиллинт. Он отлично подходит для проверки соблюдения стандартов кодирования (будь то PEP8 или вариант вашей собственной организации), что в конечном итоге может помочь снизить цикломатическую сложность.
Пилинт отличный, но медленный. Мы используем как pre-push hook, но используем flake8 и несколько плагинов для регулярных проверок и pre-commit hook. Я бы действительно рекомендовал https://flakehell.readthedocs.io/config.html в наши дни, поскольку его модель выполнения намного более надежна и настраиваема.
Есть инструмент под названием CloneDigger, который поможет вам найти похожие фрагменты кода.
Он не работает с Python 3 и никогда не поддерживался в хорошем состоянии.
Pycana работает как шарм, когда вам нужно разобраться в новом проекте!
PyCAna (Python Code Analyzer) is a fancy name for a simple code analyzer for python that creates a class diagram after executing your code.
Посмотри, как это работает: http://pycana.sourceforge.net/
выход:
Для цикломатической сложности вы можете использовать radon: https://github.com/rubik/radon
(Для установки используйте pip: pip install radon)
Кроме того, он также имеет следующие функции:
Что делать, чтобы получить метрики Холстеда?
@qarma Если я понимаю документацию, я не думаю, что вы можете использовать командную строку. Вы должны использовать Python API.
Используйте flake8, который обеспечивает анализ pep8, pyflakes и цикломатической сложности в одном инструменте
Для проверки цикломатической сложности, конечно, есть пакет mccabe.
Установка:
$ pip install --upgrade mccabe
Использование:
$ python -m mccabe --min=6 path/to/myfile.py
Обратите внимание на порог в 6 выше. Согласно этот ответ, оценки> 5, вероятно, следует упростить.
Пример вывода с --min=3:
68:1: 'Fetcher.fetch' 3
48:1: 'Fetcher._read_dom_tag' 3
103:1: 'main' 3
При желании его также можно использовать через Pylint-McCabe или pytest-mccabe и т. д.
traceback.org - это неработающая ссылка