Комментарии (4)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое невалидные значения?
Невалидные значения (или недопустимые данные) — это входные данные, которые выходят за рамки ожидаемых, разрешённых или корректных для конкретной системы, функции или поля. Они нарушают определённые условия валидности, такие как тип данных, диапазон, формат, длина, бизнес-логика или семантические ограничения. В контексте тестирования (QA) проверка обработки невалидных значений — ключевая часть тестирования на устойчивость (robustness testing) и негативного тестирования (negative testing). Цель — убедиться, что система корректно обрабатывает некорректный ввод: не ломается, не вызывает неожиданных побочных эффектов и возвращает адекватные сообщения об ошибках.
Основные категории невалидных значений
Невалидные значения можно классифицировать по нескольким аспектам:
- По типу данных:
* Передача строки (`"abc"`) в числовое поле (`age`).
* Передача `null` или `undefined` в поле, требующее значения.
* Передача массива или объекта туда, где ожидается примитив.
- По диапазону и границам:
* Числа за пределами допустимого (например, `-1` для поля `Количество товаров`, `1000` для поля `Процент (0-100)`).
* Даты из будущего для поля «Дата рождения» или несуществующие даты (`31.02.2023`).
- По формату (паттерну):
* Номер телефона без кода страны (`9123456789` вместо `+79123456789`).
* Email-адрес без символа `@` (`user.example.com`).
* Неверный формат JSON или XML в API-запросе.
- По длине:
* Пустая строка (`""`) в обязательном поле.
* Строка, превышающая максимально допустимую длину (например, 1001 символ для поля с лимитом в 1000).
* Очень большие (объёмные) файлы при загрузке.
- По бизнес-логике:
* Попытка оформить заказ на отсутствующий на складе товар.
* Указание несуществующего кода скидки.
* Перевод суммы, превышающей баланс счёта.
Почему тестирование с невалидными значениями критически важно?
- Предотвращение сбоев: Обеспечивает стабильность системы. Например, код без обработки невалидного ввода может вызвать исключение, которое «положит» сервис.
// Потенциально опасный код function calculateDiscount(price) { return price * 0.1; // Упадёт, если price будет строкой или null } // Защищённый код function calculateDiscount(price) { if (typeof price !== 'number' || price <= 0) { throw new Error('Невалидное значение цены'); } return price * 0.1; } - Защита от уязвимостей: Многие атаки (SQL-инъекции, XSS) основаны на передаче специально сформированных невалидных данных. Правильная валидация и санитизация — основа безопасности.
-- Пример уязвимости к SQL-инъекции при отсутствии валидации -- Пользовательский ввод: ' OR '1'='1 query = "SELECT * FROM users WHERE login = '" + userInput + "'"; -- Итоговый запрос всегда вернёт данные - Улучшение UX: Система должна чётко информировать пользователя об ошибке, а не просто молливо ничего не делать или выводить страницу с кодом 500. Тестирование проверяет ясность и полезность сообщений об ошибках.
- Проверка целостности данных: Некорректные данные, попавшие в базу, могут вызвать проблемы в отчётах, аналитике и работе смежных систем.
Практика тестирования невалидных значений
Тестировщик должен целенаправленно генерировать невалидные данные на основе:
- Требований и спецификаций (явные правила валидации).
- Анализа граничных значений (Boundary Value Analysis) и классов эквивалентности (Equivalence Partitioning). Например, для поля
int (1-100)невалидными будут0,101,"abc","",null. - Опыта и знаний о типичных уязвимостях.
Пример тест-кейса для поля «Email»:
- Валидные значения:
user@example.com,u-s.er@sub.domain.co.uk. - Невалидные значения:
* Отсутствие `@` (`userexample.com`).
* Отсутствие домена (`user@`).
* Специальные символы в неположенном месте (`"user @example.com"`).
* Очень длинная строка.
* HTML-теги или скрипты (`<script>alert()</script>@example.com`).
* Пустая строка.
Вывод: Работа с невалидными значениями — это не просто поиск багов, а систематическая проверка защищённости, отказоустойчивости и пользовательского опыта приложения. Грамотное тестирование этого аспекта значительно снижает риски в продакшн-среде и напрямую влияет на качество продукта.