Ответ
Проверка параметра следует принципам тест-дизайна и направлена на выявление дефектов. Базовый алгоритм:
- Тип данных: Соответствует ли значение ожидаемому типу (integer, string, boolean, array)?
- Допустимый диапазон (граничные значения):
- Минимальное и максимальное значение.
- Длина строки или массива.
- Формат и паттерн: Соответствует ли шаблону (email, телефон, дата, регулярное выражение)?
- Обязательность: Как обрабатываются
null,undefinedили пустая строка""? - Безопасность: Есть ли проверка на инъекции (SQL, XSS, командные)?
- Бизнес-логика: Корректно ли значение в контексте приложения (например,
ageне может быть отрицательным)?
Практический пример на Python:
def validate_user_input(username, age):
"""Валидация параметров username и age."""
errors = []
# 1. Проверка типа
if not isinstance(username, str):
errors.append("Username must be a string.")
if not isinstance(age, int):
errors.append("Age must be an integer.")
return errors # Дальнейшая проверка age бессмысленна
# 2. Проверка длины/диапазона (граничные значения)
if not (3 <= len(username) <= 20):
errors.append("Username must be 3-20 characters long.")
if not (0 <= age <= 120):
errors.append("Age must be between 0 and 120.")
# 3. Проверка формата (паттерн)
import re
if not re.match(r'^[a-zA-Z0-9_]+$', username):
errors.append("Username can only contain letters, numbers, and underscore.")
# 4. Проверка на SQL-инъекцию (упрощенный пример)
forbidden_sql_keywords = ['UNION', 'SELECT', 'DROP', '--']
if any(keyword in username.upper() for keyword in forbidden_sql_keywords):
errors.append("Invalid username format.")
return errors if errors else None