Довольно часто, когда мы пишем статьи про статический анализатор 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: