Перейти к содержанию

Раздел 9. Настройки требуемого качества кода

Диагностические правила (Rules), профили качества (Quality Profiles) и погори качества (Quality Gates) — ключевые понятия платформы SonarQube. Каждый плагин для SonarQube, осуществляющий статический анализ кода, содержит репозиторий с описанием диагностических правил, которые этот плагин выполняет. Нарушения этих правил используются для определения технического долга в коде и вычисления времени на устранение проблем. Для удобства использования правила объединяются в профили качества (Quality Profiles).

Поставляемые профили качества (Quality Profiles)

По умолчанию в поставку плагина входят 4 поставляемых встроенных профиля качества:

  • Аудит безопасности

  • Включает в себя набор правил, специализирующихся на поиске уязвимостей в системе

  • Максимальный

  • Включает в себя все существующие правила

  • Минимальный

  • Включает в себя минимальный набор наиболее важных и полезных правил

  • Рекомендуемый

  • Включает в себя набор правил, рекомендуемый экспертами ООО «Серебряная Пуля»

Этот профиль качества является профилем по умолчанию и все новые профили качества будут создаваться на его основании.

Создание нового профиля качества

По умолчанию SonarQube создает профиль качества по умолчанию для каждого поддерживаемого языка, но вы можете создавать свои профили качества с тем набором диагностических правил, которые вам могут быть полезны. Например, для анализа критически важных проектов, требования к качеству кода которых самые строгие, можно определить профиль качества, содержащий все доступные диагностики, а для менее критичных проектов можно определить менее строгий профиль качества, содержащий только серьезные ошибки, что позволит не отвлекаться на незначительные «запахи кода» («code smells»), т.е. на определенные проблемы в коде.

Для создания нового профиля качества нужно выполнить следующие действия:

  1. Авторизоваться на сервере SonarQube под правами администратора;
  2. Перейти на вкладку «Профили качества» в верхнем меню;
  3. Нажать на кнопку «Создать» для создания нового профиля или в меню настроек существующего профиля выбрать пункт «Копировать» для создания профиля, на основе текущего.

image-20200812122128993

  1. При нажатии на кнопку «Создать» появится всплывающее окно, в котором нужно ввести название профиля, Язык и Родителя

image-20200812122152019

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

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

image-20200812122257434

  1. По кнопке "Активировать больше" переходим в список правил и по кнопке "Активировать" активируем правило, при необходимости изменяя значение серьёзности правила.

image-20200812122324254

  1. Некоторые правила имеют дополнительные настройки, как например правило "Длина имени метода" изменение этого значения позволяет более гибко настраивать профиль качества под ваши требования. См. раздел «Настраиваемые правила с возможностью параметризации».

image-20200812122350130

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

Категории правил (теги)

Каждое правило плагина относится к одной или нескольким тематическим группам и помечено соответствующим тегом или тегами. Наличие тегов позволяет отбирать правила по категории, как, например, показано в разделе 9.4. Настраиваемые правила с возможностью параметризации.

Используются следующие теги:

image-20200812122514133

Английское имя Русская расшифровка Назначение (описание) Примеры правил
acc-rule 1С:АПК (Автоматизированная проверка конфигураций) Работа с 1С:АПК Бессмысленное (автосгенерированное) имя команды формы. В конфигурации отсутствует обязательный интерфейс "Общий"
bad-practice Плохая практика Предотвращение использования общеизвестных плохих практик кодирования Безусловное прерывание/продолжение цикла. Использование НЕ в названии переменной/функции
cert Ошибки CERT Поиск ошибок безопасности согласно стандарту кодирования CERT Блоки кода не должны быть "закомментированы". Использование буквы "ё" в комментариях
convention Конвенция Соблюдение стандартов 1С, соглашение о наименовании объектов Ограничение на длину строки. Один оператор в одной строке
brain-overload Взрыв мозга Поиск сложного для понимания кода Магические даты. Проверка, что функция является процедурой
parameters Параметры Правила с возможностью параметризации Вложенные вызовы функций. Слишком много возвратов внутри функции
pitfall Исключения Поиск кода, не предусматривающего отлавливание исключений Возможное использование неинициализированной переменной. Работа с параметром "Отказ"
sql Запросы SQL Правила, связанные с запросами SQL Бесполезное приведение к NULL. Использование строковых литералов в тексте запроса
clumsy «Кривой» код Поиск кода с нарушенной структурой Сравнение с логической константой. Безусловное прерывание/продолжение цикла
performance Производительность Поиск кода, снижающего производительность Использование вложенных запросов в условии соединения. Разыменование полей в запросе
cwe Ошибки CWE Поиск ошибок из стандартного списка известных уязвимых мест CWE Запуск внешних приложений. Присвоение переменной самой себе
misra Ошибки MISRA Поиск ошибок по стандарту кодирования MISRA Одинаковые выражения (вызов методов) в разных ветках/блоках кода. Сравнение выражения с самим собой
copy-paste Копи-паст Правила, выполняющие поиск дублирования участков кода, связанного с копированием и последующей вставкой текста Дублирование одинаковых/похожих блоков кода. Одинаковый код во взаимоисключаемых ветках ветвления кода
unused Неиспользуемые Поиск в коде неиспользуемых параметров Неиспользуемая переменная. Пустой оператор
accessibility Доступность Проверка различных ограничений или доступности, например, использование директив компиляции Использование директив компиляции. Использование несуществующих директив компиляции
localize Локализация Поиск элементов кода со смешанной локализацией Использование латиницы и кириллицы в одной строке. Смешивание русских и английских символов в именах переменных и названиях методов
error-handling Ошибка обращения Поиск ошибки обращения к NULL Отсутствие проверки на NULL или приведения через ЕстьNULL при левых/правых соединениях

Настраиваемые правила с возможностью параметризации

В поставку плагина входит немало настраиваемых правил с возможность их параметризации.

Для быстрого поиска этих правил рекомендуется использовать отбор по тегу «parameters» на странице поиска/отбора правил.

Пример отбора всех настраиваемых правил:

image-20200812122942144

Пример отбора всех настраиваемых правил для конкретного профиля

image-20200812122953374

Пороги качества (Quality Gate)

Quality Gate — это индикатор соответствия (или несоответствия) кода проекта заданным пороговым значениям метрик. По умолчанию, все проекты, добавленные в SonarQube, используют стандартный quality gate, в котором определены следующие метрики и их пороговые значения:

  1. Новые баги = 0
  2. Новые уязвимости = 0
  3. Коэффициент технического долга на новом коде <= 5%
  4. Покрытие нового кода >= 80%

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

Создание нового порога качества осуществляется на вкладке «Пороги качества» в главном меню.

Выполните следующие действия:

  1. Перейти в раздел «Пороги качества» главного меню
  2. Нажать на кнопку «Создать» для создания нового профиля или «Копировать» для создания порог качества на основе текущего
  3. Переходим в созданный профиль и по кнопке «Добавить условие» выбираем метрику и значение показателя
  4. Выбираем проекты, на которые будет распространяться порог качества

image-20200812123318832

  1. По окончании настройки устанавливаем порог качества по умолчанию