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 как пользоваться
Мы разрабатываем, продвигаем и продаем статический анализатор 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
В ходе митапа расскажем о принципах работы анализатора. Обсудим, как наиболее эффективно использовать PVS-Studio в новом проекте или внедрить в уже существующий. Заинтересовались нашим продуктом, но остались вопросы? Приходите – обсудим!
PVS-Studio. Тестируем статический анализатор кода на реальном проекте

В этой статье я покажу тебе, как использовать статический анализатор кода для отлова багов в программе. Использовать мы будем предоставленный нам на тестирование PVS-Studio и на живом проекте посмотрим, на какие ошибки он пожалуется и в каких случаях выручит.
Зачем нужен статический анализатор
Современные приложения — это огромные массивы кода и библиотек. Уследить за ошибками в них — дело непростое. Можно забыть высвободить ресурсы, сделать «удачную» опечатку, при которой код собирается, но ведет себя неправильно, допустить утечку памяти. Короче, есть множество ситуаций, которые способны превратить отладку в изматывающее приключение. И если ты оказался в одной из них, это вовсе не значит, что ты плохой программист. Просто люди могут уставать, отвлекаться и допускать ошибки.
Для помощи программистам придумали специальные тулзы — статические анализаторы кода, которые помогают в разработке и выявляют разные ошибки: логические баги, опечатки, опасные конструкции, несоответствия каким‑то стандартам и конвенциям и так далее. Статические анализаторы применяются именно на этапе разработки, а не тестирования, поэтому позволяют править код на месте, что намного проще и быстрее.
Давай посмотрим, как обращаться с анализатором на примере PVS-Studio. Я покажу, какие ошибки будут им ловиться, а за чем придется следить самостоятельно. PVS-Studio «понимает» C/C++, C# и Java, поддерживает Windows, Linux и macOS. Но поскольку показывать я буду всё на рабочем проекте, то сфокусируюсь на C++ и Windows.
Установка и настройка
Итак, качаем PVS-Studio с сайта разработчика. На момент написания статьи актуальная версия — 7.19.
Промо
Чтобы получить бесплатную пробную лицензию на 30 дней, перейди по ссылке. В поле «промокод» будет вставлен код xakep, который компания‑разработчик предоставила для читателей «Хакера».
Что интересно, инсталлятор сразу нашел у меня на машине Visual Studio 2022 и IntelliJ IDEA Ultimate 2022 и сразу предложил интегрироваться в них. Не отказываемся, потому что будет удобно использовать статанализатор не как отдельную тулзу, а именно как плагин для IDE.

Теперь откроем Visual Studio и пройдемся по самым интересным настройкам.

Обрати внимание на IntermoduladAnalysisCpp, что означает «межмодульный анализ». Эта настройка применяется только к проектам на C++. Разработчики уверяют, что при включении этой опции анализатор производит анализ более эффективно. Проверим! Вот два сканирования: без этой опции и вместе с ней.


Как видишь, стало больше на одну ошибку класса Low. Не очень впечатляет, но галочку лучше оставить.
Следующая интересная опция — No Noise. Она исключает низкоприоритетные предупреждения, чтобы было проще ориентироваться в выдаче анализатора.
Рекомендую заглянуть и во вкладку Detectable Errors — здесь можно включать или выключать обнаружение определенных групп ошибок.
PVS-Studio умеет определять потенциальные уязвимости, связанные с безопасностью кода. Среди нацеленных на это наборов правил:
- CWE — база конструкций языка, которые содержат потенциальные уязвимости;
- AUTOSAR — набор правил для стандарта C++ 14 для встраиваемых отказоустойчивых систем;
- MISRA — правила, выработанные компанией MISRA для встраиваемых систем, где важны безопасность и отказоустойчивость;
- OWASP — правила для безопасной разработки веб‑приложений;
- SEI-CERT — правила, созданные центром CERT, опять же, для повышения надежности ПО.
Рекомендую включить все эти подсказки и обращать на них внимание при написании кода. Они значительно увеличат шанс не пропустить потенциальный баг.
Помимо этого, PVS-Studio определяет проблемы 64-битного кода, предлагает оптимизации производительности и даже содержит несколько правил (Custom), которые сделаны специально по заявкам трудящихся.
Анализатор на практике: разбираем примеры
Теперь перейдем к обзору найденных при помощи PVS-Studio ошибок и недочетов. Весь код, который будет тут представлен для примера, — реальный, из крупного опенсорсного проекта, который развивается несколько лет. «Синтетических» ошибок, искусственно созданных для демонстрации возможностей статанализатора, я приводить не буду, ведь это не так интересно.
Запускаем сканирование! Первый недочет, найденный анализатором и имеющий рейтинг Medium:
V560 A part of conditional expression is always true: threadArg
Если нажать на номер ошибки, откроется сайт разработчика с пояснением (как на русском, так и на английском языках): «Анализатор обнаружил потенциально возможную ошибку внутри логического условия. Часть логического выражения всегда истинно и оценено как опасное». Разберемся.
Преподавателям на заметку: PVS-Studio для знакомства студентов с инструментами анализа кода

По общению в поддержке и некоторым другим косвенным признакам мы заметили, что среди наших бесплатных пользователей стало много студентов. Причина: анализатор PVS-Studio начал использоваться некоторыми преподавателями в рамках дисциплин, связанных с разработкой программного обеспечения. Нам это очень приятно, и мы решили написать эту небольшую заметку, чтобы привлечь внимание и других преподавателей. Мы рады, что студенты знакомятся с методологией статического анализа кода в целом и инструментом PVS-Studio в частности. Наша команда постарается внести вклад в развитие этой тенденции.
Разработка современного программного обеспечения невозможна без комплексного подхода к обеспечению качества и надёжности программного обеспечения. Причина в том, что размер кодовой базы современных приложений быстро растёт. Поясню это на числах. Возьмём, например, операционные системы:
- MS DOS 1.0: 4 000 строк кода. Один человек мог прочитать код целиком, разобраться, найти ошибки.
- Ядро Linux 1.0.0: 176 000 строк кода. У команды ещё есть возможность сделать подробный обзор кода, хотя на это придётся затратить много времени и сил.
- Ядро Linux 5.0: более 26 000 000 строк кода. Осознать проект невозможно.
Невозможность осознать проект — это только пол беды. С ростом размера проекта растёт и плотность ошибок. Подчеркну: речь идёт не просто о росте количества ошибок, а именно об их плотности! В программе, написанной в рамках курсовой работы, можно написать 1000 строк кода и не допустить ни одной ошибки. И нереально добавить в большое приложение 1000 строк кода и не допустить несколько ошибок. Для пояснения опять прибегнем к числам:

Рисунок 1. Типичная плотность ошибок в проектах различного размера. Данные взяты из книги Стива Макконнелла «Совершенный код».
Итак, невозможно писать надёжные программы, используя те же подходы, что и 20-30 лет назад. Необходимо использовать комплекс методологий, помогающих контролировать рост сложности программного проекта и обеспечивать необходимое качество кода:
- Стандарты кодирования
- Обзоры кода
- Юнит-тесты
- Регрессионное тестирование
- Нагрузочное тестирование
- Ручное тестирование
- .
- Динамический анализ
- Статический анализ
Про динамический анализ сейчас я ничего говорить не буду, хотя он не менее важен, чем статический.
А вот статический анализ — это наша стихия, и я предлагаю преподавателям обратить внимание на наш программный продукт PVS-Studio.
PVS-Studio — это инструмент для выявления ошибок и потенциальных уязвимостей в исходном коде программ, написанных на языках С, C++, C# и Java. Работает в 64-битных системах на Windows, Linux и macOS и может анализировать код, предназначенный для 32-битных, 64-битных и встраиваемых ARM платформ.
Анализатор PVS-Studio можно рассматривать как пример современного инструмента статического анализа кода. Во-первых, на его примере хорошо показывать возможности инструментов статического анализа в выявлении ошибок и дефектов безопасности (SAST). Во-вторых, можно продемонстрировать его интеграцию в цикл разработки программного обеспечения, чтобы контроль кода был непрерывен. На его примере можно показывать возможность интеграции с такими системами, как Jenkins, TeamCity, Azure DevOps, SonarQube, Travis CI и т.д.
Для того, чтобы начать использовать PVS-Studio в рамках обучения, не надо ничего специального делать или согласовывать.
Мы предоставляем несколько вариантов бесплатного лицензирования PVS-Studio, в том числе и для открытых проектов. Конкретно для обучающих целей, когда студенческие работы не являются открытыми, лучше всего подойдёт вариант с добавлением в код следующего комментария:
// This is a personal academic project. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: http://www.viva64.com
Чтобы начать бесплатно использовать статический анализатор PVS-Studio, следует выполнить два следующих шага:
Если вы используете PVS-Studio как плагин к Visual Studio или используете утилиту Standalone, то введите следующий лицензионный ключ:
Name: PVS-Studio Free
Key: FREE-FREE-FREE-FREE
Если Вы используете PVS-Studio for Linux, то сразу переходите ко второму шагу, файл с лицензией вам не понадобится.
Вы должны вписать в начало каждого файла две строки с комментарием. Внесите правки во все компилируемые файлы вашего проекта. Имеются в виду файлы с расширениями c, cc, cpp, cs, java и так далее. Заголовочные h-файлы менять не требуется.
Вы можете добавлять комментарии как вручную, так и воспользоваться для этого вспомогательной утилитой. Скачать утилиту (вместе с исходным кодом) можно здесь: how-to-use-pvs-studio-free.
Всё это более подробно описано в статье «Как использовать PVS-Studio бесплатно». Попросите студентов ознакомиться с ней. В частности, надо учитывать, что поддержку для бесплатных пользователей мы оказываем через сайт StackOverflow. Но при этом не надо путать поддержку и уведомления о багах. Как раз про такие моменты и рассказывается в статье.
Спасибо за внимание. В случае каких-то вопросов мы готовы оказать помощь и консультации. Смело пишите нам в поддержку.
Дополнительные ссылки:
- Иван Пономарёв. Доклад на конференции Heisenbug 2019 Moscow: Непрерывный статический анализ кода.
- Сергей Хренов, Филипп Хандельянц. Мастер-класс на конференции Saint HighLoad++ 2019: Анализатор кода PVS-Studio.
- Андрей Карпов. Бесплатные варианты лицензирования PVS-Studio.
- PVS-Studio. Документация.

Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Andrey Karpov. For professors’ note: use PVS-Studio to get students familiar with code analysis tools.