Сохранить имя теста Gcov в файлах GCDA
После того, как я выполнил тестовое покрытие моего продукта с использованием lcov (для разработчика C++), я хотел бы нарисовать матрицу, которая бы соответствовала названию теста и покрываемым им файлам.
Идея состоит в том, чтобы быстро просмотреть код, включенный в 1 тестовый файл.
например:
xxxx | файл 1 | файл 2 | файл 3 | файл 4 | файл 5 |
тест 1 | ДА | НЕТ | ДА | ДА | ДА |
тест 2 | ДА | НЕТ | НЕТ | Нет | НЕТ |
тест 3 | ДА | ДА | НЕТ | НЕТ | ДА |
В моем проекте мне нужно выполнить тысячи тестов, чтобы проверить охват тысяч файлов, поэтому матрица будет огромной.
К сожалению, кажется, что по замыслу GCOV не работает таким образом, потому что у нас будет только один набор файлов gcda, который покрывает весь код, и кажется невозможным определить, какой тест покрывает какую часть кода.
Единственное решение, которое я мог бы себе представить, это следующее:
for current_test in all_tests do:
run 1 current_test
retrieve gcda -> .info file
extract from the .info file the name of covered code files
append the matrix with current_test / code filename
Проблема в том, что это будет очень долго, потому что для этого потребуется около 5 минут на 1 тест... Я потрачу недели на ожидание...
Любая идея будет очень приветствоваться.
Большое спасибо за вашу помощь. С уважением, Томас
1 ответ
К сожалению, данные gcov не включают имена тестов, и они должны быть добавлены в пост-обработку. Следовательно, ваш последовательный цикл является разумным подходом, если вы остаетесь в коллекции покрытия на основе gcov.
Обходные пути, которые вы можете попробовать:
Запустите ваши тесты с соответствующей переменной GCOV_PREFIX, чтобы покрытие записывалось в другой каталог, а не рядом с вашими объектными файлами.
Используйте другой инструмент покрытия. Например, kcov выполняет инструментарий во время выполнения и записывает результаты покрытия в указанную вами директорию. Однако форматы данных покрытия не могут использоваться инструментами на основе gcov.
Распределите свои тесты по нескольким машинам.
Я предполагаю, что GCOV_PREFIX, вероятно, будет работать в вашем сценарии, чтобы вы могли легко запускать свои тесты параллельно. Эта переменная немного неудобна, потому что вам нужно знать абсолютные пути ваших объектных файлов, но, вероятно, это легче выяснить, чем ждать несколько дней для вашей матрицы покрытия.