SonarQube подключен, дашборд есть, анализ запускается на каждый MR, но никто не пользуется. В таком случае проблема не в инструменте. Проблема в том, что между «Sonar работает» и «Sonar приносит пользу» — пропасть из-за отсутствия договорённостей. Я видела это на нескольких проектах и расскажу, что конкретно превращает декоративный дашборд в работающий механизм контроля качества.

Статья будет полезна QA, разработчикам и тимлидам, у которых SonarQube уже есть, но результаты анализа живут и ни на что не влияют.

Типичная картина: Sonar есть, пользы нет

Проект подключен к SonarQube полгода назад. CI настроен, анализ запускается, в дашборде копятся цифры. И при этом:

  • На отчёт никто не смотрит при ревью.

  • Quality Gate горит красным третий месяц — все привыкли.

  • Новые issues приходят, старые не разбираются, общее число растёт.

  • Раз в квартал кто-то открывает дашборд, ужасается, закрывает.

Sonar в таком состоянии — это не инструмент качества, а галочка для аудита или менеджера: «У нас статический анализ есть». Пользы ровно ноль, а ресурсы на CI-прогон тратятся.

Почему так происходит? Потому что подключение инструмента — это техническая задача, а внедрение — организационная. И вторую часть обычно пропускают.

Quality Gate: как превратить красивый дашборд в работающий контроль

Quality Gate — это набор условий, при невыполнении которых анализ считается проваленным. Из коробки Sonar предлагает «Sonar way», сфокусированный на новом коде: покрытие не меньше 80%, дупликация не больше 3%, нет багов и уязвимостей.

Важно не путать с Quality Profiles и понимать их связь:

  • Quality Profiles (Профили качества) определяют, какие именно правила применяются к коду (например, «запретить использовать deprecated-методы» или «длина метода не должна превышать 20 строк»). Профиль — это сито, которое ищет дефекты.

  • Quality Gates (Гейты качества) задают допустимые лимиты для найденных дефектов (например, «новых багов должно быть ровно 0»).

Quality Gate сам по себе merge не блокирует: он лишь возвращает результат анализа (passed/failed). Чтобы этот результат влиял на статус CI‑джобы (и был виден в вашей платформе как успех/падение пайплайна), в шаге запуска сканера нужно включить ожидание гейта — sonar.qualitygate.wait=true. MR всё равно можно будет смержить, если настройки джобы это позволяют. 

Первое решение, которое нужно принять командой: будет ли Quality Gate блокировать мерж или нет.

  • Если нет, то Sonar остаётся рекомендательным, и вы полагаетесь на дисциплину ревьюера. Это хорошо работает в маленьких командах с сильной культурой ревью.

  • Если да — настройте пайплайн, чтобы MR был возможен только при passed статусе. После этого красный гейт физически не даёт смержить — и Sonar из декорации превращается в реальный барьер.

Legacy: слона целиком не съесть

Отдельная боль — проекты с историей. Подключили Sonar к проекту, которому три года, и дашборд показывает 2 000 issues. Руки опускаются.

В таком случае рекомендация — фокус на новом коде. Стандартный Quality Gate «Sonar way» оценивает только новый код. Не нужно трогать legacy, пока не придёт время его менять. Но каждый новый или изменённый файл должен соответствовать стандарту качества.

Важный нюанс: гейт должен быть адекватным. Если стандартный не подходит, надо создать кастомный.

Кто смотрит на отчёт и когда

Самый частый провал внедрения — нет ответа на вопрос: «А кто это разбирает?».

Варианты:

  • Все — значит никто. Если ответственность размазана, каждый считает, что посмотрит кто-то другой.

  • Автор MR — работает, если автор видит результаты прямо в интерфейсе MR (например, статус проверки), а не должен идти в отдельную вкладку в другом сервисе. Человек не будет переключать контекст ради замечаний, которые можно проигнорировать.

  • Ревьюер — самый надёжный вариант. Ревьюер и так смотрит на код — добавить в чеклист ревью «посмотреть отчёт Sonar» несложно. Но это должно быть явным правилом, а не подразумеваемым.

На практике лучше всего работает комбинация: автор видит результаты в MR и правит очевидное сам, ревьюер проверяет, что ничего не пропущено. Для этого нужна интеграция SonarQube с внедрённой платформой — чтобы результаты анализа приходили туда, где разработчик и так работает.

Что делать с находками: три корзины

Допустим, ревьюер открыл отчёт и увидел 12 новых issues на MR. Что дальше? Без ответа на этот вопрос разбор быстро превращается в хаос, ну или просто ничего не происходит.

Простое правило трёх корзин. 

  1. Чиним сразу всё, что можно исправить за 5–10 минут в текущем MR: неиспользуемые переменные, упрощение условий, мелкие баги. Это основной поток — таких находок большинство.

  2. Уводим в бэклог сложные рефакторинги, затрагивающие несколько модулей. Создаём тикет, ставим приоритет, делаем в следующем спринте. Главное — тикет реально существует, а не «мы потом посмотрим».

  3. Осознанно игнорируем ложные срабатывания и правила, которые не подходят контексту. Помечаем как Won't Fix с комментарием почему. Это нормально — не каждое правило релевантно каждому проекту. Но молча игнорировать и осознанно отклонить с обоснованием — разные вещи.

Без этой сортировки происходит одно из двух: либо каждый MR превращается в многочасовой рефакторинг (и команда начинает ненавидеть Sonar), либо все issues копятся без разбора (и Sonar превращается в шум).

Профили правил: не тюнить в одиночку

Quality Profile — набор правил, по которым анализатор проверяет код. Искушение первое — оставить стандартный и никогда не трогать. Искушение второе — отключить всё, что раздражает.

Оба варианта плохие. Правильный подход:

  • Один профиль на язык для всей команды. Не «у каждого проекта свои правила», а единый стандарт с осознанными исключениями.

  • Изменения в профиле вносить только после обсуждения. Например, перед отключением правила объяснять, почему оно не подходит, а перед добавлением — показывать, какие ошибки оно реально ловит. 

  • Профиль живой, поэтому важно пересматривать его с какой-то периодичностью — например, раз в квартал.

  • Изменения должны быть прозрачными для всей команды. Если один человек будет молча отключает правила, потому что они мешают лично ему, то через полгода в профиле остаётся полтора правила, и анализ потеряет смысл.

Нотификации: SonarQube должен приходить к разработчикам, а не наоборот 

Никто не просыпается с мыслью: «Пойду проверю дашборд SonarQube». Что помогает:

  • Статус в MR/PR. Красный крестик рядом с другими проверками — линтером, тестами — воспринимается как норма. За ним не нужно никуда ходить.

  • SonarQube умеет оставлять комментарии в DevOps-платформах.

  • Уведомление в мессенджер при падении Quality Gate. Через вебхуки — в Slack, Mattermost, Telegram.

  • Высший пилотаж (Shift-Left подход): самый эффективный способ вообще не доводить до красного MR — подключить расширение к IDE. Он автоматически подтягивает профиль правил с вашего сервера SonarQube и подсвечивает проблемы прямо в редакторе, в момент написания кода. Разработчик чинит ошибки ещё до коммита, экономя время на пересборках CI.

Каждый шаг, который убирает необходимость «зайти и посмотреть», кратно повышает шанс, что на находки отреагируют.

Метрики: что отслеживать

Дашборд SonarQube показывает много цифр. 

Не все из них полезны для принятия решений. Минимальный набор, за которым стоит следить на уровне команды:

  • Quality Gate status — зелёный/красный. Если красный больше недели — это сигнал, что процесс сломан.

  • Coverage on new code — покрытие нового кода. Тренд важнее абсолютного числа: если падает, то что-то идёт не так.

  • New issues / resolved issues — соотношение показывает, копите вы долг или разгребаете.

Не стоит превращать метрики Sonar в KPI разработчиков. Это моментально убьёт доверие к инструменту: люди начнут писать бессмысленные тесты ради покрытия и ставить NOSONAR ради зелёного гейта.

Как понять, что Sonar реально работает

Несколько признаков того, что внедрение прошло, а не застряло на стадии «подключили»:

  • Ревьюер регулярно ссылается на находки Sonar в комментариях к MR.

  • Автор MR правит простые замечания до ревью, не дожидаясь просьбы.

  • Quality Gate зелёный большую часть времени. Когда краснеет — это воспринимается как событие, а не как фон.

  • В бэклоге есть тикеты на сложные issues, и они реально берутся в работу.

  • При обсуждении правил в профиле есть аргументы «за» и «против», а не «отключи, оно мешает».

И обратные признаки:

  • Quality Gate красный месяцами, никто не обращает внимания.

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

  • Отчёт открывают только перед аудитом.

Заключение

SonarQube — зрелый инструмент, который нормально работает из коробки. Ну а дальше главное — организация:

  1. Решить, блокирует ли Quality Gate мерж или нет.

  2. Назначить, кто смотрит на результаты и когда.

  3. Договориться, что чинить сразу, что в бэклог, что осознанно игнорировать.

  4. Сделать так, чтобы отчёты приходили туда, где идёт работа — прямо в MR. 

  5. Держать фокус на новом коде, а к легаси возвращаться постепенно..

С такими договорённостями Sonar станет такой же привычной частью процесса, как линтер или прогон тестов.