Вопрос

У меня очень большая база кода, которая содержит обширные модульные тесты (с использованием CppUnit). Мне нужно определить, какой процент кода используется этими тестами, и (в идеале) сгенерировать какой-то отчет, который сообщает мне для каждой библиотеки или для каждого файла, какая часть кода была выполнена.

Вот в чем загвоздка:это должно выполняться совершенно неестественно (в конечном итоге внутри сборки с непрерывной интеграцией) и должно быть кроссплатформенным (ну, по крайней мере, WIN32 и * nix).

Кто-нибудь может предложить инструмент или набор инструментов, которые помогут мне сделать это?Я не могу отказаться от CppUnit (да и не хотел бы - это надирает задницу), но в остальном мне не терпится услышать любые ваши рекомендации.

Ваше здоровье,

Это было полезно?

Решение

Какой инструмент мне следует использовать?

Это статья описывает еще одно разочарование разработчиков вызывает поиск инструментов покрытия кода C ++.Окончательное решение автора было следующим Покрытие в Яблочко.

Покрытие в Яблочко возможности:

Что касается подключения к вашей непрерывной интеграции, это зависит от того, какое решение CI вы используете, но вы, вероятно, можете подключить этапы измерения инструментария / покрытия к файлу make, который вы используете для автоматического тестирования.


Тестируете Linux против Windows?

Пока все ваши тесты выполняются корректно в обеих средах, у вас должно быть все в порядке с измерением покрытия в одной или другой.(Хотя появляется Яблочко для поддержки обеих платформ).Но почему вы не выполняете сборки с непрерывной интеграцией в обеих средах??Если вы предоставляете услуги клиентам в обеих средах, то вы потребность проводить тестирование в обоих случаях.

По этой причине, похоже, вам может потребоваться настроить два сервера непрерывной сборки, один для сборки Linux и один для сборки Windows.Возможно, это можно легко сделать с помощью какого-нибудь программного обеспечения для виртуализации, такого как vmware или виртуальный ящик.Возможно, вам не нужно запускать показатели покрытия кода в обеих операционных системах, но вы определенно должны запускать модульные тесты в обеих.

Другие советы

Если вы можете использовать GNU GCC как ваш подчиненный, тогда gcov инструмент работает хорошо.Очень легко полностью автоматизировать весь процесс.

Если вы используете набор инструментов 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.

С другой стороны, возможно, мне нужно покрытие только в одной операционной системе...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top