Анализатор кода PVS-Studio (мастер-класс) DevOps и эксплуатация
C#-разработчик в команде PVS-Studio. Участвует в разработке ядра C#-анализатора, занимается созданием новых диагностик и DevOps-утилит. Автор статей о проверке opensource-проектов.
hrenov@viva64.com
C++/С#-разработчик в команде PVS-Studio. Участвует в разработке ядра C++-анализатора и плагина интеграции с платформой SonarQube, занимается созданием новых диагностик и DevOps-утилит. Автор статей о проверке opensource-проектов.
8 апреля, 14:00
Разработчики PVS-Studio продемонстрируют, как можно эффективно использовать инструменты статического анализа, как статический анализ может быть включен в CI (на примере стека «Docker + Jenkins + Maven + Java-анализатор PVS-Studio»).
Также будет показан процесс интеграции сторонних плагинов (SonarJava, SpotBugs, PVS-Studio) в SonarQube для централизованного сбора и обработки результатов работы различных анализаторов.
Другие доклады секции DevOps и эксплуатация
PVS-Studio
Мы разрабатываем, продвигаем и продаем статический анализатор C, C++, C# и Java кода PVS-Studio. Это инструмент для программистов, который экономит деньги компаний за счет раннего обнаружения программных ошибок путем анализа исходного кода. Работает в среде Windows, Linux и macOS.
Наша миссия — повышение качества программ. Наша задача — не найти какие-то ошибки, а повысить качество и уровень разработки программного обеспечения. Мы продаём миру идею использования статического анализа кода в целом. Использование методологии статического анализа экономит время при разработке, делает программистов более ответственными, дополнительно контролирует новичков и экономит деньги и нервы конечных пользователей программ. И мы должны донести информацию о статическом анализе всему миру. Доносим мы это не абстрактно, а конкретно, предлагая использовать наш анализатор PVS-Studio. Мир благодарен нам за это, что находит отражение в приобретении лицензий.
PVS-Studio выполняет статический анализ кода и генерирует отчёт, помогающий программисту находить и устранять ошибки и потенциальные уязвимости. PVS-Studio выполняет широкий спектр проверок кода, но наиболее силён в поисках опечаток и последствий неудачного Copy-Paste. Показательные примеры таких ошибок: V501, V517, V522, V523, V3001.
Основная ценность статического анализа заключается в его регулярном использовании, благодаря чему многие ошибки могут быть выявлены и устранены на самых ранних этапах. Нет смысла тратить 50 часов на поиск ошибки, которую можно найти благодаря анализу кода. Но еще раз подчеркнем. Основная польза статического анализа не в том, чтобы найти одну запрятанную ошибку в день перед релизом. А регулярно устранять десятки обычных ошибок день за днем.
- Страница продукта PVS-Studio.
- Примеры обнаруживаемых ошибок
- Блог
- Как 10 лет назад начинался проект PVS-Studio
Контакты
Вы можете задать любые вопросы, воспользовавшись формой обратной связи на нашем сайте или написав на почтовый ящик support@viva64.com.
Активность
Использование PVS-Studio для поиска ошибок в C# проектах
В ходе митапа посмотрим на интересные ошибки, обнаруженные в таких известных проектах, как Unity, Mono, PowerShell и пр. Поговорим о том, как эти ошибки обнаруживаются, о принципах работы анализатора. Обсудим, как наиболее эффективно использовать PVS-Studio в новом проекте или внедрить в уже существующий. Заинтересовались, и есть о чём спросить? Приходите – обсудим!
Devops / другое
Новые возможности PVS-Studio: анализ кода на языке Java
Хотите посмотреть на ошибки из таких проектов, как Jenkins, IntelliJ IDEA, SonarQube и услышать, как PVS-Studio их обнаруживает? Интересуют принципы работы анализатора и используемые механизмы? Хотите проверить свой проект и есть о чём спросить? Ждём вас на митапе, где и обсудим эти вопросы.
Devops / другое
Возможности PVS-Studio по выявлению ошибок и потенциальных уязвимостей в коде на языке С и C++
Будут продемонстрированы интересные ошибки и потенциальные уязвимости, обнаруженные в открытых проектах с помощью статического анализатора кода PVS-Studio. Подробно разберём эти ошибки и расскажем, как именно анализатор их обнаруживает. После чего, основываясь на вопросах из аудитории, будет рассказано о принципах работы анализатора и тех возможностях, которые вызовут наибольший интерес у слушателей.
+7 (495) 646-07-68 support@ontico.ru 125040, Москва, Нижняя ул., д. 14, стр. 7, подъезд 1, оф. 16 ООО «Конференции Олега Бунина»
Служба поддержки и бухгалтерия: support@ontico.ru Сотрудничество: organization@ontico.ru Для докладчиков: — DevOps-секции: speakers.devops@ontico.ru — Остальные секции: speakers.highload@ontico.ru
PVS-Studio для Visual Studio 2022
Команда PVS-Studio пишет много статей на разные интересные темы. Но вот вопросы взаимодействия с самим анализатором затрагиваются редко. Исправим этот недочёт обзорной статьёй, описывающей плагин PVS-Studio для среды Visual Studio 2022.

Что такое статический анализ кода и зачем он нужен
Статический анализ кода – это процесс выявления ошибок и недочётов в исходном коде программ. Статический анализ можно рассматривать как автоматизированный процесс обзора кода. Совместный обзор кода – замечательная методология. Но у неё есть и существенный недостаток – высокая стоимость. Необходимо регулярно собирать нескольких программистов для изучения нового кода или повторной проверки кода после внесения рекомендаций.
С одной стороны, хочется регулярно осуществлять обзор кода. С другой – это слишком дорого. Компромиссным решением являются инструменты статического анализа кода. Они без устали обрабатывают исходные тексты программ и выдают программисту рекомендации обратить повышенное внимание на определенные участки кода. Конечно, программа не заменит полноценного обзора кода, выполняемого коллективом программистов. Однако соотношение польза/цена делает использование статического анализа весьма эффективной практикой, применяемой многими компаниями. Если читателя интересуют конкретные числа, то предлагаю познакомиться со статьёй «PVS-Studio ROI».
Существует большое количество коммерческих и бесплатных статических анализаторов кода. Их список имеется на сайте Wikipedia: List of tools for static code analysis. Список языков, для которых существуют статические анализаторы кода, также достаточно велик (Си, Си++, C#, Java, Ada, Fortran, Perl, Ruby, . ). Естественно, мы будем рассказывать вам об анализаторе PVS-Studio.
Главное преимущество статического анализа состоит в возможности существенного снижения стоимости устранения дефектов в программе. Чем раньше ошибка выявлена, тем меньше стоимость её исправления. Так, согласно данным, приведённым в книге Макконнелла «Совершенный Код», исправление ошибки на этапе тестирования обойдётся в десять раз дороже, чем на этапе конструирования (написания кода):

Инструменты статического анализа позволяют выявить большое количество ошибок на этапе конструирования, что существенно снижает стоимость разработки всего проекта. Например, статический анализатор кода PVS-Studio может запускаться в фоновом режиме сразу после компиляции и в случае нахождения потенциальной ошибки уведомит программиста. Подробнее об этом режиме будет рассказано ниже.
Статический анализатор кода PVS-Studio
PVS-Studio – статический анализатор, выявляющий ошибки и потенциальные уязвимости в исходном коде приложений на языках C, C++ (также поддерживаются расширения: C++/CLI и C++/CX), C# и Java на платформах Windows, Linux и macOS. Анализатор интегрируется в среды Visual Studio 2010 – 2022, IntelliJ IDEA и Android Studio, JetBrains Rider и CLion. В этой статье мы подробно рассмотрим работу PVS-Studio для проверки кода на языках C, C++ и C# в Visual Studio. Вы также можете почитать про использование PVS-Studio в других IDE по соответствующим ссылкам:
- JetBrains Rider и CLion;
- IntelliJ IDEA и Android Studio (использование PVS-Studio в Android Studio аналогично IntelliJ IDEA).
После установки PVS-Studio и интеграции в Visual Studio пользователи получают дополнительный пункт «PVS-Studio» в меню Extensions и окно для работы с предупреждениями анализатора.

Начальные настройки
Анализатор готов к работе сразу после установки. В большинстве случаев вам не потребуется ничего настраивать, чтобы осуществить первый запуск. Единственная настройка, которая может понадобиться вам в начале, это исключение сторонних библиотек. Вы ведь всё равно не будете ничего править в исходных файлах, например, библиотеки jpeg, поэтому незачем её проверять. Вдобавок исключение лишних папок сократит время анализа проекта. Исключаемые из анализа директории задаются здесь: Extensions > PVS-Studio > Options. > Don’t Check Files > PathMasks.

Если в полном пути файла есть одно из указанных имён, то анализ выполняться не будет. По умолчанию, в список уже включены имена некоторых директорий. Однако в вашем проекте папка с библиотекой zlib может называться не «zlib», а, например, «zip_lib». Поэтому следует отредактировать этот список. Для начала редактирования следует нажать кнопку с тремя точками.
Примеры допустимых масок для списка PathMasks:
- c:\Libs\ — будут исключены все файлы проекта, расположенные в данной папке и её подпапках;
- \Libs\ или *\Libs\* — будут исключены все файлы, расположенные в директориях, путь до которых содержит подпапку «Libs». Если символы «*» не указаны, они все равно будут автоматически добавлены, поэтому оба варианта записи одинаковы.
- Libs или *Libs* — исключены будут все файлы, путь до которых содержит подпапку, имеющую ‘Libs’ в качестве имени либо фрагмента имени. Также в этом случае будут исключены файлы, содержащие Libs в имени, например, c:\project\mylibs.cpp. Во избежание путаницы рекомендуем всегда использовать слеши.
Помимо исключений целых папок можно задавать маски для исключения отдельных файлов. Для этого существует настройка FileNameMasks. Подробнее, как работать со списками исключений, можно познакомиться в документации: Settings: Don’t Check Files.
Проверка проекта
По завершении первичных настроек вы можете приступить к проверке проекта. PVS-Studio для Visual Studio поддерживает проверку C++ (.vcxproj) и C# (.csproj) проектов. Также можно проверить решение, содержащее проекты таких типов, целиком. Для этого выберите пункт меню Extensions > PVS-Studio > Check > Solution.

Также возможно запустить анализ только на определённых проектах и/или файлах, выбранных в Solution Explorer. Для этого после выбора элементов в Solution Explorer необходимо нажать правой кнопкой мыши и выбрать пункт Analyze with PVS-Studio:

Если с проверкой возникнут какие-то трудности, мы рекомендуем обратиться к разделу «Не удаётся проверить?» на нашем сайте. Это не бестолковые рекомендации в духе «проверьте, что вилка вставлена в розетку». В разделе описаны типовые ситуации, с которыми к нам обращались пользователи, и предложены варианты действий. Если вы не нашли решение вашей проблемы в документации, то напишите нам в поддержку.
Работа со списком предупреждений анализатора
После проверки все предупреждения анализатора будут отображены в специальном окне. Окно имеет много элементов для управления. Все они служат для того, чтобы показать именно те предупреждения анализатора, которые интересны пользователю. Однако в первый момент окно может показаться сложным. Давайте рассмотрим все управляющие элементы.

- Собственно, окно PVS-Studio.
- Дополнительное меню. Позволяет получить доступ к таким опциям, как пометка предупреждения ложным, скрытие сообщений, добавление файлов в исключения (об этом ниже).
- Кнопка включает сообщения «что-то пошло не так». Например, не удаётся препроцессировать один из файлов.
- Переход к предыдущему/следующему предупреждению. При этом открывается соответствующий файл, и курсор ставится на строку с потенциальной ошибкой. Также, чтобы выбрать диагностику из списка, совершите двойной клик мышью. Можно назначить горячие клавиши для осуществления переходов к предыдущему/следующему предупреждению. По умолчанию это Alt+'[‘ и Alt+’]’.
- Кнопки, включающие предупреждения разных уровней. Сейчас включены все уровни диагностик. При этом в окне показывается 312 предупреждений первого уровня, 1354 предупреждений второго уровня и 1405 третьего. Уровень предупреждения показывается в левой части окна в виде полоски, соответствующей по цвету полоске на кнопке уровня.
- Активные наборы диагностических правил. General — диагностики общего назначения, Optimization — микрооптимизации, 64-bit — 64-битные диагностики, OWASP – предупреждения, соответствующие стандарту OWASP ASVS или относящиеся к OWASP Top-10. Сейчас в окне отображаются не все виды предупреждений.
- Показывает количество предупреждений, помеченных как ложные (false positives). Включить/выключить отображение размеченных предупреждений можно в настройках, Extensions > PVS-Studio > Options. > Specific Analyzer Settings > Display False Alarms.
- Быстрые фильтры. Можно, например, оставить в списке только предупреждения с кодом V501, находящиеся в проекте XYZ.
- Некоторые диагностики предлагают обратить внимание не на одну, а на несколько строк, которые могут находиться в разных файлах. В этом случае рядом с именем файла появляется многоточие. Кликнув по нему мышкой, можно увидеть список строк в файлах и выбрать одну из них. При двойном клике мышкой на элементе списка произойдет переход к указанной строке в файле.
Таблица с предупреждениями анализатора разбита на следующие колонки:
- Уровень. Уровень достоверности, что найдена именно ошибка. 1-й уровень (красный) — наиболее подозрительные места. 3-й (жёлтый) — скорее всего, несущественная неточность в коде;
- Звездочка. У неё нет конкретного назначения. Пользователь может интерпретировать её по своему усмотрению. Например, он может отметить наиболее интересные предупреждения для дальнейшего внимательного анализа. Аналогия — отметка звёздочками писем в почтовой программе типа Thunderbird или Outlook.
- ID. Уникальный номер предупреждения. Может пригодиться при работе с большим списком. Например, можно перейти к предупреждению с определенным номером (см. пункт «Navigate to ID. » в контекстном меню). Можно отключить эту колонку, используя контекстное меню.
- Code. Код предупреждения. Если щелкнуть по нему мышкой, то откроется страница с описанием предупреждения.
- CWE. Позволяет идентифицировать предупреждение по CWE ID (Common Weakness Enumeration). При нажатии на ссылку можно посмотреть описание данного CWE в сети. Можно отключить эту колонку, используя контекстное меню.
- SAST. Тот же функционал, что описан выше, только для стандартов MISRA, AUTOSAR, SEI CERT или OWASP. Можно отключить эту колонку, используя контекстное меню.
- Message. Текст предупреждения анализатора.
- Project. Имя проекта. Можно отключить эту колонку, используя контекстное меню.
- File. Имя файла. Важно! Обратите внимание, что после некоторых имён файлов стоит многоточие. Пример: «FileName.cpp(. )». Кликнув на ячейку таблицы с именем файла, вы получите список всех строк кода (эти строки могут находиться в разных файлах), которые относятся к этому предупреждению. При этом есть возможность перейти к каждой из строк в списке.
- Line. Номер строки, на которую было выдано предупреждение.
- FA. Индикатор того, что предупреждение анализатора отмечено как ложно-положительное.
Да, прочитать всё это было утомительно. Однако, уверяю вас, начав пользоваться, вы быстро освоитесь с инструментом. И нажимать что-то для настройки будете крайне редко.
Отображение лучших предупреждений анализатора
При первом использовании анализатора результат может напугать и/или запутать разработчика, потому что в отчёте анализатора может оказаться огромное количество предупреждений о потенциальных ошибках и уязвимостях. Учитывая данный сценарий, в плагин для Visual Studio был добавлен механизм Best Warnings. Кнопка для включения/отключения данного механизма расположилась в меню Additional Actions:

Данный механизм вычисляет лучшие предупреждения анализатора при помощи ряда критериев, назначенных каждой диагностике. Более подробную информацию о данном механизме вы можете найти в соответствующем разделе документации.
Фильтр лучших предупреждений анализатора предназначен для более приятного первого знакомства с PVS-Studio, поэтому мы не советуем использовать его на регулярной основе.
Контекстное меню
Итак, по двойному клику мышки на сообщении вы переходите к нужному фрагменту кода. По нажатию правой кнопки мышки открывается контекстное меню.
Меню достаточно простое, и не стоит перегружать статью описанием каждого из пунктов. Если что-то непонятно, можно подсмотреть в документации.
Также некоторым пунктам контекстного меню назначено сочетание горячих клавиш, что позволяет более быстро и удобно обрабатывать результаты анализа.
Однако стоит упомянуть одну очень полезную фичу. Помните, что в настройках можно добавить папки/файлы для исключения. Так вот, добавлять что-то намного проще, чем кажется!
Обратите внимание на пункт «Don’t check files and hide all messages from. «. При нажатии на него выпадает список путей, которые можно добавить в исключение.

Можно выбрать как отдельный файл, так и одну из директорий. На рисунке показано, что выбирается папка «Sources\Sandbox.Game\Game\Entities». Это значит, что все файлы в этой папке и всех подпапках будут исключены из анализа. Более того, все сообщения, относящиеся к этим файлам, сразу исчезнут из списка. Не нужно перезапускать анализ, чтобы убрать все сообщения, относящиеся к тестам.
Режим инкрементального анализа
Введение в PVS-Studio будет неполным, если не рассказать об одной из важнейших возможностей – инкрементальном анализе кода.
Чем раньше ошибка найдена, тем дешевле её устранение. Идеально сразу подчеркивать ошибки в редактируемом тексте программы. Однако это технически сложно и ресурсоёмко. Поэтому PVS-Studio запускается в фоновом режиме в тот момент, когда исправленный код успешно скомпилирован. Таким образом ищутся ошибки в только что изменённом коде. О том, что происходит анализ, можно судить по иконке в системной области уведомлений.

Когда ошибка найдена, появляется всплывающее окошко, предупреждающее об опасности.

Если кликнуть мышкой на иконку или всплывающее окно, то откроется IDE с результатом проверки проекта и можно будет изучить подозрительные фрагменты кода.
На самом деле, чем описывать этот режим, проще попробовать поработать с ним. Вы пишете код, как и раньше. А, если надо, анализатор потревожит вас. Попробуйте!
Мы сами постоянно используем этот режим. Да, мы тоже иногда допускаем ошибки при кодировании. И возможность их сразу исправить существенно сокращает время на обнаружение дефекта и попытку понять, отчего программа ведёт себя не так, как планировалось. Очень обидно потратить минут 15-20 на отладку, чтобы потом обнаружить опечатку в индексе. Вот один из случаев, когда анализатор PVS-Studio нашёл ошибку сам в себе, сразу после того, как она появилась в коде:
if (in[0] == '\\' && in[1] == '.' && in[1] == '\\')
Но это, конечно, цветочки. Анализатор PVS-Studio может оказаться намного полезнее. Вот один из отзывов о нашем анализаторе: «Пример использования статического анализатора». Текст заставляет задуматься.
Резюмирую. Инкрементальный анализ – это то, что вы должны обязательно попробовать. Вы его полюбите, как только найдёте пару ляпов в свежем коде.
Межмодульный анализ проектов
Анализатор PVS-Studio для C# построен на основе Roslyn API, которое позволяет производить межмодульный анализ C# проектов. С межмодульным анализом C++ проектов всё намного сложнее, поэтому этот механизм только недавно появился в PVS-Studio. Межмодульный анализ позволяет собрать информацию не о каждом исходном файле отдельно, а обо всём проекте в целом. Это позволяет увеличить точность и качество анализа. Более подробную информацию об особенностях межмодульного анализа C++ проектов в PVS-Studio вы можете найти в статье «Межмодульный анализ C++ проектов в PVS-Studio».
Диагностики PVS-Studio
Будем кратки. Невозможно лаконично описать все диагностики, которые имеются в PVS-Studio. Полный список диагностик и их подробное описание можно найти в документации: Описание диагностируемых ошибок. Ограничимся таблицей, в которой диагностики сгруппированы по типам. Некоторые диагностики входят более чем в одну группу. Дело в том, что деление весьма условно. Например, опечатка может приводить к использованию неинициализированной памяти. Некоторым ошибкам наоборот места в таблице не нашлось, слишком они специфические. Тем не менее, таблица в целом даёт представление о функциональности PVS-Studio.

Как видите, анализатор максимально проявляет себя в таких областях, как поиск ошибок, возникших из-за опечаток, Copy-Paste. Хорошо диагностирует проблемы, которые связаны с безопасностью кода.
Как всё это работает на практике, можно узнать, заглянув в базу ошибок. Мы собираем в эту базу все ошибки, которые нашли, проверяя различные Open Source проекты.
SAST
PVS-Studio является средством статического тестирования защищённости приложений (Static Application Security Testing, SAST). Анализатор может выявлять потенциальные уязвимости в коде проекта и показывать соответствующий идентификатор ошибки в определённой классификации.
PVS-Studio поддерживает следующие классификации ошибок:
Включить отображение кодов CWE/SAST можно по контекстному меню в окне анализатора по пути Show Columns > CWE / SAST

Либо в меню сверху (Extensions > PVS-Studio > Display CWE Codes in Output Window / Display SAST Codes in Output Window)

Диагностики MISRA/AUTOSAR/OWASP включаются отдельно в настройках:

Подробнее про эти классификации можно прочитать здесь.
Проверка проектов из командной строки
Также имеется возможность использования анализатора PVS-Studio из командной строки. Для этого имеется утилита PVS-Studio-Cmd.exe. Подробную информацию по утилите и её параметрам можно найти в документации.
Вот так выглядит запуск данной утилиты:

После выполнения мы получим plog-файл с отчётом, путь до которого мы указали в параметрах запуска. Этот отчёт можно преобразовать в другие форматы с помощью утилиты PlogConverter.exe, а для просмотра отчёта в IDE достаточно двойного клика по plog-файлу в проводнике.
Также файл отчёта можно открыть в меню расширения по пути Extensions > PVS-Studio > Open/Save > Open Analysis Report.

Подавление ложных предупреждений
Некоторые сообщения, выданные анализатором, неизбежно будут ложными. С этим ничего нельзя поделать. Статический анализатор — это всего лишь программа, которая не обладает искусственным интеллектом и не может точно определить, нашла она настоящую ошибку или нет.
Для борьбы с ложными срабатываниями в анализаторе предусмотрен набор различных механизмов. Подробно они описаны в следующих разделах документации:
- тонкая настройка;
- грубый метод, позволяющий работать только с предупреждениями, относящимися к новому или изменённому коду.
Заключение
Конечно, здесь мы рассказали не всё об инструменте. Если рассказывать всё, то статья превратится в документацию. Цель была показать, как легко можно работать с инструментом в рамках среды Visual Studio. Про другие среды и режимы работы можно почитать в документации и других статьях, расположенных на нашем сайте. Там, кстати, много интересного для программистов. Заходите побродить.
Стоит отметить, что PVS-Studio работает не только в среде от Microsoft. Мы также поддерживаем язык Java, можем работать под Linux и macOS, интегрироваться в CMake и много чего еще. Подробнее можно узнать в документации.
Желаю вам безбажного кода и надеюсь, что вам понравится PVS-Studio. Если возникнут какие-то вопросы, то мы всегда поможем и подскажем. Пишите нам.
Дополнительные ресурсы
- Обзор кода (code review).
- Статический анализ кода.
- SAST.
- Технологии статического анализа кода PVS-Studio.
- Скачать PVS-Studio и попробовать в деле.
- Обсудить цену на анализатор PVS-Studio для вашей команды и способах его приобретения: купить PVS-Studio.
- Что нового появилось в PVS-Studio в 2021 году.
- Ответы на вопросы, которые часто задают на конференциях.
- Как внедрить статический анализатор кода в legacy проект и не демотивировать команду.
Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Valery Komarov. PVS-Studio for Visual Studio 2022.
Как использовать PVS-Studio бесплатно

Мы хотим помочь миру программного обеспечения лучше познакомиться с инструментами статического анализа кода и повысить качество программного обеспечения. Мы предоставляем возможность бесплатного использования анализатора PVS-Studio студентам в учебных целях, индивидуальным разработчикам и коллективам энтузиастов.
Введение
Клиентами анализатора PVS-Studio являются отделы разработчиков различных компаний. Мы бы хотели, чтобы нашими клиентами были и индивидуальные разработчики. К сожалению, у нас ничего не получилось с экспериментальным продуктом CppCat. Мы не знаем, как построить успешный бизнес в сфере статического анализа кода, продавая персональные лицензии. Поэтому сейчас продукт PVS-Studio позиционируется исключительно как B2B решение.
Думаю, что наш провал с CppCat был предопределён. Мир диктует свои законы, и, например, тот же Coverity ориентирован на корпоративные лицензии. Однако, это не значит, что нужно исключать другие варианты взаимодействия с миром.
Мы долго думали, как помочь маленьким командам разработчиков или как распространять академические лицензии. На первый взгляд кажется, что самый простой путь — дарить лицензии тем, кто развивает бесплатное программное обеспечение. К сожалению, это решение не кажется нам правильным.
Стоит пояснить нашу позицию. Впрочем, если вам не терпится, вы можете сразу перейти к разделу «Бесплатная лицензия PVS-Studio». Если же читателю интересно узнать подробности, то предлагаю продолжить чтение.
Размышления
Представим индивидуального разработчика, разрабатывающего и продающего, например, какую-то игру. Его код закрыт и используется в коммерческих целях. Тем не менее, мы рады помочь ему познакомиться с методологией статического анализа кода и готовы подарить ему лицензию. Это рекламный шаг, который со временем может окупиться. Сейчас он один, но кто знает, что произойдёт через 5 лет.
С другой стороны, возьмем команду из 50 человек, работающих в крупной компании и занимающихся созданием открытого бесплатного проекта. Сидят 50 человек в офисе, едят печенье, получают зарплату и при этом позиционируют себя как идеалисты в плане развития свободного программного обеспечения. Да, продукт бесплатен, но компания извлекает из его существования значительную прибыль косвенными методами. Просто по ряду причин компании удобно, чтобы проект был открытым и бесплатным. Нам кажется вполне честным, что такая организация должна приобрести платную лицензию для использования анализатора.
Как видите, критерий бесплатности программы или открытости кода нам не подходит для принятия решения. Хочется разделить проекты, разрабатываемые в компании, и проекты маленьких коллективов энтузиастов. Можно сделать это исключительно лицензионным соглашением, но в таком случае сложно провести границу между разными типами проектов. Вдобавок, это мало поможет нам с точки зрения рекламы. Давайте будем честны: компании предоставляют бесплатные лицензии ради рекламы. В этом мы не хуже и не лучше других.
Решение было найдено интуитивно. Что отличает корпоративные проекты от проектов энтузиастов? В корпоративных проектах меньше свободы и больше бюрократии. Вряд ли руководство компании Microsoft будет радо, если разработчик в коде Microsoft Office напишет, что это его персональный проект. Этим надо воспользоваться и предлагать вносить в код правки, в которых упоминается PVS-Studio. Заодно код открытых проектов будет рекламировать PVS-Studio.
Бесплатная лицензия PVS-Studio
Вам нужно выполнить два шага, чтобы начать бесплатно использовать статический анализатор PVS-Studio.
Шаг 1.
Если вы используете PVS-Studio как плагин к Visual Studio или используете утилиту «C and C++ Compiler Monitoring UI» (Standalone.exe), то введите следующий лицензионный ключ:
Name: PVS-Studio Free
Key: FREE-FREE-FREE-FREE
Если Вы используете PVS-Studio for Linux/macOS, то воспользуйтесь командой:
pvs-studio-analyzer credentials PVS-Studio Free FREE-FREE-FREE-FREE
Примечание. Ранее для активации бесплатной лицензии для Linux-версии было достаточно только комментария. Теперь требуется вводить и этот специальный ключ, так как без него некоторые сценарии использования анализатора оказались неудобными. Подробнее.
Шаг 2.
Внесите правки во все компилируемые файлы вашего проекта. Имеются в виду файлы с расширениями c, cc, cpp, cs и так далее. Заголовочные h-файлы менять не требуется.
Вы должны вписать в начало каждого файла две строки с комментарием. Мы предоставляем на выбор несколько вариантов. Это своего рода плата за возможность бесплатного использования анализатора PVS-Studio.
Комментарии для студентов (академическая лицензия):
// This is a personal academic project. Dear PVS-Studio, please check it. // PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
Комментарии для открытых бесплатных проектов:
// This is an open source non-commercial project. Dear PVS-Studio, please check it. // PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
Комментарии для индивидуальных разработчиков:
// This is an independent project of an individual developer. Dear PVS-Studio, please check it. // PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
Конечно, предложенные варианты подходят далеко не всем. В этом и состоит их смысл. Если ни один из предложенных вариантов вам не подходит, то предлагаем обсудить с нами вопрос покупки лицензии.
Примечание. Помимо описанного здесь способа бесплатного использования анализатора, вы можете по-прежнему скачивать с сайта демонстрационную версию анализатора для ознакомления. Если вы хотите на время снять ограничения демонстрационной версии, то просим написать нам.
Автоматизация
Если в вашем проекте много файлов, то вы можете воспользоваться вспомогательной утилитой. Вы должны будете указать ей какой комментарий вставлять и каталог с кодом. Затем утилита рекурсивно обойдет все файлы в папке и вложенных папках, добавляя в файлы с исходным кодом соответствующие комментарии. Скачать утилиту (вместе с исходным кодом) можно здесь: how-to-use-pvs-studio-free.
Заключение
Некоторые разработчики могут сказать, что не хотят видеть в начале файла две строчки с комментарием, не относящимся к сути проекта. Это их право, и они могут просто не использовать анализатор. Или они могут приобрести коммерческую лицензию и использовать её без ограничений. Мы рассматриваем наличие этих комментариев, как благодарность за предоставленную лицензию и, заодно, как дополнительную рекламу нашего продукта. Я думаю, это хороший, честный обмен.
Заодно решается вопрос отделения корпоративных проектов от частных инициатив. Если проект делают энтузиасты, они в праве делать с кодом всё, что им хочется, в том числе и добавлять такие комментарии. Если нет, значит за проектом стоит некая организация, от которой мы хотим получить вознаграждение в виде приобретения лицензии.
Надеемся наше предложение и позиция понятны. Если у вас остаются вопросы, то просим написать нам.
Чтобы убедить ваших коллег начать использовать анализатор кода PVS-Studio, предлагаем познакомить их со следующими разделами нашего сайта:
- Ошибки, обнаруженные в Open Source проектах с помощью PVS-Studio
- Статьи, в которых мы рассказываем о найденных ошибках
Update
Возникло очень много рассуждений на тему того, допустимо ли добавлять и удалять комментарии в исходный код, чтобы бесплатно использовать анализатор. Мы считаем такой приём неприемлемым, так как он по факту является способом обхода ограничения, наложенного нами на бесплатную лицензию. Поэтому мы решили добавить следующий раздел в лицензионное соглашение:
Вы имеете право использовать PVS-Studio бесплатно, добавив в исходный код своего проекта комментарии специального вида. Какие именно комментарии следует добавлять и как автоматизировать этот процесс описано в статье «Как использовать PVS-Studio бесплатно».
Отметим, что данный режим не предназначен для оценки возможностей анализатора. Чтобы познакомиться с анализатором, вы должны использовать демонстрационную версию или запросить у нас временный лицензионный ключ.
Вам следует вставлять комментарии, когда вы уже решили, что будете использовать анализатор на регулярной основе. Вы можете удалить впоследствии эти комментарии, но можете сделать это только один раз.
Не допускается многократное добавление комментариев в исходный код с последующим их удалением. Также не допускается многократное добавление комментариев с последующим откатом содержимого исходных файлов с помощью системы контроля версий. Такие действия направлены на обход условия, что исходный код должен содержать комментарии, и являются нарушением данного соглашения об использовании анализатора.
Update: Поддержка
Постепенно бесплатный вариант лицензирования набирает популярность, и наша команда всё больше времени тратит, оказывая поддержку бесплатным пользователем. При этом многие вопросы повторяются, поэтому мы считаем целесообразным оказывать в дельнейшем поддержку, отвечая на вопросы на сайте StackOverflow.
Общение через сайт StackOverflow сократит объем переписки, и позволит нам часто отвечать на вопросы, просто давая ссылку на уже обсужденный вопрос по данной теме. Более того, многие вопросы просто не будут заданы, так как пользователи смогут найти готовые ответы на StackOverflow самостоятельно, и им не потребуется ожидать нашего ответа в почте.
Итак, всех кто использует бесплатную версию PVS-Studio просим задавать нам вопросы на сайте StackOverflow. Чтобы ваш вопрос не остался незамеченным, используйте тег «pvs-studio».
Наши платные клиенты по-прежнему будут получать поддержку приватно через почту. Впрочем, если кто-то из клиентов будет задавать вопросы через StackOverflow, мы не возражаем.
- Поддержка пользователей, использующих бесплатную лицензию PVS-Studio теперь осуществляется на сайте StackOverflow;
- Бесплатные варианты лицензирования PVS-Studio

Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov. How to use PVS-Studio for free.