Sonar cube что это
SonarQube. Проверяем код на качество
SonarQube — платформа для проверки кода на качество по правилам, основанным на соглашениях и стандартах. Поддерживает более 20 различных языков программирования.
Вот здесь можно посмотреть все эти правила.
Хочу поделиться небольшим руководством, как подружить sonarQube, PhpStorm и ваш проект. Все действия описаны для Windows, но все так же настраивается и под другую ОС.
Для начала необходимо скачать демон SonarQube (на данный момент последняя версия 5.1), который запустит сервер и будет хранить данные о ваших тестах. Распакуем его в папку
Затем скачаем плагин для языка программирования, который вы собираетесь проверять (для меня — это плагин PHP) и положим его в папку plugins
Для того, чтобы запустить саму проверку, необходим runner, который мы скачиваем там же и, если необходимо, прописывем его в системных переменных.
Так же необходимо настроить файлы конфигурации тестов. Для этого в корне вашего проекта создадим файл sonar-project.properties со следующим содержанием:
Перед тем, как запускать SonarQube, убедитесь, что на вашей машине стоит JavaVirtualMachine
Переходим в корень проекта и запускам от туда runner
После успешного выполнения появится текст, примерно такого содержания.
Если у вас тест падает, то для меня это было по нескольким причинам:
Неправильно прописанные конфиги. Например, папка, которая указана к проверке не существует
Не хватает памяти для JVM. Решается увеличениeм памяти для нашего демона:
Необходимо в настройках SonarQube
Теперь мы можем посмотреть на результаты теста по адресу:
В результатах можно посмотреть количество и виды ошибок, а так же подробно прочитать о каждой ошибке и примере ее исправления.
Скачаем сам плагин для IDE:
Зайдем в меню, для установки плагинов в PhpStorm: File->settings->plugins->BrowseRepositories
Найдем там SonarQube и установим его.
(Плагин разработан компанией Jetbrains, так что, скорее всего, его поддерживают и другие IDE этой компании).
Настраиваем плагин:
Зайдем в настройки плагина: File->settings->OtherSettings->SonarQube
Для начала настроим сервер, к которму будет обращаться плагин, чтобы получить результаты теста. Для этого кликнем на кнопку add и впишем настройки.
Затем загрузим результаты нашего теста. Для этого кликнем на зеленом плюсике, обновим список проектов кликнув по кнопке download resources, выберем наш проект и добавим его.
Теперь можно проинспектировать код, смотреть какие несоответствия со стандартами были допущены и исправлять их.
Проинспектируем код в PhpStorm: Code->InsectCode->wholeProject:
Надеюсь, моя инструкция кому нибудь пригодится.
DATAENGINER
SonarQube — универсальный инструмент для статического анализа кода, который стал более или менее отраслевым стандартом. С SonarQube также намного проще сохранять код чистым, простым и легким для чтения.
Вы когда-нибудь слышали о SonarQube? Вы хотите знать, что это такое? А как им пользоваться? И его преимущества для производственной фазы разработки программного обеспечения. Тогда вы попали в нужное место; в этом руководстве по SonarQube я расскажу вам о каждом аспекте SonarQube.
Что такое SonarQube?
onarQube — это платформа с открытым исходным кодом, разработанная SonarSource для непрерывной проверки качества кода. Sonar выполняет статический анализ кода, который предоставляет подробный отчет об ошибках, запахах кода, уязвимостях, дублировании кода.
Он поддерживает 25+ основных языков программирования через встроенные наборы правил, а также может быть расширен с помощью различных плагинов.
Преимущества SonarQube
Почему SonarQube?
Разработчики работают в жесткие сроки, чтобы предоставить заказчику необходимый функционал. Это настолько важно для разработчиков, что они часто идут на компромисс с качеством кода, потенциальными ошибками, дублированием кода и плохим распределением сложности.
Кроме того, они, как правило, оставляют неиспользуемые переменные, методы и т. д. В этом сценарии код будет работать желаемым образом.
Как вы думаете, это правильный способ реализации функциональности?
Чтобы избежать этих проблем в коде, разработчики всегда должны следовать хорошей практике кодирования, но иногда невозможно следовать правилам и поддерживать хорошее качество, поскольку может быть много причин.
Чтобы обеспечить непрерывную интеграцию и развертывание кода, разработчикам нужен инструмент, который не только работает один раз, чтобы проверить и сообщить им о проблемах в коде, но также отслеживать и контролировать код для непрерывной проверки качества кода. Чтобы удовлетворить все эти требования, на картинке представлен SonarQube.
Как настроить и использовать плагин sonarqube
В этом разделе объясняются шаги или процедуры по настройке плагина sonarqube для всех основных языков программирования.
Предпосылки:
Единственное предварительное условие для запуска SonarQube — наличие установленной на вашем компьютере Java (Oracle JRE 11 или OpenJDK 11). [ подробности ]
Установите системную переменную PATH: ( https://www.java.com/en/download/help/path.xml ) [https://www.java.com/en/download/help/path.xml]
Примечание. Для анализа кода JavaScript на компьютере, на котором выполняется сканирование, должен быть установлен Node.js> = 8. Если стандартный узел недоступен, вы должны установить для свойства sonar.nodejs.executable абсолютный путь к исполняемому файлу Node.js. [ подробности ]
Загрузки Sonarqube и Sonar Scanner:
Запустите сервер Sonarqube:
Чтобы запустить сервер сонара, откройте cmd или терминал и установите путь к папке bin sonarqube, выберите платформу и выполните следующую команду.
#For Windows(cmd): C:\sonarqube\bin\windows-x86-64>StartSonar.bat
#For other OS (terminal): C:\sonarqube\bin\[OS]>sonar.sh
После успешного запуска сервера сонара войдите в систему на http://localhost:9000 с учетными данными системного администратора (логин = admin, пароль = admin).
Создание и анализ проекта:
После завершения анализа вы можете либо просмотреть предоставленную ссылку, чтобы просмотреть отчет эхолота напрямую [Пример: http: // localhost: 9000 / dashboard? либо перейти в раздел проекта, чтобы просмотреть вновь созданный отчет сонара ваш проект.
Если вы хотите исключить некоторые файлы из анализа (например, тестовые файлы), перейдите в раздел администрирования и перейдите к настройке «Общие», выберите используемый язык программирования и задайте список шаблонов путей к файлам, которые следует исключить из анализа.
Теперь повторно запустите указанную выше команду анализа для обновленного отчета сонара.
Заключение
Цель SonarQube — в первую очередь расширить возможности разработчиков и создать открытое сообщество по вопросам качества и безопасности кода. Я надеюсь, что с помощью этого краткого руководства по sonarqube вы получите базовое представление о функциональных возможностях, и, если вы так считаете, оставьте комментарий и продемонстрируйте свою поддержку.
SonarQube: за качество кода отвечаем
Mar 19 · 6 min read
Сразу оговорюсь, что в настоящее время основное внимание я уделяю разработкам на JavaScript и, в частности, React, в связи с чем в статье будет встречаться терминология из этой области. Однако, учитывая мой богатый опыт в сфере программирования, настоятельно рекомендую ознакомиться с материалом, даже если вы предпочитаете другие фреймворки и языки, поскольку SonarQube поддерживает многие из них.
Большинство разработчиков, и мы с вами не ис к лючение, пишут, как им иногда кажется, совершенный код. Некоторые уже используют в IDE инструменты статического анализа, такие как ESLint, которые выявляют возможности улучшения каких-то частей кода в процессе его написания. Практика хорошая, и не стоит от нее отказываться.
Но здесь и сейчас будет представлен инструмент для повышения качества кода, выводящий этот процесс на новый уровень — SonarQube. Вы узнаете:
В статье будет рассмотрена открытая версия для сообщества. SonarQube невероятно полезный инструмент, так что я с радостью поделюсь своими знаниями о нем.
Что такое SonarQube?
Иначе говоря, она не выполняет код, а лишь просматривает его. Причем, можете мне поверить, делает это очень тщательно. Неудивительно, что у SonarQube довольно внушительный список клиентов и репутация одного из востребованных инструментов статического анализа кода.
Завершив сканирование кода, о чем будет рассказано далее, SonarQube формирует отчет, который можно посмотреть в GUI через браузер. Все обнаруженные проблемы представляют собой “интерактивные тикеты”, позволяющие писать к ним комментарии, делегировать их другим пользователям, открывать или закрывать и т. д.
К подробному описанию проблемы сразу же прилагается соответствующий код.
Можно поймать себя на мысли, что такие распространенные инструменты, как ESLint, делают то же самое непосредственно в процессе написания кода, в чем я, однако, не уверен. Интуиция мне подсказывает, что SonarQube обеспечивает намного более высокое качество по широкому спектру тем, таких как код с запашком, ошибки и уязвимости системы безопасности.
Речь идет не просто об отчете, а о сложно структурированном “живом” наборе данных, который осуществляет постоянный контроль за проектом и сообщает его владельцам о текущем состоянии качества. При этом он позволяет другим участникам проекта совместно работать над этим состоянием. Проблемы можно обсуждать и делегировать, что весьма способствует сотрудничеству.
По моему мнению, именно в возможности совместной работы состоит самое существенное преимущество SonarQube перед такими инструментами, как ESLint, используя который, “разработчик решает проблему собственными силами”.
Установка SonarQube (открытая версия для сообщества)
Установка сервера SonarQube (приложение Java) не представляет сложности. Вы можете:
Самый простой способ — запустить Docker-контейнер. Из документации вы узнаете, как скачать ZIP-файл и локально его распаковать.
Перед выполнением следующей команды убедитесь, что Docker у вас уже локально установлен:
Обратите внимание, что эта команда запустит SonarQube, но в момент удаления контейнера все данные будут потеряны. Можно выполнить ее ради эксперимента. Если же вы решите продолжить работу с SonarQube, советую закрыть этот контейнер и настроить тома данных. Имеются в виду каталоги, которые находятся в локальном компьютере и сохраняются в случае закрытия или обновления Docker-контейнера. Документация содержит пошаговую инструкцию к этому процессу.
В рамках данной статьи для запуска SonarQube будет достаточно вышеуказанной команды.
Создание нового проекта
Авторизуйтесь с помощью предустановленных учетных данных ( admin : admin ) и создайте новый проект.
Запомните ключ проекта и токен, поскольку они нам в дальнейшем понадобятся.
Первое сканирование проекта
В корневом каталоге проекта создайте файл sonar-project.properties со следующим содержимым:
Первая строка кода содержит ключ, полученный при создании проекта SonarQube в GUI.
Настало время просканировать файлы. В корневом каталоге проекта выполните данную команду:
Работа сканера займет несколько секунд, после чего в GUI в браузере вы сможете изучить отчет. Если проект содержит высоко качественный код, то результаты будут представлены в следующем виде:
При наличии в коде ошибок, уязвимостей, проблемных зон в системе безопасности, запашков или дублированных строк отчет примет совершенно другой вид. Поскольку GUI прост и понятен, я не буду вдаваться в детали.
Дополнительная информация
При настройке и применении SonarQube также следует знать следующее:
Заключение
Как видите, проще простого настроить SonarQube и поэкспериментировать с ним. Без особого труда вы также разберетесь в принципах составления отчетов и в работе GUI. Так что нет ничего, что помешало бы вам начать его использовать.
Вам доступна быстро настраиваемая открытая версия для сообщества, благодаря которой вы получаете высококачественный код.
Этот инструмент отлично подходит для командного взаимодействия, поскольку позволяет всем участникам совместно работать над качеством кода в проектах. SonarQube можно интегрировать в конвейеры и веб-сайты, например GitHub, а GitLab поддерживает его по умолчанию.
SonarQube: за качество кода отвечаем
Сразу оговорюсь, что в настоящее время основное внимание я уделяю разработкам на JavaScript и, в частности, React, в связи с чем в статье будет встречаться терминология из этой области. Однако, учитывая мой богатый опыт в сфере программирования, настоятельно рекомендую ознакомиться с материалом, даже если вы предпочитаете другие фреймворки и языки, поскольку SonarQube поддерживает многие из них.
Большинство разработчиков, и мы с вами не исключение, пишут, как им иногда кажется, совершенный код. Некоторые уже используют в IDE инструменты статического анализа, такие как ESLint, которые выявляют возможности улучшения каких-то частей кода в процессе его написания. Практика хорошая, и не стоит от нее отказываться.
Но здесь и сейчас будет представлен инструмент для повышения качества кода, выводящий этот процесс на новый уровень — SonarQube. Вы узнаете:
В статье будет рассмотрена открытая версия для сообщества. SonarQube невероятно полезный инструмент, так что я с радостью поделюсь своими знаниями о нем.
Что такое SonarQube?
“SonarQube — это платформа с открытым исходным кодом, разработанная SonarSource, для непрерывной оценки качества кода путем статического анализа”.
Иначе говоря, она не выполняет код, а лишь просматривает его. Причем, можете мне поверить, делает это очень тщательно. Неудивительно, что у SonarQube довольно внушительный список клиентов и репутация одного из востребованных инструментов статического анализа кода.
Завершив сканирование кода, о чем будет рассказано далее, SonarQube формирует отчет, который можно посмотреть в GUI через браузер. Все обнаруженные проблемы представляют собой “интерактивные тикеты”, позволяющие писать к ним комментарии, делегировать их другим пользователям, открывать или закрывать и т. д.
К подробному описанию проблемы сразу же прилагается соответствующий код.
Можно поймать себя на мысли, что такие распространенные инструменты, как ESLint, делают то же самое непосредственно в процессе написания кода, в чем я, однако, не уверен. Интуиция мне подсказывает, что SonarQube обеспечивает намного более высокое качество по широкому спектру тем, таких как код с запашком, ошибки и уязвимости системы безопасности.
Речь идет не просто об отчете, а о сложно структурированном “живом” наборе данных, который осуществляет постоянный контроль за проектом и сообщает его владельцам о текущем состоянии качества. При этом он позволяет другим участникам проекта совместно работать над этим состоянием. Проблемы можно обсуждать и делегировать, что весьма способствует сотрудничеству.
По моему мнению, именно в возможности совместной работы состоит самое существенное преимущество SonarQube перед такими инструментами, как ESLint, используя который, “разработчик решает проблему собственными силами”.
Установка SonarQube (открытая версия для сообщества)
Установка сервера SonarQube (приложение Java) не представляет сложности. Вы можете:
Самый простой способ — запустить Docker-контейнер. Из документации вы узнаете, как скачать ZIP-файл и локально его распаковать.
Перед выполнением следующей команды убедитесь, что Docker у вас уже локально установлен:
Обратите внимание, что эта команда запустит SonarQube, но в момент удаления контейнера все данные будут потеряны. Можно выполнить ее ради эксперимента. Если же вы решите продолжить работу с SonarQube, советую закрыть этот контейнер и настроить тома данных. Имеются в виду каталоги, которые находятся в локальном компьютере и сохраняются в случае закрытия или обновления Docker-контейнера. Документация содержит пошаговую инструкцию к этому процессу.
В рамках данной статьи для запуска SonarQube будет достаточно вышеуказанной команды.
Создание нового проекта
Авторизуйтесь с помощью предустановленных учетных данных ( admin : admin ) и создайте новый проект.
Запомните ключ проекта и токен, поскольку они нам в дальнейшем понадобятся.
Первое сканирование проекта
В корневом каталоге проекта создайте файл sonar-project.properties со следующим содержимым:
Первая строка кода содержит ключ, полученный при создании проекта SonarQube в GUI.
Настало время просканировать файлы. В корневом каталоге проекта выполните данную команду:
Работа сканера займет несколько секунд, после чего в GUI в браузере вы сможете изучить отчет. Если проект содержит высоко качественный код, то результаты будут представлены в следующем виде:
При наличии в коде ошибок, уязвимостей, проблемных зон в системе безопасности, запашков или дублированных строк отчет примет совершенно другой вид. Поскольку GUI прост и понятен, я не буду вдаваться в детали.
Дополнительная информация
При настройке и применении SonarQube также следует знать следующее:
Заключение
Как видите, проще простого настроить SonarQube и поэкспериментировать с ним. Без особого труда вы также разберетесь в принципах составления отчетов и в работе GUI. Так что нет ничего, что помешало бы вам начать его использовать.
Вам доступна быстро настраиваемая открытая версия для сообщества, благодаря которой вы получаете высококачественный код.
Этот инструмент отлично подходит для командного взаимодействия, поскольку позволяет всем участникам совместно работать над качеством кода в проектах. SonarQube можно интегрировать в конвейеры и веб-сайты, например GitHub, а GitLab поддерживает его по умолчанию.
Контролируем качество кода с помощью платформы SonarQube
В этой статье мы рассмотрим основные возможности SonarQube — платформы для непрерывного анализа и измерения качества кода, а также обсудим достоинства методики оценки качества кода на основе метрик SonarQube.
Введение
Наша компания занимается разработкой статического анализатора кода PVS-Studio. Мы убеждены, что выбор подходящей методологии разработки и следование ей, применение доказавших свою эффективность методик и инструментов существенно повышает вероятность того, что код будет написан правильно, и конечный продукт будет соответствовать требуемым стандартам качества. Одной из таких методологий является использование статического анализа исходного кода. Статический анализ, применяемый вместе с другими метриками кода, позволяет оценить текущее состояние кодовой базы, динамику этого состояния, возможные риски при реализации проекта.
Для начала расскажу вкратце о представлении результатов анализа PVS-Studio. Результаты работы нашего статического анализатора PVS-Studio сохраняются в формате xml. Список сообщений об обнаруженных ошибках можно открыть прямо в окне Microsoft Visual Studio или в отдельной утилите Standalone, и работать с этими ошибками, используя возможности навигации по коду, сортировки, фильтрации, подавления ложных срабатываний и т.д.
Список найденных ошибок в формате xml можно преобразовать в один из форматов, удобных для чтения, например, html. Такие отчеты с результатами анализа можно рассылать всем заинтересованным участникам проекта по почте. Другой способ оповещения участников проекта — рассылка списков ошибок тем разработчикам, которые их допустили. Для этого пользователи могут использовать специальные утилиты, поставляемые в дистрибутиве PVS-Studio.
Говоря о возможностях PVS-Studio, следует упомянуть о функциональности для массового подавления диагностических сообщений. Если статический анализ был внедрен на поздних этапах жизненного цикла приложения, когда объем кодовой базы достиг большого размера, инспекция кода может привести к обнаружению большого количества ошибок. Возможно, в данный момент времени у команды отсутствуют ресурсы, необходимые для исправления всех ошибок. В этом случае разработчики могут скрыть все сообщения, выданные на текущей ревизии кода, и сконцентрироваться на ошибках, найденных во вновь написанном или модифицированном коде.
Динамику количества ошибок, найденных PVS-Studio, можно получить, используя функциональность Analysis Statistics плагина PVS-Studio для Microsoft Visual Studio или утилиты Standalone:
Перечисленные способы представления результатов работы нашего статического анализатора, однако, существуют сами по себе и не связаны с другими метриками кода, такими как количество строк кода, цикломатическая сложность, количество ошибок на 1000 строк кода, уровень покрытия кода модульными тестами, дублирование и так далее. Отчет о найденных ошибках после очередного анализа и количество этих ошибок не дает ответов на вопросы: много у нас ошибок или мало? Как динамика количества ошибок связана с ростом кодовой базы? Улучшается или ухудшается качество кода? И, наверное, самый главный вопрос менеджеров: когда все будет работать (сколько времени потребуется, чтобы устранить ошибки)? Эти вопросы заставили нас задуматься о том, как придать отчетам PVS-Studio большую ценность и информативность.
Почему же полезно собирать и контролировать метрики кода? Невозможно улучшить то, что вы не измеряете. Предположим, какая-то команда не собирает метрики кода. С развитием проекта кодовая база может становиться все хуже и хуже, и долгое время никто этого даже не заметит, пока в какой-то момент объем технического долга не достигнет такого размера, что поддержка и добавление новой функциональности будет стоить дороже и дороже. Если бы команда постоянно отслеживала метрики кода, она бы видела динамику состояния своего проекта и, по достижению определенных пороговых значений, начала бы бить тревогу.
Далее, допустим, команда осознала проблему и убедила своего менеджера в том, что необходимо потратить ресурсы на улучшение качества кода. Менеджер, в свою очередь, задаст команде несколько простых вопросов: сколько времени понадобится на это команде? Какие части проекта необходимо улучшить? Сколько багов вы собираетесь исправить? По каким критериям вы оцените, что качество кода достигло требуемого уровня, и можно снова вернуться к разработке новой функциональности? Использование метрик позволит ответить на все эти вопросы. Если перед началом работ по улучшению качества кода команда зафиксирует текущее состояние кода по каждому компоненту продукта и определит пороговые значения для каждой метрики, достижение которых позволит с определенной степенью уверенности заявить, что код продукта стал качественным, можно спрогнозировать дату окончания работ и остановиться тогда, когда определенные пороговые значения будут достигнуты. Так, например, команда сможет показать менеджеру, что после окончания работ по повышению качества кода уровень покрытия модульными тестами достиг 90%, следование стандартам кодирования, принятым в компании, достигло 95%, а дублирование кода сократилось до 5%, и т.д.
Почему SonarQube?
SonarQube — это платформа с открытым исходным кодом, предназначенная для непрерывного анализа и измерения качества кода. SonarQube предоставляет следующие возможности:
Мы тщательно изучили возможности платформы SonarQube и решили, что эти возможности могут быть интересны нашим клиентам. Поэтому мы приняли решение о разработке плагина для импорта результатов анализа PVS-Studio.
Приблизительно в это же время один из наших клиентов выразил заинтересованность во внедрении централизованного хранилища различных метрик кода. Клиент разрабатывает очень крупный (более 10 миллионов строк кода) и долгосрочный (более 15 лет активной разработки) проект. Естественно, в таком проекте очень много унаследованного кода и связанных с ним скелетов в шкафу, и в этом случае, на мой взгляд, совершенно необходимо разработать и внедрить набор метрик, позволяющих оценить состояние кода проекта и динамику изменений этого состояния во времени. Естественно, наш клиент давно принял решение о сборе и анализе метрик, и внедрил различные утилиты для мониторинга показателей качества кода, таких как: покрытие кода модульными тестами, результаты прогона тестов, дублирование блоков кода, следование принятым стандартам кодирования, плотность комментариев в коде и т.д. Параллельно со сбором этих метрик ежедневно выполнялся статический анализ кода. Использование большого количества утилит приводило к усложнению конфигурации сервера непрерывной интеграции, написанию дополнительных скриптов для преобразования результатов работы каждой утилиты в удобный для представления вид и объединения всех показателей в единый отчет. Такой подход требовал значительных ресурсов на создание и поддержку этой системы отчетности.
Исходя из потребностей клиента и нашего исследования возможностей платформы SonarQube, мы предложили внедрить эту платформу. Что и было сделано. В рамках задачи по внедрению был реализован плагин для SonarQube, позволяющий импортировать в SonarQube результаты анализа PVS-Studio. Процесс развертывания SonarQube и его интеграции с имеющимся окружением (сборочная система, сервер непрерывной интеграции, система контроля версий) не вызвал затруднений благодаря логичным механизмам настройки и большого количества подробной документации. Были настроены виджеты, позволяющие оценивать как состояние портфолио проектов клиента в целом, так и состояние каждого проекта в отдельности, настроены Quality Profiles и Quality Gates (об этих механизмах SonarQube я расскажу ниже) согласно потребоностям клиента, автоматическое назначение задач на исполнителей, рассылка уведомлений всем заинтересованным лицам.
В результате внедрения SonarQube клиент получил централизованную систему хранения и отображения метрик кода, позволяющую оценивать и прогнозировать риски проекта. Переход от отдельных инструментов к централизованной системе контроля качества кода не только упрощает развертывание и поддержку этой системы, но и позволяет совершить качественный скачок в сфере управления проектами, предоставляя всем заинтересованным участникам средства для мониторинга состояния проекта и принятия взвешенных решений. После тестовой эксплуатации клиент принял решение о включении SonarQube в действующий набор инструментов ALM (Application Lifecycle Management).
Следует отметить, что SonarQube, благодаря своим широким возможностями интеграции с другими инструментами, легко может стать неотъемлемой частью вашего фреймворка ALM. С помощью плагинов в SonarQube можно добавить поддержку Git, SVN, Mercurial, Team Foundation Version Control, ClearCase, настроить авторизацию через LDAP, GitHub, Bitbucket, Azure Active Directory, импортировать результаты работы сторонних анализаторов. Плагины SonarLint для IntelliJ IDEA, Eclipse и Visual Studio позволяют анализировать код в режиме реального времени в вашей любимой IDE, используя правила, определенные в профиле SonarQube. Также доступна интеграция с Team Foundation Server и Visual Studio Team Services. Вы можете запустить анализ кода и импорт данных в SonarQube прямо из сборочного процесса в этих системах, или, например, управлять состоянием сборок в Team Foundation Server и Visual Studio Team Services с помощью Quality Gates (индикаторов качества сборки), настронных в SonarQube: если код не удовлетворяет требованиям Quality Gate, сборка будет считаться неудавшейся. Таким образом, разработчики SonarQube стремятся сделать свой продукт максимально открытым и позволить командам разработчиков интегрировать SonarQube в их окружение.
Для каких же проектов и команд целесообразно внедрять SonarQube? Я считаю, что для относительно короткосрочных проектов (не более 2 — 3 месяцев), которыми занимаются небольшие команды (не более 5 человек), инвестиции во внедрение SonarQube в процесс разработки могут не оправдаться. Как правило, такие проекты не требуют больших затрат на поддержку продукта. Для таких проектов я бы рекомендовал ограничиться отдельными инструментами для контроля состояния кода проекта: статический анализатор, контроль покрытия кода тестами, соответствие стандартам кодирования и т.д., которые команда привыкла использовать.
На крупных проектах, требующих значительных ресурсов, с продолжительным жизненным циклом, внедрение платформы SonarQube в процесс разработки оправдано. Причем внедрение SonarQube может принести пользу на любой стадии развития проекта. Оптимальная, на мой взгляд, стратегия — это внедрение SonarQube на ранних этапах цикла разработки, что позволит команде с самого начала анализировать отчеты о контроле качества и быть уверенными в том, что соблюдаются заданные стандарты качества кода. Внедрение SonarQube на более поздних этапах разработки потенциально может потребовать больших затрат на улучшение качества кода. Так, например, может выясниться, что статический анализ обнаружил большое количество потенциальных ошибок, присутствует большой объем технического долга, код не покрыт тестами, публичные API не документированы и т.д. Тем не менее, выявление рисков продукта на любой стадии жизненного цикла позволяет правильно отреагировать на эти риски и спланировать действия по их минимизации.
Например, команда может договориться, что при изменении какого-то участка кода в рамках разработки новой функциональности будет ликвидирован весь технический долг в этом коде. Инвестиции в устранение найденных недостатков позволят в дальнейшем снизить стоимость поддержки продукта и разработки нового функционала. Также, если продукт давно присутствует на рынке, и, несмотря на то, что инспекция качества кода выявила большое количество проблем, поведение в продукционной среде достаточно стабильно и в текущий момент времени нет достаточных ресурсов для улучшения качества кодовой базы, можно отложить эту инвестицию. SonarQube предоставляет возможность сфокусироваться на проблемах, появившихся в новом коде. Эта функциональность похожа на функциональность массового подавления сообщений в PVS-Studio.
Как SonarQube помогает оценить качество кода
В основе модели качества SonarQube лежит реализация методологии SQALE (Software Quality Assessment based on Lifecycle Expectations) с определенными дополнениями. Как известно, методология SQALE фокусируется в основном на сложности поддержки кода (maintainability) и не учитывает риски проекта. Например, если сегодня в проекте обнаружилась критическая проблема безопасности, строгое следование методологии SQALE обязывает вас устранить все уже существующие проблемы с надежностью (reliability), возможностью изменений (changeability), тестируемостью (testability) и т.д., и только затем вернуться к новой критической проблеме. На самом деле, если потенциальные проблемы существуют в коде давно и не проявляют себя в виде пользовательских баг-репортов, гораздо важнее сфокусироваться на исправлении новых багов.
С учетом этого, разработчики SonarQube модифицировали модель качества, основанную на SQALE, чтобы акцентировать внимание на следующих важных моментах:
PVS-Studio и SonarQube
Для импорта результатов анализа в SonarQube мы разработали плагин sonar-pvs-studio-plugin. Использование плагина позволяет добавлять сообщения, найденные анализатором PVS-Studio, в базу сообщений сервера SonarQube. Плагин содержит репозиторий с описанием диагностик, которые выполняет наш статический анализатор. После того, как вы добавите наш плагин в SonarQube, вы увидите репозиторий с названием PVS-Studio для языков C, C++ и C#:
Диагностические сообщения PVS-Studio в репозитории плагина сопровождаются подробными описаниями ошибок с примерами кода и рекомендациями по устранению проблемы:
После статического анализа кода проекта и импорта результатов в SonarQube, с помощью фильтров вы можете, например, выбрать все неисправленные проблемы, найденные PVS-Studio:
Чтобы добавить результаты анализа PVS-Studio в SonarQube, достаточно установить плагин sonar-pvs-studio-plugin, добавить диагностики PVS-Studio из репозитория плагина в Quality Profile и передать путь до файла отчета PVS-Studio в свойстве sonar.pvs-studio.reportPath при запуске сканера SonarQube.
Для анализа проектов MSBuild разработчики SonarQube рекомендуют использовать SonarQube Scanner for MSBuild. Этот сканер представляет из себя обертку над стандартным сканером SonarQube и облегчает процесс создания конфигурационного файла сканера sonar-project.properties, автоматически добавляя в него модули (проекты в решении) и записывая пути до исходных файлов, которые необходимо проанализировать.
Однако мы столкнулись с важными с нашей точки зрения ограничениями сканера SonarQube Scanner for MSBuild.
Во-вторых, SonarQube Scanner for MSBuild не добавляет для анализа исходные файлы, расположенные выше по дереву каталогов, чем каталог, в котором находится проектный файл. Сообщения для таких файлов будут также отсутствовать в SonarQube.
Исходя из этих ограничений, для импорта результатов анализа PVS-Studio мы рекомендуем использовать стандартный сканер SonarQube. Использование этого сканера предполагает создание конфигурационного файла sonar-project.properties вручную. Использование и настройка сканера описаны в статье Analyzing with SonarQube Scanner.
По умолчанию, сканер SonarQube индексирует исходные файлы для анализа, расположенные по дереву каталогов ниже, чем файл решения (.sln) либо проекта (.vcxproj/.csproj). Для анализа проектов со сложной структурой, где исходные файлы могут находиться выше по дереву каталогов, чем файл решения или проекта, в свойстве sonar.projectBaseDir нужно указать наивысший общий каталог для всех исходных файлов (в крайнем случае, это может быть корень диска), и в свойстве sonar.sources затем перечислить директории, в которых следует искать исходные файлы для анализа (либо полные пути до исходных файлов).
Процесс добавления путей до исходных файлов в свойство sonar.sources для больших проектов может быть достаточно трудоемким, а с учетом всех подключаемых заголовочных файлов — и нетривиальным. Чтобы облегчить эту задачу, мы реализовали специальный режим работы нашего анализатора, позволяющий автоматически создавать конфигурационные файлы для сканера SonarQube.
При разработке нашего статического анализатора мы фокусируемся на поиске ошибок в коде, и не поддерживаем поиск потенциальных уязвимостей и code smells, поэтому при использовании нашего плагина для SonarQube метрики Security и Maintainability не будут заполнены. Также следует отметить, что в текущей версии нашего плагина не реализовано вычисление Duplications, Complexity и Documentation.
Заключение
В этом обзоре я попытался показать, как SonarQube позволяет внедрить и применять практики контроля качества кода на основе метрик. Как сказал Питер Друкер (или, возможно, это был Уильям Деминг): if you can’t measure it, you can’t improve it. Регулярный сбор метрик кода, анализ их изменения с течением времени позволяет обнаруживать, что технический долг накапливается, поддерживаемость кода снижается, что приводит к увеличению стоимости разработки нового функционала и повышению рисков, связанных с поставкой новых версий продукта. Приведу цитату из книги «Программист-прагматик. Путь от подмастерья к мастеру» Эндрю Ханта и Дэвида Томаса:
«Не оставляйте «разбитые окна» (неудачные конструкции, неверные решения или некачественный текст программы) без внимания. Как только их обнаружите, чините сразу. Если нет времени на надлежащий ремонт, забейте окно досками. Наверняка вы сможете закомментировать ошибочный фрагмент или вывести на экран сообщение «В стадии разработки», или использовать фиктивные данные. Необходимо предпринять хотя бы малейшее действие, чтобы предотвратить дальнейшее разрушение, и показать, что вы контролируете ситуацию.
Мы видели, как безошибочные, функциональные системы быстро портились, как только окна начали разбиваться. Существуют и другие факторы, которые вносят свой вклад в порчу программ, и мы коснемся некоторых из них далее, но небрежность ускоряет порчу быстрее, чем любой другой фактор.
Вы можете подумать, что ни у кого не будет времени обойти «разбитые окна» проекта и отремонтировать их. Если вы продолжаете думать подобным образом, тогда вам лучше спланировать приобретение мусорного контейнера или переехать в другой район города. Не давайте энтропии победить себя.«.
Платформа SonarQube позволяет обнаруживать такие «разбитые окна». Используя SonarQube, вы получите доступ к консолидированным отчетам о состоянии кода проекта, смотреть, как это состояние меняется с течением времени, сможете исследовать обнаруженные проблемы методом анализа «сверху вниз», от значения интересующей вас метрики для всего проекта в целом до конкретного участка кода прямо в окне браузера. SonarQube также предоставляет оценку времени, необходимого для устранения проблем в коде. Таким образом, если в вашем проекте накопился большой объем технического долга, вы всегда можете сказать, сколько вам нужно времени для его устранения.
Из интересных и полезных особенностей SonarQube хочу также отметить его широкие возможности для интеграции с другими инструментами, что делает его частью вашего ALM-фреймворка, и возможности расширения сушествующего функционала благодаря использованию сторонних плагинов. И вся эта мощь и удобство доступны под свободной лицензией бесплатно. Если вы используете статический анализатор PVS-Studio, наш плагин позволит вам импортировать результаты анализа в SonarQube, чтобы использовать его возможности для исследования проблем с качеством кода.
Если возможности платформы SonarQube вас заинтересовали, попробуйте ее в своем окружении. Установка SonarQube очень проста и заключается лишь в извлечении файлов дистрибутива из архива и запуске исполняемого файла под вашу операционную систему.
Также вы можете проверить свои проекты, написанные на языках C/C++ или C#, с помощью статического анализатора PVS-Studio.
Полезные ссылки
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Pavel Kusnetsov. Control source code quality using the SonarQube platform.