В статье приводится сравнение анализатора кода PVS-Studio с другими решениями в этой области. Так как PVS-Studio содержит модули для диагностики 64-битных и параллельных ошибок, то и сравнение выполняется с разными группами инструментов.
Поддержка OpenMP была прекращена в PVS-Studio после версии 5.20. По всем возникшим вопросам вы можете обратиться в нашу поддержку. Данная статья устарела и не отражает нашего текущего отношения к вопросу сравнения возможностей различных анализаторов кода. Просим познакомиться со статьёй "Почему мы не пишем о сравнении PVS-Studio с другими статическими анализаторами кода".
Программисты-пользователи и разработчики статических анализаторов кода знают, как сложно выполнить сравнение инструментов этого типа между собой. Ведь помимо разных классов диагностируемых ошибок часто даже диагностику ошибок одного типа трудно формализовать до уровня оценки "да/нет". Тем не менее, такое сравнение бывает необходимо делать для того, чтобы можно было выбирать из нескольких инструментов наиболее подходящее к конкретной задаче решение.
В данной статье мы сравниваем анализатор кода PVS-Studio, разрабатываемый компанией ООО "СиПроВер" с аналогичными решениями. Статья предназначена для тех пользователей инструмента, которые хотят обоснованно выбрать анализатор кода для своих задач.
Сравнение основано на других статьях наших авторов, где более подробно описано, что и как сравнивалось. Читатели, которые хотят лучше разобраться с методикой и принципами сравнения, могут изучить и дополнительные материалы.
Для сравнения мы выделим две группы ошибок:
В номинации "64-битные ошибки" участвуют четыре решения: PVS-Studio (Viva64), PC-Lint, C++test, ключ /Wp64 компилятора Visual C++ или диагностика, осуществляемая 64-битной версией компилятора Visual C++. Выбор обусловлен тем, что только названные решения имеют специальную поддержку диагностики 64-битных ошибок, описанных в документации.
В номинации "параллельные ошибки" сравниваются два решения: PVS-Studio (VivaMP) и Intel Parallel Studio (Parallel Lint). Эти два инструмента предоставляют возможность диагностики параллельных ошибок при использовании технологии OpenMP на Windows-системах.
Все названные инструменты выполняют диагностику ошибок в Си/Си++ коде.
Сравнение инструментов мы делали следующим образом. Для каждой группы ошибок (64-битные и параллельные ошибки) была создана база паттернов ошибок, описанных в документации к сравниваемым инструментам. Участвующие в сравнении инструменты были протестированы на выявление ошибок каждого типа. Результаты приведены в статьях, содержащих детальные сравнения инструментов. По результатам составлена комплексная оценка инструмента следующим образом. Если ошибка диагностируется полностью, то участнику сравнения добавляется 1 балл, если частично, то 0.5 балла, если не диагностируется, то 0 баллов. Затем вычисляется общая оценка в процентах: 100% - обнаружены все паттерны ошибок, 0% - не обнаружено ни одного паттерна ошибок.
Рисунок 1 - Результаты сравнения инструментов для диагностики 64-битных ошибок
Статья с описанием базы паттернов ошибок и детальным описанием сравнения: "Сравнение диагностических возможностей анализаторов при проверке 64-битного кода".
Поясним результаты сравнения. Речь не идет о том, что какой-то анализатор кода лучше, какой-то хуже. Но на диагностике конкретного типа ошибок ("64-битные ошибки") анализаторы показывают разные результаты и объективный выбор здесь к счастью возможен.
Отдельно стоит упомянуть ключ компилятора /Wp64, имеющийся в среде Visual Studio. Хотя этот ключ и не является инструментом анализа кода в отличие от других перечисленных решений, он участвует в сравнении. Правда, возможности его для диагностики 64-битных ошибок крайне ограничены, чем и обусловлена низкая итоговая оценка. Подробнее об этом смотрите статью "64 бита, /Wp64, Visual Studio 2008, Viva64 и все, все, все..."
Рисунок 2 - Результаты сравнения инструментов для диагностики параллельных OpenMP ошибок
Статья с описанием базы паттернов ошибок и детальным описанием сравнения: "Неудачная попытка сравнить PVS-Studio (VivaMP) и Intel C/C++ ("Parallel Lint")".
Данное сравнение значительно более некорректно, чем сравнение диагностики 64-битных ошибок. Дело в том, что количество диагностируемых паттернов ошибок в Intel Parallel Studio довольно велико. Однако документация по этим паттернам крайне скудная. В идеале надо расширить базу паттернов за счет ошибок, диагностируемых в Intel Parallel Studio, однако сделать это пока невозможно. Поэтому и получилось, что Intel Parallel Studio набрал мало балов. Более подробно ситуация описана в статье с детальным описанием сравнения.
Целью настоящей статьи не была попытка показать недостатки инструментов других производителей. Мы лишь пытались показать те задачи, в которых инструмент PVS-Studio силен. Таких задач две:
В этих двух задачах наш инструмент превосходит аналогичные решения. Для других задач разумно использовать более подходящие инструменты.
0