История одного проекта

    Олег, начальник отдела разработки ПО Московской железной дороги, грозно нависал над начальником отдела тестирования Сашей.
    - Ты чего же это, понимаешь, баг(1) зарепортировал(2)? Нам через два дня отчитываться, а у вас тут баги?
    - Это у вас тут баги!- парировал Саша,- у вас бета-версия(3), а из неё эксепшены(4) сыпятся!
    - А ты не нажимай кнопки всякие!
    - А вы делайте кнопки, от нажатия на которые ваша программа не валится!
    - А это не к нам, это к дизайнеру, мы точно реализовали то, что он придумал! К реализации претензии есть?
    - Она же жутко тормозная!
    - Ничего не знаю, это стандартный компонент, утверждённый к использованию, мы его только вызываем.
    - Так это вы полгода только и делали, что безуспешно пытались его вызвать?
    - Ну теперь же он вызывается!
    - Ага, и тут же падает!
    - А в требованиях нет ни слова о том, что он не должен падать!

    Перевели дух.
    - Ну хорошо,- сказал Саша,- в требованиях нет, но есть же стандарты, есть распространённая практика, в конце концов, есть аналогичные программы, которые делают то же самое, работают в разы быстрее и почему-то не падают!
    - Ну назови хоть одну!- цинично предложил Олег.
    - Пожалуйста! Xxx(5), Yyy, Zzz, Advanced Ttt, Sss Pro, Uuu Lite Edition - достаточно?
    Олег скорчил презрительную мину:
    - Xxx? Это ж бесплатная поделка, нам несолидно с ней конкурировать! Yyy падает даже без нажатия на кнопки, а остальных я и вовсе в глаза не видел! И вообще, у нас сроки горят, а вы тут палки в колёса ставите!
    - Ну это же вы так запланировали - полгода на разработку и день на тестирование! Кстати, если даже в таких условиях мы успели заметить, что ваша программа падает, значит, она вообще никуда не годится!
    - Что падает? Где падает?- включил дурака Олег,- у меня ничего не падает, это у вас с руками что-то!
    - Это ты будешь юзеру(6) объяснять, что у него с руками что-то, а моя задача - найти баг и доложить.
    - То, что ты нашёл, это вообще не баг!
    - Юзер выполняет предусмотренные программой действия, она падает - и это не баг?
    - А с чего ты взял, что юзер будет выполнять эти действия? А если их не выполнять, то ничего и не падает! И пока нет статистики, подтверждающей, что юзеры нажимают эти кнопки, это твоё голословное утверждение!
    - А если я тебе покажу, как оно падает?
    - Ну покажи. А то я не понимаю, что ты там понаписал, ну подумаешь, упало... А почему? И что с того?
    - Что с того? Ну смотри...
    Саша запустил программу. Олег уставился в его монитор.
    - Не сюда смотри, туда смотри!- Саша указал на окно.
    За окном радовала индустриальным пейзажем Москва-Сортировочная. Три с лишним десятка путей, уставленных вагонами, хорошо просматривались с шестого этажа.
    Маневровый тепловозик, пыхтя, тяжело втащил тестовый состав на горку и замер в ожидании отмашки. Работяга в оранжевом жилете загнал под колесо вагона башмак и застыл, приникнув ухом к рации. Только потухший бычок нервно подрагивал в уголке рта.
    - Запускаемся,- сказал Саша и нажал кнопку "3 путь". Работяга вздрогнул, прислушался, что-то ответил в рацию и побежал к стрелке. Потом пулей вернулся, выбил башмак и отскочил в сторонку.
    Тестовый состав покатился, медленно набирая скорость и погромыхивая на стрелках.
    - Вот, смотри,- сказал Саша.
    Олег перевёл взгляд на экран. "Unhandled exception error. Application will be closed now."
    За окном тестовый состав вошёл в соприкосновение со стоявшим на пути товарняком. Тоскливый скрежет, от которого собаку Баскервиллей хватил бы инфаркт, волной прокатился по сцепкам и состав замер.
    - Ну, всё нормально!- сказал Олег.
    - Нормально?! - спросил Саша и включил переговорник.
    Монолог стрелочника был в самом разгаре. Олег и Саша пару минут благоговейно внимали, наслаждаясь богатством лексикона, точностью и едкостью оборотов, а потом со вздохом выключили приёмник.
    - Ну, ты понял?- нарушил тишину Саша,- мало того, что она упала, так ещё вместо третьего пути состав ушёл на седьмой!
    - Н-да, что-то тут не так...
    Олег погрузился в мысли, потом его осенило:
    - А мы щас у Алексея спросим!
    Пришёл Алексей - неторопливый, обстоятельный, выслушал описание проблемы и заявил:
    - Ну так всё правильно! Если бы на седьмом пути не стоял товарняк, то тестовый состав ушёл бы на третий!
    Начальники в обалдении уставились на него. Алексей продолжал:
    - В этом стандартном компоненте семафоры так устроены, что пути проверяются в обратном порядке - от больших номеров к меньшим. Если надо на третий, а седьмой свободен, значит, едем.
    - Э-э-э... А почему так странно? - удивился Саша.
    - Кто ж их знает,- усмехнулся Алексей,- видимо, их дизайнеры так запроектировали.
    - А их программисты точно так же реализовали то, что надизайнено?- догадался Саша.
    - Ага!- радостно подтвердил Алексей.
    - Так что же это получается - все пути перед проходом любой электрички должны быть свободны? Во избежание?
    - Ну да.
    - И в этом случае программа работает без сбоев?
    - А куда она денется, я ж говорю - компонент так устроен...
    - Значит, надо освободить пути - убрать все встречные и стоящие... Ладно, так начальству и доложим,- сказал Олег.
    - Типа, так и надо?- спросил Саша.
    - Ну да. В рамках оптимизации железнодорожного движения. И оформим это как обычно - "по просьбам трудящихся". Ты ведь трудящийся? - спросил Олег у Алексея.
    - Ну дык! - подтвердил Алексей,- а в следующей версии авось пофиксим(7), и они снова начнут ходить в обе стороны!

---------
    1 баг (bug) - это просто ошибка в программе.
    2 зарепортировал - это от слова "report", то есть попросту доложил.
    3 бета-версия - почти готовая программа, во всяком случае должна уже делать всё, что от неё требуется.
    4 эксепшен (exception) - исключительная ситуация, которую программа переварить не может и потому рушится.
    5 Xxx, Yyy, Zzz - совершенно отвлечённые названия программ. Подставлять по вкусу. ;)
    6 юзер (user) - лопоухий пользователь любой супер-мега-офигительной программы. ;)
    7 пофиксить - то же, что исправить. С той лишь разницей, что пофиксить программу удаётся почему-то не всегда... ;))


29 мая, 2008

Оригинал: http://tikser.livejournal.com/130165.html


Рецензии