Как определить, относится ли ошибка в калькуляторе к клиенту или серверу?
Что проверяют
Умеете ли вы локализовать дефект, а не только описать симптом, и видите ли, где проходит граница между клиентом и сервером в конкретном приложении. Следом часто спрашивают, как быть, если расчёт идёт целиком на клиенте или это мобильное приложение.
Как отвечать
Первым делом выясните архитектуру: считает ли калькулятор в браузере или отправляет запрос к API. Откройте в DevTools вкладку Network, введите значения и посмотрите, уходит ли запрос. Затем сравните четыре точки: что ввели, что ушло в запросе, что пришло в ответе, что показано на экране.
- запрос корректный, ответ неверный: дефект на сервере;
- запрос уже искажён: запятая вместо точки, обрезанные разряды, строка вместо числа, потерянное поле. Дефект на клиенте;
- ответ верный, а на экране другое: форматирование, округление, локаль. Снова клиент;
- API напрямую: тот же запрос через Postman или curl без интерфейса. Воспроизвелось, значит сервер;
- подмена ответа: Local Overrides в Chrome DevTools, Map Local или Rewrite в Charles и Proxyman. Если с эталонным ответом экран показывает верно, клиент чист;
- логи: ошибки в Console, серверные логи по времени или по идентификатору запроса из заголовка вроде
X-Request-ID; - мобильное приложение: трафик через Charles, Proxyman или mitmproxy, логи устройства через Logcat или консоль Xcode.
Держите в голове типичные калькуляторные баги: 0.1 + 0.2 в JavaScript даёт 0.30000000000000004, числа с плавающей точкой для денег, округление половин, деление на ноль, переполнение.
Где спотыкаются
Судят по экрану: «цифра неверная, значит бэкенд». Без просмотра запроса и ответа это догадка, и баг уходит не той команде.
Не прикладывают доказательства к баг-репорту: тело запроса и ответа, HAR-файл, время и идентификатор запроса. Разработчику приходится воспроизводить всё с нуля.
Считают код 200 признаком того, что сервер отработал правильно. Бизнес-ошибка или неверная сумма спокойно приходит в теле успешного ответа, поэтому проверять нужно содержимое, а не только статус.