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 уже около полугода. Собственно, по обратной связи по данным с сервера приведу небольшую статистику, без цифр:
- Качество нового кода повысилось. Со временем уже приходили все более-более лучшие анализы. Проекты стали чаще соответствовать Quality Gate..
- Найдены старые баги уязвимости. Даже в проекте, в котором код уже давно не менялся, казалось бы уже проверен годами, нашли несколько багов, пофиксили их, и все стало замечательно.
- Сократилось время, затрачиваемое на ревью кода. Т.е. ревьювер теперь не смотрит стиль, не смотрит какие-то другие метрики. Он просто смотрит приблизительно логику, что код, который написан человеком, подходит. Далее уже все делает Sonar, т.е. стилистику и прочее он замечательно у нас распознает.
- Повысилась культура написания кода в общем. Т.е. это по фидбэку от разработчиков было понятно, что теперь они стараются писать несколько лучше: и по стилистике и в общем ответственно относиться к написанию кода.
Мы можем повысить автоматизацию разработки внедрением технологии SonarQube. Это поможет улучшить качество программных продуктов и ускорить их релиз. Обращайтесь на [email protected]