5/5 - (1 голос)

SonarQube – это платформа для анализа кода и управления его качеством. Она замечательно встраивается в серию процессов, позволяет непрерывно проводить анализ кода и работает с множеством языков с помощью плагинной системы.

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

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

Принцип работы

Как SonarQube работает? Разработчик пишет код, пишет код либо в блокноте, либо в IDE. Для IDE, PyCharm, Studio и Eclipse есть плагин SonarLint.

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

Разработчик написал свой кусок кода он его пушит в систему хранения вируса. У нас используется git (gitLab) для этого. После того как код оказался в gitlab, вступает в действие CI — система, у нас используется TeamCity.

В шаг сборки встроен шаг анализирования исходников, SonarQube анализирует исходники непосредственно в билд машине и отправляет свой отчет на SonarQube – сервер.

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

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

Некоторые плагины, на слайде помеченные знаком $, имеют платные версии, остальные доступны бесплатно. В т.ч. один из самых популярных языком программирования С++ — официальный плагин разработчиков он платный и стоит довольно заметную сумму.

Какие типы проблем находит SonarQube?

  • Дефекты логики кода, т.е. какие-то незаполненные куски, недозаполненные, ошибки в логике исполнения программы;
  • Уязвимости, т.е. места, которые могут привести к эксплуатации кода тем или иным образом и выполнению произвольного кода, позволяющего осуществить несанкционированный доступ к информации.
  • Плохой код. Просто плохой стиль кода, плохое оформление, наименование. Несоответствие стилю, несоответствие нормам написания кода.

Метрики, которые Sonar снимает с анализируемого кода

  • Reliability – надежность. Надежность проекта основана на количестве дефектов логики. Чем меньше дефектов логики, тем выше надежность проекта.
  • Security – тоже самое по уязвимостям, по vulnerability. Чем их меньше, тем безопаснее код.
  • Maintainability – поддерживаемость. Тоже самое, касающееся элементов плохого кода. Чем меньше плохого кода, тем легче проект поддерживать.
  • Duplications – повторение. Оценка количества повторений. Измеряются повторения строк кода, повторение блоков кода либо повторение целых файлов кода.
  • Complexity – сложность. Сложность проекта оценивается количеством ветвлений в коде. Чем больше ветвлений в коде, тем сложнее проект.
  • Documentation – оценка количества комментариев в коде. Насколько хорошо классы, методы, функции покрыты комментариями.
  • Issues – проблемы. Это информация по всем проблемам, информация о статусе, типе.
  • Tests — Оценка покрытия кода тестами.
  • Quality Gates – итоговая оценка качества проекта. Данная итоговая оценка может иметь статусы: fail, partial success или success. Т.е. проект может целиком/частично удовлетворять качеству либо не удовлетворять совсем.

Рассмотрим на примере данные метрики. Вы можете увидеть Reliability, количество багов и оценку. Тоже самое по Security, Maintainability. По Duplications оценка идет по количеству блоков, по количеству линий, по количеству файлов.

Complexity — опять-таки количество ветвлений. Documentation – количество комментариев и процент покрытия комментариями кода. И Issues – видим сколько их всего, сколько проблем, и сколько добавлено новых с момента последнего анализа.

Ну и самое интересное – это как раз Quality Gates. Это то, куда мы попадаем, когда завершается анализ, когда в CI-системе выдается ссылка на результат анализа. В данном случае мы видим провальный Quality Gates.

С какими проблемами мы столкнулись при эксплуатации Sonar, а также, чего мы добились

Первая проблема

Некорректная работа с LDAP-группами. Т.е. сотрудников достаточно много, авторизация под доменами и учетками проходит хорошо.

Но именно работа с группами имеет некоторые ошибки. Она в SonarQube организована с помощью плагина, написанного сторонними разработчиками, т.е. это не разработка SonarQube, и работает это приблизительно следующим образом.

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

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

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

Вторая проблема

Высокая стоимость плагинов. Один из самых востребованных плагинов по С++ стоит достаточно дорого. Несколько тысяч долларов. Это было неприемлемо. Из этого положения вышли, скармливая отчеты ЦП по чеку SonarQubе.

Бесплатный комьюнити плагин умеет детектить только легкие дупликации и читать коды. Грубо говоря, его функционала катастрофически не хватает.

Третья проблема

Отсутствие иерархичности проектов. Если в системе контроля версии лежит какой-то проект, и у него есть n-ое количество веток, то в Sonar этот проект будет выглядеть просто как множество проектов по имени проекта и имени ветки.

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

Профит использования SonarQubе

В “бою” мы используем Sonar уже около полугода. Собственно, по обратной связи по данным с сервера приведу небольшую статистику, без цифр:

  1. Качество нового кода повысилось. Со временем уже приходили все более-более лучшие анализы. Проекты стали чаще соответствовать Quality Gate..
  2. Найдены старые баги уязвимости. Даже в проекте, в котором код уже давно не менялся, казалось бы уже проверен годами, нашли несколько багов, пофиксили их, и все стало замечательно.
  3. Сократилось время, затрачиваемое на ревью кода. Т.е. ревьювер теперь не смотрит стиль, не смотрит какие-то другие метрики. Он просто смотрит приблизительно логику, что код, который написан человеком, подходит. Далее уже все делает Sonar, т.е. стилистику и прочее он замечательно у нас распознает.
  4. Повысилась культура написания кода в общем. Т.е. это по фидбэку от разработчиков было понятно, что теперь они стараются писать несколько лучше: и по стилистике и в общем ответственно относиться к написанию кода.

Мы можем повысить автоматизацию разработки внедрением технологии SonarQube. Это поможет улучшить качество программных продуктов и ускорить их релиз. Обращайтесь на [email protected]