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

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

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

Как мне создать такой отчет?

Ответы [ 8 ]

36 голосов
/ 20 сентября 2008

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

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

28 голосов
/ 10 февраля 2013

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

(используйте pip для установки: pip install radon)

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

  • необработанные метрики (включая SLOC, строки комментариев, пустые строки и т. Д.)
  • Метрики Холстеда (все они)
  • Индекс обслуживания (тот, который используется в Visual Studio)
18 голосов
/ 19 сентября 2008

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

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

11 голосов
/ 10 мая 2010

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

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

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

выход:

альтернативный текст http://pycana.sourceforge.net/relations.png

6 голосов
/ 19 сентября 2008

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

5 голосов
/ 26 марта 2014

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

4 голосов
/ 22 февраля 2009

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

3 голосов
/ 09 октября 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 и т. Д.

...