Proust project
Dec. 3rd, 2014 11:53 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
На работе в какой-то момент заметили, что программа начала ужасно тормозить. Часов так 10 лишних. Начали искать, в чём проблема.
Нашли версию, которая ещё была быстрой. Простой просмотр изменений с этой версии ничего не дал. Методом деления пополам (8 итераций) нашли, наконец-то, правку, которая чуть ли не удвоила время расчёта. Строчка тупая до безобразия — накопительные контракты нашего портфеля в какой-то момент (по достижении пенсионного возраста) пересчитываются в ренту, и одна из процентных ставок формулы пересчёта долгое время была фиксированной. Нас заставили переписать фиксированную ставку на динамическую (привязка к 10-летней ставке центробанка), мы это сделали, в этот момент потеряли примерно час расчёта. А потом обнаружили небольшую ошибку в формуле 10-летней ставки (грубо говоря, забыли разделить на 10), исправили её — и теряем 10 часов. Очевидно, что само исправление (операция деления на 10) занимает существенно меньше времени, чем 10 часов. Отгадка оказалась в том, что упомянутая процентная ставка законом ограничена сверху. И до деления на 10 практически всегда мы брали значение этого потолка. Что позволяло нам группировать расчёты в разных экономических сценариях. А после деления всё гораздо хуже — сколько сценариев, столько и возможных ставок, лишь изредка вылезает значение потолка.
Красивая иллюстрация того, что полный тест (и значения, и время расчёта — всё проверять!) нужно запускать после каждой правки. Чуть ли не после исправленного комментария.
Ну и отдельные лучи поддержки товарищу, ответственному за контроль результатов этой модификации...
P.S. Папку со всеми этими версиями назвали «Пруст», потому что «В поисках потерянного времени» :-)
Нашли версию, которая ещё была быстрой. Простой просмотр изменений с этой версии ничего не дал. Методом деления пополам (8 итераций) нашли, наконец-то, правку, которая чуть ли не удвоила время расчёта. Строчка тупая до безобразия — накопительные контракты нашего портфеля в какой-то момент (по достижении пенсионного возраста) пересчитываются в ренту, и одна из процентных ставок формулы пересчёта долгое время была фиксированной. Нас заставили переписать фиксированную ставку на динамическую (привязка к 10-летней ставке центробанка), мы это сделали, в этот момент потеряли примерно час расчёта. А потом обнаружили небольшую ошибку в формуле 10-летней ставки (грубо говоря, забыли разделить на 10), исправили её — и теряем 10 часов. Очевидно, что само исправление (операция деления на 10) занимает существенно меньше времени, чем 10 часов. Отгадка оказалась в том, что упомянутая процентная ставка законом ограничена сверху. И до деления на 10 практически всегда мы брали значение этого потолка. Что позволяло нам группировать расчёты в разных экономических сценариях. А после деления всё гораздо хуже — сколько сценариев, столько и возможных ставок, лишь изредка вылезает значение потолка.
Красивая иллюстрация того, что полный тест (и значения, и время расчёта — всё проверять!) нужно запускать после каждой правки. Чуть ли не после исправленного комментария.
Ну и отдельные лучи поддержки товарищу, ответственному за контроль результатов этой модификации...
P.S. Папку со всеми этими версиями назвали «Пруст», потому что «В поисках потерянного времени» :-)
no subject
Date: 2014-12-03 10:59 am (UTC)no subject
Date: 2014-12-03 11:04 am (UTC)Ты же знаешь, что любую профессию можно сделать интересной?
no subject
Date: 2014-12-03 11:09 am (UTC)no subject
Date: 2014-12-03 11:24 am (UTC)Кстати, тоже только что использовал метод половинного деления номеров версий, но ловил не десять часов, а десять микросекунд.
no subject
Date: 2014-12-03 01:15 pm (UTC)no subject
Date: 2014-12-03 01:20 pm (UTC)no subject
Date: 2014-12-03 02:07 pm (UTC)no subject
Date: 2014-12-03 02:17 pm (UTC)