История о том, что программного обеспечение всё больше проникает в нашу повседневную жизнь. Вместе с пользой и благами, программный код несёт и новые опасности. Теперь с ошибками программах мы имеем дело, не только сидя за компьютером, но и на дороге.
(прошло 10 месяцев)
(спустя 3 года)
Национальное управление безопасностью движения на трассах США (NHTSA) подсчитало, что с 2000 года по 2010 год в авариях погибло 89 человек и 57 получили увечья, в связи с неисправностями электроники.
Toyota отрицает вину электроники и считает, на основе собственного расследования, что виновата "залипающая" педаль газа и плохо подогнанные коврики, но отзывает 8,5 млн автомобилей по всему миру.
Жалобы продолжают поступать.
Осторожнее слабонервным: https://www.youtube.com/watch?v=cOWdWHSgI-4
NHTSA начинают собственное расследование, привлекают на помощь NASA.
В ходе десятимесячного расследования спецы NASA выявили, что софт не соответствует стандартам MISRA (Motor Industry Software Reliability Association) и содержит 7134 нарушения. Toyota ответили, что у них свои собственные стандарты.
20 декабря 2010 года Тойота отвергает все обвинения, но выплачивает 16 миллиардов долларов в досудебном порядке по искам и выпускает апдейт софта для некоторых моделей машин и отзывает 5,5 миллиона автомобилей.
После объявления результатов исследования NASA акции Toyota на токийской бирже выросли на 4,6%.
В 2013 году в суд Оклахомы подается иск об аварии 2007 года, в которую попали две девушки на Toyota Camry 2005 года выпуска. Одна из них скончалась, другая провела пять месяцев в больнице с травмами спины и головы. Toyota не признала своей вины. Они заявили, что причиной аварии послужило то, что водитель перепутала педали газа и тормоза, а, когда поняла свою ошибку и начала тормозить, — было уже слишком поздно.
К делу подключаются два инженера: Майкл Барр и Филипп Купман. На 20 месяцев разбирать 280 000 строчек кода, писать отчет на 800 страниц. Каждый.
Адрес был засекречен. Номер отеля, в котором работали инженеры, круглосуточно охранялся — охрана следила, чтобы никто не вносил и не выносил никаких бумаг. Все телефоны и интернет были отключены.
Тойота отзывала более 10 миллионов автомобилей по всему миру. Вину так и не признали.
По словам Майкла Барра, их отчет засекретили. Так же засекретили условия контракта, на условиях которого им предоставили исходный код Тойоты. Но Барр рекомендует погуглить транскрипт материалов слушания.
Вот в таких условиях работали аналитики:
И вот такой отчет написали:
Главный подопытный — система электронного управления дроссельной заслонкой (ETCS).
Специалисты NASA сканировали микросхемы рентгеном.
В качестве причин ошибок рассматриваются даже космические лучи.
И код на С чекала:
И тут очередь дошла до кода.
По прикидкам, на каждые 30 нарушений стандартов MISRA приводят к одному "серьезному багу".
Тойота в свои стандарты позаимствовало только 11 правил MISRA.
Инструменты анализа NASA могли проверить 35 правил MISRA и 14 из них были нарушены.
[Источник — Отчет NASA, приложение А: Software, стр 28]
Итого: 7134 нарушения (по подсчетам NASA) или 81 514 (по подсчетам Майкла Барра).
10 правил NASA
Статья на Хабре — "10 правил, которые позволяют NASA писать миллионы строк кода с минимальными ошибками"
The Power of Ten - 10 Rules for Writing Safety Critical Code
[Источник — spinroot.com/p10]
Длина функции ограничивается 60-75 строчками кода, после удаления пустых строк и комментов. Более 200 функций в коде Camry05 превосходили заданную длину. Одна из функций была на 740 строк.
31 имя было объявлено несколько раз в различных областях (in different scopes). Самое частое имя — sts_flags1, которая появлялось в 57 различных областях.
А вот это стоит показать покрупнее.
Граф управления потоком простой программы.
Цикломатическая сложность программы выше 50 — показатель, что программа не поддается тестированию.
У Тойоты в ETCS-коде:
В коде Тойоты использовалась рекурсия, и каждая проблема с ней приводила к перезагрузке процессора (CPU reset).
Количество говнокода, от которого зависит жизнь людей, растет. Пример с Тойотой показывает, что разработчики систем могут косячить и на элементарном уровне, не говоря уже на уровне принятия этических решений ИИ. Но основная беда не в том, что ошибки есть, а в том, что заинтересованные стороны препятствуют их поиску и исправлению. И эти стороны обладают достаточной мощью, чтобы надавить на NASA.
"Программирование сегодня — это гонка, в которой соревнуются разработчики, стремящиеся построить большие и обладающие защитой от дурака программы, и вселенная, порождающая всё больших и качественных дураков. На данный момент вселенная побеждает."
— Рич Кук, писатель-фантаст
Красочная презентация Филиппа Купмана:
NASA Report on Toyota Unintended Acceleration Investigation
NHTSA Report on Toyota Unintended Acceleration Investigation
За 4 года до
Куда ни приеду, моя работа заключается в применении одной простой формулы. Я храню тайны.
Это элементарная арифметика.
Задача из учебника.
Если автомобиль новой модели, изготовленный моей компанией, выехал из Чикаго на запад со скоростью 60 миль в час, — и заклинивает задний мост, машина разбивается и сгорает со всеми, кто попался в ловушку ее салона, — стоит ли моей компании возвращать модель на доработку?
Берем общее количество выпущенных машин данной модели (A), умножаем на вероятное количество машин с неисправностью (B), потом умножаем результат на среднюю стоимость решения вопроса без суда (С). A умножить на B умножить на C. Равняется X. Столько стоит не возвратить модель на доработку.
Если X больше стоимости возврата — мы возвращаем машины, и никто больше не пострадает.
Если X — меньше стоимости возврата — возврата не будет.
— Чак Паланик "Бойцовский клуб", 1996 год.
— И часто бывают такие аварии?
— Вы даже не представляете.
— А в какой компании вы работаете?
— В очень крупной.
— к\ф "Бойцовский клуб", 1999 год.
Эта статья впервые была опубликована (на русском языке) на сайте habrahabr.ru. Статья размещена в нашем блоге и переведена с разрешения автора.