Обидно За Мнения О Статических Анализаторах Кода

Инструменты статического анализа кода прошли долгий путь.

Это совсем не те «линтеры», которые активно использовались 20 лет назад. Однако многие по-прежнему относятся к ним как к очень простым инструментам.

Это позор.

Обидно и за методологию анализа кода в целом, и за инструмент PVS-Studio.

Обидно за мнения о статических анализаторах кода

Поводом для некоторой грусти стал комментарий к одной из наших статей.

В этой статье было написано, что анализатор обнаруживает опечатку, выдавая предупреждение следующему коду:

  
   

if (A[0] == 0) { X = Y; if (A[0] == 0) .

}

Анализатор говорит, что второе условие всегда истинно.

И действительно, если изучить тело функции, то станет ясно, что необходимо проверить еще один элемент массива.

Был получен комментарий примерно такого содержания:

Да, здесь анализатор показывает ошибку.

Но в целом это предупреждение ложно.

Ведь между двумя одинаковыми проверками значение элемента может измениться, и тогда вторая проверка будет иметь смысл.

Я расстроен.

Программисты до сих пор считают, что анализаторы кода построены на регулярных выражениях.

Мол, нашли два одинаковых вложенных если и мы клянемся.

Естественно, любой современный статический анализатор отслеживает изменения значений переменных.

Если переменная не изменится, будет сообщение.

Если он изменится, сообщения не будет. Для этого используется технология анализа потоков данных.

Именно это и делает статический анализатор PVS-Studio. Давайте посмотрим на следующий синтетический пример:

char get(); int foo(char *p, bool arg) { if (p[1] == 1) { if (arg) p[0] = get(); if (p[1] == 1) // Warning return 1; } if (p[2] == 2) { if (arg) p[2] = get(); if (p[2] == 2) // Ok return 2; } return 3; }

Код содержит два одинаковых блока.

В одном тестируемая переменная не меняется, а во втором — меняется.

Поэтому анализатор проблемы предупреждение только для первого блока: V547 Выражение 'p[1] == 1' всегда истинно.

Программистам не о чем беспокоиться.

Современные инструменты являются продвинутыми и выдают предупреждения только для действительно подозрительного кода.

Ложные срабатывания бывают, но, как правило, они связаны с наличием запутанного кода, разобраться в котором бывает сложно даже человеку.



Обидно за мнения о статических анализаторах кода

Дополнительные ссылки



Обидно за мнения о статических анализаторах кода

Если вы хотите поделиться этой статьей с англоязычной аудиторией, воспользуйтесь ссылкой для перевода: Андрей Карпов.

Неутешительные мнения о статических анализаторах .

Теги: #программирование #C++ #c #статический анализ кода #pvs-studio #статический анализатор кода

Вместе с данным постом часто просматривают: