C для автомобиля – доминирующий факт в автомобильной промышленности и особенно в автомобильном секторе. Помимо своей популярности, он также является наиболее подходящим языком для создания критически важных систем безопасности в автомобильном секторе, за которым следует C++ (его потомок), и требуется соответствие стандарту сертификации ISO 26262. Согласно исследовательскому обзору VDC, C использовался в промышленности чуть более чем на 70%.

ЭБУ (электронный блок управления) – это неотъемлемая часть современных автомобилей, в которых вы используете микроконтроллеры для программирования вашего ЭБУ, чтобы он был мозгом необходимых функций, таких как запуск двигателя, переключение передач и даже Открой окно. Некоторые современные автомобили имеют до 150 ЭБУ. Встроенное программное обеспечение ECU становится все более изощренным, сложным и требует большого количества линий. Для производителей оригинального оборудования (OEM) контроль сложности и количества электронных блоков управления (ECU) в автомобиле стал серьезной проблемой.

Статический анализ кода

Статический анализ (также известный как анализ исходного кода) — это процесс моделирования производительности программы во время выполнения. Эта фраза обычно используется для описания анализа, проводимого автоматическим прибором. Он работает как анализ кода без выполнения.

Ошибки, которые могут не проявляться в течение нескольких недель или месяцев после разработки, обнаруживаются с помощью статического анализа. Без статического анализа эти ошибки проявляются в производственной среде, и их исправление обходится очень дорого. После статического анализа начните искать менее очевидные недостатки в динамическом коде. Программа тестируется в ходе динамического анализа. В программу тестирования следует включить статический и динамический анализ. Вы рискуете расстроить и себя, и своего клиента, если пропустите какой-либо шаг. В большинстве случаев анализу подвергается исходный код программы или, реже, какой-либо аспект ее объектного кода.

Преимущества статического анализа кода

  • Безопасность: анализ позволяет предвидеть ошибки, которые могут возникнуть и привести к более серьезным проблемам, но на самом деле не влияют на основную функциональность кода. Таким образом, даже если ваш код работает идеально, в нем есть огромные ошибки, которые вы не сможете увидеть без анализа.
  • Стандартизация. Почти все инструменты анализатора используют одни и те же стандарты, опубликованные надежными фондами. Создание каждого кода в соответствии с ними является отраслевым стандартом и помогает разработчикам понимать друг друга.
  • Обоснованность.Поскольку стандарты устанавливаются такими доверенными организациями и используются титанами отрасли, анализ является достоверным.

Ассоциация по надежности программного обеспечения автомобильной промышленности (MISRA) предлагает рекомендации по созданию независимого программного обеспечения, встроенных систем управления, программно-интенсивных приложений и систем безопасности. Потребность в «ограниченном подмножестве стандартизированного языка программирования» была впервые выражена в «Руководстве по разработке программного обеспечения для транспортных средств» 1994 г. и привела к созданию MISRA C в ответ на эту потребность и растущему использованию C для создания встроенных приложений. программное обеспечение в автомобильных приложениях. Он направлен в основном на руководство в соответствии со стандартами ISO C, C90, C99 и C11.

Процесс анализа относительно прост. В большинстве случаев это делается до начала тестирования программного обеспечения в начале разработки. Когда код будет готов, анализатор должен запустить процесс и просмотреть код. Анализатор может выбрать несколько стандартов и уровней анализа. В некоторых инструментах тестирования пользователь может выбрать степень нарушения. Но почти во всех из них пользователь может выбрать стандарт и его временные рамки. Static Code Analyzer должен выбрать под свою потребность и запустить анализ в соответствии с ним.

Инструменты статического анализа кода разделены в соответствии с их качествами. Некоторые из них создали среду и интерфейс для более удобного использования и получения более подробных отчетов. Другие используются путем простой компиляции непосредственно в терминале. Например:

Язык программирования Си прост, ясен и эффективен. Это дает программисту инструменты, необходимые для создания доступного, удобного в сопровождении и эффективного кода. Его популярность объясняется всеми этими качествами. К сожалению, этот язык также дает неосторожному разработчику возможность писать рискованный, небезопасный код, который может привести к серьезным проблемам на протяжении всего проекта разработки, включая развертывание. Эти языковые недостатки вызывают большую тревогу в приложениях, где безопасность и/или защищенность являются главными приоритетами. Например, эти недостатки программного обеспечения не подходят для таких отраслей, как; «Авиационная, автомобильная, железнодорожная и оборонная промышленность». Где миллисекундная задержка или отсутствие данных могут привести к гибели людей.

Позвольте мне дать вам вкус руководящих принципов здесь.

MISRA C:2012 Правило 12.2

Определение правила:

Правый операнд оператора сдвига должен лежать в диапазоне от нуля до единицы меньше ширины в битах основного типа левого операнда.

Обоснование:

Рассмотрим это утверждение:

var = abc << num;

Если abc является 16-разрядным целым числом, то num должно находиться в диапазоне от 0 до 15 (неотрицательно и меньше 16). Если num отрицательное или больше 16, то поведение сдвига не определено.

MISRA C:2012 Правило 7.2

Определение правила:

Суффикс «u» или «U» должен применяться ко всем целочисленным константам, представленным в беззнаковом типе.

Обоснование:

Знаковость константы определяется из:

  • Значение константы.
  • Основание константы: восьмеричное, десятичное или шестнадцатеричное.
  • Размер различных типов.
  • Используемые суффиксы.

Если вы не используете суффикс u или U, другой разработчик, глядя на ваш код, не сможет легко определить, является ли константа знаком или без знака.

MISRA C++:2008 Правило 7.5.1

Определение правила:

Функция не должна возвращать ссылку или указатель на автоматическую переменную (включая параметры), определенную внутри функции.

Обоснование:

Автоматические переменные уничтожаются в конце вызова функции. Возврат ссылки или указателя на такую ​​переменную позволяет использовать ее после ее уничтожения, что приводит к неопределенному поведению.

Не все эти правила являются здравым смыслом для всех программистов, но они представляют собой набор рекомендаций :) для более безопасного и более защищенного кода в конце концов.