Как я могу проанализировать код Python, чтобы определить проблемные области?

У меня большой исходный репозиторий, разбитый на несколько проектов. Я хотел бы подготовить отчет о состоянии исходного кода с указанием проблемных областей, которые необходимо решить.

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

Как я могу построить такой отчет?


person Jerub    schedule 19.09.2008    source источник


Ответы (8)


Для измерения цикломатической сложности есть хороший инструмент, доступный по адресу traceback.org. Страница также дает хороший обзор того, как интерпретировать результаты.

+1 для pylint. Он отлично подходит для проверки соблюдения стандартов кодирования (будь то PEP8 или ваш собственный вариант организации), что в конечном итоге может помочь снизить цикломатическую сложность.

person Mike Griffith    schedule 19.09.2008
comment
traceback.org - это неработающая ссылка - person denfromufa; 18.01.2016
comment
Пилинт отличный, но медленный. Мы используем как pre-push hook, но используем flake8 и несколько плагинов для регулярных проверок и pre-commit hook. Я бы действительно порекомендовал https://flakehell.readthedocs.io/config.html в наши дни, поскольку эта модель выполнения намного более надежна и настраиваема. - person DylanYoung; 07.07.2020

Для цикломатической сложности вы можете использовать radon: https://github.com/rubik/radon

(Используйте pip, чтобы установить: pip install radon)

Кроме того, он также имеет следующие функции:

  • необработанные метрики (к ним относятся SLOC, строки комментариев, пустые строки и т. д.)
  • Метрики Холстеда (все)
  • Индекс ремонтопригодности (тот, что используется в Visual Studio)
person Dave Halter    schedule 10.02.2013
comment
Что делать, чтобы получить метрики Холстеда? - person Dima Tisnek; 01.04.2015
comment
@qarma Если я понимаю документацию, я не думаю, что вы можете использовать командную строку. Вы должны использовать Python API. - person Dave Halter; 08.04.2015

Для статического анализа есть pylint и pychecker. Лично я использую pylint, поскольку он кажется более всеобъемлющим, чем pychecker.

Для цикломатической сложности вы можете попробовать эту программу на Perl или эту статья, в которой представлена ​​программа на Python, которая делает то же самое

person freespace    schedule 19.09.2008

Pycana работает как шарм, когда вам нужно разобраться в новом проекте!

PyCAna (Python Code Analyzer) - красивое название для простого анализатора кода для Python, который создает класс диаграмма после выполнения вашего кода.

Посмотрите, как это работает: http://pycana.sourceforge.net/

вывод:

альтернативный текст

person msemelman    schedule 09.05.2010

Благодаря Pydev вы можете очень легко интегрировать pylint в Eclipse IDE и получить отчет по каждому раз вы сохраните измененный файл.

person Pierre-Jean Coudert    schedule 19.09.2008

Используйте flake8, который обеспечивает анализ pep8, pyflakes и цикломатической сложности в одном инструменте.

person Wes Kendall    schedule 26.03.2014

Существует инструмент под названием CloneDigger, который поможет вам найти похожие фрагменты кода.

person Anonymous    schedule 22.02.2009
comment
Он не работает с Python 3 и никогда не поддерживался в хорошем состоянии. - person Acumenus; 09.10.2016

Для проверки цикломатической сложности, конечно, есть пакет 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 и т. д.

person Acumenus    schedule 08.10.2016