Pull to refresh
342.28
PVS-Studio
Static Code Analysis for C, C++, C# and Java

Toyota: 81 514 нарушений в коде

Reading time5 min
Views103K


Люди: — Эй, Тойота, мы тут посчитали, у вас из-за корявой электроники и софта 89 человек погибло с 2000 по 2010.
Тойота: — Да они сами виноваты, путают педали.
Люди: — Хьюстон, у нас проблемы.
NASA: — Ща разберемся, нам надо 10 месяцев и 3 миллиона долларов.
Люди: — На.
Тойота: — 3 миллиона мало, вот вам еще сверху кэшем.
(прошло 10 месяцев)
NASA: — Эй, Тойота, мы у вас пару ошибок в коде нашли, а точнее 7134 нарушения стандартов MISRA, рекурсию, функцию на 740 строк и 9000 глобальных переменных.
Тойота: — А у нас свои стандарты. А вы ваще на Луну летали?
NASA (публично): — Тойота ни в чем не виновата.
(Акции Тойота подскочили на 4,6%)
Люди: — Ну ё-моё.
(спустя 3 года)
Два американских тестировщика (у которых дедушки погибли в Перл-Харбор): — Нет багов? А если найдем?


Национальное управление безопасностью движения на трассах США (NHTSA) подсчитало, что с 2000 года по 2010 год в авариях погибло 89 человек и 57 получили увечья, в связи с неисправностями электроники.

Toyota отрицает вину электроники и считает, на основе собственного расследования, что виновата «залипающая» педаль газа и плохо подогнанные коврики, но отзывает 8,5 млн автомобилей по всему миру.

Жалобы продолжают поступать.

Осторожнее слабонервным

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 сканировали микросхемы рентгеном.


В качестве причин ошибок рассматриваются даже космические лучи.

И код на С чекала:



И тут очередь дошла до кода.

Нарушения стандартов MISRA (и NASA)


По прикидкам, на каждые 30 нарушений стандартов MISRA приводят к одному «серьезному багу».
  • В MISRA-C:1998 перечислено 127 правил (93 обязательных и 34 рекомендательных).
  • В MISRA-C:2004 141 правило (121 обязательное и 20 рекомендательных). Правила разделены на 21 категорию.
  • В MISRA-C:2012 143 правила (каждое из которых может быть проверено статическим анализатором кода) и 16 директив (правил, соответствие которым открыто для интерпретаций или связано с процессами и процедурами). Правила делятся на обязательные, требуемые и рекомендательные; могут распространятся на отдельные единицы трансляции или на всю систему. Также правила разделены на Decidable и Undecidable.


Тойота в свои стандарты позаимствовало только 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
  1. Restrict to simple control flow constructs.
  2. Give all loops a fixed upper-bound.
  3. Do not use dynamic memory allocation after initialization.
  4. Limit functions to no more than 60 lines of text.
  5. Use minimally two assertions per function on average.
  6. Declare data objects at the smallest possible level of scope.
  7. Check the return value of non-void functions, and check the validity of function parameters.
  8. Limit the use of the preprocessor to file inclusion and simple macros.
  9. Limit the use of pointers. Use no more than two levels of dereferencing per expression.
  10. Compile with all warnings enabled, and use one or more source code analyzers.

[Источник — spinroot.com/p10]



Длина функции ограничивается 60-75 строчками кода, после удаления пустых строк и комментов. Более 200 функций в коде Camry05 превосходили заданную длину. Одна из функций была на 740 строк.

Переменные


31 имя было объявлено несколько раз в различных областях (in different scopes). Самое частое имя — sts_flags1, которая появлялось в 57 различных областях




А вот это стоит показать покрупнее.





Запутанность кода



Граф управления потоком простой программы.

Цикломатическая сложность программы выше 50 — показатель, что программа не поддается тестированию.



У Тойоты в ETCS-коде:
  • 67 функций со сложностью over 50
  • Сложность Throttle angle function = 146; 1300 строк кода, без плана для unit test


Рекурсия



В коде Тойоты использовалась рекурсия, и каждая проблема с ней приводила к перезагрузке процессора (CPU reset).

Ну и что?


Количество говнокода, от которого зависит жизнь людей, растет. Пример с Тойотой показывает, что разработчики систем могут косячить и на элементарном уровне, не говоря уже на уровне принятия этических решений ИИ. Но основная беда не в том, что ошибки есть, а в том, что заинтересованные стороны препятствуют их поиску и исправлению. И эти стороны обладают достаточной мощью, чтобы надавить на NASA.



«Программирование сегодня — это гонка, в которой соревнуются разработчики, стремящиеся построить большие и обладающие защитой от дурака программы, и вселенная, порождающая всё больших и качественных дураков. На данный момент вселенная побеждает.»
— Рич Кук, писатель-фантаст



СМИ




Отчеты по расследованию


Красочная презентация Филиппа Купмана:


NASA Report on Toyota Unintended Acceleration Investigation
NASA Executive Summary
NASA Full Report


NHTSA Report on Toyota Unintended Acceleration Investigation




P.S.


За 4 года до


Куда ни приеду, моя работа заключается в применении одной простой формулы. Я храню тайны.

Это элементарная арифметика.

Задача из учебника.

Если автомобиль новой модели, изготовленный моей компанией, выехал из Чикаго на запад со скоростью 60 миль в час, — и заклинивает задний мост, машина разбивается и сгорает со всеми, кто попался в ловушку ее салона, — стоит ли моей компании возвращать модель на доработку?

Берем общее количество выпущенных машин данной модели (A), умножаем на вероятное количество машин с неисправностью (B), потом умножаем результат на среднюю стоимость решения вопроса без суда (С). A умножить на B умножить на C. Равняется X. Столько стоит не возвратить модель на доработку.

Если X больше стоимости возврата — мы возвращаем машины, и никто больше не пострадает.

Если X — меньше стоимости возврата — возврата не будет.

— Чак Паланик «Бойцовский клуб», 1996 год.

— И часто бывают такие аварии?
— Вы даже не представляете.
— А в какой компании вы работаете?
— В очень крупной.
— к\ф «Бойцовский клуб», 1999 год.
Tags:
Hubs:
Total votes 131: ↑123 and ↓8+115
Comments268

Articles

Information

Website
pvs-studio.com
Registered
Founded
2008
Employees
31–50 employees