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

в 6:59, , рубрики: Блог компании PVS-Studio, глобальные переменные, кривой код, отладка, Промышленное программирование, тестирование, Тестирование IT-систем, Тойота

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

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

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

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

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

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

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

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

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

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

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

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

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

Toyota: 81 514 нарушений в коде - 6
Специалисты NASA сканировали микросхемы рентгеном.

Toyota: 81 514 нарушений в коде - 7
В качестве причин ошибок рассматриваются даже космические лучи.

И код на С чекала:
Toyota: 81 514 нарушений в коде - 8

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

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

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

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

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

Toyota: 81 514 нарушений в коде - 11
[Источник — Отчет 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]

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

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

Переменные

31 имя было объявлено несколько раз в различных областях (in different scopes). Самое частое имя — sts_flags1, которая появлялось в 57 различных областях
Toyota: 81 514 нарушений в коде - 13

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

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

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

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

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

Toyota: 81 514 нарушений в коде - 17
Граф управления потоком простой программы.

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

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

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

Рекурсия

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

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


СМИ

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

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

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

NHTSA Report on Toyota Unintended Acceleration Investigation

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

P.S.

За 4 года до

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

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

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

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

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

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

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

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

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

— И часто бывают такие аварии?
— Вы даже не представляете.
— А в какой компании вы работаете?
— В очень крупной.

— кф «Бойцовский клуб», 1999 год.

Автор: PVS-Studio

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js