Использование PVS-Studio вместе с системами continuous integration

21.05.2013

Аннотация

В статье показаны приемы организации работы анализатора кода PVS-Studio вместе с системами непрерывной интеграции (continuous integration). Приведены примеры настройки запуска PVS-Studio.

Введение

Непрерывная интеграция (continuous integration, CI) — это практика разработки программного обеспечения, предполагающая частую сборку и последующее тестирование текущей версии продукта. Системы непрерывной интеграции, как правило, взаимодействуют напрямую с системами контроля версий и позволяют значительно повысить надёжность интеграционного процесса и снизить его трудоёмкость за счёт полной автоматизации всех этапов сборки и тестирования.

Для использования в системах непрерывной интеграции PVS-Studio предусматривает возможность "тихого запуска" анализа тестируемого проекта из командной строки. Подобная интеграция PVS-Studio в процесс регулярных сборок позволит эффективно использовать результаты анализа при групповой работе над проектом.

Использование функции "Mark As False Alarm" в процессе автоматизации тестирования

При запуске анализа из командной строки PVS-Studio каждый раз будет осуществлять проверку всего кода тестируемого проекта. Такой подход к проверке обусловлен тем, что изменения в одном заголовочном h-файле часто могут затрагивать более чем один cpp файл, и поэтому проверки только модифицированных или новых файлов, а не всего решения, недостаточно.

Но стоит помнить, что методика статического анализа предполагает генерацию анализатором большого числа т.н. "ложных срабатываний" и для подавления этого "шума" очень важно при регулярной проверке кода с помощью PVS-Studio пользоваться функцией "Mark as False Alarm". Работу с анализатором PVS-Studio можно разделить на 2 этапа: внедрение и постоянное использование. На этапе внедрения анализатора в систему непрерывной интеграции программист должен просмотреть все полученные сообщения об ошибках и либо исправить соответствующий им код, либо разметить его как ложные срабатывания. После этого на этапе тестирования анализатор будет генерировать сообщения только для добавленного в проект нового кода.

Интеграция PVS-Studio с системами непрерывной сборки (continuous integration)

В связи с тем, что PVS-Studio включает плагины-расширения для сред разработки Microsoft Visual Studio/Embarcadero RAD Studio, возможна интеграция анализатора в любую систему CI, способную запускать сборки для данных IDE из командной строки с передачей аргументов. При этом от CI системы не требуется прямая поддержка сборок в них, достаточно лишь иметь возможность передавать команды интерпретатору командной строки ОС и обрабатывать стандартный поток вывода stdout.

Как вызывать анализатор для проверки из командной строки, подробно показано в отдельной статье.

Открытие лог-файла результата в IDE (двойным щелчком мыши напрямую из файлового менеджера или через меню PVS-Studio/Load Analysys Report) позволяет осуществлять навигацию по фрагментам кода проанализированного проекта, содержащим ошибки. Поскольку сам XML лог-файл не удобен для чтения, анализатор генерирует в том же каталоге текстовый файл, содержащий простой список ошибок (не помеченных как False Alarm), обнаруженных PVS-Studio. Такой файл наглядно демонстрирует результаты анализа, и поэтому его удобно присоединять к общим отчётам CI системы о сборке, которые могут, к примеру, рассылаться по электронной почте всем заинтересованным разработчикам.

В случае, когда проверка всех файлов проектов не является целесообразной, PVS-Studio может осуществить проверку только файлов, модифицированных в течение заданного интервала времени. Данный временной интервал может быть задан на странице SpecificAnalyzerSettings настроек анализатора. Альтернативно, файлы для проверки также могут быть указаны явно с использованием пакетного режима работы.

Пакетный режим работы при запуске анализатора из командной строки

При запуске анализа из командной строки PVS-Studio по умолчанию проверяет все файлы, включённые в указанные проекты. Однако при наличии необходимости проверить только определённый набор файлов может быть использован пакетный режим работы, в котором анализу подвергнуться только те файлы, пути к которым прописаны явно. Об этом режиме запуска (с параметром filelist-file) также говорится в отдельной статье.

Пример интеграции PVS-Studio плагина для Visual Studio с системой CruiseControl .NET

Интеграция анализатора PVS-Studio в систему CruiseControl.NET может быть осуществлена путём добавления в необходимый сборочный проект (build project) задачи (сборочного шага) типа Executable, в которой будет вызван интерпретатор командной строки Windows cmd.exe. Ниже приведён фрагмент конфигурационного файла сервера CruiseControl.NET, в котором описана подобная сборочная задача.

<exec>
 <description>PVS-Studio check solution example</description>
 <executable>&CMD_PATH;</executable>
 <baseDirectory>&DEVENV_PATH;<baseDirectory>
 <buildArgs>
  <item>
  /c devenv.exe "C:\sample\VSSol.sln" /command
 "PVSStudio.CheckSolution Win32|Release|C:\sample\ result-log.plog" 
  </item>
 </buildArgs>
 </exec>

Результаты анализа, содержащиеся в файле result-log.plog.only_new_messages.txt, могут быть опубликованы любыми задачами публикации (publisher tasks), например копированием файла в общий сборочный каталог или рассылкой сборочного лога сервера по электронной почте. Для включения результатов анализа в общий лог можно воспользоваться сборочной задачей Executable:

<exec>
 <description>PVS-Studio load error log</description>
 <executable>&CMD_PATH;</executable>
 <baseDirectory>&PROJECT_ROOT;</baseDirectory>
 <buildArgs>
  <item>
  /c type result-log.plog.only_new_messages.txt
  </item>
 </buildArgs>
 <buildTimeoutSeconds>0</buildTimeoutSeconds>
</exec>

Интеграция с системой Hudson

Для интеграции анализатора PVS-Studio с системой Hudson необходимо в требуемый проект (Job) добавить шаг сборки "Выполнить команду Windows". Пример такой команды:

devenv.exe "C:\sample\VSSol.sln" /command "PVSStudio.CheckSolution
Win32|Release|C:\sample\ result-log.plog" 

Полученный в результате анализа текстовый файл result-log.plog.only_new_messages.txt, содержащий полный список не размеченных как ложные срабатывания ошибок, можно присоединить к общему логу сборки проекта, дополнительно добавив команду

type result-log.plog.only_new_messages.txt

В дальнейшем полученный лог может быть опубликован с использованием любых встроенных в систему Hudson механизмов. Например, для публикации результатов сборки по электронной почте можно воспользоваться расширением ext-email, добавив в тело письма лексему (token) $BUILD_LOG:

${BUILD_LOG, maxLines=5000}