Мы хотим поделиться опытом внедрения платформы для непрерывного анализа и измерения качества кода SonarQube в существующие процессы разработки системы ДПО (дополнение к системе депозитарно-клирингового учета «Аламеда») Национального расчетного депозитария.
Национальный расчетный депозитарий (группа компаний «Московская биржа») является одной из ключевых компаний финансовой инфраструктуры, хранит и учитывает ценные бумаги российских и иностранных эмитентов на сумму более 50 трлн руб. Растущий объем проводимых системой операций, а так же непрерывное наращивание функционала требуют поддержания высокого качества исходного кода систем. Одним из инструментов для достижения этой цели является статический анализатор SonarQube. В этой статье мы опишем успешный опыт бесшовного внедрения статического анализатора SonarQube в существующие процессы разработки нашего отдела.
Кратко об отделе
В нашей компетенции следующие модули: выплаты клиентам НРД, электронный документооборот (ЭДО), обработка сообщений торгового репозитария (регистрация внебиржевых сделок), каналы электронного взаимодействия между клиентами и НРД и многое другое. В общем, большой пласт работы над технической стороной операционной деятельности. Работаем мы на основе заявок. Заявки операционистов обрабатывается аналитиками: они собирают требования заказчика и представляет нам свое видение того, как это должно лечь в программу. Далее стандартная схема: разработка кода – тестирование – опытная эксплуатация – поставка кода на продуктивный контур непосредственному заказчику.
Почему именно SonarQube?
Это первый опыт нашего отдела по внедрению платформы для контроля качества кода – ранее мы делали это вручную, проводили лишь code review. Но растущий объем работ требует автоматизации данного процесса. Кроме этого, в составе команды есть и неопытные сотрудники, которые не совсем знакомы с внутренними регламентами разработки и склонны допускать больше ошибок. Для контроля качества кода было решено внедрять статический анализатор. Так как SonarQube уже использовался в некоторых системах НРД, долго выбирать не пришлось. Ранее коллеги из других подразделений анализировали с его помощью код микросервисов в системе «Аламеда» (собственная система депозитарно-клирингового учета НРД), в ЦФТ (информационная система для ведения бух.учета, баланса, подготовки обязательной и внутренней отчетности), в некоторых других системах. Для экспериментов мы решили начать с бесплатной версии SonarQube. Итак, перейдем к нашему кейсу.
Процесс внедрения
У нас есть:
- автоматическая сборка системы в TeamCity;
- настроен процесс заливки кода через MergeRequest из feature-ветки в master-ветку в GitLab (процесс разработки согласно GitHub Flow);
- SonarQube, настроенный на анализ кода для системы ДПО по расписанию.
Наша цель: внедрить автоматический анализ кода в CI/CD процессы ДПО.
Надо настроить: процесс автоматической проверки кода статическим анализатором при каждом MergeRequest’e в основную ветку.
Т.е. целевая картина следующая: как только разработчик заливает изменения в feature-ветку, запускается автоматическая проверка на наличие новых ошибок в коде. Если ошибок нет, то разрешается принятие изменений, иначе придется править ошибки. Уже на начальном этапе мы смогли выявить определенное количество ошибок в коде. У системы очень гибкие настройки: ее можно настраивать таким образом, чтобы она работала под конкретные задачи разработчиков, под каждую систему и стиль программирования.
Настройка QualityGate в SonarQube
Анализ QualityGate – это вещь, которую мы вычитали в недрах интернета. Изначально мы использовали другой подход, более сложный и с какой-то стороны не совсем правильный. Сначала мы дважды запускали сканирование через SonarQube: сканировали feature-ветку и ветку, куда собирались вливать feature-ветку, а затем сравнивали количество ошибок. Этот метод не отличался стабильностью и не всегда выдавал правильный результат. А затем мы узнали, что можно вместо двойного прогона SonarQube, установить лимит на количество допущенных ошибок (QualityGate) и анализировать только ту ветку, которую ты заливаешь и сравниваешь.
Пока что еще мы используем довольно примитивную проверку кода. Стоит отметить, что SonarQube несовместим с некоторыми языками программирования, в том числе с Delphi. На данный момент для нашей системы анализируем только PLSql код.
Работает это так:
- Мы анализируем для нашего проекта только PL/SQL код.
- В SonarQube настроен QualityGate таким образом, чтобы количество ошибок не прибавлялось с коммитом.
- Количество ошибок при первом запуске у нас вышло 229. Если ошибок при коммите становится больше, то merge не разрешается.
- Далее при условии исправления ошибок можно будет перенастраивать QualityGate.
- Также можно добавлять новые пункты для анализа, например, покрытие кода тестами и т.д.
Схема работы:
В комментариях работы скрипта видно что количество ошибок в feature-ветке не увеличилось. Значит все ОК.
Становится доступна кнопка Merge.
В комментариях работы скрипта видно, что количество ошибок в feature-ветке стало больше допустимого. Значит все ПЛОХО.
Кнопка Merge красная. На данный момент нет запрета на то чтобы залить изменения по ошибочному коду, но это делается на усмотрение ответственного разработчика. В дальнейшем можно запретить вносить такие коммиты в основную ветку.
Самостоятельная работа над ошибками
Далее необходимо проверить все выявленные системой ошибки, потому что SonarQube анализирует по своим строгим стандартам. Что он считает ошибкой, реально в нашем коде может таковым не являться. Поэтому нужно проверить и отметить, действительно ли это ошибка, или то, что править в наших условиях необходимости нет. Таким образом мы сокращаем количество ошибок. Со временем система научится понимать эти нюансы.
К чему мы пришли
Нашей целью было понять, целесообразно ли в нашем случае переводить проверку кода на автоматизацию. И результат оправдал ожидания. SonarQube позволяет нам работать с нужными нам языками, делает довольно грамотный анализ и имеет потенциал обучаться на подсказках разработчиков. В целом, мы довольны нашим первым опытом использования SonarQube и планируем развиваться в этом направлении дальше. Ожидаем, что в будущем мы сможем экономить больше времени и сил на проверку кода и сделать ее более качественной, устранив человеческий фактор. Возможно, в процессе мы обнаружим недостатки платформы или, наоборот, убедимся еще раз, что это крутая вещь с большим потенциалом.
В этой обзорной статье мы рассказали о нашем знакомстве со статическим анализатором SonarQube. Если у вас есть вопросы, пишите, пожалуйста, в комментариях. Если вам интересна эта тема, в новой публикации мы уже подробнее опишем, как правильно все настроить и написать код, чтобы делать подобную проверку.
Автор текста: atanya
chemtech
Спасибо за пост. Планируете ли выкладывать в opensource ваш скрипт dpo_sonarqube.py ?
QtRoS Автор
Чуть позднее вернемся с ответом на этот вопрос. Вероятно да, сможем поделиться выжимкой — нужно небольшое ревью кода на предмет наличия непубличной информации.
QtRoS Автор
Отправил исходник в ЛС. Если кому-то еще интересно — можем точечно поделиться!
maximgorbatyuk
Почему бы сразу не выложить его в gist.github в публичный доступ, если в нем нет конфиденциальной информации? Ведь вы уже готовы делиться "точечно" с рандомными людьми из интернета
QtRoS Автор
Спасибо за предложение: в комментарии было бы неудобно поддерживать, полноценный репозиторий заводить оверкилл, а gist действительно хорошо подходит. Ссылка на файл.
maximgorbatyuk
спасибо