суббота, 24 декабря 2011 г.

Пара общих слов о PVS

Недавно мне удалось получить временный ключик для изучения анализатора PVS-Studio, за что разработчикам большое спасибо. Ключ я получил на месяц, бесплатно, как студент. Для этого нужно просто написать письмо в поддержку с просьбой выдать ключ для временного пользования.


Теперь немного о том, что же такое PVS-Studio. Это программа для статического анализа исходного кода на языках C, C++, C++0x11. Выполнена в виде плагина к Visual Studio 2005-2010. Также есть возможность запуска из консоли даже при отсутствии файлов проектов VS. Включает в себя 3 разных анализатора:
  1. общий - для определения проблем во всех программах
  2. VivaMP - для анализа параллельных программ, написанных с помощью  библиотеки OpenMP
  3. Viva64 - для анализа проблем переноса программ на 64 битную платформу.
VS нужна в том числе для препроцессинга, однако судя по всему в последнее время эта функция переходит к компилятору Clang. Вывод сделан на основе наличия бинарника Clang в директории PVS и его частых вызовов во время анализа.

О том, какие ошибки умеет искать PVS я расскажу позже. Вообще, чтобы лучше понять особенности конкретного инструмента, нужно изучить историю и цели его создания.

Для  начала расскажу о деятельности фирмы-производителя ООО "СиПроВер". Т.к. PVS появился относительно недавно (библиотека в 2006, а фирма в 2008 году), разработчикам было необходимо как-то заниматься его продвижением. Поэтому была развёрнута довольно активная рекламная компания. Во-первых было написано большое количество статей, в том числе научных работ, посвящённых статическому анализу. Посмотреть их можно на сайте разработчика. Во-вторых статьи дублировались на небезызвестном ресурсе ХабраХабр, что собственно и продвинуло продукт в массы. Для подтверждения качества продукта, а также его рекламы авторы занялись проверкой свободных проектов и отправкой багрепортов разработчикам, за что им много плюсов в карму (по количеству рассмотренных проектов - больше 20 на момент написания поста). Анализу подверглись такие вещи как Qt, Clang, Winmerge, Doom3, Loki и много чего ещё. В общем, ребятам явно нравится то, чем они занимаются и, что более важно, они готовы помогать сообществу несмотря на отсутствие прибыли (прямой).

Теперь об истории создания библиотеки. Задумывалось всё с целью поиска проблем в переносе с приложений 32 битной архитектуры на 64 битную. Отсюда, собственно, и 64 в названии библиотеки. Создание библиотеки Viva64 изначально не планировалось, но она получилась как следствие работы с библиотекой OpenC++.

OpenC++ - это проект, призванный "позволить пользователям делать инструменты не теряя времени на такие нудные вещи как парсер и система типов". Суть проекта заключается в том, что программист пишет мета-программу на C++, описывающую действия по анализу других программ, после чего OpenC++ компилирует её в виде плагина к компилятору. Схематично это выглядит так:



Так сложилось, что эта библиотека не отвечала всем требованиям создателей PVS, в результате чего было сделано множество доработок и схема проекта стала выглядеть следующим образом:
Раньше VivaCore была в свободном доступе, но с определённого момента стала недоступна для скачивания: "Просто скачать и использовать эту библиотеку больше нельзя, так как без нашей поддержки это не возможно, а поддерживать open source без оплаты мы пока не в состоянии." Также из свободного доступа пропала программа для графического представления деревьев разбора VivaVisualCode.

Как и многие анализаторы кода, Viva, предъявляет более слабые требования к корректности синтаксиса, возлагая данную функцию на компилятор. Т.е. может допускать некорректный код, что в принципе является нормальным для данного класса программ.

На данный момент PVS-Sudio имеет базу из почти 180 ошибок, связанных с переходом на 64 битную архитектуру, использованием библиотеки OpenMP и просто потенциально опасными конструциями на C++.

Интересный факт: Viva Core - один из монстров в игре Gradius.

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.