Содержание
Code Climate (СС) используется с единственной целью: помочь команде программистов писать чистый код. Переоценить его значимость для разработки очень сложно. CC производит статический и автоматизированный анализ кода для Ruby on Rails, JavaScript, PHP (в бета-версии) или Python (в бета-версии), а затем предоставляет легко читаемые и действительно значимые выводы.
Как это работает
- Шаг 1: Пуш коммита в репозиторий (поддерживаются Git репозитории).
- Шаг 2: СС автоматически клонирует/вытягивает из хранилища и анализирует каждый коммит.
- Шаг 3: Результаты анализа дают возможность отслеживать изменения в фиде, умные оповещения по электронной почте и интеграции уведомлений.
Хуки
CC узнает о новом событии в репозитории при помощи хуков, навешанных на git сервер. Они, в свою очередь, делятся на две категории:
- Вебхуки — запросы от git сервера на СС endpoint url после пуша коммита в default branch.
- Сервисные хуки — предназначены сугубо для Github. Они предоставляют более расширенный набор нотификаций для CC — события о пуше новой ветки, об открытии ПР и т.д.
Для репозитория без хуков, но с подключенным СС возможно активизировать автополлинг изменений. Его производит непосредственно Code Climate.
На примере гитхаба
- Получаем API токен из профайла в СС;
- Добавляем айдишник репозитория из фида на CC
- Создаем вебхук на github (админ справа в репозитории)
Понятие оценок качества кода (ABC Metrics)
ABC метрика — часто используемая методика измерения размера программного обеспечения. Этот показатель является одним (хотя и не обязательно единственным) из способов, используемых CC для оценки сложности кода. Он показывает характеристику накапливания технического долга приложения.
Чем выше значение, тем сложнее оценить заданный кусок кода для чтения, тестирования и поддержки. Итоговый показатель складывается из:
- количества присвоений в методе;
- количества выходов из процедурного потока выполнения кода для выполнения кода, определенного в другом месте;
- количества условных ветвлений if/elses, cases, try/catches, boolean tests, less than or equal to evaluations
Специально для Ruby используется модифицированный Flog gem:
- оценка мета-кода
- анализ дублирующихся фрагментов кода;
Понятие оценок качества кода (GPA)
GPA (grade point average) — система школьной оценки качества знаний. Демонстрирует общий уровень кода на основе средневзвешенных ABC-метрик всех существующих классов и методов приложения. При этом каждый отдельный issue (например: дублирование, сложности метода) имеет свой собственный вес, позволяющий нам вычислить их общую “стоимость”. Она демонстрируется на дэшборде приложения и может быть вынесена на гитхаб в качестве виджета.
CC в качестве CI
СС способен интегрироваться с рядом CI продуктов: Semaphore, Solano Labs, Travis C., Jenkins. Он агрегирует данные о тестовом покрытии и отражает текущий статус билда проекта. Code Climate производит переоценку ABC-значений кода в ту или иную сторону, в зависимости от репорта CI-сервера. В итоге даже грамотно продуманный код может заслужить желтый флаг, как продукт, не прошедший тестирование в полном объеме.