#дебаг · дневник проектов

Самый дорогой пробел в коде

Самый дорогой пробел в коде

Хочу рассказать про баг, который искал почти целый день, потому что он отлично показывает характер этой работы.

Система для логистики считала клиенту итоговую стоимость доставки. И иногда — не всегда, а примерно в одном случае из двадцати — итог получался заметно меньше правильного. Контейнер, который должен стоить условно 600 тысяч, выдавался за 320. Если бы клиент это не заметил и продал по такой цене — попал бы на сотни тысяч убытка на каждой сделке.

Самое мерзкое в таких багах — что они плавающие. Девятнадцать раз считает правильно, на двадцатый врёт. Это значит что дело не в формуле как таковой — формула верная. Дело в данных, которые в неё попадают в каком-то редком случае.

Я полдня шёл по следу. Добавлял логи, смотрел на каждый промежуточный расчёт, сравнивал «хороший» случай с «плохим». И в итоге нашёл. Цена складывалась из двух частей: морская перевозка в долларах и железная дорога в рублях. В обычном случае обе части были, всё пересчитывалось в рубли по курсу, складывалось — верно. А в том редком случае железнодорожная часть приходила пустой, и в одной строчке кода доллары складывались с рублями напрямую, без перевода по курсу. Доллар воспринимался как рубль. Отсюда и занижение.

Одна забытая операция пересчёта в одной ветке кода. День работы чтобы её найти. Тридцать секунд чтобы исправить.

Это и есть суть работы, которую снаружи не видно. Клиент видит «всё работает». Он не видит что между «работает» и «работает правильно во всех двадцати случаях из двадцати» лежат вот такие дни охоты за одним пробелом. И что именно за это, а не за «написать код», на самом деле платят.

Это дневник инженера автоматизации

Такие разборы выходят 6 раз в неделю в моём Telegram-канале — кейсы, цифры и грабли из реальных проектов, без воды и курсов.

Читать каналили забрать чек-лист «5 автоматизаций» →
← Как я веду несколько проектов один