Что такое позитивное и негативное тестирование и зачем их разделяют?

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

Ответ

Позитивное (positive) и негативное (negative) тестирование — это две взаимодополняющие техники тест-дизайна, которые проверяют систему на корректных и некорректных данных соответственно.

Критерий Позитивное тестирование Негативное тестирование
Цель Проверить, что система работает как ожидается на валидных входных данных. Проверить, что система корректно обрабатывает ошибки на невалидных входных данных.
Данные Данные, соответствующие спецификации (happy path). Данные вне спецификации: неверный тип, формат, граничные значения, пустые значения.
Ожидаемый результат Успешное выполнение функции. Предсказуемый отказ: сообщение об ошибке, исключение, значение по умолчанию.

Пример на Python:

def validate_age(age: str) -> bool:
    # Функция ожидает строку с числом от 0 до 150
    try:
        age_int = int(age)
        return 0 <= age_int <= 150
    except ValueError:
        return False

# ПОЗИТИВНЫЙ тест (валидные данные)
assert validate_age("30") == True  # Ожидаем успех

# НЕГАТИВНЫЙ тест (невалидные данные)
assert validate_age("abc") == False   # Не число
assert validate_age("-5") == False    # Ниже границы
assert validate_age("200") == False   # Выше границы

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