Методы измерения цикломатической сложности для 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.