Каков наилучший способ найти необоснованные шаблоны в коде C ++?
У меня есть кодовая база, которая интенсивно использует шаблоны.
Конечно, мы хотим убедиться, что тестовое покрытие является высоким.
Для всего используемого кода это работает очень хорошо, используя gcov
.
Однако неиспользуемые шаблоны сообщаются как неисполняемые gcov
.
После некоторого поиска в Google, кажется, нет никакого способа заставить g++
выдавать код для этих шаблонов (что логично, как компилятор должен угадывать какие-либо типы?)
Представляется также, что нет способа заставить gcov распознавать необработанный код шаблона как исполняемый код.
Есть ли что-нибудь "из коробки", что позволяет мне увеличивать файлы, сгенерированные инструментарием GCC -ftest-coverage -fprofile-arcs
? Согласно документации gcov для GCC , вероятно, будет достаточно отметить все тело функции шаблона как один блок, так как выполнение никогда не закончится там.
РЕДАКТИРОВАТЬ (справочная информация): я работаю над библиотекой шаблонов только для заголовка.
Моя цель здесь - найти неиспользуемые / непроверенные функции.
Я знаю, что покрытие кода имеет недостатки, но поиск неосуществленного кода является очень важным шагом на пути к лучшему тестированию кода.
В настоящее время мы помещаем макросы контрольных точек в начале каждой функции.
В режиме тестирования они расширяются до кода, который вставляет пару (file, line)
в глобальный набор пройденных контрольных точек.
После выполнения тестов мы вручную читаем все файлы и сравниваем достигнутые контрольные точки с набором всех доступных контрольных точек.
Важным является нахождение неосуществленного кода, например, из-за неинтуитивного поведения приоритета шаблона C ++, где-то может быть мертвый код, который читатель или даже автор ожидают использовать.