Для получения триального ключа
заполните форму ниже
Team License (базовая версия)
Enterprise License (расширенная версия)
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Бесплатная лицензия PVS-Studio для специалистов Microsoft MVP
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Мне интересно попробовать плагин на:
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте папку
Spam/Junk и нажмите на письме кнопку "Не спам".
Так Вы не пропустите ответы от нашей команды.

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

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

12 Окт 2016

История о том, что программного обеспечение всё больше проникает в нашу повседневную жизнь. Вместе с пользой и благами, программный код несёт и новые опасности. Теперь с ошибками программах мы имеем дело, не только сидя за компьютером, но и на дороге.

0439_Toyota_ru/image1-f35df44b6206c977059092b7e251ab98.png
  • Люди: — Эй, Тойота, мы тут посчитали, у вас из-за корявой электроники и софта 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 млн автомобилей по всему миру.

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

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

0439_Toyota_ru/image2-7f899dcf0daff6af02c216cb42b96998.png

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

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

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

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

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

0439_Toyota_ru/image3-31cb9f2f277f1662ad9c45b96f0656b6.png

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

0439_Toyota_ru/image5-a6f64fcab95f9f9b98b9dc54f1446b37.png

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

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

0439_Toyota_ru/image7-ebb5ce6e4916226aac635c997616bc62.png

0439_Toyota_ru/image9-5852bea563d900b29616993860c34bc5.png

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

0439_Toyota_ru/image11-b6dee9b0022ed94f305613211b9f2647.png

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

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

0439_Toyota_ru/image13-7e0d2d44064c59b926484e05ed12b0af.png

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

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

0439_Toyota_ru/image14-25a8223adbe23cb093f78b1c07c53717.png

0439_Toyota_ru/image15-db638ffef6043a0604c2805ba5e68113.png

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

0439_Toyota_ru/image17-9fcd7486a2e8e7d485826190708e16ff.png

[Источник — Отчет NASA, приложение А: Software, стр 28]

Итого: 7134 нарушения (по подсчетам NASA) или 81 514 (по подсчетам Майкла Барра).

10 правил NASA

Статья на Хабре — "10 правил, которые позволяют NASA писать миллионы строк кода с минимальными ошибками"

The Power of Ten - 10 Rules for Writing Safety Critical Code

  • Restrict to simple control flow constructs.
  • Give all loops a fixed upper-bound.
  • Do not use dynamic memory allocation after initialization.
  • Limit functions to no more than 60 lines of text.
  • Use minimally two assertions per function on average.
  • Declare data objects at the smallest possible level of scope.
  • Check the return value of non-void functions, and check the validity of function parameters.
  • Limit the use of the preprocessor to file inclusion and simple macros.
  • Limit the use of pointers. Use no more than two levels of dereferencing per expression.
  • Compile with all warnings enabled, and use one or more source code analyzers.

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

0439_Toyota_ru/image18-7fc4a97311adf2c0a286e948b070f83f.png

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

Переменные

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

0439_Toyota_ru/image19-fdb5f136b766f3b90e3a1e90b0dcf07a.png

0439_Toyota_ru/image20-4cf194bcf9158750255754b406030b74.png

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

0439_Toyota_ru/image21-f061f1a9f561b8f98e47eefbf6123312.png

0439_Toyota_ru/image23-ea1a5b7b91ce7038d560c72eec6704d7.png

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

0439_Toyota_ru/image25-0e5eed618ddf1017d5af6a6c35c0e48d.png

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

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

0439_Toyota_ru/image26-6190e20b677b0747906401e687dce164.png

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

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

Рекурсия

0439_Toyota_ru/image27-0213f923d2b472ef4ee459c1a50e443b.png

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

Ну и что?

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

0439_Toyota_ru/image28-cd890d7cba03146e4715eb78a179a26e.png

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

— Рич Кук, писатель-фантаст

СМИ

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

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

http://www.slideshare.net/PhilipKoopman/toyota-unintended-acceleration?ref=https://habrahabr.ru/company/pvs-studio/blog/310862/

NASA Report on Toyota Unintended Acceleration Investigation

NASA Executive Summary

NASA Full Report

NHTSA Report on Toyota Unintended Acceleration Investigation

0439_Toyota_ru/image30-f6f78ce3dc8210449c53e2805207f841.png

За 4 года до

0439_Toyota_ru/image32-8dcd874e09fd2c84247bb7e5c3a920c1.png

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

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

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

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

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

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

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

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

— И часто бывают такие аварии?

— Вы даже не представляете.

— А в какой компании вы работаете?

— В очень крупной.

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

Эта статья впервые была опубликована (на русском языке) на сайте habrahabr.ru. Статья размещена в нашем блоге и переведена с разрешения автора.

Популярные статьи по теме
Обрабатывать ли в PVS-Studio вывод других инструментов?

Дата: 26 Май 2022

Автор: Андрей Карпов

Анализатор PVS-Studio умеет "схлопывать" повторяющиеся предупреждения. Предоставляет возможность задать baseline, что позволяет легко внедрять статический анализ в legacy-проекты. Стоит ли предостави…
15000 ошибок в открытых проектах

Дата: 24 Май 2022

Автор: Андрей Карпов

Количество багов в нашей коллекции перевалило за отметку 15000. Именно такое количество ошибок обнаружила команда PVS-Studio в различных открытых проектах. Особенно интересно, что это всего лишь побо…
Комментарии в коде как вид искусства

Дата: 04 Май 2022

Автор: Сергей Хренов

Приветствую всех программистов, а также сочувствующих. Кто из нас хотя бы раз в жизни не оставлял комментарии в коде? Был ли это ваш код, а может, чужой? Что за комментарии вы написали: полезные или …
Visual Studio 2022 стильно и свежо. История о её поддержке в PVS-Studio

Дата: 15 Фев 2022

Автор: Николай Миронов

Кажется, анонс Visual Studio 2022 был только недавно, и вот она уже вышла. Это означало ровно одно – поддержать данную IDE нужно в ближайшем релизе PVS-Studio. О том, с какими сложностями пришлось ст…
Лучшие срабатывания статического анализатора

Дата: 29 Окт 2021

Автор: Максим Звягинцев

У всех, кто запускал статический анализатор в первый раз на большом проекте, был небольшой шок по поводу сотен, тысяч или даже десятков тысяч предупреждений. Как-то грустно становится после такого. Т…

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

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