Как я могу измерить тестовое покрытие CppUnit (в win32 и Unix)?
-
09-06-2019 - |
Вопрос
У меня очень большая база кода, которая содержит обширные модульные тесты (с использованием CppUnit). Мне нужно определить, какой процент кода используется этими тестами, и (в идеале) сгенерировать какой-то отчет, который сообщает мне для каждой библиотеки или для каждого файла, какая часть кода была выполнена.
Вот в чем загвоздка:это должно выполняться совершенно неестественно (в конечном итоге внутри сборки с непрерывной интеграцией) и должно быть кроссплатформенным (ну, по крайней мере, WIN32 и * nix).
Кто-нибудь может предложить инструмент или набор инструментов, которые помогут мне сделать это?Я не могу отказаться от CppUnit (да и не хотел бы - это надирает задницу), но в остальном мне не терпится услышать любые ваши рекомендации.
Ваше здоровье,
Решение
Какой инструмент мне следует использовать?
Это статья описывает еще одно разочарование разработчиков вызывает поиск инструментов покрытия кода C ++.Окончательное решение автора было следующим Покрытие в Яблочко.
Покрытие в Яблочко возможности:
- Кроссплатформенная поддержка (win32, unix и встроенные), (поддерживает компиляторы linux gcc и MSVC6)
- Простота в использовании (запущен в эксплуатацию через несколько часов).
- Обеспечивает "наилучшие" показатели:Охват функций и Условий / Решений.
- Использует инструментарий исходного кода.
Что касается подключения к вашей непрерывной интеграции, это зависит от того, какое решение CI вы используете, но вы, вероятно, можете подключить этапы измерения инструментария / покрытия к файлу make, который вы используете для автоматического тестирования.
Тестируете Linux против Windows?
Пока все ваши тесты выполняются корректно в обеих средах, у вас должно быть все в порядке с измерением покрытия в одной или другой.(Хотя появляется Яблочко для поддержки обеих платформ).Но почему вы не выполняете сборки с непрерывной интеграцией в обеих средах??Если вы предоставляете услуги клиентам в обеих средах, то вы потребность проводить тестирование в обоих случаях.
По этой причине, похоже, вам может потребоваться настроить два сервера непрерывной сборки, один для сборки Linux и один для сборки Windows.Возможно, это можно легко сделать с помощью какого-нибудь программного обеспечения для виртуализации, такого как vmware или виртуальный ящик.Возможно, вам не нужно запускать показатели покрытия кода в обеих операционных системах, но вы определенно должны запускать модульные тесты в обеих.
Другие советы
Если вы используете набор инструментов GCC, gcov предоставит вам исходную, функциональную статистику и статистику охвата филиалов.gcov отлично работает для MinGW и Cygwin.Это позволит вам получать статистику покрытия, а также выдавать инструментальный исходный код, который позволяет визуализировать неисполненный код.
Однако, если вы действительно хотите добиться успеха с помощью красивых отчетов, используя gcov в сочетании с lcov это тот путь, по которому нужно идти.lcov предоставит вам линейчатые отчеты с привязкой к файлам и каталогам, статистику функционального охвата и просмотр исходных файлов с цветовой кодировкой для отображения охвата (зеленый означает выполненный, красный означает нет ...).
lcov прост в Linux, но может потребовать некоторого взлома perl в Cygwin.У меня лично были некоторые проблемы с выполнением скриптов (lcov реализован на perl) в Windows.У меня есть взломанная версия для работы, но будьте предупреждены.
Другой подход заключается в выполнении gcov-эмиссии в Windows и постобработки lcov в Linux, где это, несомненно, будет работать "из коробки".
Ознакомьтесь с нашими Тестовое покрытие SD C ++ инструмент.Его можно получить как для GCC, так и для MSVC6.
Он обеспечивает низкие накладные расходы на сбор пробных данных, приятное отображение данных покрытия, наложенных на ваш код, и полную генерацию отчетов с накоплениями по покрытию на уровнях метода / класса / файла / каталога.
Редактировать:Август 2015 года:Теперь поддерживает GCC5 и различные диалекты MS через Visual Studio 2015.Чтобы использовать эти инструменты под Linux, вам нужен Wine, но там инструменты предоставляют встроенные в Linux сценарии sh и пользовательский интерфейс на основе Linux / Java, так что инструмент там выглядит как родной инструмент Linux.
Наверное, мне следовало указать компилятор - мы используем gcc для Linux, а MSVC 6 (да, я знаю, он старый, но работает (в основном) у нас) для WIn32.
По этим причинам gcov не будет работать для наших сборок Win32, а Bullseye не будет работать для наших сборок Linux.
С другой стороны, возможно, мне нужно покрытие только в одной операционной системе...