MISRA C

Эта статья находится на начальном уровне проработки, в одной из её версий выборочно используется текст из источника, распространяемого под свободной лицензией
Материал из энциклопедии Руниверсалис

MISRA C — стандарт разработки программного обеспечения на языке Си, разработанный MISRA (Motor Industry Software Reliability Association). Цель стандарта — улучшить безопасность, переносимость и надежность программ для встраиваемых систем. Также существует набор похожих руководящих принципов для языка C++ под названием MISRA C ++.

В настоящее время стандарты MISRA используются не только в автомобильной индустрии, но также и в аэрокосмической, телекоммуникационной, разработке медицинских устройств, военных проектах, и других[1][2][3]

Первая редакция стандарта MISRA C, «Guidelines for the use of the C language in vehicle based software», была опубликована в 1998 году, и часто называется MISRA-C:1998.[4]

В 2004 была издана вторая редакция под названием «Guidelines for the use of the C language in critical systems» (MISRA-C:2004) со значительными изменениями, включая перенумерацию правил.

Продолжается работа над следующей редакцией стандарта, адаптированной к C99.

Официально текст стандарта MISRA C доступен только за плату.[5]

Правила

В MISRA-C:1998 перечислено 127 правил[6] (93 обязательных и 34 рекомендательных).

В MISRA-C:2004 141 правило (121 обязательное и 20 рекомендательных). Правила разделены на 21 категорию.

В MISRA-C:2012 143 правила (каждое из которых может быть проверено статическим анализатором кода) и 16 директив (правил, соответствие которым открыто для интерпретаций или связано с процессами и процедурами);[7]. Правила делятся на обязательные, требуемые и рекомендательные; могут распространяться на отдельные единицы трансляции или на всю систему[7]. Также правила разделены на Decidable и Undecidable.

В стандарте MISRA C++ 2008 года, основанном на C++2003, 228 правил[8].

Анализаторы

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

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

Анализаторы, проверяющие соответствие MISRA
Компиляторы C, которые могут проверять соответствие MISRA, выпускаются компаниями

Критика

Несколько исследований ставят под вопрос эффективность правил MISRA.[11] В частности, выявлялась негативная корреляция между нарушениями правил MISRA и наблюдаемыми сбоями программ.[12]

См. также

Примечания

  1. MISRA C and MISRA C++ Compliance | PRQA | PRQA. Дата обращения: 29 декабря 2011. Архивировано 12 февраля 2010 года.
  2. Cosmic Software - MISRA checker (недоступная ссылка). Дата обращения: 29 декабря 2011. Архивировано 12 февраля 2012 года.
  3. LDRA: Using the LDRA tool suite for MISRA-C:2004 Certification. Дата обращения: 29 декабря 2011. Архивировано 17 марта 2012 года.
  4. A brief history of MISRA C. Дата обращения: 29 декабря 2011. Архивировано 7 июня 2017 года.
  5. «Buying MISRA C». Дата обращения: 29 декабря 2011. Архивировано 30 декабря 2011 года.
  6. computing.unn.ac.uk/staff/cgam1/teaching/0703/misra%20rules.pdf Документ с перечислением всех 127 правил
  7. 7,0 7,1 Fact Sheet: MISRA C:2012 (PDF). programmingresearch.com. Дата обращения: 10 июня 2013. Архивировано 2 ноября 2013 года.
  8. Build secure and reliable embedded systems with MISRA C/C++ | Embedded. Дата обращения: 21 января 2016. Архивировано 11 марта 2016 года.
  9. MISRA C FAQ. Дата обращения: 29 декабря 2011. Архивировано 6 июля 2017 года.
  10. PVS-Studio: поддержка стандартов кодирования MISRA C и MISRA C++. www.viva64.com. Дата обращения: 10 декабря 2018. Архивировано 10 декабря 2018 года.
  11. Language subsetting in an industrial context: a comparison of MISRA C 1998 and MISRA C; Les Hatton; University of Kingston; 2004.. Дата обращения: 8 августа 2019. Архивировано 8 августа 2019 года.
  12. Assessing the Value of Coding Standards: An Empirical Study; C.J. Boogerd and L. Moonen; Delft University of Technology; 2008. (англ.)

Ссылки