Расскажи про уровни тестирования
Уровни тестирования — это иерархическая структура этапов, на которых проверяется программное обеспечение с целью выявления дефектов и подтверждения соответствия требованиям. Эти уровни отражают, как ПО проверяется на разных стадиях жизненного цикла разработки. Каждый уровень нацелен на определённый аспект системы и проводится разными участниками проекта: разработчиками, тестировщиками, пользователями.
📌 1. Модульное тестирование (Unit Testing)
Что тестируется:
Отдельные модули (единицы) программы — функции, методы, классы.
Кто проводит:
Чаще всего — разработчики.
Цель:
Проверить, что каждый модуль работает в изоляции от остальных. Обнаружить ошибки на самом раннем этапе разработки.
Инструменты:
- Python: unittest, pytest
- Java: JUnit, TestNG
- JavaScript: Jest, Mocha
Особенности:
- Тесты быстрые;
- Выполняются часто (при каждом коммите);
- Часто автоматизированы и интегрированы в CI/CD;
- Могут использовать моки, стабсы и фейки для имитации зависимостей.
📌 2. Интеграционное тестирование (Integration Testing)
Что тестируется:
Взаимодействие между модулями или компонентами.
Кто проводит:
Разработчики и тестировщики.
Цель:
Проверить, что интеграция модулей проходит корректно и данные передаются правильно между ними.
Типы интеграционного тестирования:
- Big Bang — все модули соединяются сразу;
- Incremental — модули добавляются поочерёдно:
- Top-down — от верхнего уровня к нижнему;
- Bottom-up — от нижнего уровня к верхнему;
- Sandwich — смешанный подход.
- Top-down — от верхнего уровня к нижнему;
Инструменты:
- Postman, SoapUI (API)
- REST Assured, SuperTest
- TestContainers (интеграция с БД, Kafka и т.д.)
Особенности:
- Используются реальные зависимости или сервисы;
- Часто выявляют проблемы в интерфейсах и форматах данных;
- Могут использовать тестовые конфигурации окружения.
📌 3. Системное тестирование (System Testing)
Что тестируется:
Полностью интегрированная система как единое целое.
Кто проводит:
Отдел тестирования (QA-инженеры).
Цель:
Проверить поведение всей системы на соответствие функциональным и нефункциональным требованиям (performance, usability, security и т.д.).
Типы системного тестирования:
- Функциональное тестирование;
- Нагрузочное и стресс-тестирование;
- Тестирование безопасности;
- Тестирование доступности (Accessibility);
- UI/UX тестирование.
Инструменты:
- Selenium, Cypress (UI);
- JMeter, Locust (нагрузка);
- OWASP ZAP, Burp Suite (безопасность)
Особенности:
- Проводится на стейджинг-сервере;
- Использует как реальные данные, так и синтетические;
- Имитирует поведение конечного пользователя.
📌 4. Приёмочное тестирование (Acceptance Testing)
Что тестируется:
Конечная система с точки зрения клиента или бизнеса.
Кто проводит:
Заказчики, бизнес-аналитики, конечные пользователи (UAT — User Acceptance Testing).
Цель:
Подтвердить, что система соответствует бизнес-требованиям и готова к эксплуатации.
Типы:
- Alpha-тестирование — проводится внутренне, в разработке;
- Beta-тестирование — проводится внешне, с привлечением реальных пользователей;
- Контрактное тестирование — проверка соблюдения формальных требований.
Форматы:
- Check-листы;
- Acceptance-критерии (например, в формате Given–When–Then);
- Тестовые сценарии, основанные на бизнес-кейсах.
Особенности:
- Зависит от требований к бизнесу;
- Часто является финальной проверкой перед релизом;
- Может выявить важные баги, незамеченные на технических этапах.
📌 Взаимосвязь между уровнями
Каждый уровень охватывает разную часть архитектуры ПО и выявляет определённые типы ошибок:
Уровень | Объект тестирования | Цель |
---|---|---|
Модульный | Отдельная функция/метод | Корректность внутренней логики |
Интеграционный | Связки модулей | Корректность взаимодействия |
Системный | Вся система целиком | Соответствие спецификациям |
Приёмочный | Пользовательские сценарии | Соответствие ожиданиям клиента |
Ошибки, не найденные на одном уровне, могут быть обнаружены на следующем, но это увеличивает стоимость исправления. Поэтому критично важно тестировать как можно раньше и как можно чаще.
📌 Расширенные уровни
В дополнение к базовым 4 уровням также выделяют:
- Smoke testing — «поверхностная» проверка, что система вообще запускается и выполняет основные функции.
- Sanity testing — уточняющее тестирование после исправления дефектов.
- Regression testing — проверка, что изменения не повлияли на стабильность существующего функционала.
- Exploratory testing — исследовательское тестирование, без заранее подготовленных сценариев.
📌 V-модель тестирования
Уровни тестирования часто ассоциируют с V-моделью разработки (расширением Waterfall), где каждому этапу разработки соответствует уровень тестирования:
Требования ─────────────→ Приёмочное тестирование
│ ↑
↓ │
Анализ требований ─────→ Системное тестирование
│ ↑
↓ │
Проектирование ───────→ Интеграционное тестирование
│ ↑
↓ │
Реализация ───────────→ Модульное тестирование
Эта модель подчёркивает, что каждый уровень тестирования напрямую связан с определённым этапом разработки, а также важность планирования тестирования с самого начала проекта.