Расскажи про уровни тестирования


Уровни тестирования — это иерархическая структура этапов, на которых проверяется программное обеспечение с целью выявления дефектов и подтверждения соответствия требованиям. Эти уровни отражают, как ПО проверяется на разных стадиях жизненного цикла разработки. Каждый уровень нацелен на определённый аспект системы и проводится разными участниками проекта: разработчиками, тестировщиками, пользователями.

📌 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 — смешанный подход.

Инструменты:

  • 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), где каждому этапу разработки соответствует уровень тестирования:

Требования ─────────────→ Приёмочное тестирование

│ ↑

↓ │

Анализ требований ─────→ Системное тестирование

│ ↑

↓ │

Проектирование ───────→ Интеграционное тестирование

│ ↑

↓ │

Реализация ───────────→ Модульное тестирование

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