Сегодня поймали дивный баг.
Нечто, тщательно оттестированное на тестовом сервере и довольно успешно работавшее уже несколько дней на боевом, внезапно перестает работать — по непонятным причинам прекратило работать некое условие.
Вскрытие показало: некая функция func(), возвращающая, в частности, температуру за бортом, заключена в
if (func()) {
и вот это-то и перестало работать.
}
Да, конечно. Перестало работать оно, когда на термометре было 0 градусов.
Вcпоминается известная шутка про полеты над Мертвым морем.
С высотой, которая меньше нуля?
Ага.
ага. там как раз на нуле у них тоже баг и выскочил … а еще помнится у кого-то был баг при пересечении экватора — самолет переворачивался кверх ногами … правда на симуляторе что ли отловили еще …
возникает один вопрос — «тщательно оттестированное на тестовом сервере»? В принципе-то тест-сценарий наистандартнейший: min, <0, ==0, >0, max. Гоните тестеров! :)
Похоже, придется активнее использовать тэг [irony].
Это скорее ко мне надо относить — последнее время шутки на тему кода/тестов/IT понимаю с трудом. Так что слово «лопата» не помешает :).
Зачётно!
Знаем, плавали =)
Приучил себя писать: if(func() != 0)
И как именно это помогло бы в этом случае?
Наглядностью. За if(getTherm() != 0) глаз зацепится на предмет того, почему это температура у нас не должна быть нулём.
А там, поди, был какой-нибудь getStatus(), с пятью проверками, всё ли хорошо и return 0, если плохо, и return getTherm() в конце. Так что в if ( getStatus() != 0) тоже нифига не видно было бы.
Ну тут уже рецепт один: писать код @ наступать на грабли =) Лет через пять привыкаешь. В смысле: привыкаешь обходить старые грабли.
Неужели каких-нибудь ворнингов не было бы на предмет нескольких return?
Я отстал от жизни — а несколько return — это warning?
Не знаю, я отстал от жизни еще до тебя :)