• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
  • ONLINE CHAT
+380 (44) 364 05 71

Статья также доступна на украинском (перейти к просмотру).

Что такое SonarQube и чем он помогает в разработке

Оглавление

Статический анализ кода де-факто стал обязательным этапом при разработке большинства программно-аппаратных систем и устройств с встроенным программным обеспечением (ПО). Он позволяет минимизировать количество ошибок и несогласованностей в коде еще на начальной стадии разработки, поэтому спрос на соответствующий инструментарий постоянно растет. SonarQube является одним из инструментов статического анализа, основанного на использовании плагинов для подключения новых языков и сервисов. Рассмотрим его свойства и главные принципы использования.

Основные подходы к тестированию ПО

Общие принципы тестирования ПО подразумевают наличие трех основных этапов: ревизия кода, статический анализ, динамический анализ.

Ревизия кода или Program understanding, обычно проводится специалистом по тестированию ПО в режиме просмотра на предмет обнаружения в коде явных ошибок, нарушений в стиле кода и других несоответствий.

Статический анализ подразумевает проверку исходного кода без его выполнения. Он применяется на начальных стадиях разработки и предусматривает использование специального ПО для обнаружения ошибок, работающего в автоматическом режиме. Его можно сравнить с анализом, выполняемым над программой при «прохождении» обычного компилятора, но на более глубоком уровне. Можно выделить следующие типичные ошибки, которые могут обнаруживаться на этом уровне:

  • Переполнение буфера;
  • Неопределенности в коде;
  • Ошибки в функциях форматированного ввода/вывода;
  • Ошибки в повторяющихся фрагментах кода;
  • Ошибки, ведущие к уязвимости кода, то есть связаны с безопасностью его использования (SAST);
  • Утечки памяти и других машинных ресурсов.

Некоторые из указанных ошибок, например некоторые виды неопределенностей могут быть обнаружены компилятором. Остальные легче выявить на этапе динамического анализа. В частности, это касается утечек машинных ресурсов. Но львиная часть ошибок все же оказывается именно на этом этапе. Особенно эффективно его применение для обнаружения SAST-ошибок.

Некоторые из наиболее известных инструментов статического анализа:

  • PC-Lint;
  • BLAST;
  • PVS-Studio;
  • Visual Code Grepper;
  • YASCA;
  • JsHint;
  • Pylint;
  • Pycodestyle;
  • SonarQube.

Часть из них ориентирована на работу только на одном языке, например JsHint (JavaScript). Другие могут работать с несколькими разными технологиями, например, YASCA (Java, .NET, PHP, Python).

Динамический анализ проводится над рабочей версией программы при выполнении кода на реальной или виртуальной машине. Основная его цель – выявление функциональных ошибок программы в рабочем режиме. При этом должны быть обеспечены определенные условия – наличие нужных библиотек, подача входных данных и т. п. Только в этом случае может быть получено достаточное покрытие кода для получения правильных результатов. Он требует значительных затрат ресурсов, то есть является ресурсоемким и выполняется только над готовым программным продуктом.

Еще несколько лет назад эти этапы тестирования были разделены между собой и выполнялись отдельными подразделениями специалистов. Однако в последнее время существует тенденция к их объединению в целостный комплекс разработки и тестирования. DevOps, что также включает в себя инструментарий CI/CD. Примером здесь может стать решение Azure DevOps Server, которая, в частности, предоставляет возможность интеграции с инструментами анализа сторонних разработчиков.

Характеристики статического анализатора SonarQube

Сервис распространяется по GNU LGPL-лицензии, созданный на языке Java и имеет открытый исходный код. Он обеспечивает выполнение непрерывного анализа кода (Continuous inspection) и измерение его качества в соответствии с известными семью показателями (Seven Axes of Quality):

  • Качество стиля кода;
  • Выявление потенциальных ошибок;
  • Комментарии;
  • Тестирование;
  • Дублирование фрагментов кода;
  • Степень сложности;
  • Архитектура и проектирование.

Соответствует стандартам MITRE/CWE, MISRA C/C++, CERT Secure Coding Standards и некоторым неформализованным международным требованиям.

Сервис обеспечивает мгновенную связь с разработчиком при работе в IDE-системе, что позволяет в реальном режиме времени исправлять ошибки еще до их фиксации в коде.

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

  • JavaScript;
  • Java;
  • AWS;
  • Ruby;
  • Scala;
  • Python;
  • HTML;
  • PHP;
  • Visual Basic;
  • C Sharp;
  • XML;
  • Kotlin;
  • Go;
  • та деякі інші.

Профессиональная версия программы имеет гораздо больший список технологий, в частности дополнительно поддерживаются Objective-C, C++, PL/SQL и другие.

Развертывание SonarQube на сервере Ubuntu 22.04

Для запуска программы необходимо выполнить предварительные условия и подготовить программную среду сервера. Укажем основные подготовительные этапы:

  • Создание пользователя с привилегиями sudo;
  • Обновление системы;
  • Установка OpenJDK 11;
  • Установка и настройка БД PostgreSQL;
  • Загрузка и установка SonarQube;
  • Настройка SonarQube.

Выполним поочередно каждый из этапов.

Создание пользователя с привилегиями sudo

Создадим нового пользователя с именем testing_sonar. Для этого введем в терминале:

$ adduser testing_sonar

Создание нового пользователя

Пользователя создано. Добавим его в группу sudo:

$ adduser testing_sonar sudo

Добавление пользователя r группе sudo

Результат: Adding user testing_sonar to group sudo Done, то есть пользователь был успешно добавлен в группу.

Изменим текущий аккаунт:

$ su -l testing_sonar

Замена текщего аккаунта

Обновление системы

Обновим индекс пакетов нашей системы в соответствии с содержанием репозитория:

$ sudo apt update

Обновление пакетов

Результат: 47 пакетов могут быть обновлены. Сделаем это с помощью следующей команды:

$ sudo apt upgrade -y

Процесс обновления пакетов

Процесс обновления пакетов

Обновление прошло успешно.

Установка OpenJDK 11

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

$ sudo apt install -y openjdk-11-jdk

Установка библиотек для ВМ JDK

Результат: openjdk-11-jdk is already the newest version (11.0.22+7-0ubuntu2~22.04.1), openjdk-11-jdk set to manually installed. То есть библиотеки уже установлены в системе.

Установка и настройка БД PostgreSQL

Сервис может сохранять результаты анализа в одной из известных баз данных:Microsoft SQL Server, PostgreSQL и Oracle. Кроме того, он имеет устроенную H2 базу,но ее желательно использовать только в процессе предварительного тестирования, а не в производственной среде. Для этого установим и настроим для нашего проекта базу PostgreSQL.

Прежде всего, добавим репозиторий PostgreSQL в список разрешенных источников данных для нашего пакетного менеджера:

$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'

Добаление репозитарию PostgreSQL в список разрешеннsых источников

После этого добавим ключ подписи PostgreSQL с помощью следующей команды:

$ wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -

Добавление ключа PostgreSQL

Инициируем процесс установки программы:

$ sudo apt install -y postgresql postgresql-contrib

Инсталяция PostgreSQL

Инсталяция PostgreSQL

Результат: Setting up postgresql-contrib (программа успешно установлена).

Настроим автоматический запуск при каждой перезагрузке:

$ sudo systemctl enable postgresql

Настройка автозапуска

Запустим сервер баз данных:

$ sudo systemctl start postgresql

Запуск сервера бд

Изменим пароль доступа к базе, установленный по умолчанию:

$ sudo passwd postgres

Замена пароля к базе данных

Пароль успешно изменен.

Переключимся на стандартного пользователя базы:

$ su - postgres

Смена пользователя бд

Можно убедиться, что пользователь изменился, что видно по виду приглашения командной строки:

postgres@dedicated:~$

Создадим пользователя сервиса SonarQube:

$ createuser sonar

Создание пользователя sonar

Подключимся к интерфейсу командной строки PostgreSQL:

$ psql

Подключение к интерфейсу PostgreSQL

Можно убедиться, что вид приглашения командной строки изменился:

postgres=#

Установим надежный пароль пользователя сервиса:

# ALTER USER sonar WITH ENCRYPTED password 'guVnWwyf';

Установка пароля

Создадим базу с именем SonarQube и назначим ее владельцем созданного нами пользователя sonar:

# CREATE DATABASE sonarqube OWNER sonar;

Создание базы данних и назначение пользователя

Результат: CREATE DATABASE (база успешно создана).

Установим администраторские права доступа для sonar к базе:

# GRANT ALL PRIVILEGES ON DATABASE sonarqube to sonar;

Установка администраторских прав

Выйдем из командного режима управления PostgreSQL:

# \q

Виход из командного режима PostgreSQL

При этом вид приглашения командной строки изменился:

postgres@dedicated:~$

Вернемся к аккаунту пользователя системы Ubuntu с именем testing_sonar:

$ exit

Возврат к аккаунту testing_sonar

Результат: Logout. При этом вид приглашения изменился:

testing_sonar@dedicated:~$

Загрузка и установка SonarQube

Для начала установим zip-архиватор, необходимое для выполнения операций с архивом программы. Для этого введем в терминале:

$ sudo apt install -y zip

Установка zip-архиватора

Результат: Setting up zip (утилита успешно установлена).

На сайте разработчиков сервиса SonarQube находим ссылку на скачивание файлов дистрибутива последней версии программы и начинаем процесс загрузки архива:

$ sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.4.87374.zip

Загрузка архива SonarQube

Результат:

--2024-02-27 12:03:17--  https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.4.87374.zip
Resolving binaries.sonarsource.com (binaries.sonarsource.com)... 18.172.242.16, 18.172.242.17, 18.172.242.114, ...
Connecting to binaries.sonarsource.com (binaries.sonarsource.com)|18.172.242.16|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 294636324 (281M) [binary/octet-stream]
Saving to: ‘sonarqube-9.9.4.87374.zip’
sonarqube-9.9.4.87374.zip     	100%[==========================================================>] 280.99M  11.5MB/s	in 25s
2024-02-27 12:03:42 (11.2 MB/s) - ‘sonarqube-9.9.4.87374.zip’ saved [294636324/294636324]

Программа была успешно загружена на сервер.

Распаковываем архив:

$ sudo unzip sonarqube-9.9.4.87374.zip

Распаковка архива

Распаковка архива

Перенесем полученные файлы в отдельный каталог:

$ sudo mv sonarqube-9.9.4.87374 /opt/sonarqube

Перенос файлов в каталог

Создадим группу сервиса SonarQube с именем sonar:

$ sudo groupadd sonar

Создание группы sonar

Создадим пользователя сервиса с именем sonar:

$ sudo useradd -d /opt/sonarqube -g sonar sonar

Здесь директория /opt/sonarqube установлена ??в качестве домашнего каталога нового пользователя.

Создание пользователя sonar

Установим полные права доступа пользователя sonar в директорию /opt/sonarqube:

$ sudo chown sonar:sonar /opt/sonarqube –R

Установка прав доступа к директории

Настройка SonarQube

Настройка сервиса заключается в установке нужных параметров конфигурации в файле sonar.properties, который находится в системном каталоге conf. Откроем указанный файл с помощью редактора и выставим в нем параметры, необходимые для подключения к базе данных:

$ sudo nano /opt/sonarqube/conf/sonar.properties

Параметры и их значение:

sonar.jdbc.username=sonar
sonar.jdbc.password=guVnWwyf
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube

Здесь прописаны имя пользователя базы данных, пароль входа и адрес jdbc-драйвера для подключения к базе PostgreSQL.

Внесем в файл указанные изменения, как показано ниже, и сохраним его на диске.

Редактирование файла

Отредактируем файл сценария для запуска программы, добавив к нему значение нужного параметра:

$ sudo nano /opt/sonarqube/bin/linux-x86-64/sonar.sh

Изменим значение параметра RUN_AS_USER, как показано ниже.

Изменение параметра RUN_AS_USER

Сохраним внесенные изменения и выйдем из редактора.

Создадим служебный файл systemd для запуска сервиса при загрузке системы с помощью редактора nano:

$ sudo nano /etc/systemd/system/sonar.service

Вставим в него следующий код:

[Unit]
Description=SonarQube service
After=syslog.target network.target
 
[Service]
Type=forking
 
ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop
 
User=sonar
Group=sonar
Restart=always
 
LimitNOFILE=65536
LimitNPROC=4096
 
[Install]
WantedBy=multi-user.target

Код systemd файла

Сохраним внесенные изменения и закроем файл.

Сервис использует Elasticsearch для хранения индексов в MMap FS, что требует внесения изменений в системные настройки. Для этого отредактируем конфигурационный файл sysctl:

$ sudo nano /etc/sysctl.conf

Добавим следующие параметры и их значение:

vm.max_map_count=262144
fs.file-max=65536
ulimit -n 65536
ulimit -u 4096

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

Код файла sysctl.conf

Закроем файл и перезагрузим систему:

$ sudo reboot

Включим автоматический запуск сервиса при загрузке системы:

$ sudo systemctl enable sonar

Включение автозапуска SonarQube

В результате была создана символическая ссылка:

Created symlink /etc/systemd/system/multi-user.target.wants/sonar.service → /etc/systemd/system/sonar.service.

Запустим службу SonarQube с помощью следующей команды:

$ sudo systemctl start sonar

Запуск службы SonarQube

После запуска службы мы можем открыть Панель управления программой, которая находится по веб-адресу: http://localhost:9000 .

 Панель управления SonarQube

Работа с собственным проектом

Создать и настроить проект можно с помощью уже запущенной Панели управления. Для входа в нее по умолчанию используется значение admin в качестве имени пользователя и пароля.

После входа выбираем команду «Создать новый проект» во вкладке «Проекты».

ВВводим значения параметров «Ключ проекта» и «Имя проекта», после чего кликаем по кнопке «Настроить».

Выбираем метод анализа для проекта – утилиту сканер SonarQube.

После этого загружаем и устанавливаем выбранный сканер в соответствии с управляющими сообщениями Панели управления.

Создадим в корневом каталоге проекта конфигурационный файл sonar-project.properties, в котором пропишем определенные параметры и их значение.

Создадим файл с помощью редактора nano:

$ sudo nano /opt/sonarqube/sonar-project.properties

Добавим к нему следующий список параметров:

sonar.projectKey=FgfH_hfEfdy
sonar.projectName=test
sonar.projectVersion=1.0
sonar.sources=src
sonar.language=java
sonar.sourceEncoding=UTF-8

Код файла sonar-project.properties

Сохраним внесенные изменения и выйдем из редактора.

Запуск сканера для анализа кода проекта

Сканер представляет собой отделенную утилиту, которую можно запустить как с командной строки, так и из Панели управления. После этого начнется процесс анализа кода выбранного проекта, например с именем test, как в нашем случае. После его завершения должно появиться сообщение, вроде следующего «EXECUTION SUCCESS», после чего можно переходить к анализу результатов.

Просмотр и анализ результатов сканирования кода

Результаты сканирования кода можно просмотреть в Панели управления. Для этого достаточно в разделе «Проекты» выбрать нужный проект. В нашем случае это проект с именем test.

Результаты сканирования кода

В появившемся окне можно увидеть несколько разделов, позволяющих просмотреть результаты анализа с нескольких позиций. К примеру, сканер сортирует ошибки по степени значимости по следующим категориям: Информационные, Незначительные, Серьезные, Критические и Блокирующие. Можно также просмотреть более подробно некоторые из ошибок, выбрав их в окне программы, как показано ниже.

Просмотр ошибок

Просмотр ошибок

Настройка профилей качества

Сервис включает в себя набор правил или профилей качества для каждого из поддерживаемых им языков программирования. Однако он также позволяет настроить профили под потребности конкретного проекта. Для этого необходимо в Панели управления выполнить следующие действия:

  • Перейти в раздел Профили качества;
  • Выбрать нужный язык;
  • Выбрать команду Создать в случае создания нового профиля, или Копировать при необходимости получить копию существующего;
  • Сохраните профиль под новым уникальным именем.

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

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

Создание нового профиля

Обновление профиля

Расширение возможностей SonarQube

Сервис позволяет автоматизировать процесс анализа кода путем интеграции с известными CI/CD инструментами Jenkins, Gradle, Azure Devops, GitLab CI и другими. Более подробно о вопросах интеграции с инструментами разработки можно ознакомиться в документации к программному продукту. Доступный набор плагинов и расширений для расширения возможностей сервиса можно посмотреть на SonarQube Marketplace.

Дата-центр FREEhost.UA предоставляет услуги облачных серверов для задач любой сложности. Наш VPS хостинг можно использовать как для собственных экспериментов, так и для размещения проектов с большой нагрузкой. Две локации размещения ВВС, ежедневный бекап, выделенный IPv4 адрес, круглосуточная техническая поддержка гарантируют Вам качественную и комфортную работу.

Подписывайтесь на наш телеграмм-канал https://t.me/freehostua, чтобы быть в курсе новых полезных материалов.

Смотрите наш канал Youtube на https://www.youtube.com/freehostua.

Мы в чем ошиблись, или что-то пропустили?

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

 
Дата: 04.03.2024
Автор: Александр Ровник
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
navigate
go
exit
Спасибо, что выбираете FREEhost.UA