|
|
|
| /* Русский Вариант */ |
| « Засериализованный | Как избежать катастрофы при разработке » |
Спустя восемнадцать месяцев можно было, наконец, открывать шампанское. Дэвид и остальные члены его команды получили благую весть, их последняя сборка прошла контроль качества и была готова к внедрению.
Дэвид работал над системой продаж для средних размеров розничной сети, которая должна была сменить старинные кассовые аппараты использовавшиеся ранее. По мере того как сеть росла и ширилась, производитель касс наоборот скукоживался и увядал. Они только что разослали всем, включая клиента Дэвида, уведомление о прекращении деятельности, оставив всех с багажом кассового добра, которое больше никто ни продавал, ни поддерживал.
Компания Дэвида узрела в этом прекрасную возможность заменить существующий антиквариат новенькими компьютерными кассами с современными программными системами для обслуживания точек продаж. С помощью новой системы можно было внедрить такие фантастические вещи как штрих-коды, программы поощрения постоянных клиентов и подарочные сертификаты, да еще и упростить работу компании увеличив прибыли.
Розничная сеть согласилась, но с одним условием. Они закупят новое оборудование и программы, но работать и выглядеть все должно в точности как старое. Никаких сенсорных экранов графики и подсказок кассиру. Только простой текстовый интерфейс с мудреными клавиатурными комбинациями для навигации. Как ни крути, а в программы по подготовке кассиров были вложены совсем немалые деньги, и намерения просто выкидывать их на ветер у компании не было.
А еще деньги были вложены в огромное количество служебных приложений. Какие-то работали на обычных компьютерах, иным требовалось специальное оборудование, но все они взаимодействовали со специализированной базой данных от кассовых аппаратов. Хотя многим из этих приложений давно было пора отправиться на пенсию вслед за дряхлыми железками, заказчик этой идеи не разделял. Новые программы должны взаимодействовать с тем, что есть. Кроме того, в торговой сети хотели избежать резкого и болезненного перехода. Они желали плавного и неторопливого внедрения, чтобы можно было менять по одному кассовому аппарату за раз, а служебная часть системы работала, так же как и в старые добрые времена ни о чем не подозревая. Итак, применив самые современные технологии, Дэйв и его команда разработали устаревшую еще в колыбели систему, которая функционировала и взаимодействовала с остальными подсистемами в точности как старая. Она делала все, что должна была и, причем делала это правильно. И это стало ее главной проблемой.
Вскоре после того, как они передали готовую систему, заказчик завернул финальную сборку и вручил команде Дэвида список с ошибками. Но это были не те баги, что водились в их программе, это были ошибки, которых в их системе не было. Когда клиент настаивал на том, что в новой системе должны быть те же функции, что и в старой, он, очевидно, причислил к ним и ошибки.
Первый баг в списке касался подсчета налогов с продаж. Если правильный способ подсчета налога с продажи подразумевал умножение общей суммы чека на налоговую ставку, то старая система умножала на эту ставку отдельно каждую сумму покупки из чека, затем округляла и прибавляла результат к итоговой сумме. А это значило, что при достаточно большом количестве покупок налог получался несколько большим, чем должно.
Другой баг возникал при работе с купонами. Так как кассовые аппараты не могли обрабатывать купоны, кассиры просто вручную вычитали скидку из общей суммы, что приводило к еще одной ошибке при подсчете налогов. В результате Дядя Сэм не получал своей доли, если использовались купоны от производителей.
Самая важная ошибка проявляла себя при подсчете дневной выручки, когда в каждом отделе учитывались облагаемые и не облагаемые налогом покупки. Ввиду аналогичных вышеупомянутым ошибкам при подсчете налогов, старые кассы интерпретировали итоги дня весьма творчески.
Ото всех этих нереализованных багов заказчик совсем загрустил. По его мнению, система была слишком исправной, чтобы ей можно было нормально пользоваться. Поэтому потратив полтора года на создание плохенькой устаревшей системы, команде Дэвида пришлось добавить еще несколько последних штрихов: выплеснуть в код целое ведро багов, которые заставляли систему выглядеть и функционировать в точности как старую.
Статья Крива от рождения была изначально опубликована в колонке Алекса DevDisasters в номере Redmond Developer News от 1 октября 2007 года. RDN это бесплатный журнал для активных читателей, который рассказывает о планах Microsoft, а так же свежих новостях и событиях интересующих Windows разработчиков.
Оригинал:http://worsethanfailure.com/Articles/Faulty-by-Design.aspx
Перевод:Евгений Виговский
| « Засериализованный | Как избежать катастрофы при разработке » |