PVS-Studio научился следить за тем, как вы программируете

PVS-Studio On-The-Fly

В PVS-Studio появился режим работы, который поможет максимально рано выявлять ошибки и опечатки. Анализатор запускается сразу после компиляции файлов и если что-то не так, покраснеет от стыда за ваш код. Фича доступна на данный момент только для пользователей Visual Studio 2010.

Я неоднократно писал, чем раньше ошибка будет обнаружена, тем меньше цена её устранения. Впрочем, в этом я не оригинален и про это твердили и продолжают твердить авторы многих книг и статей. Взять хотя бы того же С. Макконнелла. Так что не буду повторяться.

Предыдущие версии анализатора PVS-Studio надо было запускать вручную или интегрировать запуск в ночные сборки. То, что утром можно посмотреть лог и исправить какую-то ошибку - бесспорно замечательно. Но не идеально. Это не мешает в течение дня посадить пару мелких ляпов и потом по 10 минут искать каждый из них. PVS-Studio тут мало поможет. Запускать его только для изменённых файлов - неудобно, а для всего проекта - слишком долго.

К счастью, мы сами программисты и чутки к потребностям наших коллег по клавиатуре. В PVS-Studio 4.30 появился новый режим инкрементального анализа. Проверка теперь практически совмещена с этапом компиляции. Анализатор проверяет те файлы, которые компилируются нажатием любимой всеми нами кнопки F7. Включается этот режим не просто, а очень просто. Достаточно установить галочку напротив пункта "Incremental Analysis After Build" в меню PVS-Studio:

Incremental Analysis After Build

Рассмотрим теперь на примере, как это работает. Предположим, что я очень радовался процессу программирования, спешил и допустил ошибку в индексе массива:

Ошибка в коде

Результат такого выражения всегда 'false'. Но я не замечаю. Я пишу код дальше и радуюсь жизни. Потом я с удовлетворением от проделанной работы нажимаю F7, и модифицированный файл успешно компилируется. Причём VS2010 не выдает никаких предупреждений. Я спокойно иду править следующий участок кода.

Но когда компиляция закончена, тихо, в фоновом режиме, запускается анализатор PVS-Studio и проверяет модифицированные файлы. В фоновом режиме он запускается специально, чтобы не мешать программисту. Статический анализ выполняется дольше компиляции, и нет смысла заставлять программиста тяжело вздыхать, разглядывая диалог прогресса. Если всё написано корректно (и у вас, и у нас ;-) ), то программист вообще не заметит присутствия и работы PVS-Studio.

Однако, ошибка есть. И через некоторое время анализатор просигнализирует о наличии подозрительного кода! Он покраснеет, и рука программиста сама потянется к нужной вкладке, чтобы узнать подробности:

PVS-Studio RED

И действительно, в сообщении можно прочитать, что условие всегда ложно:

PVS-Studio показывает ошибки

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

Приглашаю попробовать новый режим PVS-Studio. Скачать пробную версию, как обычно можно здесь. Если после установки VS2010 начнет подтормаживать, то уменьшите аппетиты PVS-Studio. По умолчанию при проверке анализатор использует все доступные процессорные ядра. Соответственно, в настройках можно указать сколько ядер можно использовать.

Предвижу сразу несколько вопросов. Поэтому заранее подготовил в конце маленький FAQ.

1) А почему новый режим поддерживается только в VS2010?

Только в Visual Studio 2010 появился API, который позволяет узнать, какие файлы были изменены, и какие от них зависят. Другими словами появился механизм, позволяющий выбрать файлы для проверки. Чуть подробнее про это здесь [1].

Если новый режим работы очень понравится, то мы подумаем, как реализовать его и для пользователей Visual Studio 2005/2008. Впрочем, хочу заметить, что перейти на Visual Studio 2010 гораздо проще, чем может показаться. Можно выбрать старый компилятор, но использовать возможности новой среды. Это делается с помощью Platform Toolset [2].

2) Почему не сделать проверку вообще на лету и подчеркивать ошибки сразу, как, например, это делает IntelliSense?

Во-первых, нам недоступна такая плотная интеграция с Visual Studio. Чтобы её получить нужно быть более дружным с Microsoft.

Во-вторых, всё равно ничего не получится. Статический анализ достаточно сложен и, чтобы выявить некоторые ошибки, необходимо собрать информацию по довольно большому фрагменту кода. Поскольку код будет редактироваться, то практически всегда его будет невозможно распарсить. Я думаю, каждый программист видел, как Си/Си++ компилятор сходит с ума из-за случайно лишней скобки или некорректного шаблона. Си/Си++ - это не тот язык, который можно анализировать совсем уж на лету.

3) А что делать, если я зеленый и красный цвет не различаю?

С замечанием согласен. Пожалуй, в следующей версии будем не только менять цвет, но и писать текст на вкладке.

4) Почему вот здесь и вот так не работает?

Это новая возможность и высока вероятность наличия каких-то ошибок. Мы будем благодарны, если вы сообщите нам о замеченных недостатках и пожеланиях. Страница обратной связи.

5) Если я делаю Rebuild, то анализатор затем проверит весь проект?

Нет. Это не имеет смысла и слишком долго. Анализатор игнорирует команды пересборки решений (solution) и проектов. Если хочется проверить решение или проект, то, как и прежде, в анализаторе доступны соответствующие команды.

Дополнительные ресурсы

  1. Павел Еремеев. Использование анализатора PVS-Studio в процессе инкрементальной сборки в Microsoft Visual Studio 2010. http://www.viva64.com/ru/b/0101/

  2. MSDN. How to: Modify the Target Framework and Platform Toolset. http://www.viva64.com/go.php?url=689

For more complete information about compiler optimizations, see our Optimization Notice.