- PVSM.RU - https://www.pvsm.ru -
Инженеры очень любят измерения и числа. Поэтому нет ничего удивительного в том, что они пытаются измерять в численном виде такую нетривиальную штуку, как качество кода.
Метрик для оценки текстов программ придумали немало — от банального количества строк кода в проекте до не столь очевидного "индекса поддерживаемости" (Maintainability Index). Подробно про все существующие способы обмазывания кода всякими метриками можно почитать в этой статье [1].
В мире Python, конечно же, есть своя штука для оценки качества кода. Она называется radon. Она написана на этом же самом Python и работает исключительно с питонячими файлами.
Ставим ее себе
pip install radon
Переходим в папку с вашим кодом и начинаем мерять.
Банальный подсчет числа строк в исходниках. А еще числа строк, непосредственно содержащих код и числа строк-комментов. Не очень информативная метрика, но она требуется для дальнейших вычислений.
radon raw ./
В ответ вам вывалится список файлов в проекте и статистика по каждому файлу.
Чем больше в коде переходов (if-else), циклов, генераторов, обработчиков исключений и логических операторов — тем больше у программы вариантов исполнения и тем сложнее удержать в голове различные состояния системы. Метрика, которая измеряет сложность кода, опираясь на количество этих операций, называется цикломатической сложностью программы [2].
Считается она командой
radon cc ./
В ответ вы получите список файлов, классов, методов и функций в вашем проекте и их индекс сложности, от очень простого до очень сложного. Индекс укажет на перегруженные логикой места, которые можно разбить на куски помельче, упростить или переписать (если есть такая возможность — алгоритм может быть очень сложным сам по себе и попытки его разбить на куски могут только ухудшить понимабельность кода).
Тут считаеся количество уникальных операторов и операндов в коде и их общее количество. Полученные значения подставляются в формулы [3] и получается набор чисел, который описывает сложность программы и количество усилий, предположительно затраченное на написание и понимание кода.
radon hal ./
Этот индекс говорит нам о том, насколько сложно будет поддерживать или редактировать кусок программы. Этот параметр рассчитывается на основе чисел, полученных из метрик, посчитанных выше.
radon mi ./
В ответ мы получим список файлов в проекте и их индекс поддерживаемости, от легкого до очень тяжелого.
Подробные алгоритмы рассчета метрик и документацию по ним можно смотреть здесь [4].
Конечно, сделать какие-либо выводы о качестве кода, опираясь только на числовые метрики, нельзя. Но в ряде случаев беглая оценка с помощью radon может быть полезной.
Познавательно? Да. Полезно и нужно? Возможно, иногда, может быть, в определенных случаях.
Поставить, поиграться, прогнать через метрики пару своих проектов, написать небольшой скрипт и навесить его хуком на коммиты? Пожалуй, хороший проект на вечер.
Автор: 57uff3r
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/321415
Ссылки в тексте:
[1] этой статье: https://habr.com/ru/company/intel/blog/106082/
[2] цикломатической сложностью программы: https://radon.readthedocs.io/en/latest/intro.html#cyclomatic-complexity
[3] формулы: https://en.wikipedia.org/wiki/Halstead_complexity_measures
[4] здесь: https://radon.readthedocs.io/en/latest/
[5] Источник: https://habr.com/ru/post/456150/?utm_campaign=456150&utm_source=habrahabr&utm_medium=rss
Нажмите здесь для печати.