MISRA C: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[отпатрулированная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
м r2.7.3) (робот добавил: cs:MISRA C
м Исправление псевдозаголовков (см. Википедия:Доступность#Заголовки)
 
(не показано 29 промежуточных версий 20 участников)
Строка 1: Строка 1:
'''MISRA C''' — стандарт разработки программного обеспечения на языке [[Си (язык программирования)|Си]], разработанный [[MISRA]] (Motor Industry Software Reliability Association). Цель стандарта — улучшить безопасность, переносимость и надежность программ для встраиваемых систем. Также существует набор похожих руководящих принципов для языка C++ под названием [[MISRA C ++]].
'''MISRA C''' — стандарт разработки программного обеспечения на языке [[Си (язык программирования)|Си]], разработанный [[MISRA]] (Motor Industry Software Reliability Association). Цель стандарта — улучшить безопасность, переносимость и надежность программ для встраиваемых систем. Также существует набор похожих руководящих принципов для языка C++ под названием [[MISRA C ++]].


В настоящее время стандарты MISRA используются не только в автомобильной индустрии, но также и в аэрокосмической, телекоммуникационной, разработке медицинских устройств, военных проектах, и других<ref>http://www.programmingresearch.com/QAMISRA.html</ref><ref>[http://www.cosmicsoftware.com/misra.php Cosmic Software - MISRA checker<!-- Заголовок добавлен ботом -->]</ref><ref>[http://www.ldra.com/misrac.asp LDRA: Using the LDRA tool suite for MISRA-C:2004 Certification<!-- Заголовок добавлен ботом -->]</ref>
В настоящее время стандарты MISRA используются не только в автомобильной индустрии, но также и в аэрокосмической, телекоммуникационной, разработке медицинских устройств, военных проектах, и других<ref>{{Cite web |url=http://www.programmingresearch.com/QAMISRA.html |title=MISRA C and MISRA C++ Compliance {{!}} PRQA {{!}} PRQA<!-- Заголовок добавлен ботом --> |access-date=2011-12-29 |archive-date=2010-02-12 |archive-url=https://web.archive.org/web/20100212232316/http://www.programmingresearch.com/QAMISRA.html |deadlink=no }}</ref><ref>{{Cite web |url=http://www.cosmicsoftware.com/misra.php |title=Cosmic Software - MISRA checker<!-- Заголовок добавлен ботом --> |accessdate=2011-12-29 |archiveurl=https://web.archive.org/web/20120212045417/http://www.cosmicsoftware.com/misra.php |archivedate=2012-02-12 |deadlink=yes }}</ref><ref>{{Cite web |url=http://www.ldra.com/misrac.asp |title=LDRA: Using the LDRA tool suite for MISRA-C:2004 Certification<!-- Заголовок добавлен ботом --> |access-date=2011-12-29 |archive-date=2012-03-17 |archive-url=https://web.archive.org/web/20120317190208/http://www.ldra.com/misrac.asp |deadlink=no }}</ref>


Первая редакция стандарта MISRA C, «Guidelines for the use of the C language in vehicle based software», была опубликована в 1998 году, и часто называется ''MISRA-C:1998''.<ref>[http://www.misra-c.com/Activities/MISRAC/tabid/160/Default.aspx A brief history of MISRA C]</ref>
Первая редакция стандарта MISRA C, «Guidelines for the use of the C language in vehicle based software», была опубликована в 1998 году, и часто называется ''MISRA-C:1998''.<ref>{{Cite web |url=http://www.misra-c.com/Activities/MISRAC/tabid/160/Default.aspx |title=A brief history of MISRA C |access-date=2011-12-29 |archive-date=2017-06-07 |archive-url=https://web.archive.org/web/20170607124934/https://www.misra-c.com/Activities/MISRAC/tabid/160/Default.aspx |deadlink=no }}</ref>


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


Текст стандарта MISRA C доступен только за плату.<ref>[http://www.misra.org.uk/Buyonline/tabid/58/Default.aspx «Buying MISRA C»]</ref>
Официально текст стандарта MISRA C доступен только за плату.<ref>{{Cite web |url=http://www.misra.org.uk/Buyonline/tabid/58/Default.aspx |title=«Buying MISRA C» |access-date=2011-12-29 |archive-date=2011-12-30 |archive-url=https://web.archive.org/web/20111230121701/http://misra.org.uk/Buyonline/tabid/58/Default.aspx |deadlink=no }}</ref>


== Правила ==
== Правила ==
Строка 15: Строка 15:


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

В ''MISRA-C:2012'' 143 правила (каждое из которых может быть проверено статическим анализатором кода) и 16 директив (правил, соответствие которым открыто для интерпретаций или связано с процессами и процедурами);<ref name="PRQA-factsheet">{{cite web | url=http://www.programmingresearch.com/content/misc/PRQA-MISRAC2012-FactSheet.pdf | title=Fact Sheet: MISRA C:2012 (PDF) | publisher=programmingresearch.com | accessdate=2013-06-10 | archive-date=2013-11-02 | archive-url=https://web.archive.org/web/20131102034532/http://www.programmingresearch.com/content/misc/PRQA-MISRAC2012-FactSheet.pdf | deadlink=no }}</ref>. Правила делятся на обязательные, требуемые и рекомендательные; могут распространяться на отдельные единицы трансляции или на всю систему<ref name="PRQA-factsheet"/>. Также правила разделены на ''Decidable'' и ''Undecidable''.

В стандарте MISRA C++ 2008 года, основанном на C++2003, 228 правил<ref>{{Cite web |url=http://www.embedded.com/design/safety-and-security/4413297/Build-secure-and-reliable-embedded-systems-with-MISRA-C-C- |title=Build secure and reliable embedded systems with MISRA C/C++ {{!}} Embedded<!-- Заголовок добавлен ботом --> |access-date=2016-01-21 |archive-date=2016-03-11 |archive-url=https://web.archive.org/web/20160311063535/http://www.embedded.com/design/safety-and-security/4413297/Build-secure-and-reliable-embedded-systems-with-MISRA-C-C- |deadlink=no }}</ref>.


== Анализаторы ==
== Анализаторы ==


Существует множество прогаммных анализаторов, которые проверяют код на соответствие правилам «MISRA», однако процесса сертификации MISRA не существует.<ref>[http://www.misra-c.com/MISRACFAQ/tabid/168/Default.aspx MISRA C FAQ]</ref>
Существует множество программных анализаторов, которые проверяют код на соответствие правилам «MISRA», однако процесса сертификации MISRA не существует.<ref>{{Cite web |url=http://www.misra-c.com/MISRACFAQ/tabid/168/Default.aspx |title=MISRA C FAQ |access-date=2011-12-29 |archive-date=2017-07-06 |archive-url=https://web.archive.org/web/20170706172941/https://www.misra-c.com/MISRACFAQ/tabid/168/Default.aspx |deadlink=no }}</ref>


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


;Анализаторы, проверяющие соответствие MISRA:
'''Анализаторы, проверяющие соответствие MISRA:'''
* [[Astrée]]
* [[Liverpool_Data_Research_Associates|LDRA]]
* [http://bugseng.com/products/eclair ECLAIR]
* [[Klocwork]]
* [[Liverpool Data Research Associates|LDRA]]
* [[Parasoft]]
* [[Parasoft]]
* [[PC-Lint]]
* [[PC-Lint]]
* [[Polyspace]]
* [[Polyspace]]
* [[PVS-Studio]]<ref>{{Cite web|url=https://www.viva64.com/ru/b/0596/|title=PVS-Studio: поддержка стандартов кодирования MISRA C и MISRA C++|publisher=www.viva64.com|accessdate=2018-12-10|archive-date=2018-12-10|archive-url=https://web.archive.org/web/20181210202711/https://www.viva64.com/ru/b/0596/|deadlink=no}}</ref>
* [[QA-C]]
* [[QA-C]]
* [[Understand_(software)|Understand]]
* [[Understand (software)|Understand]]
* [[Klocwork]]
* [[Cppcheck]]


;Компиляторы C, которые могут проверять соответствие MISRA, выпускаются компаниями:
'''Компиляторы C, которые могут проверять соответствие MISRA, выпускаются компаниями:'''
* [[Green Hills Software]]
* [[Green Hills Software]]
* [[IAR Systems]]
* [[IAR Systems]]
* [[Tasking]]

== Критика ==
Несколько исследований ставят под вопрос эффективность правил MISRA.<ref name="MISRA_comp_1105">{{Cite web |url=http://www.leshatton.org/Documents/MISRA_comp_1105.pdf |title=Language subsetting in an industrial context: a comparison of MISRA C 1998 and MISRA C; Les Hatton; University of Kingston; 2004. |access-date=2019-08-08 |archive-date=2019-08-08 |archive-url=https://web.archive.org/web/20190808204908/https://www.leshatton.org/Documents/MISRA_comp_1105.pdf |deadlink=no }}</ref> В частности, выявлялась негативная корреляция между нарушениями правил MISRA и наблюдаемыми сбоями программ.<ref>[http://resolver.tudelft.nl/uuid:646de5ba-eee8-4ec8-8bbc-2c188e1847ea Assessing the Value of Coding Standards: An Empirical Study; C.J. Boogerd and L. Moonen; Delft University of Technology; 2008.]{{ref-en}}</ref>


== См. также ==
== См. также ==
Строка 44: Строка 56:
* {{official|http://www.misra.org.uk}}
* {{official|http://www.misra.org.uk}}
* {{cite web
* {{cite web
| url = http://www.embedded.com/columns/beginerscorner/9900659?_requestid=427335
|url = http://www.embedded.com/columns/beginerscorner/9900659?_requestid=427335
| title = Introduction to MISRA C
|title = Introduction to MISRA C
| publisher = embedded.com
|publisher = embedded.com
| archiveurl = http://www.webcitation.org/67jt2mUH3
|archiveurl = https://www.webcitation.org/67jt2mUH3?url=http://eetimes.com/discussion/beginner-s-corner/4023981/Introduction-to-MISRA-C
| archivedate = 2012-05-18
|archivedate = 2012-05-17
|deadurl = yes
}}
}}
* {{cite web
* {{cite web
| url = http://electronicdesign.com/Articles/Index.cfm?AD=1&ArticleID=2824
|url = http://electronicdesign.com/Articles/Index.cfm?AD=1&ArticleID=2824
| title = MISRA C: Safer Is Better
|title = MISRA C: Safer Is Better
| publisher = electronicdesign.com
|publisher = electronicdesign.com
| archiveurl = http://www.webcitation.org/67jt4J5L8
|archiveurl = https://www.webcitation.org/67jt4J5L8?url=http://electronicdesign.com/article/embedded-software/misra-c-safer-is-better2824
| archivedate = 2012-05-18
|archivedate = 2012-05-17
|deadurl = yes
}}
}}
* {{cite web
* {{cite web
| url = http://old.iar.com/website1/1.0.1.0/474/1/
|url = http://old.iar.com/website1/1.0.1.0/474/1/
| title = MISRA C — Some key rules to make embedded systems safer
|title = MISRA C — Some key rules to make embedded systems safer
| publisher = iar.com
|publisher = iar.com
| deadlink = 404
|deadlink = 404
}}{{Недоступная ссылка|date=2018-05|bot=InternetArchiveBot }}
}}
* {{cite web
* {{cite web
| url = http://www.leshatton.org/index_SA.html
|url = http://www.leshatton.org/index_SA.html
| title = MISRA C papers
|title = MISRA C papers
| author = [[Software reliability]] expert [[Les Hatton]]
|author = [[Software reliability]] expert [[Les Hatton]]
| publisher = leshatton.org
|publisher = leshatton.org
| deadlink = 404
|deadlink = 404
|archiveurl = https://web.archive.org/web/20030919013356/http://www.leshatton.org/index_SA.html
|archivedate = 2003-09-19
}}
}}
* {{cite web
* {{cite web
| url = http://www.knosof.co.uk/misracom.html
|url = http://www.knosof.co.uk/misracom.html
| title = Commentary on the first edition of the MISRA C guidelines
|title = Commentary on the first edition of the MISRA C guidelines
| publisher = knosof.co.uk
|publisher = knosof.co.uk
| archiveurl = http://www.webcitation.org/67jt5a9vk
|archiveurl = https://www.webcitation.org/67jt5a9vk?url=http://www.knosof.co.uk/misracom.html
| archivedate = 2012-05-18
|archivedate = 2012-05-17
|deadurl = yes
}}
}}
* {{cite web
* {{cite web
| url = http://johndayautomotivelectronics.com/?p=505
|url = http://johndayautomotivelectronics.com/?p=505
| title = Automating Compliance to MISRA C/C++ Standards
|title = Automating Compliance to MISRA C/C++ Standards
| publisher = johndayautomotivelectronics.com
|publisher = johndayautomotivelectronics.com
| archiveurl = http://www.webcitation.org/67jt62E1w
|archiveurl = https://www.webcitation.org/67jt62E1w?url=http://johndayautomotivelectronics.com/?p=505
| archivedate = 2012-05-18
|archivedate = 2012-05-17
|deadurl = yes
}}
}}

{{Язык программирования Си}}
<!-- как диалект-подмножество -->


[[Категория:Язык программирования Си]]
[[Категория:Язык программирования Си]]
[[Категория:Языки программирования семейства C]]<!-- как диалект-подмножество -->
[[Категория:Языки программирования семейства Си]]
[[Категория:Компьютерные и телекоммуникационные стандарты]]
[[Категория:Компьютерные и телекоммуникационные стандарты]]

{{изолированная статья}}

[[ar:ميسرا سي]]
[[cs:MISRA C]]
[[de:MISRA-C]]
[[en:MISRA C]]
[[fr:MISRA C]]
[[ja:MISRA-C]]
[[ko:Misra c]]
[[pl:MISRA C]]
[[pt:MISRA C]]
[[sk:MISRA C]]
[[zh:MISRA C]]

Текущая версия от 22:36, 11 октября 2024

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. 1 2 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. (англ.)