MISRA C - MISRA C

MISRA C представляет собой набор руководств по разработке программного обеспечения для C язык программирования разработан MISRA (Ассоциация надежности программного обеспечения автомобильной промышленности). Его цель - облегчить код безопасность, безопасность, переносимость и надежность в контексте встроенные системы, особенно те системы, которые запрограммированы в ISO C / C90 / C99.[1]

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

История

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

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

Принятие

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

  • В Совместный ударный истребитель Стандарты программирования C ++ проекта[3] основаны на MISRA-C: 1998.
  • В НАСА Лаборатория реактивного движения Стандарты кодирования C[4] основаны на MISRA-C: 2004.
  • ISO 26262 Функциональная безопасность - автотранспортные средства цитирует MISRA C как подходящий подмножество языка C:
    • ISO 26262-6: 2011 Часть 6: Разработка продукта на уровне программного обеспечения[5] цитирует MISRA-C: 2004 и MISRA AC AGC.
    • ISO 26262-6: 2018 Часть 6: Разработка продукта на уровне программного обеспечения[6] цитирует MISRA C: 2012.
  • В АВТОСАР Общая спецификация программного обеспечения (SRS_BSW_00007) также цитирует MISRA C:
    • Общая спецификация программного обеспечения AUTOSAR 4.2[7] требует, чтобы Если реализация модуля BSW написана на языке C, то она должна соответствовать стандарту MISRA C: 2004.
    • Общая спецификация программного обеспечения AUTOSAR 4.3[8] требует, чтобы Если реализация модуля BSW написана на языке C, то она должна соответствовать стандарту MISRA C: 2012.

Классификация и категоризация рекомендаций

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

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

Каждое Руководство классифицировано[10] в качестве Обязательный (новое для MISRA C: 2012), Необходимый или же Консультативный. Кроме того, документ соответствия MISRA разрешает Консультативный руководящие принципы быть Отклонено.

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

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

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

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

Объем

MISRA C: 2012 отдельно классифицирует каждое руководство как Одинокий Бюро переводов или же Система.[10]

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

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

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

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

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

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

Согласие

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

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

Отклонения

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

  • Правило отклонилось от.
  • Обоснование отклонения.[13]

Опубликованные документы

MISRA C: 1998

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

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 в критически важных системах.[15]

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

Поправка 1

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

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

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

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

Пример набора

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

Инструменты

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

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

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

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

Критика

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

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

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

Далее он заявляет:[27]

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

Исследование в TU Delft, Катал Бугерд и Леон Мунен, эмпирически оценивает ценность MISRA C: 2004. Это приводит к аналогичным результатам:[28]

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

Смотрите также

Рекомендации

  1. ^ «MISRA разъясняет безопасное и надежное использование языка C». www.misra.org.uk. Получено 2019-10-09.
  2. ^ Весной 1997 г. инженеры-программисты Остин Ровер Групп (ARG) отправил проект стандарта кодирования C в Programming Research Ltd (PRL) для проверки. Обзор был проведен тогдашним старшим консультантом PRL Дэвидом Блайтом, который предложил заменить черновик значительно более строгим набором правил кодирования. Эти правила с небольшими изменениями легли в основу первого издания MISRA C.
  3. ^ «Стандарты программирования C ++ для самолетов Joint Strike Fighter Air Vehicle» (PDF). Получено 2019-07-16.
  4. ^ «Стандарты кодирования C NASA JPC» (PDF). Получено 2019-07-16.
  5. ^ «ISO 26262-6: 2011 Транспорт дорожный. Функциональная безопасность. Часть 6: Разработка продукта на уровне программного обеспечения». iso.org. ISO. Получено 2019-07-16.
  6. ^ «ISO 26262-6: 2018 Транспорт дорожный - Функциональная безопасность - Часть 6: Разработка продукта на уровне программного обеспечения». iso.org. ISO. Получено 2019-07-16.
  7. ^ «Общая спецификация программного обеспечения AUTOSAR 4.2» (PDF). autosar.org. Получено 2019-07-16.
  8. ^ «AUTOSAR 4.3 Общая спецификация базовых программных модулей» (PDF). autosar.org. AutoSAR. 2016-11-30. Получено 2019-07-16.
  9. ^ Публикации MISRA
  10. ^ а б "Информационный бюллетень: MISRA C: 2012 (PDF)" (PDF). Programmingresearch.com. Получено 10 июн 2013.
  11. ^ «Соответствие MISRA: 2016 (PDF)». MISRA. Получено 22 июля 2016.
  12. ^ «Соответствие MISRA: 2020 (PDF)». MISRA. Получено 8 апреля 2020.
  13. ^ «Достижение соответствия MISRA C: 2012». Parasoft. Получено 29 мая, 2017.
  14. ^ «Краткая история MISRA C». MISRA. 2013-03-18. Получено 2014-06-30.
  15. ^ «Объявлена ​​дата выпуска MISRA C: 2012». MISRA. 26 февраля 2013 г.. Получено 10 июн 2013.
  16. ^ «MISRA C: 2012 - Поправка 1 (PDF)». MISRA. Получено 31 октября 2019.
  17. ^ «MISRA C: 2012 - Приложение 1: Отображение правил (PDF)».
  18. ^ «MISRA C: 2012 - Приложение 2: Охват MISRA C: 2012 в соответствии с ISO / IEC TS 17961: 2013« C Secure »(PDF)».
  19. ^ «MISRA C: 2012 - Приложение 3: Покрытие MISRA C: 2012 по сравнению с CERT C (PDF)».
  20. ^ Репозиторий MISRA GitLab
  21. ^ "Список часто задаваемых вопросов MISRA C". Консорциум MISRA
  22. ^ https://www.perforce.com/products/helix-qac
  23. ^ https://www.roguewave.com/company/news/2019/perforce-software-acquires-rogue-wave-software
  24. ^ https://www.perforce.com/products/klocwork
  25. ^ Проверка соответствия MISRA, PC-lint / FlexeLint, Gimpel Software.
  26. ^ Языки и стандарты; iar.com
  27. ^ а б Подмножество языков в промышленном контексте: сравнение MISRA C 1998 и MISRA C; Лес Хаттон; Кингстонский университет; 2004 г.
  28. ^ Оценка ценности стандартов кодирования: эмпирическое исследование; Си Джей Бугерд и Л. Мунен; Делфтский технологический университет; 2008 г.

внешняя ссылка