Ответ
Тип бага: Критический (Blocker, Severity: Critical).
Контекст: Платформа электронной коммерции с интеграцией платежного шлюза.
Описание: При попытке совершить платеж на сумму, равную или превышающую 1 000 000 единиц (например, 1 000 000.01), платежный микросервис вместо возврата понятной ошибки валидации ("Amount exceeds the maximum limit") завершался с необработанным исключением, вызывая HTTP 500 Internal Server Error.
Почему это блокирует релиз:
- Финансовые потери: Ключевые B2B-клиенты не могут совершать крупные сделки.
- Нарушение SLA: Система не обрабатывает заявленный в документации диапазон сумм.
- Плохой UX: Пользователь видит сообщение об общей ошибке сервера, а не понятное уведомление.
- Риск для данных: Необработанное исключение могло оставить транзакцию в "подвешенном" состоянии.
Пример проблемного кода (псевдокод):
// Сервис обработки платежа
public PaymentResult processPayment(BigDecimal amount) {
// Проверка лимита
if (amount.compareTo(MAX_LIMIT) > 0) { // MAX_LIMIT = 1_000_000
// ОШИБКА: Использован неверный оператор '>=' вместо '>'
// Это приводило к пропуску проверки для суммы РОВНО 1_000_000
throw new UnsupportedOperationException("Limit exceeded"); // Неправильный тип исключения
}
// ... логика обработки
}
Ожидаемое поведение:
- HTTP Status:
400 Bad Requestили422 Unprocessable Entity - Response Body:
{"error": "payment_amount_exceeded", "message": "Maximum payment amount is 1,000,000"}
Для исправления перед релизом необходимо:
- Починить проверку граничного условия.
- Заменить исключение на корректный, обрабатываемый глобальным обработчиком.
- Написать интеграционные тесты для сумм: 999 999.99, 1 000 000, 1 000 000.01.
- Провести smoke-тест сценария с платежным шлюзом в staging-среде.