Интеграционное тестирование
На прошлых занятиях мы тестировали отдельные функции и модули. Но настоящая программа состоит из множества модулей, которые должны работать вместе. И часто ошибки возникают именно на «стыках» между ними.
Сегодня мы разберём интеграционное тестирование — проверку того, как модули взаимодействуют друг с другом.
План лекции
Сегодня мы разберём, как проверять взаимодействие модулей.
- 1 Зачем нужно интеграционное тестирование
- 2 Что такое интеграция
- 3 Виды интеграционного тестирования
- 4 Восходящее тестирование
- 5 Нисходящее тестирование
- 6 Монолитное тестирование
- 7 Драйверы и заглушки
- 8 Пример: интеграция калькулятора
- 9 Типичные ошибки при интеграции
- 10 Итоги и практика
Зачем нужно интеграционное тестирование
Представьте, что у вас есть три модуля: сложение, вычитание и вывод на экран. Каждый по отдельности работает идеально.
Что такое интеграция
Интеграция (integration) — это объединение отдельных модулей в единое целое.
Виды интеграционного тестирования
Есть несколько стратегий интеграции. Каждая определяет, в каком порядке соединять модули.
Сначала нижние модули, потом верхние.
Сначала верхние модули, потом нижние.
Все модули сразу, потом тестирование.
Восходящее тестирование
Восходящее тестирование (bottom-up) — сначала тестируются нижние модули (те, которые не зависят от других), потом — верхние.
Нисходящее тестирование
Нисходящее тестирование (top-down) — сначала тестируются верхние модули, потом — нижние.
Монолитное тестирование
Монолитное тестирование (big bang) — все модули соединяются сразу, и система тестируется целиком.
Драйверы и заглушки
При интеграционном тестировании часто нужны драйверы и заглушки. Это вспомогательные программы, которые имитируют работу других модулей.
Вызывает тестируемый модуль. Имитирует «верхний» модуль, который ещё не готов.
Имитирует «нижний» модуль, который ещё не готов. Возвращает заранее заданные значения.
Пример: интеграция калькулятора
У нас есть два модуля: add (сложение) и print_result (вывод). Проверим, как они работают вместе.
Тест интеграции
Типичные ошибки при интеграции
Один модуль возвращает строку, другой ожидает число.
Один модуль возвращает дату в формате
YYYY-MM-DD, другой ожидает DD.MM.YYYY.Модуль B вызывается до того, как модуль A подготовил данные.
Один модуль передаёт данные, другой их не получает.
Один модуль обещает вернуть число, а возвращает
null.Один модуль выбрасывает исключение, другой его не ловит.
Как избежать ошибок интеграции
Есть несколько практик, которые помогают снизить количество ошибок на «стыках».
- Чёткие контракты. Каждый модуль должен явно описывать, что он принимает и что возвращает.
- Проверка типов. Используйте типизацию (Python type hints, C++ типы).
- Ранняя интеграция. Не откладывайте соединение модулей «на потом».
- Автотесты. Пишите тесты, которые проверяют взаимодействие модулей.
- Логирование. Записывайте, какие данные передаются между модулями.
Практическое задание
Примените полученные знания на практике.
Задание 1
Напишите два модуля: multiply(a, b) и format_result(value). Напишите тест, который проверяет их совместную работу.
Задание 2
Придумайте три ошибки, которые могут возникнуть при интеграции этих модулей (несовпадение типов, форматов, порядка вызовов).
Задание 3
Объясните своими словами, чем драйвер отличается от заглушки.
Шпаргалка
Сохраните этот слайд — здесь все основные понятия лекции.
Итоги лекции
Подведём итоги. Вот что вы теперь знаете.
- ✅ Интеграционное тестирование проверяет, как модули работают вместе.
- ✅ Восходящее — снизу вверх, нисходящее — сверху вниз, монолитное — все сразу.
- ✅ Драйвер вызывает модуль, заглушка имитирует другой модуль.
- ✅ Ошибки интеграции часто связаны с типами, форматами и порядком вызовов.
- ✅ Чёткие контракты и автотесты помогают избежать проблем.
Домашнее задание
Задания для самостоятельной работы. Первые два обязательны, остальные — для оценки «отлично».
- Напишите два модуля (например,
multiplyиformat_result) и тест их совместной работы. - Объясните своими словами, чем восходящее тестирование отличается от нисходящего.
- Придумайте три ошибки, которые могут возникнуть при интеграции модулей.
- Найдите в интернете пример реальной ошибки интеграции и объясните, как её нашли.
- Напишите заглушку для функции, которая возвращает случайное число. Объясните, зачем она нужна.
Что дальше?
В этом блоке по тестированию у нас ещё несколько материалов.
- Лекция 7: формальные инспекции и верификация.
- Практика 3: интеграционное тестирование на Python.
- Лекция 8: тестирование в MSF и роли в команде.
Спасибо за внимание!
🔗
Модули по отдельности — это ещё не система
Только когда они работают вместе, программа становится полезной. Интеграционное тестирование проверяет именно это.