PVS-Studio - это инструмент для выявления ошибок и потенциальных уязвимостей в исходном коде программ, написанных на языках С, C++, C# и Java. Работает в 64-битных системах на Windows, Linux и macOS и может анализировать код, предназначенный для 32-битных, 64-битных и встраиваемых ARM платформ.
PVS-Studio выполняет статический анализ кода и генерирует отчёт, помогающий программисту находить и устранять ошибки. PVS-Studio выполняет широкий спектр проверок кода, но наиболее силён в поисках опечаток и последствий неудачного Copy-Paste. Показательные примеры таких ошибок: V501, V517, V522, V523, V3001.
Основная ценность статического анализа заключается в его регулярном использовании, благодаря чему многие ошибки могут быть выявлены и устранены на самых ранних этапах. Нет смысла тратить 50 часов на поиск ошибки, которую можно найти благодаря анализу кода. Но еще раз подчеркнем. Основная польза статического анализа не в том, чтобы найти одну запрятанную ошибку в день перед релизом. А регулярно устранять десятки обычных ошибок день за днем.
Анализатор может запускаться ночью на сервере и сообщать о подозрительных местах в новом коде. В идеале ошибки вообще могут быть обнаружены и исправлены ещё до попадания в систему контроля версий. PVS-Studio может автоматически запускаться сразу после компилятора на только что модифицированных файлах. Это работает и в Windows, Linux и macOS.
Быстрый старт в Windows, Linux и macOS
PVS-Studio умеет интегрироваться в среду разработки Visual Studio 2010-2019. Если вы используете эту среду разработки, то скорее всего вам будет достаточно зайти в меню плагина PVS-Studio и выбрать команду "проверить проект".
Часто всё обстоит сложнее и может потребоваться интеграция PVS-Studio в сборочную систему, в том числе и экзотическую. Тема интеграции слишком обширная тема, чтобы описать её здесь. Всю необходимую информацию вы можете почерпнуть из подробной документации.
Отметим только, что в PVS-Studio для Windows и Linux предусмотрены специальные утилиты, собирающие информацию о запусках компилятора. Эти инструменты позволяют быстро выполнить анализ проекта, собираемого любым способом. Вы можете быстро познакомиться с возможностями анализатора, не тратя время на его интеграцию с makefile или сборочным скриптом. См. описание утилиты C and C++ Compiler Monitoring (Windows) и pvs-studio-analyzer (Linux/macOS).
Используемые технологии
- Сопоставление с шаблоном (pattern-based analysis) на основе абстрактного синтаксического дерева применяется для поиска мест в исходном коде, которые похожи на известные шаблоны кода с ошибкой.
- Вывод типов (type inference) на основе семантической модели программы позволяет анализатору иметь полную информацию о всех переменных и выражениях, встречающихся в коде.
- Символьное выполнение (symbolic execution) позволяет вычислять значения переменных, которые могут приводить к ошибкам, производить проверку диапазонов (range checking) значений.
- Анализ потока данных (data-flow analysis) используется для вычисления ограничений, накладываемых на значения переменных при обработке различных конструкций языка. Например, какие значения может принимать переменная внутри блоков if/else.
- Аннотирование методов (method annotations) предоставляет больше информации об используемых методах, чем может быть получено путём анализа только их сигнатуры.
Особенности PVS-Studio
- Автоматический анализ отдельных файлов после их перекомпиляции.
- Удобная и простая интеграция с Visual Studio 2010-2019.
- Удобная online-справка по всем диагностикам, которая доступна и из программы, и на сайте, а также документация в .pdf одним файлом. Более 700 печатных страниц документации!
- Сохранение и загрузка результатов анализа: можно ночью проверить код, сохранить результаты, а утром загрузить их и смотреть.
- Возможность сохранить результаты анализа в формате HTML с полной навигацией по коду.
- Запуск из командной строки для проверки всего решения: позволяет интегрировать PVS-Studio в ночные сборки, чтобы утром у всех был свежий лог.
- Отличная масштабируемость! Поддержка многоядерных и многопроцессорных систем с настройкой количества используемых ядер; поддержка IncrediBuild.
- Mark as False Alarm – разметка в коде, чтобы не ругаться конкретной диагностикой в конкретном фрагменте файла.
- Интерактивная фильтрация результатов анализа (лога) в окне PVS-Studio: по коду диагностики, по имени файла, по включению слова в текст диагностики.
- Утилита blame-notifier. Инструмент позволяет рассылать письма разработчикам об ошибках, которые PVS-Studio нашел во время ночного прогона.
- Проверка коммитов, merge и pull request'ов - можно настроить анализатор на проверку только изменённых файлов. Это позволит быстро и автоматически проверять каждый коммит в систему контроля версий.
- pvs-studio-analyzer – утилита для отслеживания компиляции (Compiler Monitoring) на Linux.
- Большое количество вариантов интеграции в проекты, разрабатываемые под Linux и macOS.
- Mass Suppression – позволяет подавить все старые сообщения, чтобы анализатор выдавал 0 срабатываний. К подавленным сообщениям всегда можно вернуться позже. Возможность безболезненно внедрить PVS-Studio в существующий процесс разработки и сфокусироваться на ошибках только в новом коде.
- Статистика ошибок в Excel – можно посмотреть темпы правки ошибок, количество ошибок во времени и т.п.
- Автоматическая проверка на наличие новых версий PVS-Studio (как при работе в IDE, так и при ночных сборках).
- Использование относительных путей в файлах отчета для возможности переноса отчета на другую машину.
- Отслеживание компиляции (Compiler Monitoring) – проверка проектов, у которых нет файлов Visual Studio (.sln/.vcxproj), без необходимости проводить интеграцию со сборочной системой; при необходимости, можно провести прямую интеграцию анализатора в любую сборочную систему.
- Возможность исключить из анализа файлы по имени, папке или маске; возможность проверять файлы, модифицированные за последние N дней.
- Интеграция с SonarQube. Это открытая платформа для обеспечения непрерывного контроля качества исходного кода.
-
Поиск уязвимостей защищённости и безопасности в жизненном цикле приложений с помощью методологии SAST (Static Application Security Testing). PVS‑Studio включён в отчёт "Now Tech: Static Application Security Testing, Q3 2020" как SAST-специализированный инструмент. Отчёт об исследовании доступен для покупки подписчикам и клиентам Forrester Research.
Поддерживаемые языки и компиляторы
- Windows. Visual Studio, C, C++, C++/CLI, C++/CX (WinRT)
- Windows. IAR Embedded Workbench, C/C++ Compiler for ARM C, C++
- Windows/Linux. QNX Momentics, QCC C, C++
- Windows/Linux. Keil µVision, DS-MDK, ARM Compiler 5/6 C, C++
- Windows/Linux. Texas Instruments Code Composer Studio, ARM Code Generation Tools C, C++
- Windows/Linux/macOS. GNU Arm Embedded Toolchain, Arm Embedded GCC compiler, C, C++
- Windows/Linux/macOS. Qt Creator, Eclipse, GCC, Clang, C, C++
- Windows. MinGW C, C++
- Windows/Linux/macOS. IntelliJ IDEA, Android Studio, Java
- Windows/Linux/macOS. Visual Studio, JetBrains Rider, C#, .NET Framework, .NET Core
Клиенты PVS-Studio
Заинтересовались? Вот что дальше:
- Скачайте PVS-Studio.
- Проверьте свой проект.
- Выпишите интересные ошибки, подготовьте презентацию.
- Покажите коллегам и начальству.