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