Получи случайную криптовалюту за регистрацию!

Есть популярный тест для серверного ПО, когда программа эксплу | Протестировал

Есть популярный тест для серверного ПО, когда программа эксплуатируется в течение продолжительного времени под нагрузкой. Такой тест позволяет выявлять проблемы, которые имеют накопительный эффект, например утечку ресурсов (файловые дескрипторы, память и т.д.). У меня две истории про такие баги, которые были найдены уже при эксплуатации.

Первая история:

MIM-104 "Патриот" — американский зенитный ракетный комплекс (ЗРК), используемый армией США и их союзниками. В программном обеспечении, отвечающем за ведение цели, присутствовал баг, из-за которого со временем внутренние часы постепенно отходили от истинного значения времени. Системное время хранилось как integer в 24-битном регистре с точностью до одной десятой секунды. Поэтому на каждом такте по 0.1 сек "терялась" часть времени. При рассчете данные переводились в числа типа real .

Число 1/10 равно 1/24 + 1/25 + 1/28 + 1/29 + 1/212 + 1/213 + ... Другими словами, бинарное разложение 1/10 = 0.0001100110011001100110011001100... Поэтому 24-битный регистр в системе Patriot хранил вместо этого 0.00011001100110011001100 внося ошибку равную 0.0000000000000000000000011001100... в двоичном исчислении, или примерно 0.000000095 в десятичном. За сто часов работы набегает 0.000000095×100×60×60×10 = 0.34 секунды.

Ракета, которая попала в ЗРК Патриот летела со скоростью 1676 метров в секунду, и проходила за 0.34 секунды больше полукилометра. Этого было более чем достаточно, чтобы пройти радиус поражения Патриотов. Забавно, что кривое вычисление времени пофиксили в некоторых частях программы, но не во всех.

Подробный отчёт: https://msquair.files.wordpress.com/2015/05/patriot-timing-error.pdf

Вторая история:

Производитель самолётов Boeing сильно пострадал в 2015 году от проблемы с его авиалайнерами 787 Dreamliner. Она была связана с конкретным временем непрерывной работы: тогда была обнаружена ошибка переполнения памяти, из-за которой генераторы 787 Dreamliner отключались после 248 дней непрерывной работы. Было обнаружено, что программный счётчик в прошивке генераторов переполнялся конкретно после этого точного промежутка времени. И это не единственная программная ошибка, которую нашли в 787 Dreamliner за последние годы.

Рекомендации персоналу, обслуживающему самолеты, от FAA - https://s3.amazonaws.com/public-inspection.federalregister.gov/2015-10066.pdf

#bugstory