CodeChecker — контроль качества кода с использованием PVS-Studio

CodeChecker — довольно популярный Open Source инструмент контроля качества кода для Linux и macOS. В этой небольшой заметке расскажем о том, как его использовать вместе с анализатором PVS-Studio.

ba530f8ffe8a9c0fa4a7b32a5d51ab55.png

CodeChecker написан на Python и поддерживает множество анализаторов кода для самых разных языков. Среди плюсов этого инструмента можно выделить простоту использования и установки. Совсем недавно в CodeChecker появилась поддержка анализатора PVS-Studio, поэтому в этой статье мы рассмотрим процесс настройки и использования этого инструмента совместно со статическим анализатором PVS-Studio.

Установка CodeChecker

Для того, чтобы использовать CodeChecker, нам понадобится интерпретатор Python версии 3.8 и выше. Инструмент распространяется как Python пакет, поэтому для его установки нам понадобится выполнить несколько незамысловатых команд.

Сначала необходимо создать виртуальное окружение Python, затем установить пакет codechecker и запустить сервер.

Вариант команд для Linux:

python3 -m venv .venv
source ./venv/bin/activate
pip3 install codechecker

Поддержка анализатора PVS-Studio во встроенном инструменте для преобразования отчётов report-converter появится в версии CodeChecker 6.25.0, однако использовать PVS-Studio с CodeChecker можно уже сейчас. Для этого нужно клонировать исходный код инструмента из репозитория на GitHub, а далее установить более свежую версию компонента report-converter из репозитория в виртуальное окружение, которое было создано этапом ранее:

cd tools/report-converter/
python setup.py install

Для корректного отображения уровня диагностик PVS-Studio необходимо скачать файл codechecker.json и положить его в место установки CodeChecker. В случае нашего примера это директория .venv/share/codechecker/config/labels/analyzers. Название файла в этой директории нужно изменить на pvs-studio.json.

После этого для запуска сервера CodeChecker потребуется лишь выполнить одну команду:

CodeChecker server

По умолчанию сервер CodeChecker располагается по адресу http://localhost:8001. Сразу после запуска будет создан продукт, который можно использовать.

40d8e8272fb45a7d6a79c73b40d7b162.png

Преобразование отчёта

CodeChecker использует свой формат отчёта, в который нужно преобразовать отчёт анализатора PVS-Studio. С этим нам поможет встроенный инструмент CodeChecker, который называется report-converter. В него можно передать .json отчёт PVS-Studio с помощью следующей команды.

report-converter -t pvs-studio -o ./pvs_studio_reports ./PVS-Studio.json

Флаг -t указывает, отчёт какого анализатора мы хотим преобразовать, флаг -o указывает на каталог, в который report-converter сохранит преобразованный отчёт, а последним передаётся путь до отчёта PVS-Studio.

Если отчёт PVS-Studio сохранён не в .json формате, преобразовать его можно с помощью утилиты plog-converter следующей командой:

plog-converter -t json -a 'GA:1,2;OWASP:1' 
   -o /home/user/Logs/PVS-Studio.json PVS-Studio.log

Флаг -t указывает на формат отчёта после преобразования, -a — на группы диагностик PVS-Studio, которые нужно оставить в выходном отчёте, -o — на путь сохранения преобразованного отчёта, а последним параметром передаётся путь до отчёта, который нужно преобразовать.

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

CodeChecker store ./pvs_studio_reports -n default

После флага -n необходимо передать название запуска CodeChecker. В результате выполнения этой команды на странице нашего продукта default появится запуск с названием default.

aa4b6a90fa88c277c1430ffa8b04aed3.png

Просмотр отчёта

Теперь можно перейти к просмотру и обработке предупреждений, выданных анализатором. Чтобы увидеть список всех срабатываний, необходимо нажать на название запуска, после чего появится вот такой список:

416cfe6ed099579caa7820f78cf60a8c.png

Срабатывания в CodeChecker делятся на разные уровни:

  • Unspecified;

  • Low;

  • Medium;

  • High;

  • Critical;

  • Style.

Дабы придерживаться общей классификации предупреждений PVS-Studio в разных инструментах, срабатывания анализатора классифицируются как Low, Medium и High, а сообщения об ошибках в работе анализатора попадают в категорию Unspecified.

Примечание. Если в списке срабатываний все предупреждения имеют уровень Unspecified, вам следует положить в локацию установки CodeChecker файл с разметкой уровней диагностик PVS-Studio. О том, как это сделать, было сказано чуть выше в пункте «Установка CodeChecker».

Благодаря веб-интерфейсу CodeChecker срабатывания анализатора можно отфильтровать по самым разным параметрам: по уровню достоверности, названию диагностического правила и др. Нажав на конкретное срабатывание, можно увидеть место в коде, где таится жучок.

c268032985dc58cca94c8abe16809bd5.png

Также в CodeChecker есть возможность размечать предупреждения, выставляя Review status того или иного срабатывания. Каждому предупреждению можно поставить один из следующих статусов:

  • Confirmed bug — срабатывание истинно и требует исправления;

  • False positive — срабатывание ложно;

  • Intentional — срабатывание истинно, но не требует исправления.

При выставлении предупреждению статуса False positive оно более не будет отображаться в списке, в том числе при следующих запусках. При изменении статуса срабатывания также можно оставить комментарий, например, о том, как быстро нужно поправить эту ошибку.

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

d042ef776e002e21437445edf7e01b05.png

После нажатия на кнопку Diff в списке будут только срабатывания, которые появились при новом запуске:

77061c6f95bed55a05c79514a04784c9.png

Итого

Держать код в порядке — важная задача, для которой нужны самые хорошие инструменты. CodeChecker — это действительно удобный интерфейс для просмотра и разметки предупреждений анализаторов, в том числе и PVS-Studio. Подробнее об использовании анализатора PVS-Studio в CodeChecker можно прочитать в посвящённом этому разделе документации.

Помимо CodeChecker, статический анализатор PVS-Studio интегрируется в такие системы контроля качества кода, как SonarQube и DefectDojo, а попробовать PVS-Studio можно по этой ссылке.

Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Valerii Filatov. CodeChecker—code quality control using PVS-Studio.

© Habrahabr.ru