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

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

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

Как я могу создать такой отчет?

8 ответов


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

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


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

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

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

  • необработанные метрики (они включают SLOC, строки комментариев, пустые строки и т. д.)
  • показатели Холстеда (все они)
  • индекс ремонтопригодности (используемый в Visual Studio)

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

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


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

PyCAna (анализатор кода Python) причудливое название для простого кода анализатор для python, создающий диаграмма классов после выполнения код.

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

выход:

alt текст http://pycana.sourceforge.net/relations.png


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


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


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


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