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

0fe85e901da457c1326a98fab1a0914f.jpg

Люди: — Эй, Тойота, мы тут посчитали, у вас из-за корявой электроники и софта 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 не признала своей вины. Они заявили, что причиной аварии послужило то, что водитель перепутала педали газа и тормоза, а, когда поняла свою ошибку и начала тормозить, — было уже слишком поздно.

24334f4a9c604603944c6efef229fa48.jpg
К делу подключаются два инженера: Майкл Барр и Филипп Купман. На 20 месяцев разбирать 280 000 строчек кода, писать отчет на 800 страниц. Каждый.

Адрес был засекречен. Номер отеля, в котором работали инженеры, круглосуточно охранялся — охрана следила, чтобы никто не вносил и не выносил никаких бумаг. Все телефоны и интернет были отключены.

Тойота отзывала более 10 миллионов автомобилей по всему миру. Вину так и не признали.

По словам Майкла Барра, их отчет засекретили. Так же засекретили условия контракта, на условиях которого им предоставили исходный код Тойоты. Но Барр рекомендует погуглить транскрипт материалов слушания.

  • TRANSCRIPT OF MORNING TRIAL PROCEEDINGS HAD ON THE 14TH DAY OF OCTOBER, 2013
  • BOOKOUT V. TOYOTA 2005 Camry L4 Software Analysis
  • KILLER APPS Embedded Software«s Greatest Hit Jobs

Вот в таких условиях работали аналитики:

9843c15144b0475fb1949b3687920fa8.jpg

И вот такой отчет написали:

f6973a9f79e8433891d241a7b7144cb8.jpg

Как искали и что нашли

Главный подопытный — система электронного управления дроссельной заслонкой (ETCS).

c372e35ddeac4fd8b2fdc3be6e58ad74.jpg

e321881c85bf4a8bbe262deb7610ee0b.jpg
Специалисты NASA сканировали микросхемы рентгеном.

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

И код на С чекала:
4b64645b0e204bf7bf0c3095c5176e24.jpg

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

Нарушения стандартов 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.

8a92900b52ec4c52a79068f79f9f445c.jpg

cfaa15bef7204f6b8c53ab7ce99d4491.jpg

Инструменты анализа NASA могли проверить 35 правил MISRA и 14 из них были нарушены.

0a5b8eedb5c0413abff5310afbfe9e84.jpg
[Источник — Отчет 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]

3a85ac547bf040c68d11cd7aaaa65703.jpg

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

Переменные


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

bdf6fab03be24632b24fcb1bffcc6790.jpg

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

410650439d38465482ededf143f6a35d.jpg

58091249076542438319bb347cfb8cb0.jpg

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


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

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

У Тойоты в ETCS-коде:

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

Рекурсия


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

c6e8d52e13474bc3bca28b8aa991e78a.jpg

СМИ


  • Власти США оправдали Toyota («Коммерсантъ» от 09.02.2011)
  • U.S. Department of Transportation Releases Results from NHTSA-NASA Study of Unintended Acceleration in Toyota Vehicles (February 8, 2011)
  • Toyota’s runaway-car worries may not stop at floor mats
  • NHTSA-NASA Study of Unintended Acceleration in Toyota Vehicles
  • Analysis of Toyota ETCS-1 System Hardware and Software
  • Toyota Recall Timeline

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

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

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

  • Appendix A: Software
  • Appendix_B_Fishbone_Diagrams
  • Appendix C: Hardware
  • Appendix D: Test Scenarios

NHTSA Report on Toyota Unintended Acceleration Investigation

  • NHTSA Executive Summary
  • NHTSA Full Report

ffb9d0261cd14c0f9e11e589b25743b1.jpg

P.S.


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

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

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

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

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

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

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


 — Чак Паланик «Бойцовский клуб», 1996 год.
— И часто бывают такие аварии?
 — Вы даже не представляете.
 — А в какой компании вы работаете?
 — В очень крупной.
 — к\ф «Бойцовский клуб», 1999 год.

Комментарии (0)

© Habrahabr.ru