Методы измерения цикломатической сложности для Python

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

Насколько важны инструменты цикломатической сложности в Python? Используете ли вы или ваш проект их эффективность? Я хотел бы иметь хорошую историю до / после, если у кого-то есть такая, чтобы мы могли немного субъективности из ответов (то есть, до того, как у нас не было инструмента Cyclo-Comp, и после того, как мы его представили, хорошая вещь А случилось, случилось что-то плохое и т. Д.). Есть много других общих ответов на этот тип вопросов, но я не нашел ни одного, в частности, для проектов Python.

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

2 ответа

Решение

Мы использовали инструмент RADON в одном из наших проектов, связанных с автоматизацией тестирования.

Радон

В зависимости от новых функций и требований, нам нужно добавить / изменить / обновить / удалить коды в этом проекте. Также над этим работали почти 4-5 человек. Поэтому, как часть процесса проверки, мы определили и использовали инструменты RADON, поскольку мы хотим, чтобы наш код поддерживался и читался.

В зависимости от результатов работы инструмента RADON, мы несколько раз пересматривали наш код, добавляли новые методы и модифицировали циклы.

Пожалуйста, дайте мне знать, если это полезно для вас.

Python не является особенным, когда речь идет о цикломатической сложности. CC измеряет, сколько логики ветвления содержится во фрагменте кода.

Опыт показывает, что когда ветвление "высоко", этот код сложнее понять и надежно изменить, чем код, в котором ветвление меньше.

С метриками, как правило, не имеют значения абсолютные значения; это относительные ценности, которые испытывает ваша организация. Что вам нужно сделать, это измерить различные метрики (CC - одна) и найти колено на кривой, которое связывает эту метрику с найденными ошибками в коде. Как только вы узнаете, где находится колено, попросите кодировщиков написать модули, сложность которых ниже колена. Это связь с долгосрочным обслуживанием.

То, что вы не измеряете, вы не можете контролировать.

wemake-python-styleguide поддерживает оба radon а также mccabe реализации Cyclomatic Complexity.

Существуют также различные метрики сложности, которые не охватываются только цикломатической сложностью, в том числе:

  • Количество декораторов функций; ниже - лучше
  • Количество аргументов; ниже - лучше
  • Количество аннотаций; выше лучше
  • Количество локальных переменных; ниже - лучше
  • Количество возвратов, доходностей, ожиданий; ниже - лучше
  • Количество утверждений и выражений; ниже - лучше

Подробнее о том, почему важно им подчиняться: https://sobolevn.me/2019/10/complexity-waterfall

Все они покрыты wemake-python-styleguide. Репо: https://github.com/wemake-services/wemake-python-styleguide Документы: https://wemake-python-stylegui.de/

Вы также можете использовать библиотеку mccabe. Он учитывает только сложность McCabe и может быть интегрирован в ваш флейк-8.

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