Функциональное тестирование Модульные тесты Тестируются как внешние интерфейсы, так и внутренние реализации. Итоговое покрытие кода превышает 90%.
Инструменты:
Googletest,
gcovr.
Модульные тесты с использованием санитайзеров В процессе тестирования используется набор санитайзеров для компиляторов GCC и CLang. Код инструментируется дополнительными инструкциями на этапе компиляции, затем выполняется в специально подготовленном окружении. Краткий список того, что ищут санитайзеры:
- Ошибки при работе с памятью.
- Утечки памяти.
- Гонки данных (data races).
- Ошибки переполнения.
- Ошибки инициализации.
- Ошибки по работе с типами.
- Недопустимые арифметические операции.
- и т.д.
Инструменты:
Интеграционные тесты Разностороннее тестирование внешней функциональности (API). Основные направления:
- Граничные значения.
- Некорректные входные данные.
- Изменение промежуточных данных.
- Подключение разных источников энтропии.
Документация к интеграционным тестам пишется прямо в комментариях к коду. Сценарии и параметры описываются с помощью doxygen-тегов. В результате на выходе получается готовая тестовая документация в формате BDD.
Инструменты:
Googletest,
Doxygen End-To-End тесты Для поставки клиентам собирается пакет, содержащий необходимое ПО и документацию. Каждый пакет проходит автоматическое тестирование в чистой среде. Проверяются:
- Название пакета
- Состав пакета
- Установка содержимого пакета
- Работа примеров использования
- Документация
Инструменты:
pytest.
Тесты интеграции с другими продуктами Применяется политика привязки к конкретным версиям зависимых продуктов. Это может быть название тега или, в крайнем случае, ветки. Используются готовые артефакты на CI. Таким образом, тест работает с уже собранными артефактами. В результате получаем постоянно готовую к работе интеграцию.
Инструменты:
pytest