Раздел 9. Настройки требуемого качества кода
Диагностические правила (Rules), профили качества (Quality Profiles) и погори качества (Quality Gates) — ключевые понятия платформы SonarQube. Каждый плагин для SonarQube, осуществляющий статический анализ кода, содержит репозиторий с описанием диагностических правил, которые этот плагин выполняет. Нарушения этих правил используются для определения технического долга в коде и вычисления времени на устранение проблем. Для удобства использования правила объединяются в профили качества (Quality Profiles).
Поставляемые профили качества (Quality Profiles)
По умолчанию в поставку плагина входят 4 поставляемых встроенных профиля качества:
-
Аудит безопасности
-
Включает в себя набор правил, специализирующихся на поиске уязвимостей в системе
-
Максимальный
-
Включает в себя все существующие правила
-
Минимальный
-
Включает в себя минимальный набор наиболее важных и полезных правил
-
Рекомендуемый
-
Включает в себя набор правил, рекомендуемый экспертами ООО «Серебряная Пуля»
Этот профиль качества является профилем по умолчанию и все новые профили качества будут создаваться на его основании.
Создание нового профиля качества
По умолчанию SonarQube создает профиль качества по умолчанию для каждого поддерживаемого языка, но вы можете создавать свои профили качества с тем набором диагностических правил, которые вам могут быть полезны. Например, для анализа критически важных проектов, требования к качеству кода которых самые строгие, можно определить профиль качества, содержащий все доступные диагностики, а для менее критичных проектов можно определить менее строгий профиль качества, содержащий только серьезные ошибки, что позволит не отвлекаться на незначительные «запахи кода» («code smells»), т.е. на определенные проблемы в коде.
Для создания нового профиля качества нужно выполнить следующие действия:
- Авторизоваться на сервере SonarQube под правами администратора;
- Перейти на вкладку «Профили качества» в верхнем меню;
- Нажать на кнопку «Создать» для создания нового профиля или в меню настроек существующего профиля выбрать пункт «Копировать» для создания профиля, на основе текущего.
- При нажатии на кнопку «Создать» появится всплывающее окно, в котором нужно ввести название профиля, Язык и Родителя
Использование родителя позволяет наследоваться уже установленные правила. Это позволит дополнить уже существующий профиль новыми правилами, но не позволит менять определённые в базовом профиле. Это удобно использовать в случае быстрого расширения функционала.
- Перейти в созданное правило. В левой части формы расположена информационная панель с указанием количества доступных и активированных правил. Для нового правила без наследования все правила выключены.
- По кнопке "Активировать больше" переходим в список правил и по кнопке "Активировать" активируем правило, при необходимости изменяя значение серьёзности правила.
- Некоторые правила имеют дополнительные настройки, как например правило "Длина имени метода" изменение этого значения позволяет более гибко настраивать профиль качества под ваши требования. См. раздел «Настраиваемые правила с возможностью параметризации».
- При необходимости можно перейти непосредственно на страницу самого правила и получить более подробную информацию о его требованиях, а также дополнить описание правила.
Категории правил (теги)
Каждое правило плагина относится к одной или нескольким тематическим группам и помечено соответствующим тегом или тегами. Наличие тегов позволяет отбирать правила по категории, как, например, показано в разделе 9.4. Настраиваемые правила с возможностью параметризации.
Используются следующие теги:
Английское имя | Русская расшифровка | Назначение (описание) | Примеры правил |
---|---|---|---|
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» на странице поиска/отбора правил.
Пример отбора всех настраиваемых правил:
Пример отбора всех настраиваемых правил для конкретного профиля
Пороги качества (Quality Gate)
Quality Gate — это индикатор соответствия (или несоответствия) кода проекта заданным пороговым значениям метрик. По умолчанию, все проекты, добавленные в SonarQube, используют стандартный quality gate, в котором определены следующие метрики и их пороговые значения:
- Новые баги = 0
- Новые уязвимости = 0
- Коэффициент технического долга на новом коде <= 5%
- Покрытие нового кода >= 80%
Исходя из ваших собственных требований к качеству исходного кода, вы можете изменить стандартный quality gate или создать новый, добавляя или удаляя те метрики и их пороговые значения, которые представляют для вас интерес.
Создание нового порога качества осуществляется на вкладке «Пороги качества» в главном меню.
Выполните следующие действия:
- Перейти в раздел «Пороги качества» главного меню
- Нажать на кнопку «Создать» для создания нового профиля или «Копировать» для создания порог качества на основе текущего
- Переходим в созданный профиль и по кнопке «Добавить условие» выбираем метрику и значение показателя
- Выбираем проекты, на которые будет распространяться порог качества
- По окончании настройки устанавливаем порог качества по умолчанию