История одного проекта
- Ты чего же это, понимаешь, баг(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
Свидетельство о публикации №216123000163