В этой заметке будет рассмотрен PVS-Studio более внимательно. Для оценки работы инструментов статического анализа я создал несколько простеньких примеров и собираюсь рассказать как себя на них проявил этот инструмент. Итак, тестируется версия PVS-Studio 4.51, работа общего анализатора.
Для начала попытаемся его запустить на каком-либо файле без использования VS:
Итак, из того, что PVS смог найти:
Также отсутствует анализ использования переменных. Например, не проверяется факт инициализации переменной или факт её неиспользования.
Отсутствует проверка соответствия типов, что тоже несколько напрягает.Особенно странно, что на моих примерах не обработался typedef. [прим автора: фраза вычёркивается, т.к. пруфа нет, а без него смысл теряется.]
Резюме: довольно странно, что в инструменте анализа C++ не реализованы обработки многих распространённых ошибок. Поэтому пока что он плохо подходит для общего анализа кода (тот же свободный cppcheck выполняет многое из перечисленного). Сейчас я не стал бы покупать PVS для улучшения качества своих приложений, а воспользовался бы альтернативными решениями.
UPD: ошибка при запуске без создания VS проекта была из-за неправильного параметра в --cfg. Необходимо, чтобы там был файл со строками вида
Для начала попытаемся его запустить на каком-либо файле без использования VS:
"C:\Program Files\PVS-Studio\x86\PVS-Studio.exe" --source-file "F:\tools_testing\static\C\calc_checks\calc_checks.c" --cfg Settings.xml --output-file out.txt
Incorrect parameter syntax: unknown option яю<
Оно немного странно, но ладно, можно создать проект для VS и посмотреть.Итак, из того, что PVS смог найти:
- случай возврата указателя на локальный объект
- отсутствие возвращаемого значения
- выход за границу статического значения
- присваивание внутри условного оператора (например if( a = true ))
- множественное изменение одной переменной
Также отсутствует анализ использования переменных. Например, не проверяется факт инициализации переменной или факт её неиспользования.
Отсутствует проверка соответствия типов, что тоже несколько напрягает.
Резюме: довольно странно, что в инструменте анализа C++ не реализованы обработки многих распространённых ошибок. Поэтому пока что он плохо подходит для общего анализа кода (тот же свободный cppcheck выполняет многое из перечисленного). Сейчас я не стал бы покупать PVS для улучшения качества своих приложений, а воспользовался бы альтернативными решениями.
UPD: ошибка при запуске без создания VS проекта была из-за неправильного параметра в --cfg. Необходимо, чтобы там был файл со строками вида
exclude-path = C:\Program Files (x86)\Microsoft Visual Studio 10.0Причём если используется UTF-8 то необходим режим без BOM. Иначе PVS ругнётся на некорректные параметры.
vcinstalldir = C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\
platform = Win32