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

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

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

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


person Matt Messersmith    schedule 13.07.2016    source источник
comment
Взгляните на sobolevn.me/2019/10/complexity-waterfall. Это водопад отличная статья о сложности кода.   -  person sobolevn    schedule 14.10.2019


Ответы (4)


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

RADON

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

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

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

person Dinesh Pundkar    schedule 14.07.2016
comment
Радон мне очень понравился. Хотя это сложнее включить в процесс автоматической сборки, но усилия того стоят. - person iankit; 28.12.2016

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

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

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

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

person Ira Baxter    schedule 13.07.2016
comment
Вы используете какой-либо конкретный инструмент на Python? Радон - это хорошо? Как вы определили свой порог цикличности? Было ли это просто отслеживанием проблем в JIRA, и в конце каждого выпуска / спринта вы возвращались и вручную выясняли, что вы исправили / исправили? - person Matt Messersmith; 13.07.2016
comment
Мы создаем инструменты для измерения показателей, используя необычные программные DSL, для которых CC не имеет большого смысла. (На самом деле мы заинтересованы в производительности, которую мы получаем, создавая лучшие внутренние DSL). Большинство людей, пытающихся понять метрики, обычно объединяют информацию из нескольких источников: системы контроля версий (например, исходного кода), используемой для вычисления метрик по модулям, и информацию из отслеживания ошибок (ошибки, отслеживаемые в модуле). Вы запускаете весь этот сбор данных на некоторой периодической основе, чтобы отслеживать тенденции. (Инструменты для измерения показателей см. В моей биографии и следуйте ссылкам на мой сайт). - person Ira Baxter; 13.07.2016

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

person sobolevn    schedule 14.10.2019

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

person uhbif19    schedule 30.04.2019