Какой лучший инструмент покрытия кода C , который работает с шаблонами?

#c #multithreading #templates #code-coverage #gcov

#c #многопоточность #шаблоны #покрытие кода #gcov

Вопрос:

Я использовал gcov для тестирования покрытия кода, но когда дело доходит до шаблонного кода c , он работает не так хорошо. Я широко использую boost:: spirit, а gcov, похоже, просто игнорирует шаблонный код spirit.

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

Комментарии:

1. @Tomalakgeret’kal: покрытие кода?

2. @Tomalakgeret’kal тестирование покрытия кода

3. Существует множество шаблонного кода, который оценивается во время компиляции. Что означает «покрытие кода» для этого? Нормальное покрытие кода определяется во время выполнения.

4. @MSalters: Я бы предположил, что покрытие кода для части времени выполнения, но я никогда не видел инструмента, который указывал бы это для каждого экземпляра шаблона. Я предполагаю, что есть проблема с встраиванием…

Ответ №1:

TestCocoon — отличный инструмент, который стоит попробовать, лучше, чем gcov, с хорошими инструментами и возможностями создания отчетов. Поскольку шаблоны — звери времени компиляции, я не уверен, какую информацию о покрытии вы хотите получить?

мои два цента

Комментарии:

1. Хорошим также является Testwell CTC , он имеет хорошие отчеты в формате HTML, поддерживает все компиляторы и работает с любой целью embeed.

2. @B_PRIEUR: Я этого не знаю. testcocoon в то время был бесплатным. Я не знаю продукт Testwell, но кажется профессиональным. Добавьте его в ответ…

3. Да, он профессиональный, я не думаю, что он добавляет так много информации, а модераторам не очень нравятся ответы на инструменты: p

Ответ №2:

Я работаю над большим продуктом, и мы использовали стороннее приложение под названием BullsEye для тестирования покрытия. Это творило чудеса.

Ответ №3:

Наш инструмент для покрытия тестов C обеспечивает тестовое покрытие для тел шаблонов или, по крайней мере, для тех шаблонов, которые определены в файлах, которые вы указываете для его покрытия.

Он не различает экземпляры шаблонов.

Если у вас многопоточное приложение, инструмент будет записывать ветви, выполняемые всеми потоками, если вы настроили инструмент на использование флагов, доступных для записи атомарно (обычно это естественный размер слова процессора [32 или 64 бита]. (Если вы этого не сделаете, вы можете столкнуться с гонкой потоков при обновлении флагов покрытия, и вы можете потерять немного покрытия. Это не дефект инструмента; это следствие несинхронизированного доступа к хранилищу, содержащему пробные данные.)

Для обнаружения гонки OP необходимо найти средство обнаружения гонки; инструменты тестового покрытия этого не сделают.

Ответ №4:

Средство проверки покрытия C предоставляет данные покрытия для шаблонов.

Покрытие кода отслеживается для всех потоков.

Ответ №5:

Parasoft CPP test — хороший инструмент для различного анализа, включая покрытие кода и статический анализ. Это также полезно для изучения многопоточности.

http://www.parasoft.com/jsp/products/cpptest.jsp

Вот 10 хороших инструментов open soure для покрытия кода :

https://web.archive.org/web/20181018002302/http://open-tube.com/10-code-coverage-tools-c-c/