smali

четверг, 2 апреля 2015 г.

Цена ошибки программиста

http://dou.ua/lenta/articles/bug-tasting/

В работе программиста есть один минус, который одновременно является и плюсом. С одной стороны, клиент и конечные пользователи находятся где-то там, за океаном, поэтому ты не услышишь звонка с благодарностью за хорошо проделанную работу. Это минус. С другой стороны, если по твоей вине случается проблема, то тысячи километров и водная толща океана как бы демпфируют удар. Все-таки, крики по e-mail переносятся проще, чем по телефону. Это помогает не слишком стрессовать на работе. Но не каждому уготована ненапряжная атмосфера. Дальше поговорим о тех исторических событиях, когда из-за допущенных ошибок IT-специалистам приходилось здорово понервничать.

Дорогой Integer overflow

Сбой в программе ракеты-носителя Ariane 5, которая в 1996 году должна была вывести на орбиту несколько спутников, закончился взрывом ракеты в воздухе. С учетом установленного на борту оборудования авария обошлась в 500 млн долларов. Строительство и разработка ракеты длилась 10 лет и стоила 7 млрд долларов. Все эти усилия и траты пошли коту под хвост из-за ошибки integer overflow.
Когда горизонтальное ускорение превысило допустимое значение, программа попыталась впихнуть 64-bit floating point number в 16-bitsigned integer. Результат — самоликвидация и горящие осколки на площади в 12 км2 на потеху зрителям:
Во время расследования инцидента была проведена симуляция полета Ariane 5 с использованием другой инерциальной платформы — баг воспроизвели. Программа сбойнула точь-в-точь как в случае с реальной ракетой.
С одной стороны, причиной сбоя можно назвать оптимизацию кода, который не проверял допустимые значения для той конкретной переменной — программисты не предполагали, что число, описывающее горизонтальную скорость, может быть настолько великим.
С другой стороны, провинились и тестировщики — хоть и были произведены сотни тестов и тысячи последующих корректировок, никто не сделал полноценного анализа опорной инерциальной системы. Проблема была в том, что на Ariane 5, чья траектория полета сильно отличалась от Ariane 4, поставили навигационный софт от Ariane 4. Тот случай, когда железо проапгрейдили, а софтину обновить забыли.