Thursday, October 10, 2013

«Разработчики PVS-Studio, вы вообще слышали про Clang?», или сравнение PVS-Studio и Clang без кода

Довольно часто, когда мы пишем статьи про статический анализатор C++ кода PVS-Studio, нам задают один из следующих вопросов:
  • А чем PVS-Studio лучше, чем Clang?
  • А вот Clang бесплатный, а вы стоите денег – не понятно, почему?
  • Clang лучше, туда легко можно добавить свои диагностики, ведь это open source!
  • Вам пора закрываться, Clang вас раздавит, если не сейчас, то когда отладят версию под Windows.(ну это даже и не как вопрос сформулировано).
Пришло время обстоятельно ответить на эти вопросы.


Начну с небольшой шутки. PVS-Studio лучше чем Clang хотя бы тем, что PVS-Studio в коде Clang находил ошибки (раз, два), а Clang в коде PVS-Studio – нет. 

Сравнить инструменты анализа кода, непростая задача (я уже писал на эту тему). Некорректно сравнивать инструменты статического анализа только по набору диагностических правил. Ведь в обычной жизни инструменты используются не в тестах, а в реальных проектах. И тогда оказывается, что у инструмента статического анализа есть две фазы – внедрение в существующий проект и регулярное использование.

Давайте рассмотрим, как человек пробует, к примеру, Clang. Возможно, человек берет несколько маленьких тестовых файлов с программными ошибками, запускает на них анализатор и видит, что что-то анализатор нашел, что-то не нашел. Предположим, человеку понравились сработавшие диагностики. После этого он пробует анализатор на своем реальном проекте и видит сотни, а то и тысячи сообщений от анализатора кода. Исправить их все сразу он не может, что-то с ними сделать – непонятно что, ведь анализатор типа Clang их просто выведет в консоль. Именно в этот момент и должно начинаться внедрение анализатора. 

Цель этапа внедрения статического анализа в существующий (а значит большой) проект – получить при запуске анализатора на код 0 диагностических сообщений. И вот тут оказывается, что Clang ничего не может предложить. В нем просто нет механизмов для того, чтобы работать с большим количеством сообщений. Ну кроме как вручную пройти по каждому сообщений и внести правки при необходимости.

Read more: Habrahabr.ru
QR: Inline images 1