﻿# Мифы о статическом анализе\. Миф первый – статический анализатор это продукт разового применения

Общаясь с людьми на форумах, я заметил несколько стойких заблуждений, касающихся методологии статического анализа\. Я решил сделать небольшой цикл статей, в которых попробую показать, как всё обстоит на самом деле\. 

Миф первый: "Статический анализатор \- это продукт разового применения"\.

Вот как выглядит такое утверждение при обсуждении на форуме \(собирательный образ\):

_Имея пробную/крякнутую версию, можно бесплатно прогнать все свои проекты, найти несколько застаревших ошибок и, собственно, на этом успокоиться на какое\-то время\._

_Все счастливы\. Люди проверили\. Разработчики анализатора не узнали, что их обманули и обокрали\._

В данном случае программист обманул себя, а не создателей инструмента\. Он получил только видимость пользы от проделанной работы, но не настоящую пользу\. Пока эту мысль мне не удается донести, но я буду продолжать пытаться это сделать\. Нет никакого прока от единичных запусков статического анализатора\.

Аналогия:

Ставим уровень предупреждений компилятора /W0\. И разрабатываем проект\. Ругаемся, правим глупые ошибки и опечатки, тестируем больше и дольше\. Потом изредка включаем /W3 и сражаемся с предупреждениями, а потом опять возвращаемся к /W0\. При этом то, что мог подсказать компилятор на уровне /W3 мы бесстрашно и долго искали в отладчике и потратили на это в 10\-100 раз больше времени\. Вдобавок, обратим внимание на то, что теперь программисту не будет нравиться результат /W3\. Ведь почти все ошибки он и так поправил методом тестирования и отладки\. Компилятор на уровне /W3 выдает теперь в основном ложные срабатывания\.

Теперь вернемся к статическому анализу\. Картина полностью идентичная\. Редкий запуск анализатора выдает массу ложных срабатываний\. Настоящих ошибок мало, так как они найдены другими методами\.

Так же, как и ключ /W3, использование статического анализа максимально полезно в случае регулярного использования\. Кстати, статический анализ и есть своего рода расширение предупреждений, выдаваемых компилятором\. Многие диагностики, которые когда то были реализованы в старых анализаторах, постепенно переходят в компилятор\. Конечно, анализаторы всегда будут опережать в диагностическом плане компиляторы\. Они разработаны для этого специально\. У компилятора больше других забот и вдобавок на него накладываются более жесткие требования по производительности\.

Некоторые в пылу дискуссии отвечают так:

_Идея верна для начинающих студентов\. Для специалистов это уже не так важно\. Если я поставлю /W0 я хуже писать не стану\. Нужно совершенствовать стиль программирования, а не увеличивать количество инструментов\-костылей\._

Совершенно согласен со всем написанным выше\. Но давайте поиграем и вот так переделаем текст:

_Идея верна для начинающих водителей\. Для профессионалов это уже не так важно\. Если я не пристегнусь за рулем, я хуже ездить не стану\. Нужно совершенствовать стиль вождения, а не увеличивать количество страхующих компонентов\._

И опять не поспоришь\. Однако любой адекватно мыслящий водитель понимает, что пристегиваться все\-таки полезно\. Также полезен и статический анализ\. Ведь от ошибок и опечаток не застрахован даже самый опытный программист\. И примеры, приведенные в [этой](https://pvs-studio.ru/ru/blog/posts/cpp/a0077/) статье, хорошее тому подтверждение\. Конечно, все профессиональные программисты уверены, что вот они\-то таких глупых ошибок не делают, но про это в следующей заметке про мифы\.