Какие основные виды (уровни) тестирования программного обеспечения ты знаешь?

«Какие основные виды (уровни) тестирования программного обеспечения ты знаешь?» — вопрос из категории Тестирование, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тестирование структурировано по уровням (пирамида тестирования) и целям. Вот ключевые виды:

По уровню изоляции (Пирамида)

  1. Модульные тесты (Unit Tests)

    • Цель: Проверить корректность работы отдельной единицы кода (метода, класса) в полной изоляции.
    • Инструменты: JUnit, TestNG, Mockito (для заглушек зависимостей).
    • Пример:
      @Test
      void shouldReturnSumOfTwoNumbers() {
          Calculator calc = new Calculator();
          int result = calc.add(2, 3);
          assertEquals(5, result); // Проверяем только логику метода add
      }
  2. Интеграционные тесты (Integration Tests)

    • Цель: Проверить взаимодействие нескольких модулей или систем (БД, внешние API, другие сервисы).
    • Инструменты: Spring Boot Test (@SpringBootTest), Testcontainers (для поднятия реальных БД в Docker).
    • Фокус: Корректность интеграции, транзакции, конфигурация.
  3. Системные / End-to-End (E2E) тесты

    • Цель: Проверить работу всего приложения целиком с точки зрения конечного пользователя.
    • Инструменты: Selenium, Cypress, Playwright (для UI), REST Assured (для API).
    • Фокус: Полные пользовательские сценарии.

По целям и свойствам

  1. Функциональные тесты

    • Проверяют соответствие функциональным требованиям ("что система делает"). Могут быть на любом уровне (Unit, E2E).
  2. Нефункциональные тесты

    • Нагрузочное (Load) и стресс-тестирование: Проверка производительности под нагрузкой (JMeter, Gatling).
    • Тестирование безопасности (Security): Поиск уязвимостей.
  3. Поддерживающие виды по стратегии

    • Дымовое (Smoke): Быстрая проверка основных функций после сборки.
    • Регрессионное (Regression): Проверка, что новые изменения не сломали существующий функционал.
    • Приёмочное (Acceptance): Проверка соответствия бизнес-требованиям, часто заказчиком.

Практическое правило (Пирамида): Писать много быстрых и дешёвых unit-тестов, меньше интеграционных и ещё меньше медленных и дорогих E2E-тестов.