Какие аспекты программного обеспечения проверяют автоматизированные тесты?

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

Ответ

Автоматизированные тесты покрывают различные уровни и аспекты качества кода:

  1. Функциональность (Unit-тесты) — проверяют корректность работы отдельных модулей (методов, классов) в изоляции.
  2. Интеграция (Integration-тесты) — проверяют взаимодействие между несколькими компонентами (база данных, внешние сервисы, модули).
  3. Системное поведение (End-to-End / E2E тесты) — проверяют работу системы в целом, с точки зрения пользователя.
  4. Регрессия — гарантируют, что новые изменения не нарушили существующий функционал.
  5. Граничные случаи и ошибочные сценарии — проверка на нестандартные входные данные (null, пустые коллекции, отрицательные числа, превышение лимитов).
  6. Производительность и нагрузка — оценивают время отклика, стабильность и использование ресурсов под нагрузкой.

Пример JUnit-теста, покрывающего основной и граничный случай:

import static org.junit.jupiter.api.Assertions.assertEquals;

@Test
void sum_PositiveNumbers_ReturnsCorrectSum() {
    Calculator calc = new Calculator();
    assertEquals(4, calc.sum(2, 2)); // Основной сценарий
}

@Test
void sum_NegativeAndPositive_ReturnsCorrectSum() {
    Calculator calc = new Calculator();
    assertEquals(0, calc.sum(-1, 1)); // Граничный случай
}

@Test
void sum_MaxIntValue_ThrowsArithmeticException() {
    Calculator calc = new Calculator();
    assertThrows(ArithmeticException.class, () -> calc.sum(Integer.MAX_VALUE, 1));
}

Качество тестов определяется их изолированностью, предсказуемостью, читаемостью и полнотой покрытия ключевых сценариев.