Ответ
Глубокий анализ задачи включает декомпозицию требований, выявление скрытых сценариев и граничных условий. Рассмотрим форму регистрации.
1. Анализ явных требований:
- Обязательные поля: Email, Пароль, Подтверждение пароля.
- Валидация email по RFC 5322.
- Пароль: минимум 8 символов, одна заглавная буква, одна цифра.
2. Выявление неявных (неочевидных) сценариев:
- Ввод данных:
- Email с пробелами в начале/конце (
" user@example.com "). - Копирование пароля из менеджера паролей или текстового файла.
- Использование символов Unicode (эмодзи, иероглифы) в поле "Имя".
- Email с пробелами в начале/конце (
- Поведение UI:
- Работа формы при быстром двойном клике на кнопку "Зарегистрироваться".
- Поведение при нажатии кнопки "Назад" в браузере после успешной регистрации.
3. Определение граничных условий (Edge Cases):
- Пароль: ровно 8 символов vs 7 символов; максимальная длина (например, 255 символов).
- Email: адреса с поддоменами (
user@sub.domain.com), знаками+(user+tag@example.com). - Безопасность: попытка XSS-инъекции (
<script>alert(1)</script>) в любые текстовые поля. - Производительность: ввод очень длинного email (более 254 символов).
Пример теста на валидацию email (Python):
import re
def is_valid_email(email: str) -> bool:
# Упрощенное, но практичное регулярное выражение
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$'
return bool(re.match(pattern, email.strip()))
# Тесты на граничные условия
assert is_valid_email("user@example.com") == True
assert is_valid_email("user.name+tag@sub.domain.co.uk") == True
assert is_valid_email("user@.com") == False # Нет домена перед точкой
assert is_valid_email("user@example..com") == False # Двойная точка
assert is_valid_email(" user@example.com ") == True # trim сработал
assert is_valid_email("") == False # Пустая строка