МИСРА С
MISRA C — это набор руководств по разработке программного обеспечения для C языка программирования , разработанный Консорциумом MISRA . Его целью является обеспечение безопасности , защиты , переносимости и надежности кода в контексте встроенных систем , особенно систем, запрограммированных в ISO C /C90/ C99 . [1]
Существует также набор рекомендаций по MISRA C++, не рассмотренный в этой статье.
История [ править ]
- Драфт: 1997 г. [2]
- Первое издание: 1998 г. (правила, обязательные/рекомендательные).
- Второе издание: 2004 г. (правила, обязательные/рекомендательные)
- Третье издание: 2012 г. (директивы; правила, разрешимое/неразрешимое)
- Соответствие MISRA: 2016 г., обновлено в 2020 г.
- MISRA C:2023 (MISRA C Третье издание, Вторая редакция)
Для первых двух изданий MISRA-C (1998 и 2004 гг.) все Рекомендации считались Правилами. С публикацией MISRA C:2012 была введена новая категория Руководящих принципов – Директива , соблюдение которой более открыто для интерпретации или относится к процессуальным или процедурным вопросам.
Принятие [ править ]
Хотя изначально MISRA C был специально ориентирован на автомобильную промышленность, он превратился в широко принятую модель передового опыта ведущих разработчиков в таких секторах, как автомобилестроение, аэрокосмическая промышленность, телекоммуникации, медицинское оборудование, оборона, железная дорога и другие.Например:
- Joint Strike Fighter Стандарты кодирования C++ проекта [3] основаны на MISRA-C:1998.
- Лаборатории НАСА реактивного движения Стандарты кодирования C [4] основаны на MISRA-C:2004.
- В стандарте IEC 81001-5-1:2021 « Программное обеспечение для здравоохранения и ИТ-системы здравоохранения, безопасность, эффективность и безопасность. Часть 5-1: Безопасность. Действия в жизненном цикле продукта» MISRA C приводится в качестве примера передового опыта безопасного кодирования.
- В стандарте ISO 26262 « Функциональная безопасность — дорожные транспортные средства» MISRA C упоминается как соответствующий подмножество языка C:
- В общей спецификации программного обеспечения AUTOSAR ( 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.
int
тип может отличаться, ноint16_t
(стандартизовано в C99) всегда составляет 16 бит. - Избегайте использования функций и конструкций, которые подвержены сбоям, например:
malloc
может потерпеть неудачу. - Создавайте удобный в сопровождении и отладке код, например, используя соглашения об именах и комментируя.
- Правила наилучшей практики.
- Пределы сложности.
Область применения [ править ]
MISRA C:2012 отдельно классифицирует каждое руководство как единую единицу перевода или систему . [10]
Разрешимость [ править ]
MISRA C:2012 классифицирует правила (но не директивы ) как разрешимые и неразрешимые .
Достижение соответствия [ править ]
Соответствие MISRA [ править ]
MISRA опубликовала документы, содержащие дополнительные рекомендации для понимания и достижения соответствия MISRA.
- MISRA Compliance:2016 был выпущен MISRA в апреле 2016 года. [11]
- MISRA Compliance:2020 , исправленная редакция была выпущена в феврале 2020 года. [12]
Соответствие [ править ]
Чтобы часть программного обеспечения претендовала на соответствие рекомендациям MISRA C, все обязательные должны быть соблюдены правила, а все требуемые правила и директивы должны быть либо соблюдены, либо допущены формальные отклонения. Консультативные правила могут быть отменены без формального отклонения, но это все равно должно быть зафиксировано в проектной документации.
Примечание. В целях обеспечения соответствия не существует различия между правилами и директивами .
Отклонения [ править ]
MISRA C Многие правила можно охарактеризовать как рекомендации , поскольку при определенных условиях инженеры-программисты могут отклоняться от правил и по-прежнему считаться соответствующими стандарту. Отклонения должны быть задокументированы либо в коде, либо в файле. Кроме того; Должно быть предоставлено доказательство того, что инженер-программист учел безопасность системы и что отклонение от правила не будет иметь негативных последствий. Требования к отклонениям также включают:
- Правило отклонилось от .
- Обоснование отклонения. [13]
Опубликованные документы [ править ]
МИСРА C:1998 [ править ]
Первое издание MISRA C, «Руководство по использованию языка C в программном обеспечении для транспортных средств», опубликованное в 1998 году и официально известное как MISRA-C:1998 . [14]
MISRA-C:1998 содержит 127 правил, из них 93 обязательных и 34 рекомендательных; правила пронумерованы последовательно от 1 до 127.
МИСРА C:2004 [ править ]
В 2004 году было выпущено второе издание «Руководства по использованию языка C в критически важных системах », или MISRA-C:2004 , со многими существенными изменениями в руководствах, включая полное изменение нумерации правил.
MISRA-C:2004 содержит 142 правила, из которых 122 являются «обязательными» и 20 — «рекомендательными»; они разделены на 21 тематическую категорию: от «Окружающая среда» до «Ошибки во время выполнения».
МИСРА C:2012 [ править ]
Основной документ [ править ]
В 2013 году вышло третье издание MISRA C:2012. MISRA C:2012 расширяет поддержку версии языка C C99 (при сохранении рекомендаций для 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 Основные функции. [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]
МИСРА C:2023 [ править ]
В мае 2023 года MISRA опубликовало MISRA C:2023 (третье издание MISRA C, вторая редакция), которое включает поправки 2–4 (AMD2, AMD3, AMD4) и техническое исправление 2 (TC2), а также включает поддержку языковых функций C11 и C18. [21]
Пример пакета [ править ]
Пример пакета (для MISRA-C:2004 и MISRA C:2012) доступен на MISRA GitLab. [22] репозиторий (требуется вход). Это позволяет пользователям инструментов оценивать и сравнивать поддержку проверки, предоставляемую различными инструментами MISRA; кроме того, он дает разработчикам инструментов некоторые указания относительно целей Руководства MISRA.
Инструменты [ править ]
Хотя существует множество программных инструментов, которые утверждают, что проверяют код на «соответствие MISRA», процесса сертификации MISRA не существует. [23]
Большинство рекомендаций можно проверить с помощью инструментов, выполняющих статический анализ кода . Остальные рекомендации требуют использования динамического анализа кода .
Инструменты, проверяющие код на соответствие MISRA, включают:
- Астре от AbsInt
- Axivion Bauhaus Suite от Axivion GmbH. MISRA C:2004, C:2012, C:2012, поправка 1, C++:2008, Соответствие:2016 .
- CodeSonar от GrammaTech
- Покрытие от Synopsys — Статический анализ
- Cppcheck — инструмент статического анализа с открытым исходным кодом для C/C++.
- ЭКлер от BUGSENG srl. MISRA C:2004, C:2012, C:2012, поправка 1, C++:2008 .
- Helix QAC от Perforce Software . МИСРА C:1998, C:2004, C:2012, C++:2008 . [24]
- Klocwork от Rogue Wave Software (сейчас принадлежит Perforce Software) [25] ). MISRA C:2012, C:2012, поправка 1, C++:2008 . [26]
- Испытательный стенд LDRA от Liverpool Data Research Associates
- Тест Parasoft C/C++ от Parasoft. MISRA C 1998, MISRA C 2004, MISRA C 2012 AMD1, AMD2 и AMD3, MISRA C++ 2008, черновая версия MISRA C++ 202x . [27]
- PC-Lint от Gimpel Software (сейчас принадлежит Vector Informatik GmbH). МИСРА C:1998, C:2004, C:2012, C++:2008 . [28]
- Полипространство от MathWorks
- PVS-Studio от Систем Верификации Программ
- SonarQube от SonarSource ( с открытым исходным кодом и некоторыми коммерческими подключаемыми компонентами)
- SQuORE от Squoring Technologies
- Понять с помощью SciTools
Компиляторы C/C++, поддерживающие соответствие MISRA, включают:
- Программное обеспечение Зеленых холмов
- IAR Systems — MISRA C:1998, C:2004, C:2012, C++:2008 . [29]
- ЗАДАЧИ - МИСРА C:1998, C:2004, C:2012 .
Критика [ править ]
Некоторые результаты исследований ставят под сомнение эффективность MISRA C 2004.
В статье, в которой сравниваются более ранние работы над MISRA C:1998 и MISRA C:2004, Лес Хаттон приходит к выводу, что: [30]
Ввиду очевидного растущего влияния стандарта MISRA C, в данной статье делается попытка оценить, были ли удовлетворительно устранены важные недостатки исходного стандарта. К сожалению, этого не произошло, и важное соотношение реальных и ложноположительных результатов в MISRA C 2004 не намного лучше, чем в MISRA C 1998, и в обоих случаях оно неприемлемо низкое.
Далее он заявляет: [30]
В его нынешнем виде единственными, кто получит выгоду от обновления MISRA C 2004, будут поставщики инструментов, и следует надеяться, что будут предприняты шаги как для упрощения формулировок, так и для уменьшения процента ложных срабатываний в будущих версиях путем принятия немного больше внимания к опубликованным экспериментальным данным и меньше соблазна изобретать правила на том основании, что они кажутся хорошей идеей.
Исследование, проведенное Каталом Бугердом и Леоном Муненом в Делфтском техническом университете , эмпирически оценивает ценность MISRA C:2004. Это приводит к аналогичным результатам: [31]
Из полученных данных мы можем сделать следующие ключевые наблюдения. Во-первых, 9 из 72 правил, для которых наблюдались нарушения, работают значительно лучше (α = 0,05), чем случайный предиктор при обнаружении линий, связанных с неисправностями. Истинные положительные показатели для этих правил варьируются от 24 до 100%. Во-вторых, мы наблюдали отрицательную корреляцию между нарушениями правил MISRA и наблюдаемыми ошибками. Кроме того, 29 из 72 правил имели нулевой истинно положительный уровень. В сочетании с наблюдением Адамса о том, что все модификации имеют ненулевую вероятность возникновения неисправности, это делает возможным, что соблюдение стандарта MISRA в целом сделало бы программное обеспечение менее надежным.
См. также [ править ]
Ссылки [ править ]
- ^ «MISRA разъясняет безопасное и надежное использование языка C» . www.misra.org.uk. Архивировано из оригинала 04 августа 2020 г. Проверено 9 октября 2019 г.
- ^ Весной 1997 года инженеры-программисты из Austin Rover Group (ARG) отправили на рассмотрение проект стандарта кодирования C в Programming Research Ltd (PRL). Обзор был проведен тогдашним старшим консультантом PRL Дэвидом Блитом, который предложил заменить проект значительно более строгим набором правил кодирования. Эти правила с небольшими изменениями легли в основу первого издания MISRA C.
- ^ «Стандарты кодирования C++ для самолетов Joint Strike Fighter» (PDF) . Проверено 16 июля 2019 г.
- ^ «Институциональный стандарт кодирования JPL для языка программирования C» (PDF) . Проверено 16 июля 2019 г.
- ^ «ISO 26262-6:2011 Транспорт дорожный. Функциональная безопасность. Часть 6. Разработка продукции на уровне программного обеспечения» . iso.org . ИСО . Проверено 16 июля 2019 г.
- ^ «ISO 26262-6:2018 Транспорт дорожный. Функциональная безопасность. Часть 6. Разработка продукции на уровне программного обеспечения» . iso.org . ИСО . Проверено 16 июля 2019 г.
- ^ «Общая спецификация программного обеспечения AUTOSAR 4.2» (PDF) . autosar.org . Проверено 16 июля 2019 г.
- ^ «АВТОСАР 4.3 Общая спецификация базовых программных модулей» (PDF) . autosar.org . АвтоСАР. 30 ноября 2016 г. Проверено 16 июля 2019 г.
- ^ Публикации MISRA
- ^ Jump up to: а б «Информационный бюллетень: MISRA C:2012 (PDF)» (PDF) . programresearch.com . Проверено 10 июня 2013 г.
- ^ «Соответствие MISRA: 2016 (PDF)» . МИСРА . Проверено 22 июля 2016 г.
- ^ «Соответствие MISRA: 2020 (PDF)» (PDF) . МИСРА . Проверено 8 апреля 2020 г.
- ^ «Достижение соответствия MISRA C:2012» . Парасофт . Проверено 29 мая 2017 г.
- ^ «Краткая история MISRA C» . МИСРА. 18 марта 2013 г. Проверено 30 июня 2014 г.
- ^ «Объявлена дата выпуска MISRA C:2012» . МИСРА. 26 февраля 2013 года . Проверено 10 июня 2013 г.
- ^ «MISRA C:2012 – Поправка 1 (PDF)» . МИСРА. Апрель 2016 года . Проверено 31 октября 2019 г.
- ^ «MISRA C:2012 – Поправка 2 (PDF)» . МИСРА. февраль 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». Консорциум МИСРА
- ^ «Helix QAC для C и C++ | Perforce» .
- ^ «Программное обеспечение Perforce с поддержкой Clearlake Capital приобретает программное обеспечение Rogue Wave | Perforce» .
- ^ «Klocwork для C, C++, C#, Java и JavaScript | Perforce» .
- ^ «Встроенные тестовые конфигурации C/C++» . Парасофт. 17 октября 2022 г. Проверено 9 марта 2023 г.
- ^ Проверка соответствия MISRA, PC-lint/FlexeLint, Gimpel Software.
- ^ Языки и стандарты; iar.com
- ^ Jump up to: а б Подмножество языков в промышленном контексте: сравнение MISRA C 1998 и MISRA C; Лес Хаттон; Университет Кингстона; 2004.
- ^ Оценка ценности стандартов кодирования: эмпирическое исследование; Си Джей Бугерд и Л. Мунен; Делфтский технологический университет; 2008.
Внешние ссылки [ править ]
- Официальный сайт
- «Введение в MISRA C» . Embedded.com. Июль 2002 года.
- «MISRA C: Чем безопаснее, тем лучше» . Журнал электронного дизайна. 3 февраля 2003 г.
- «Комментарий к первому изданию рекомендаций MISRA C» . knosof.co.uk.
- «Новая версия MISRA C: почему вас это должно волновать?» . Журнал электронного дизайна. 25 февраля 2013 г.
- «MISRA C:2012: множество веских причин для изменений» . Журнал электронного дизайна. 25 февраля 2013 г.
- «Информационный бюллетень MISRA C: 2012» (PDF) . programresearch.com.
- «MISRA C:2012 обеспечивает безопасность автомобильного программного обеспечения» . Журнал EE Times.
- «Соответствие MISRA C: Генерация кода» . Математические работы.