Как я могу измерить покрытие теста CppUnit (на win32 и Unix)? - PullRequest
21 голосов
/ 28 августа 2008

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

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

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

Приветствия

Ответы [ 5 ]

13 голосов
/ 28 августа 2008

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

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

Покрытие "яблочко" Особенности:

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


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

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

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

7 голосов
/ 29 августа 2008

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

3 голосов
/ 17 июня 2009

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

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

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

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

2 голосов
/ 31 августа 2009

Проверьте наш SD C ++ Test Coverage инструмент. Его можно получить как для GCC, так и для MSVC6.

Он обеспечивает сбор данных с низким уровнем служебных данных, хорошее отображение данных покрытия, наложенных на ваш код, и полную генерацию отчета со сведениями о покрытии по уровням метода / class / file / directory.

РЕДАКТИРОВАТЬ: август 2015: Теперь поддерживает GCC5 и различные диалекты MS через Visual Studio 2015. Чтобы использовать эти инструменты в Linux, вам нужен Wine, но там инструменты предоставляют собственные сценарии Linux на основе sh и пользовательский интерфейс на основе Linux / Java, поэтому инструмент выглядит как собственный инструмент Linux.

0 голосов
/ 29 августа 2008

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

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

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

...