Написание инструмента для поддержки тестов покрытия кода - PullRequest
2 голосов
/ 02 февраля 2009

Я пытаюсь написать небольшой инструмент для поддержки некоторых тестов code , которые мы проводим в моей компании.

Вот мое требование к инструменту -

Ввод - Список файлов (.cpp и .h), которые были изменены (как часть зарегистрированного списка изменений)

Выход - Все функции, которые были добавлены или изменены в источнике (в результате проверки изменений).

Есть идеи, как я могу это сделать? По сути, это сводится к тому, какие строки изменились и какова функция, связанная с измененными строками ...

Подробнее - Контроль источника: Perforce Платформа: Windows

Ответы [ 2 ]

2 голосов
/ 02 февраля 2009

Это звучит сложно. И я не уверен, что вы будете делать с информацией об измененных функциях в источнике. Вы не хотите ограничивать покрытие кода этими функциями: возможно, измененная функция повлияла на покрытие неизменной функции.

Возможно, лучше всего просто запускать все тесты при каждой регистрации или раз в час, если что-то изменилось. Тогда вы можете пропустить создание сложного инструмента и в любом случае получить лучшие результаты.

0 голосов
/ 03 февраля 2009

Поскольку все файлы проверены в Perforce, вы можете выполнить пакетный diff (p4 diff2) измененных файлов с предыдущей ревизией. p4 diff2 также принимает спецификацию ветвления, которая может быть более удобным методом.

Когда обнаружен diff, вам нужно написать скрипт для извлечения имени метода измененной строки. Алгоритм может быть «Поиск в файле назад, пока вы не найдете сигнатуру метода для вашего синтаксиса».

Чтобы быть умным, определите имя класса на основе имени файла или списка ваших классов, созданного другим сценарием. Этот список имен классов может быть полезен при определении сигнатуры метода. Как известно, за именем класса следуют :: и имя метода.

Я считаю, что этот алгоритм легко сделать точным на 95% и сложным на 100% для произвольного ввода.

Этот скрипт должен исключать дубликаты для создания уникального списка.

Полученный список - это список, который вы запрашиваете в своем вопросе.

...