Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

История [ править ]

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

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

Принятие [ править ]

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

  • Стандарты программирования C ++ проекта Joint Strike Fighter [3] основаны на MISRA-C: 1998.
  • NASA Jet Propulsion Laboratory 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.
  • AUTOSAR Спецификация Общее программное обеспечение (SRS_BSW_00007) также приводит Мишра 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 Соответствие позволяет Advisory рекомендациям быть Disapplied .

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

Категоризация [ править ]

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

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

Сфера [ править ]

В 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], которая добавила четырнадцать новых рекомендаций по безопасности .

Поправка 2 [ править ]

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

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

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

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

Пример набора [ править ]

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

Инструменты [ править ]

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

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

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

  • Astrée от AbsInt
  • Axivion Bauhaus Suite от Axivion GmbH. MISRA C: 2004, C: 2012, C: 2012, поправка 1, C ++: 2008, соответствие: 2016 .
  • CodeSonar от GrammaTech
  • Coverity от Synopsys - Статический анализ
  • Cppcheck - инструмент статического анализа с открытым исходным кодом для C / C ++
  • ECLAIR от BUGSENG
  • Goanna от Red Lizard Software - инструмент анализа программного обеспечения для C / C ++.
  • Helix QAC от Perforce Software . MISRA C: 1998, C: 2004, C: 2012, C ++: 2008 . [23]
  • Klocwork от Rogue Wave Software (теперь принадлежит Perforce Software [24] ). MISRA C: 2012, C: 2012, поправка 1, C ++: 2008 . [25]
  • Испытательный стенд LDRA, проведенный Liverpool Data Research Associates
  • Тест Parasoft C / C ++ от Parasoft
  • PC-Lint компании Gimpel Software. MISRA C: 1998, C: 2004, C: 2012, C ++: 2008 . [26]
  • Polyspace от MathWorks
  • PVS-Studio от Системы программной верификации
  • SonarQube от SonarSource ( открытый исходный код с некоторыми коммерческими подключаемыми компонентами)
  • SQuORE от Squoring Technologies
  • Понять с помощью SciTools

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

  • Программное обеспечение Green Hills
  • IAR Systems - MISRA C: 1998, C: 2004, C: 2012, C ++: 2008 . [27]
  • ЗАДАЧА - MISRA C: 1998, C: 2004, C: 2012 .

Критика [ править ]

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

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

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

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

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

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

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

См. Также [ править ]

  • Стиль программирования

Ссылки [ править ]

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

Внешние ссылки [ править ]

  • Официальный веб-сайт
  • «Введение в MISRA C» . embedded.com.
  • «MISRA C: Чем безопаснее, тем лучше» . Журнал "Электронный дизайн".
  • «Комментарий к первому изданию руководящих принципов MISRA C» . knosof.co.uk.
  • «Новая версия MISRA C: почему вас это должно волновать?» . Журнал "Электронный дизайн".
  • «MISRA C: 2012: множество веских причин для перемен» . Журнал "Электронный дизайн".
  • «MISRA C: 2012 фактологический бюллетень» (PDF) . Programmingresearch.com.
  • «MISRA C: 2012 обеспечивает безопасность автомобильного программного обеспечения» . Журнал EE Times.
  • «Соответствие MISRA C: Создание кода» . Математические работы.