Мелкая питонячая радость #4: Radon — качество кода, измеренное в числах

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Инженеры очень любят измерения и числа. Поэтому нет ничего удивительного в том, что они пытаются измерять в численном виде такую нетривиальную штуку, как качество кода.



Метрик для оценки текстов программ придумали немало — от банального количества строк кода в проекте до не столь очевидного "индекса поддерживаемости" (Maintainability Index). Подробно про все существующие способы обмазывания кода всякими метриками можно почитать в этой статье.


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


Ставим ее себе


pip install radon

Переходим в папку с вашим кодом и начинаем мерять.


Сырые статистические данные


Банальный подсчет числа строк в исходниках. А еще числа строк, непосредственно содержащих код и числа строк-комментов. Не очень информативная метрика, но она требуется для дальнейших вычислений.


radon raw ./

В ответ вам вывалится список файлов в проекте и статистика по каждому файлу.


Цикломатическая сложность


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


Считается она командой


radon cc ./

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


Метрики Холстеда


Тут считаеся количество уникальных операторов и операндов в коде и их общее количество. Полученные значения подставляются в формулы и получается набор чисел, который описывает сложность программы и количество усилий, предположительно затраченное на написание и понимание кода.


radon hal ./

Индекс поддерживаемости кода


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


radon mi ./

В ответ мы получим список файлов в проекте и их индекс поддерживаемости, от легкого до очень тяжелого.


Подробные алгоритмы рассчета метрик и документацию по ним можно смотреть здесь.


Куда это все?


Конечно, сделать какие-либо выводы о качестве кода, опираясь только на числовые метрики, нельзя. Но в ряде случаев беглая оценка с помощью radon может быть полезной.


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

Познавательно? Да. Полезно и нужно? Возможно, иногда, может быть, в определенных случаях.


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

Источник: https://habr.com/ru/post/456150/


Интересные статьи

Интересные статьи

Самое поразительное из того, что я увидел за последние 2 недели — тулкит на Python для создания ботнетов. Конечно же, он написан для исследовательских и учебных целях, но...
Всем привет. Когда я искал информацию о журналировании (аудите событий) в Bitrix, на Хабре не было ни чего, в остальном рунете кое что было, но кто же там найдёт? Для пополнения базы знаний...
Приветствую вас (лично вас, а не всех кто это читает)! Сегодня мы: Создадим приложение (навык) Алисы с использованием нового (октябрь 2019) сервиса Yandex Cloud Functions. Настроим н...
1С Битрикс: Управление сайтом (БУС) - CMS №1 в России по версии портала “Рейтинг Рунета” за 2018 год. На рынке c 2003 года. За это время БУС не стоял на месте, обрастал новой функциональностью...
Одной из «киллер-фич» 12й версии Битрикса была объявлена возможность отдавать статические файлы из CDN, тем самым увеличивая скорость работы сайта. Попробуем оценить практический выигрыш от использова...