Entry tags:
Proust project
На работе в какой-то момент заметили, что программа начала ужасно тормозить. Часов так 10 лишних. Начали искать, в чём проблема.
Нашли версию, которая ещё была быстрой. Простой просмотр изменений с этой версии ничего не дал. Методом деления пополам (8 итераций) нашли, наконец-то, правку, которая чуть ли не удвоила время расчёта. Строчка тупая до безобразия — накопительные контракты нашего портфеля в какой-то момент (по достижении пенсионного возраста) пересчитываются в ренту, и одна из процентных ставок формулы пересчёта долгое время была фиксированной. Нас заставили переписать фиксированную ставку на динамическую (привязка к 10-летней ставке центробанка), мы это сделали, в этот момент потеряли примерно час расчёта. А потом обнаружили небольшую ошибку в формуле 10-летней ставки (грубо говоря, забыли разделить на 10), исправили её — и теряем 10 часов. Очевидно, что само исправление (операция деления на 10) занимает существенно меньше времени, чем 10 часов. Отгадка оказалась в том, что упомянутая процентная ставка законом ограничена сверху. И до деления на 10 практически всегда мы брали значение этого потолка. Что позволяло нам группировать расчёты в разных экономических сценариях. А после деления всё гораздо хуже — сколько сценариев, столько и возможных ставок, лишь изредка вылезает значение потолка.
Красивая иллюстрация того, что полный тест (и значения, и время расчёта — всё проверять!) нужно запускать после каждой правки. Чуть ли не после исправленного комментария.
Ну и отдельные лучи поддержки товарищу, ответственному за контроль результатов этой модификации...
P.S. Папку со всеми этими версиями назвали «Пруст», потому что «В поисках потерянного времени» :-)
Нашли версию, которая ещё была быстрой. Простой просмотр изменений с этой версии ничего не дал. Методом деления пополам (8 итераций) нашли, наконец-то, правку, которая чуть ли не удвоила время расчёта. Строчка тупая до безобразия — накопительные контракты нашего портфеля в какой-то момент (по достижении пенсионного возраста) пересчитываются в ренту, и одна из процентных ставок формулы пересчёта долгое время была фиксированной. Нас заставили переписать фиксированную ставку на динамическую (привязка к 10-летней ставке центробанка), мы это сделали, в этот момент потеряли примерно час расчёта. А потом обнаружили небольшую ошибку в формуле 10-летней ставки (грубо говоря, забыли разделить на 10), исправили её — и теряем 10 часов. Очевидно, что само исправление (операция деления на 10) занимает существенно меньше времени, чем 10 часов. Отгадка оказалась в том, что упомянутая процентная ставка законом ограничена сверху. И до деления на 10 практически всегда мы брали значение этого потолка. Что позволяло нам группировать расчёты в разных экономических сценариях. А после деления всё гораздо хуже — сколько сценариев, столько и возможных ставок, лишь изредка вылезает значение потолка.
Красивая иллюстрация того, что полный тест (и значения, и время расчёта — всё проверять!) нужно запускать после каждой правки. Чуть ли не после исправленного комментария.
Ну и отдельные лучи поддержки товарищу, ответственному за контроль результатов этой модификации...
P.S. Папку со всеми этими версиями назвали «Пруст», потому что «В поисках потерянного времени» :-)
no subject
no subject
Ты же знаешь, что любую профессию можно сделать интересной?
no subject
no subject
Кстати, тоже только что использовал метод половинного деления номеров версий, но ловил не десять часов, а десять микросекунд.
no subject
no subject
no subject
no subject