Подтвердить что ты не робот

Как измерить охват теста CppUnit (на win32 и Unix)?

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

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

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

Приветствия,

4b9b3361

Ответ 1

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

Эта статья описывает другие разочарования разработчиков, которые ищут инструменты для покрытия кода на С++. Окончательное решение автора было Bullseye Coverage.

Особенности Bullseye Coverage:

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


Тестирование Linux и Windows?

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

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

Ответ 2

Если вы можете использовать GNU GCC в качестве вашего компилятора, то < Инструмент i1 > работает хорошо. Очень легко полностью автоматизировать весь процесс.

Ответ 3

Если вы используете инструментальную цепочку GCC, gcov будет получать статистику источников, функций и веток. gcov отлично работает для MinGW и Cygwin. Это позволит вам получить статистику охвата, а также исправить исходный код инструмента, который позволяет визуализировать неисполненный код.

Однако, если вы действительно хотите ударить его из парка с хорошими отчетами, использование gcov в сочетании с lcov является путь. lcov предоставит вам отчеты о барах, привязанные к файлам и каталогам, статистике функционального покрытия и цветному исходному файлу, чтобы показать покрытие (зеленые средства выполняются, красный означает не...).

lcov легко работает в Linux, но может потребовать взлома perl на Cygwin. У меня лично возникли проблемы с выполнением скриптов (lcov реализован в perl) в Windows. Я получил взломанную версию для работы, но буду предупрежден.

Другой подход - использовать gcov emit для windows и делать обработку сообщений lcov в Linux, где он, безусловно, будет работать из коробки.

Ответ 4

Ознакомьтесь с нашим инструментом SD С++ Test Coverage. Он может быть получен для GCC и для MSVC6.

Он имеет низкий сбор данных пробных зондов, хорошее отображение данных о покрытии, наложенных на ваш код, и полное создание отчетов с помощью накопительных пакетов на уровне уровня метода/класса/файла/каталога.

EDIT: Aug 2015: теперь поддерживает GCC5 и различные диалекты MS через Visual Studio 2015. Чтобы использовать эти инструменты под Linux, вам нужно Wine, но там есть инструменты для Linux-родного sh-скриптов и пользовательский интерфейс на основе Linux/Java, поэтому инструмент чувствует себя как родной инструмент Linux там.

Ответ 5

Думаю, я должен был указать компилятор - мы используем gcc для Linux и MSVC 6 (да, я знаю, он старый, но он работает (в основном) для нас) для WIn32.

По этой причине gcov не будет работать для наших сборников Win32, а Bullseye не будет работать для наших сборников Linux.

Опять же, возможно, мне нужно только покрытие в одной ОС...