Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Что важно зарепортить в баге?
Высокий качественный баг-репорт — это основа эффективной разработки. Плохой репорт тратит время разработчиков впустую.
Структура качественного баг-репорта
1. Название (Summary)
Правило: Конкретное, описывающее суть проблемы, 5-10 слов.
❌ ПЛОХО:
"Сломалось"
"Баг в login"
"Ошибка при нажатии кнопки"
✓ ХОРОШО:
"Ошибка 500 при входе с email содержащей + символ"
"Дублирование заказа при двойном клике на Оформить"
"Мобильное меню не закрывается при выборе пункта"
Почему это важно? Разработчик видит 100+ багов в неделю. Название определяет, на что они смотрят в первую очередь.
2. Описание (Description)
Пишем поэтапно, что видим:
### Что произошло
При попытке зарегистрировать аккаунт с email содержащей
плюс-адресацию (например, user+tag@gmail.com), приложение
возвращает ошибку 500.
### Как это воспроизвести
1. Открыть страницу регистрации
2. Ввести email: test+dev@example.com
3. Ввести пароль: Pass123!
4. Нажать "Зарегистрироваться"
5. Получаем ошибку
### Ожидаемое поведение
Приложение должно принять email с плюсом и зарегистрировать
пользователя успешно (согласно RFC 5322).
### Фактическое поведение
Получаем статус 500 с сообщением: "Internal Server Error"
3. Логи и Stacktrace
Это САМОЕ ВАЖНОЕ! Без логов разработчик потратит час на гадание.
### Backend Logs
2024-03-23 12:34:56.789 ERROR [auth.views] Exception in register_user(): ValueError: invalid email format
Traceback (most recent call last):
File "auth/views.py", line 42, in register_user
email = validate_email(request.data["email"])
File "auth/validators.py", line 15, in validate_email
if "+" in email:
raise ValueError(f"Invalid email: {email}")
ValueError: invalid email: test+dev@example.com
### Frontend Console Errors
GET /api/v1/auth/register 500 Internal Server Error Response: {"error": "Invalid email format"} XHR Error Code: UNPROCESSABLE_ENTITY
Это позволяет сразу найти проблему в коде: `validators.py` линия 15.
#### 4. Окружение (Environment)
Browser / Client
- Browser: Chrome 123.0.0.1
- OS: Windows 11
- Resolution: 1920x1080
Server
- Python version: 3.11.2
- Django version: 4.2
- Database: PostgreSQL 15
API Response Headers
HTTP/1.1 500 Internal Server Error Content-Type: application/json X-Request-ID: abc-123-def-456
Желательно также:
- Версия приложения/API
- Дата и время в UTC
- X-Request-ID (для трейсинга логов)
#### 5. Скриншоты / Видео
Скриншот 1: Форма регистрации
[Изображение с заполненным email тестом+dev@example.com]
Скриншот 2: Ошибка
[Изображение с сообщением об ошибке]
Видео воспроизведения (опционально)
[Лучше чем 10 скриншотов]
#### 6. Степень воспроизводимости
Reproducibility
- Воспроизводим ли баг? ✓ Да, каждый раз ⚠ Иногда (в 50% случаев) ✗ Редко (затруднена воспроизводимость)
Frequency
"Баг происходит в 100% случаев, когда используется + в email"
#### 7. Приоритет (Priority) и Серьезность (Severity)
Severity
- Critical: Приложение упало, невозможно пользоваться
- High: Основной функционал сломан
- Medium: Второстепенный функционал неработает
- Low: Визуальный дефект, minor issue
Priority
- P0 (Critical): Нужно исправить сегодня (production down)
- P1 (High): Исправить в текущий спринт
- P2 (Medium): Исправить в следующий спринт
- P3 (Low): Someday maybe
Этот баг:
Severity: HIGH (не можешь зарегистрироваться) Priority: P1 (влияет на конверсию)
#### 8. Дополнительная информация
Related Issues
Относится к: #123 (баг с + в username)
Possible Root Cause
Предположительная причина: validator.py использует простую regex без поддержки RFC 5322.
Potential Solution
Использовать email-validator библиотеку:
from email_validator import validate_email
email = validate_email("test+dev@example.com")
print(email.normalized) # test+dev@example.com
### Пример идеального баг-репорта
```markdown
## Баг: Ошибка 500 при регистрации email с плюсом
**Статус:** Open
**Приоритет:** P1 High
**Серьезность:** HIGH
### Описание
Приложение отклоняет email адреса с символом "+" (плюс-адресация).
Это стандартная функция почтовых сервисов (RFC 5322),
которая позволяет создавать ярлыки: user+tag@gmail.com
### Шаги воспроизведения
1. Перейти на https://app.example.com/register
2. Заполнить форму:
- Email: test+dev@gmail.com
- Password: Test123!@
3. Нажать "Sign Up"
4. Увидеть ошибку 500
### Ожидаемое поведение
Приложение должно:
1. Принять email с плюсом
2. Отправить verification письмо
3. Зарегистрировать пользователя
### Фактическое поведение
Получаем ошибку 500 с сообщением:
{ "error": "Invalid email format", "code": "INVALID_EMAIL" }
### Логи
2024-03-23T12:34:56.789Z ERROR [auth.validators] Invalid email format: test+dev@gmail.com at validate_email (auth/validators.py:15) at register_user (auth/views.py:42) at app.post (/api/v1/auth/register)
### Окружение
- Chrome 123.0.0.1 on macOS 14.3
- API v1.2.3
- Database: PostgreSQL 15.2
- Timestamp: 2024-03-23T12:30:00Z UTC
- Request ID: req_123abc456def789
### Скриншоты
- [Форма регистрации](screenshot1.png)
- [Ошибка 500](screenshot2.png)
### Воспроизводимость
- Воспроизводим: Всегда (100%)
- Появился в версии: v1.2.0
- Работал в версии: v1.1.5
### Root Cause
Файл auth/validators.py линия 15:
```python
if "+" in email:
raise ValueError(f"Invalid email: {email}")
Этот check отклоняет все email с плюсом, что нарушает RFC 5322.
Предложенное исправление
Использовать проверенную библиотеку:
from email_validator import validate_email, EmailNotValidError
def validate_email_address(email_str: str) -> str:
try:
email_obj = validate_email(email_str, check_deliverability=False)
return email_obj.normalized
except EmailNotValidError as e:
raise ValueError(f"Invalid email: {str(e)}")
### Что НЕ нужно писать в баг-репорте
❌ "Ничего не работает" — слишком абстрактно ❌ "Это уродство" — субъективно, не помогает ❌ "Исправьте это СРОЧНО" — повышенный тон ❌ Стена текста без форматирования — трудно читать ❌ Скриншоты без контекста — что на них смотреть? ❌ Гадание вместо логов — потеря времени
### Чеклист перед отправкой баг-репорта
- [ ] Название конкретное и описательное
- [ ] Шаги воспроизведения ясные и простые
- [ ] Включены логи и stacktrace
- [ ] Указано окружение (версии, браузер, ОС)
- [ ] Скриншоты/видео прилагаются
- [ ] Указана степень воспроизводимости
- [ ] Приоритет и серьезность определены
- [ ] Нет эмоций и субъективности
- [ ] Проверено, что это действительно баг (не feature)
- [ ] Баг ещё не открыт (не дублирование)
### Золотое правило
**Разработчик должен понять баг за 2 минуты из твоего репорта.**
Если для разработчика нужно час потратить на воспроизведение —
это плохой репорт.
**Твоя задача:** Спасти время разработчику, рассказав всё
то, что нужно для быстрого исправления.