Что такое невалидные значения в контексте тестирования?

Ответ

Невалидные (некорректные) значения — это входные данные, которые не соответствуют ожидаемым требованиям, спецификациям или договоренностям. Их использование направлено на проверку устойчивости системы к ошибкам.

Категории невалидных значений:

  1. Неправильный тип данных: Передача строки ("abc") в поле, ожидающее число.
  2. Нарушение формата: Email без @ (user.example.com), телефон в неверном формате.
  3. Выход за границы диапазона: Отрицательный возраст (-5), процент больше 100 (150%).
  4. Пустые или отсутствующие значения: null, undefined, пустая строка "" для обязательного поля.
  5. Опасные данные (Security): SQL-инъекции (' OR '1'='1), XSS-скрипты (<script>alert(1)</script>).
  6. Очень длинные строки: Попытка вызвать переполнение буфера или проверить ограничения БД.

Пример проверки на Python:

def validate_user_data(name: str, age: int, email: str) -> tuple[bool, list[str]]:
    """Валидация входящих данных пользователя."""
    errors = []
    # 1. Проверка обязательных полей
    if not name or name.strip() == "":
        errors.append("Имя не может быть пустым.")
    # 2. Проверка диапазона
    if not (0 <= age <= 120):
        errors.append(f"Возраст {age} вне допустимого диапазона (0-120).")
    # 3. Проверка формата (упрощенная)
    if "@" not in email or "." not in email.split("@")[-1]:
        errors.append(f"Email '{email}' имеет неверный формат.")
    # 4. Проверка на опасные символы (базовая)
    if "<" in name or ">" in name:
        errors.append("Имя содержит потенциально опасные символы.")

    return (len(errors) == 0, errors)

# Тесты с невалидными значениями
print(validate_user_data("", -1, "invalid-email"))
# Output: (False, ['Имя не может быть пустым.', 'Возраст -1 вне допустимого диапазона (0-120).', 'Email invalid-email имеет неверный формат.'])

Цель тестирования с невалидными значениями:

  • Повышение надежности: Убедиться, что система корректно обрабатывает ошибки (выдает понятные сообщения, не падает).
  • Усиление безопасности: Выявление потенциальных уязвимостей, таких как инъекции или переполнение буфера.
  • Улучшение UX: Гарантия того, что пользователь получит адекватную обратную связь при вводе некорректных данных.

Ответ 18+ 🔞

А, слушай, про тестирование невалидных значений, да? Ну это ж классика, ёпта! Это когда ты подсовываешь программе такую хуйню, от которой у неё должны, по идее, глаза на лоб вылезти и она должна вежливо сказать: «Чувак, ты дебил?».

Вот смотри, невалидные значения — это как если бы ты в автомат с кофе вместо монеты сунул свой хуй. Или жопу. Ожиданий-то ноль, блядь! Система должна не сгореть, а просто материться и просить нормальную монету.

Какие бывают, эти «подарочки»:

  1. Тип не тот, ёбта. Ждешь число, а тебе строку "абвгд". Ну и как это сложить-то, блядь? Это ж не «пять плюс буква Б»!
  2. Формат — пиздец. Email без собачки (user точка com). Это как адрес «Москва, » и всё. Куда письмо-то нести, в жопу?
  3. Цифры с бодуна. Возраст -5 лет или зарплата 999999999999. Овердохуища, да? Или процент 150% — ну это уже магия, блядь, а не математика.
  4. Пустота, нихуя. null, undefined, пустая строка "". А поле-то обязательное! Это как на вопрос «как звать?» ответить молчанием и пустым взглядом.
  5. Злобные, блядь, инъекции. Вот это самое страшное. Подсовывают ' OR '1'='1 или <script>alert('ЛОХ')</script>. Цель — разъебать систему изнутри, сука! На этом ловятся все, кто не проверяет ввод.
  6. Очень длинные… строки. Пытаются воткнуть текст размером с «Войну и мир», чтобы проверить, не лопнет ли база данных или буфер. Волнение ебать!

Вот, смотри, как на Python это примерно выглядит. Код не трогаю, он святой:

def validate_user_data(name: str, age: int, email: str) -> tuple[bool, list[str]]:
    """Валидация входящих данных пользователя."""
    errors = []
    # 1. Проверка обязательных полей
    if not name or name.strip() == "":
        errors.append("Имя не может быть пустым.")
    # 2. Проверка диапазона
    if not (0 <= age <= 120):
        errors.append(f"Возраст {age} вне допустимого диапазона (0-120).")
    # 3. Проверка формата (упрощенная)
    if "@" not in email or "." not in email.split("@")[-1]:
        errors.append(f"Email '{email}' имеет неверный формат.")
    # 4. Проверка на опасные символы (базовая)
    if "<" in name or ">" in name:
        errors.append("Имя содержит потенциально опасные символы.")

    return (len(errors) == 0, errors)

# Тесты с невалидными значениями
print(validate_user_data("", -1, "invalid-email"))
# Output: (False, ['Имя не может быть пустым.', 'Возраст -1 вне допустимого диапазона (0-120).', 'Email invalid-email имеет неверный формат.'])

Видишь? Подсунули пустое имя, отрицательный возраст и email — хуй с горы. Функция не сдохла, а вернула список грехов, как на исповеди. Красота!

А зачем это всё, спрашивается?

  • Чтобы не падало. Чтобы вместо «Ошибка 500: всё сломалось» пользователь видел «Дружище, в возрасте цифры нужны, а не буквы».
  • Чтобы не взломали. Чтобы какой-нибудь пидарас шерстяной не засунул SQL-инъекцию и не вытащил все пароли. Доверия к пользовательскому вводу — ноль ебать!
  • Чтобы не бесило. Нормальный UX — это когда система объясняет, что не так, а не просто молча глотает хуйню и потом блюёт ошибками.

Короче, тестирование невалидными значениями — это как проверка бронежилета. Стреляешь в него со всего, что есть, и смотришь, выдержит или нет. Если выдержал — молодец. Если нет… ну, ёперный театр, иди переделывай.