Skip to the content.

:balance_scale: Стандарты кодирования и регуляторные требования

C++ традиционно занимает те области, где цена ошибки измеряется не потерянными деньгами, а человеческими жизнями: автомобильная электроника, медицинская техника, авионика, промышленная автоматика, железнодорожный транспорт. В таких проектах свобода языка становится проблемой, поэтому её ограничивают - сводом правил кодирования, обязательными проверками и документированным процессом разработки.

Эта статья - обзорная карта местности, а не руководство по сертификации. Её задача - чтобы вы понимали, о чём идёт речь, когда в вакансии написано «опыт работы по MISRA» или «проекты по ISO 26262», и знали, где искать подробности.

Стандартов и требований очень много, и ниже собраны лишь самые заметные. Единого «обязательного набора» не существует: каждый проект использует своё подмножество в зависимости от отрасли, страны, заказчика и класса критичности. Разбираться в конкретных стандартах имеет смысл тогда, когда они реально встретились на вашем проекте, а не про запас.

:warning: Требования и сроки меняются. Перед принятием решений сверяйтесь с актуальными редакциями стандартов и с юристами вашей компании - эта статья для ориентирования, а не для юридических выводов.

:straight_ruler: Стандарты кодирования

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

:shield: Функциональная безопасность

Отвечают на вопрос «что должно произойти, чтобы система не навредила при отказе». Регламентируют не столько код, сколько процесс: требования, трассируемость, тестирование, документирование и квалификацию используемых инструментов.

Базовый стандарт в этой области - IEC 61508, вводящий уровни полноты безопасности SIL 1-4. Отраслевые стандарты ниже - это его адаптации:

:lock: Кибербезопасность и цепочка поставок

Относительно новая для C++ мира тема: регуляторы переносят ответственность за уязвимости на производителя ПО.

:computer: Что это значит на практике

Если вы попадёте на такой проект, изменится не столько язык, сколько окружение вокруг кода:

:question: Кому это действительно нужно

Не всем. Если вы пишете игры, десктопные приложения, backend или трейдинг - на практике вы, скорее всего, не столкнётесь с этими стандартами, и специально изучать их незачем.

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

Исключение - CRA и SBOM. Они касаются гораздо более широкого круга продуктов, чем классическая функциональная безопасность, так что познакомиться с ними стоит и «обычным» разработчикам, чьи продукты продаются в Европе.


На главную страницу