• База знань
  • /
  • Блог
  • /
  • 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

Додвавання користувача до групи 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 в список дозволених джерел

Після цього додамо ключ підпису 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