MISRA C

редактировать
СОДЕРЖАНИЕ
  • 1 История
  • 2 Принятие
  • 3 Классификация и категоризация руководящих принципов
    • 3.1 Классификация
    • 3.2 Категоризация
    • 3.3 Объем
    • 3.4 Разрешимость
  • 4 Достижение соответствия
    • 4.1 соответствие MISRA
    • 4.2 Соответствие
    • 4.3 Отклонения
  • 5 Опубликованные документы
    • 5.1 MISRA C: 1998
    • 5.2 MISRA C: 2004
    • 5.3 MISRA C: 2012
      • 5.3.1 Основной документ
      • 5.3.2 Поправка 1
      • 5.3.3 Поправка 2
      • 5.3.4 Подтверждающие документы
  • 6 Пример набора
  • 7 Инструменты
  • 8 Критика
  • 9 См. Также
  • 10 Ссылки
  • 11 Внешние ссылки

MISRA C - это набор руководств по разработке программного обеспечения для языка программирования C, разработанный консорциумом MISRA. Его цели - обеспечить безопасность, безопасность, переносимость и надежность кода в контексте встроенных систем, особенно тех систем, которые запрограммированы в ISO C / C90 / C99.

Существует также набор руководящих принципов для MISRA C ++, которые не рассматриваются в этой статье.

История
  • Осадка: 1997 г.
  • Издание первое: 1998 г. (правила, обязательные / рекомендательные)
  • Издание второе: 2004 г. (правила, обязательные / рекомендательные)
  • Третье издание: 2012 г. (директивы; правила, Разрешимость / Неразрешимость)
  • Соответствие MISRA: 2016 г., обновлено 2020 г.

Для первых двух изданий MISRA-C (1998 и 2004) все Руководства считались Правилами. С публикацией MISRA C: 2012 была введена новая категория Руководства - Директива, соответствие которой более открыто для интерпретации или относится к процессуальным или процедурным вопросам.

Принятие

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

  • Стандарты программирования C ++ для проекта Joint Strike Fighter основаны на MISRA-C: 1998.
  • NASA Jet Propulsion Laboratory C Стандарты кодирования основаны на MISRA-C: 2004.
  • ISO 26262 Функциональная безопасность - Дорожные транспортные средства цитирует MISRA C как соответствующий подмножество языка C:
    • ISO 26262-6: 2011 Часть 6: Разработка продукта на уровне программного обеспечения цитирует MISRA-C: 2004 и MISRA AC AGC.
    • ISO 26262-6: 2018 Часть 6: Разработка продукта на уровне программного обеспечения цитирует MISRA C: 2012.
  • AUTOSAR Спецификация Общее программное обеспечение (SRS_BSW_00007) также приводит Мишра C:
    • Общая спецификация программного обеспечения AUTOSAR 4.2 требует, чтобы если реализация модуля BSW написана на языке C, то она должна соответствовать стандарту MISRA C: 2004.
    • Общая спецификация программного обеспечения AUTOSAR 4.3 требует, чтобы если реализация модуля BSW написана на языке C, то она должна соответствовать стандарту MISRA C: 2012.
Классификация и категоризация рекомендаций

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

Классификация

Каждое Руководство классифицируется как обязательное (новое для MISRA C: 2012), обязательное или рекомендательное. Кроме того, документ MISRA Соответствие позволяет Advisory рекомендациям быть Disapplied.

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

Категоризация

Правила можно логически разделить на несколько категорий:

  • Во избежание возможных различий в компиляторах, например, размер целого числа C может варьироваться, но INT16 всегда составляет 16 бит. (C99 стандартизирован int16_t.)
  • Например, mallocотказ от использования функций и конструкций, склонных к сбоям, может привести к сбою.
  • Создавайте обслуживаемый и отлаживаемый код, например, соглашения об именах и комментарии.
  • Правила передовой практики.
  • Пределы сложности.

Сфера

В MISRA C: 2012 каждое руководство отдельно классифицируется как единая единица перевода или как система.

Разрешимость

MISRA C: 2012 классифицирует правила, (но не директивы) как разрешимые или неразрешимой.

Достижение соответствия

Соответствие MISRA

MISRA опубликовала документы, содержащие дополнительные рекомендации по пониманию и достижению соответствия MISRA.

  • Соответствие MISRA: 2016, выпущено MISRA в апреле 2016 года.
  • Соответствие MISRA: 2020, пересмотренное издание, было выпущено в феврале 2020 года.

Согласие

Для того, чтобы часть программного обеспечения претендовала на соответствие Руководству MISRA C, все обязательные правила должны быть соблюдены, а все требуемые правила и директивы должны быть соблюдены или подлежат формальному отклонению. Рекомендательные правила могут быть отклонены без формального отклонения, но это все равно должно быть зафиксировано в проектной документации.

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

Отклонения

Многие правила MISRA C можно охарактеризовать как руководящие принципы, поскольку при определенных условиях разработчики программного обеспечения могут отклоняться от правил и по-прежнему считаться соответствующими стандарту. Отклонения должны быть задокументированы либо в коде, либо в файле. Кроме того; должно быть предоставлено доказательство того, что инженер-программист принял во внимание безопасность системы и что отклонение от правила не окажет отрицательного воздействия, требования к отклонениям также включают:

  • Правило отклонилось от.
  • Обоснование отклонения.
Опубликованные документы

MISRA C: 1998

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

MISRA-C: 1998 содержит 127 правил, из которых 93 обязательные и 34 рекомендательные; правила пронумерованы в порядке от 1 до 127.

MISRA C: 2004

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

MISRA-C: 2004 содержит 142 правила, из которых 122 являются «обязательными», а 20 - «рекомендательными»; они разделены на 21 тематическую категорию, от «Окружающая среда» до «Ошибки времени выполнения».

MISRA C: 2012

Основной документ

В 2013 году вышло третье издание MISRA C: 2012. MISRA C: 2012 расширяет поддержку версии C99 языка C (при сохранении рекомендаций для C90), в дополнение к включению ряда улучшений, которые могут снизить стоимость и сложность соответствия, одновременно помогая последовательному и безопасному использованию C в критических ситуациях. системы.

MISRA-C: 2012 содержит 143 правила и 16 «директив» (то есть правила, соблюдение которых более открыто для интерпретации или относится к процессуальным или процедурным вопросам); каждый из которых классифицируется как обязательный, обязательный или рекомендательный. Они отдельно классифицируются как единая единица перевода или как система. Кроме того, правила подразделяются на « Разрешаемые» и « Неразрешаемые».

Поправка 1

В апреле 2016 года MISRA опубликовала (для бесплатной загрузки) MISRA C: 2012 - Поправка 1: Дополнительные рекомендации по безопасности, в которую были добавлены четырнадцать новых рекомендаций по безопасности.

Поправка 2

В феврале 2020 года MISRA опубликовала (для бесплатной загрузки) MISRA C: 2012 - Поправка 2: Обновления для ISO / IEC 9899: 2011/18 Базовая функциональность, которая добавляет сопоставление для неопределенного, неопределенного и определенного реализацией поведения в C11 / C18.

Подтверждающие документы

MISRA опубликовало следующие дополнения в поддержку MISRA C: 2012:

  • MISRA C: 2012 - Приложение 1: Отображения правил, которое содержит двунаправленные сопоставления правил между MISRA C: 2004 и новой версией. Он предназначен для помощи пользователям в миграции.
  • MISRA C: 2012 - Приложение 2: Охват MISRA C: 2012 в соответствии с ISO / IEC TS 17961: 2013 «C Secure»
  • MISRA C: 2012 - Приложение 3: Охват MISRA C: 2012 по сравнению с CERT C
Пример набора

Образец набора (для MISRA-C: 2004 и MISRA C: 2012) доступен в репозитории MISRA GitLab (требуется вход в систему). Это позволяет пользователям инструмента оценивать и сравнивать поддержку проверки, предоставляемую различными инструментами MISRA; Кроме того, он дает разработчикам инструментов некоторые рекомендации относительно целей Руководства MISRA.

Инструменты
См. Также: Список инструментов для статического анализа кода.

Хотя существует множество программных инструментов, которые утверждают, что проверяют код на «соответствие MISRA», не существует процесса сертификации MISRA.

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

Инструменты, которые проверяют код на соответствие MISRA, включают:

Компиляторы C / C ++, поддерживающие соответствие MISRA, включают:

Критика

Некоторые результаты исследований ставят под сомнение эффективность MISRA.

В статье, в которой сравниваются более ранние работы над MISRA C: 1998 с MISRA C: 2004, Лес Хаттон приходит к выводу, что:

Принимая во внимание очевидное растущее влияние стандарта MISRA C, в данной статье делается попытка оценить, были ли устранены удовлетворительно важные недостатки исходного стандарта. К сожалению, нет, и важное соотношение реальных и ложных срабатываний в MISRA C 2004 не намного лучше, чем в MISRA C 1998, и является неприемлемо низким в обоих случаях.

Далее он заявляет:

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

Исследование на TU Delft, по Cathal Boogerd и Леон Moonen, эмпирический оценивает значение MISRA C: 2004. Приходит к аналогичным результатам:

Из полученных данных можно сделать следующие основные наблюдения. Во-первых, есть 9 из 72 правил, для которых наблюдались нарушения, которые работают значительно лучше (α = 0,05), чем случайный предсказатель при обнаружении линий, связанных с разломами. Истинные положительные ставки для этих правил варьируются от 24 до 100%. Во-вторых, мы наблюдали отрицательную корреляцию между нарушениями правил MISRA и наблюдаемыми ошибками. Кроме того, 29 из 72 правил имели нулевой истинно положительный результат. В совокупности с наблюдением Адамса о том, что все модификации имеют ненулевую вероятность возникновения неисправности, это делает возможным, что соблюдение стандарта MISRA в целом сделало бы программное обеспечение менее надежным.

Смотрите также
использованная литература
внешние ссылки
Последняя правка сделана 2023-12-31 10:50:34
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте