﻿# Всё, что вы хотели знать о PVS\-Studio и не постеснялись спросить

В последнее время мы усилили наше присутствие на различных профильных IT\-конференциях в России и за рубежом\. На большинстве мероприятий стараемся стоять со стендом, на некоторых выступаем с докладами\. Конференции позволяют не только повысить узнаваемость нашего продукта \(статический анализатор кода PVS\-Studio\), но и, главное, ближе познакомиться с потенциальными и действующими пользователями\. Общаясь с посетителями на стенде, наши сотрудники часто отвечают на однотипные вопросы, которые иногда бывают довольно курьёзными\. В данной статье я постараюсь ответить на наиболее часто задаваемые вопросы посетителей о статическом анализе вообще и PVS\-Studio в частности\.

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

Для начала немного юмора на тему "Ожидание и реальность"\. Мы пишем достаточно много статей и наивно полагаем, что если уж люди их читают, то они хотя бы в общих чертах знают о нашем продукте и его особенностях\. К сожалению, это не всегда так\. Вот пример реального общения с посетителем на одной из последних конференций\. Посетитель: "Читаем ваши статьи на Хабре\. Интересно\. Жалко, что ваш анализатор нам совсем не подходит\. У нас все исходники секретные, наружу мы их не можем отправлять\. А у вас же там всё _на облаке работает_\."

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

Вероятно, нашему отделу маркетинга есть над чем поработать\. 

Далее я приведу другие распространённые вопросы от среднестатистического посетителя нашего стенда на выставке, а также ответы на них в формате импровизированного диалога\.



Q: Что\-то слышал про вас\. Откуда вы, что делаете, и как узнать о вас подробнее?

A: Мы небольшая независимая команда из Тулы\. Разрабатываем PVS\-Studio \- статический анализатор кода для языков C, C\+\+, C\#, Java\. Подробнее о нас можно узнать на [сайте PVS\-Studio](https://pvs-studio.ru/ru/pvs-studio/)\. Также мы пишем статьи и размещаем их в [нашем блоге](https://pvs-studio.ru/ru/blog/posts/), на [Хабре](https://habr.com/ru/company/pvs-studio/blog/) и других ресурсах\.



Q: Что за статический анализ? В нашей команде нам вполне хватает предупреждений компилятора и совместных обзоров кода\.

A: Компилятор способен указать только на грубые и довольно очевидные ошибки\. Например, недостижимый код или использование неинициализированных переменных\. Выявление ошибок для компилятора \- побочная задача\. Да, в последнее время компиляторы стали довольно интеллектуальными\. Но любой специализированный инструмент для поиска ошибок в коде значительно превосходит компилятор, позволяя проводить детальный анализ кода и выявлять опечатки, логические ошибки, потенциальное использование нулевых указателей/ссылок и т\.п\.

Совместные обзоры кода \- неплохая, проверенная временем технология\. Но и она имеет недостатки, связанные с необходимостью привлечения дополнительных сотрудников к работе над чужим кодом\. Это увеличивает стоимость разработки, при этом вероятность пропустить ошибку или добавить новую остаётся, так как человеку свойственно ошибаться\.

Статический анализ \- это проверка исходного кода программы без необходимости её выполнения\. Мы рекомендуем использовать инструменты статического анализа кода как _дополнительный_ барьер на пути ошибок\.



Q: PVS\-Studio анализирует исполняемые файлы или непосредственно исходный код?

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

PVS\-Studio анализирует_ исходный код_\. Это позволяет выявлять намного больший круг ошибок и потенциальных уязвимостей, увеличивает скорость работы и даёт более достоверные результаты\.

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



Q: А какие возможности интеграции? Есть ли у вас плагины для каких\-либо IDE?

A: В настоящее время PVS\-Studio интегрируется в Visual Studio 2010\-2017 в качестве плагина\. Есть Java\-плагин для IntelliJ IDEA\. Также благодаря специализированному модулю вы можете управлять CMake проектами в Qt Creator и CLion\.

Анализатор постоянно развивается, поэтому самую актуальную информацию о возможностях продукта вы можете узнать, посетив [наш сайт](https://pvs-studio.ru/ru/pvs-studio/)\.



Q: Мы используем SonarQube\.

A: Отличный выбор\. Плагин PVS\-Studio для SonarQube позволит импортировать результаты анализа в SonarQube и работать с ними привычным образом\.



Q: Хорошо, мне нужно как\-то встроить анализ в нашу сборочную систему\.

A: PVS\-Studio можно использовать из командной строки\. Анализатор содержит большой набор настроек для решения широкого круга задач\. Также, независимо от сценария использования, мы оказываем помощь нашим клиентам на этапе внедрения анализатора и техническую поддержку во всё время действия лицензии\.



Q: Как попробовать ваш анализатор?

A: Воспользоваться [страницей загрузки](https://pvs-studio.ru/ru/pvs-studio/download/), скачать необходимый дистрибутив и поработать с PVS\-Studio в режиме триала\. Если вам необходимо дополнительное время для оценки нашего продукта или вас не устраивают ограничения демонстрационной версии, [свяжитесь с нами](https://pvs-studio.ru/ru/about-feedback/)\.

Также на выставках наши посетители могут получить Enterprise\-ключ, срок действия которого \- один месяц\. Для этого просто приходите на наш стенд с единорогом\. К тому же, вы можете стать участником лотереи и получить приз от PVS\-Studio\.



Q: Я студент, можно ли использовать PVS\-Studio бесплатно?

A: Это возможно при условии добавления в ваш исходный код комментариев специального вида\. Файлы, отмеченные таким образом, будут проверяться на наличие ошибок без каких\-либо ограничений\. Более подробно о данном режиме работы можно узнать из статьи "[Как использовать PVS\-Studio бесплатно](https://pvs-studio.ru/ru/blog/posts/0457/)"\.



Q: Кто ваши клиенты?

A: На данный момент нашими клиентами стали уже более 200 компаний по всему миру\. Сфера их деятельности весьма разнообразна\. Со списком действующих клиентов можно ознакомиться на [нашем сайте](https://pvs-studio.ru/ru/about/customers/)\.



Q: Так у вас есть локальный режим работы или нет?

A: Анализатор PVS\-Studio устанавливается локально на выделенный компьютер \(компьютеры\) и может работать полностью изолированно\. Подключение к интернету необходимо для получения обновлений, а также быстрого перехода по ссылкам на документацию \(описание диагностик и т\.п\.\) из плагинов\. В настоящее время мы продумываем варианты работы через "облако", но это будет дополнение к стандартному режиму работы\.



Q: А чем конкретно вы лучше, допустим, анализатора Coverity?

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

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



Q: Я не понял, так вы ищете ошибки только в некомпилируемом коде? То есть программа даже не прошла проверки компилятора?

A: Это не так\. PVS\-Studio ищет и находит ошибки только в скомпилированных программах\. В реально действующих приложениях\. Эти программы не просто компилируются без ошибок, некоторые из них проверяются другими анализаторами\. И всё равно мы выискиваем там ошибки\. Про это мы часто пишем [статьи](https://pvs-studio.ru/ru/blog/inspections/) в нашем блоге, проверяя проекты с открытым кодом\.



Q: А какие ошибки PVS\-Studio сможет выявить в нашем проекте? Только опечатки?

A: Опечатки, конечно, относятся к классу классических ошибок, обнаруживаемых при статическом анализе\. Но помимо этого, PVS\-Studio потенциально может выявить еще _несколько сотен паттернов_ ошибок\. Примеры: разыменование нулевого указателя, деление на ноль, условие всегда ложно или истинно, некорректные операции с индексом, выход за границу массива и многие другие\. Полный перечень ошибок приведен на странице [документации](https://pvs-studio.ru/ru/docs/warnings/)\.



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

A: Нет\. PVS\-Studio не является инструментом доказательства правильности программ\. Это отдельный класс инструментов\. Задача нашего анализатора \- максимально быстро и достоверно _указать_ на _потенциальную_ ошибку в коде\. Решение об ошибочности той или иной конструкции всегда принимает разработчик, используя контекст возникновения ошибки и свои знания о проекте\. А анализатор помогает разработчику, по возможности сводя к минимуму число ложных срабатываний и предоставляя дополнительные возможности по обработке списка полученных предупреждений\. 



Q: Как именно работает PVS\-Studio? Что за механизмы поиска ошибок? Наверное, вы используете регулярные выражения\.

A: Использование регулярных выражений крайне неэффективно\. Оно позволяет находить лишь самые примитивные ошибки, например, в условиях \(сравнивают два одинаковых подвыражения\):

```cpp
if ((a+b+с) == (a+b+с)) {....}
```

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

```cpp
if ((a+b+с) == (b+a+с)) {....}
```

Анализатор PVS\-Studio гораздо интеллектуальнее и использует следующие механизмы:

* Сопоставление с шаблоном \(pattern\-based analysis\) на базе абстрактного синтаксического дерева\.
* Построение семантической модели с последующим выводом типов \(type inference\)\.
* Символьное выполнение \(symbolic execution\), позволяющее вычислять значения переменных, которые могут приводить к ошибкам, а также проверять диапазоны значений \(range checking\)\.
* Анализ потока данных \(data\-flow analysis\)\.
* Аннотирование методов \(method annotations\)\.

Более подробно всё это описал мой коллега Андрей Карпов в недавней статье "[Технологии, используемые в анализаторе кода PVS\-Studio для поиска ошибок и потенциальных уязвимостей](https://pvs-studio.ru/ru/blog/posts/cpp/0592/)"\. 



Q: Хорошо, у нас проект на С/С\+\+, 15 лет разработки и пять миллионов строк кода\. Нам реально начать использовать PVS\-Studio сейчас?

A: Да\. На этапе внедрения будет необходимо однократно провести полную проверку вашего проекта\. Затем все полученные предупреждения \(вероятно, их будет немало\) можно отметить как пока неинтересные \(временно подавить их вывод\), чтобы вернуться к этому техническому долгу позже\. После этого вы сможете использовать PVS\-Studio для регулярной проверки только нового кода\. Более подробно об этой и других возможностях анализатора можно узнать на [странице документации](https://pvs-studio.ru/ru/docs/)\.



Q: Как часто надо запускать проверку? И что, всю кодовую базу каждый раз проверять?

A: Наиболее эффективное использование статического анализа предполагает как можно более частые проверки нового кода\. Для этого в PVS\-Studio реализован режим инкрементального анализа\. На проверку подаются файлы, в которые были внесены изменения с момента последней сборки проекта\. Есть и другие режимы работы\. Это позволяет выявлять ошибки уже на этапе разработки, что снижает риск их попадания в релиз\.



Q: Мы используем PVS\-Studio\. Анализатор находит ошибки, но многие из них в неиспользуемом коде или тестах\. Это нормально?

A: Вполне нормально\. Одна из особенностей статического анализа, в отличие от динамического, проверка _всей_ кодовой базы, а не только выполняемого при запуске кода\. Допустим, вы потратили много времени и сил на отладку кода программы, и все работает стабильно\. Но есть функция, которая редко используется, или вообще пока не используется\. Вероятность нахождения ошибки в такой функции высока\. И когда в один прекрасный момент функцию начнут использовать, что\-то может пойти не так\. Применение статического анализа позволит минимизировать риски возникновения такой ситуации\.

Также в коде могут содержаться заведомо некорректные конструкции \(обычно это бывает в тестах\), поэтому часто их имеет смысл исключить из проверки \(указав проекты или пути\) через настройки PVS\-Studio\. Однако иногда сами тесты содержат ошибки\. Такие ситуации достаточно сложно выявить, и в данном случае решение должен принимать разработчик\.



Q: А как насчёт поиска уязвимостей?

A: Анализатор PVS\-Studio является инструментом SAST \(Static Application Security Testing\) и позволяет выявлять _потенциальные_ уязвимости, классифицируемые согласно [CWE](https://cwe.mitre.org/) \(Common Weakness Enumeration\)\. Предупреждения CWE во многом пересекаются с классическими предупреждениями PVS\-Studio\. Подробнее про SAST вы можете узнать из [документации](https://pvs-studio.ru/ru/pvs-studio/sast/)\. Важно понимать, что _потенциальные_ уязвимости не обязательно приводят к реальным уязвимостям, которые могут быть использованы хакером\. Выявленные уязвимости классифицируют по [CVE](https://cve.mitre.org/) \(Common Vulnerabilities and Exposures\)\. Тем не менее, устранение _потенциальных_ уязвимостей однозначно способствует повышению безопасности программы и минимизирует риск выявления реальных уязвимостей в будущем\.



Q: Я руковожу командой разработчиков\. Как именно мне поможет использование PVS\-Studio?

A: Помимо повышения качества и надёжности кода, внедрение PVS\-Studio позволит решать и чисто управленческие задачи, связанные, например, с разделением ответственности\. В состав поставки анализатора входит утилита BlameNotifier, которая позволяет автоматически определять сотрудников, которые отправили ошибочный код в систему контроля версий\. При этом производится рассылка почтовых уведомлений как исполнителю, так и его руководителю\.

Также вы можете настроить конвертацию отчётов об ошибках в любую удобную для вас форму, включая детализированный html\-отчёт, удобный для использования руководителем\.

Наконец, в случае применения SonarQube вы можете использовать все преимущества этого инструмента для обеспечения непрерывного контроля качества кода, выгружая в SonarQube результаты проверки проекта анализатором PVS\-Studio при помощи специализированного плагина\.



Q: Используете или планируете использовать машинное обучение?

A: Это большая и интересная тема\. Мы планируем написать про это статью критического плана\. Сейчас же озвучу только пару коротких мыслей\.

Незачем делать калькулятор методом машинного обучения\. Есть определённое правило \(формула\), и его надо применить к коду и сделать какой\-то вывод\. Непонятно, зачем настраивать нейронную сеть для выявления нового паттерна ошибки, когда эти паттерны уже существуют, и надо просто правильно их применить\. И, главное, непонятно где взять базу для такого обучения\. Где та выборка из сотен тысяч проектов с выписанными ошибками, на которых можно обучиться? 

Единственное, где, на наш взгляд, может иметь смысл применение алгоритмов машинного обучения, это фильтрация ложных срабатываний\.



Q: Проверяете ли вы код PVS\-Studio при помощи PVS\-Studio?

A: Конечно\! Более того, в случае обнаружения ошибок, список виновных предаётся огласке с их последующим отлучением от холодильника с мороженым\. А если серьёзно, мы считаем, что очень полезно применять собственный инструмент\. Это позволяет взглянуть на продукт с точки зрения пользователя и заметить некоторые недостатки\.



Q: Как получить ваши замечательные статусы для рабочего стола и брендированную шапку\-ушанку?

A: Приходите на наш стенд с единорогом на ближайшей выставке, где мы будем присутствовать со стендом\. Что\-нибудь придумаем :\)

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

Надеюсь, я сумел ответить на наиболее популярные вопросы посетителей наших стендов на выставках\. Конечно, бывают и более сложные вопросы, для ответа на которые может потребоваться написание отдельной статьи\. 

При общении с посетителями мы стараемся донести главную мысль: статический анализ \- не панацея от всех бед, но его использование очень полезно для здоровья \(ваших программ\)\. Используйте PVS\-Studio и не болейте\!

В заключение ещё раз приведу ряд полезных ссылок:

* [Сайт PVS\-Studio](https://pvs-studio.ru/ru/pvs-studio/)
* [Попробовать PVS\-Studio](https://pvs-studio.ru/ru/pvs-studio/download/)
* [Купить PVS\-Studio](https://pvs-studio.ru/ru/order/)
* [Как использовать PVS\-Studio бесплатно](https://pvs-studio.ru/ru/blog/posts/0457/)
* [Документация](https://pvs-studio.ru/ru/docs/)
* [Поиск потенциальных уязвимостей](https://pvs-studio.ru/ru/pvs-studio/sast/)
* [Наш блог](https://pvs-studio.ru/ru/blog/posts/)
* [Обратная связь](https://pvs-studio.ru/ru/about-feedback/)