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

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

![1197_codechecker_ru/image1.png](https://import.viva64.com/docx/blog/1197_codechecker_ru/image1.png)

[CodeChecker](https://github.com/Ericsson/codechecker) написан на Python и поддерживает множество анализаторов кода для самых разных языков\. Среди плюсов этого инструмента можно выделить простоту использования и установки\. Совсем недавно в CodeChecker появилась поддержка анализатора PVS\-Studio, поэтому в этой статье мы рассмотрим процесс настройки и использования этого инструмента совместно со статическим анализатором PVS\-Studio\.

## Установка CodeChecker

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

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

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

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

Поддержка анализатора PVS\-Studio во встроенном инструменте для преобразования отчётов report\-converter появится в [версии CodeChecker 6\.25\.0](https://pypi.org/project/codechecker/), однако использовать PVS\-Studio с CodeChecker можно уже сейчас\. Для этого нужно клонировать исходный код инструмента из [репозитория на GitHub](https://github.com/Ericsson/codechecker), а далее установить более свежую версию компонента `report-converter` из репозитория в виртуальное окружение, которое было создано этапом ранее:

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

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

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

```cpp
CodeChecker server
```

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

![1197_codechecker_ru/image2.png](https://import.viva64.com/docx/blog/1197_codechecker_ru/image2.png)

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

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

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

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

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

```cpp
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 его необходимо сохранить на сервер\. Для этого нужно выполнить следующую команду:

```cpp
CodeChecker store ./pvs_studio_reports -n default
```

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

![1197_codechecker_ru/image3.png](https://import.viva64.com/docx/blog/1197_codechecker_ru/image3.png)

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

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

![1197_codechecker_ru/image4.png](https://import.viva64.com/docx/blog/1197_codechecker_ru/image4.png)

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

* Unspecified;
* Low;
* Medium;
* High;
* Critical;
* Style\.

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


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



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

![1197_codechecker_ru/image5.png](https://import.viva64.com/docx/blog/1197_codechecker_ru/image5.png)

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

* **Confirmed bug** — срабатывание истинно и требует исправления;
* **False positive** — срабатывание ложно;
* **Intentional** — срабатывание истинно, но не требует исправления\.

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

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

![1197_codechecker_ru/image6.png](https://import.viva64.com/docx/blog/1197_codechecker_ru/image6.png)

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

![1197_codechecker_ru/image7.png](https://import.viva64.com/docx/blog/1197_codechecker_ru/image7.png)

## Итого

Держать код в порядке — важная задача, для которой нужны самые хорошие инструменты\. CodeChecker — это действительно удобный интерфейс для просмотра и разметки предупреждений анализаторов, в том числе и PVS\-Studio\. Подробнее об использовании анализатора PVS\-Studio в CodeChecker можно прочитать в посвящённом этому [разделе документации](https://pvs-studio.ru/ru/docs/manual/6819/)\.


> Помимо CodeChecker, статический анализатор PVS\\\-Studio интегрируется в такие системы контроля качества кода, как \[SonarQube\]\(https://pvs\-studio\.ru/ru/docs/manual/0037/\) и \[DefectDojo\]\(https://pvs\-studio\.ru/ru/blog/posts/1062/\), а попробовать PVS\\\-Studio можно \[по этой ссылке\]\(https://pvs\-studio\.ru/ru/pvs\-studio/try\-free/\)\\\.