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

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

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

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
100
0
40 726
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

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

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

Ответ принят как подходящий

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

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

traceback.org - это неработающая ссылка

denfromufa 18.01.2016 23:58

Пилинт отличный, но медленный. Мы используем как pre-push hook, но используем flake8 и несколько плагинов для регулярных проверок и pre-commit hook. Я бы действительно рекомендовал https://flakehell.readthedocs.io/config.html в наши дни, поскольку его модель выполнения намного более надежна и настраиваема.

DylanYoung 07.07.2020 21:39

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

Он не работает с Python 3 и никогда не поддерживался в хорошем состоянии.

Acumenus 09.10.2016 01:18

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/

выход:

alt text

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

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

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

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

Что делать, чтобы получить метрики Холстеда?

Dima Tisnek 01.04.2015 14:41

@qarma Если я понимаю документацию, я не думаю, что вы можете использовать командную строку. Вы должны использовать Python API.

Dave Halter 08.04.2015 12:37

Используйте 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 и т. д.

Другие вопросы по теме