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
Определение правила:
Функция не должна возвращать ссылку или указатель на автоматическую переменную (включая параметры), определенную внутри функции.
Обоснование:
Автоматические переменные уничтожаются в конце вызова функции. Возврат ссылки или указателя на такую переменную позволяет использовать ее после ее уничтожения, что приводит к неопределенному поведению.
Не все эти правила являются здравым смыслом для всех программистов, но они представляют собой набор рекомендаций :) для более безопасного и более защищенного кода в конце концов.