MISRA C - MISRA C

MISRA C je sada pokynů pro vývoj softwaru pro C programovací jazyk vyvinutý uživatelem MISRA (Asociace spolehlivosti softwaru pro automobilový průmysl). Jeho cílem je usnadnit kód bezpečnost, bezpečnostní, přenosnost a spolehlivost v kontextu vestavěné systémy, konkrétně systémy naprogramované v ISO C. / C90 / C99.[1]

K dispozici je také sada pokynů pro MISRA C ++, na které se tento článek nevztahuje.

Dějiny

  • Návrh: 1997[2]
  • První vydání: 1998 (pravidla, povinné / poradní)
  • Druhé vydání: 2004 (pravidla, povinné / poradní)
  • Třetí vydání: 2012 (směrnice; pravidla, rozhodovatelné / nerozhodnutelné)
  • Soulad s MISRA: 2016

U prvních dvou vydání MISRA-C (1998 a 2004) byly všechny pokyny považovány za Pravidla. S vydáním MISRA C: 2012 byla zavedena nová kategorie pokynů - Směrnice jejichž dodržování je více otevřeno výkladu nebo se týká procesních nebo procesních záležitostí.

Přijetí

Ačkoli se MISRA C původně zaměřil na automobilový průmysl, vyvinul se jako široce přijímaný model osvědčených postupů předními vývojáři v odvětvích, jako je automobilový průmysl, letecký průmysl, telekomunikace, zdravotnické prostředky, obrana, železnice a další. Například:

  • The Joint Strike Fighter projektovat standardy kódování C ++[3] jsou založeny na MISRA-C: 1998.
  • The NASA Laboratoř tryskového pohonu Standardy kódování C.[4] jsou založeny na MISRA-C: 2004.
  • ISO 26262 Funkční bezpečnost - silniční vozidla uvádí MISRA C jako vhodnou podmnožinu jazyka C:
    • ISO 26262-6: 2011 Část 6: Vývoj produktu na softwarové úrovni[5] uvádí MISRA-C: 2004 a MISRA AC AGC.
    • ISO 26262-6: 2018 Část 6: Vývoj produktu na softwarové úrovni[6] cituje MISRA C: 2012.
  • The AUTOSAR Obecná specifikace softwaru (SRS_BSW_00007) rovněž cituje MISRA C:
    • Obecná specifikace softwaru AUTOSAR 4.2[7] to vyžaduje Pokud je implementace modulu BSW napsána v jazyce C, musí odpovídat standardu MISRA C: 2004.
    • Obecná specifikace softwaru AUTOSAR 4.3[8] to vyžaduje Pokud je implementace modulu BSW napsána v jazyce C, musí odpovídat standardu MISRA C: 2012.

Klasifikace a kategorizace pokynů

Při zahájení nového softwarového projektu by měl být použit nejnovější standard MISRA. Předchozí standardy jsou stále k dispozici pro použití se staršími softwarovými projekty, na které je třeba odkazovat.[9]

Klasifikace

Každý pokyn je klasifikován[10] tak jako Povinné (novinka pro MISRA C: 2012), Požadované nebo Poradní. Dokument MISRA Compliance dále umožňuje Poradní pokyny, které mají být Nespokojen.

  • Povinné pokyny musí být vždy dodržovány
  • Požadované pokyny musí být dodrženy, pokud se na ně nevztahuje Odchylka
  • Poradní pokyny jsou považovány za dobrou praxi, ale dodržování je méně formální.

Kategorizace

Pravidla lze logicky rozdělit do několika kategorií:

  • Aby se předešlo možným rozdílům v kompilátoru, může se například velikost celého čísla C lišit, ale INT16 je vždy 16 bitů. (C99 standardizováno na int16_t.)
  • Vyhýbejte se používání funkcí a konstrukcí, které jsou náchylné k selhání, například malloc může selhat.
  • Produkovat udržovatelný a laditelný kód, například konvence pojmenování a komentování.
  • Pravidla osvědčených postupů.
  • Limity složitosti.

Rozsah

MISRA C: 2012 samostatně klasifikuje každou směrnici jako jednu z nich Singl Překladová jednotka nebo Systém.[10]

Rozhodnutelnost

MISRA C: 2012 klasifikuje pravidla (ale ne směrnice) tak jako Rozhodnutelné nebo Nerozhodnutelné.

Dosažení souladu

Soulad s MISRA

Publikované dokumenty MISRA poskytují další pokyny k pochopení a dosažení souladu s MISRA.

  • Soulad s MISRA: 2016, byla vydána společností MISRA v dubnu 2016.[11]
  • Soulad s MISRA: 2020, revidované vydání, vyšlo v únoru 2020.[12]

Dodržování

Aby mohla část softwaru tvrdit, že je v souladu s pokyny MISRA C, vše povinné pravidla musí být splněna a vše Požadované pravidla a směrnice musí být buď splněny, nebo podléhat formální odchylce. Poradní Pravidla mohou být bez formální odchylky zrušena, ale toto by mělo být stále zaznamenáno v projektové dokumentaci.

Poznámka: Pro účely dodržování předpisů se nerozlišuje mezi pravidla a směrnice.

Odchylky

Mnoho MISRA C pravidla lze charakterizovat jako pokyny protože za určitých podmínek se softwaroví inženýři mohou odchýlit od pravidel a přesto mohou být považováni za vyhovující standardu. Odchylky musí být zdokumentovány buď v kódu, nebo v souboru. Kromě toho; Musí být poskytnut důkaz, že softwarový inženýr vzal v úvahu bezpečnost systému a že odchylka od pravidla nebude mít negativní dopad, požadavky na odchylky zahrnují také:

  • Pravidlo se odchýlilo od.
  • Odůvodnění odchylky.[13]

Publikované dokumenty

MISRA C: 1998

První vydání MISRA C „Pokyny pro používání jazyka C v softwaru pro vozidla“, které vyšlo v roce 1998 a je oficiálně známé jako MISRA-C: 1998.[14]

MISRA-C: 1998 má 127 pravidel, z nichž je 93 požadovaných a 34 poradních; pravidla jsou očíslována v pořadí od 1 do 127.

MISRA C: 2004

V roce 2004 vyšlo druhé vydání "Pokyny pro používání jazyka C v kritické systémy„nebo MISRA-C: 2004 byl vytvořen s mnoha podstatnými změnami pokynů, včetně úplného přečíslování pravidel.

MISRA-C: 2004 obsahuje 142 pravidel, z nichž je 122 „požadovaných“ a 20 „poradních“; jsou rozděleny do 21 aktuálních kategorií, od „Prostředí“ po „Selhání za běhu“.

MISRA C: 2012

Hlavní dokument

V roce 2013 vyšlo třetí vydání, MISRA C: 2012. MISRA C: 2012 rozšiřuje podporu pro C99 verze jazyka C (při zachování pokynů pro C90), kromě zahrnutí řady vylepšení, která mohou snížit náklady a složitost dodržování předpisů a současně pomáhat konzistentnímu a bezpečnému používání jazyka C v kritických systémech.[15]

MISRA-C: 2012 obsahuje 143 pravidel a 16 „směrnic“ (tj. Pravidla, jejichž dodržování je více otevřeno výkladu nebo se týká procesních či procesních záležitostí); každý z nich je klasifikován jako povinné, Požadovanénebo poradní. Jsou samostatně klasifikovány jako buď Jedna překladová jednotka nebo Systém. Pravidla jsou navíc klasifikována jako Rozhodnutelné nebo Nerozhodnutelné.

Změna 1

V dubnu 2016 zveřejnila MISRA (ke stažení zdarma) MISRA C: 2012 - Změna 1: Další bezpečnostní pokyny[16] který přidal čtrnáct nových bezpečnostní pokyny.

Podpůrné dokumenty

MISRA vydaly následující dodatky na podporu MISRA C: 2012:

  • MISRA C: 2012 - Dodatek 1: Mapování pravidel[17], který obsahuje obousměrné mapování pravidel mezi MISRA C: 2004 a novou verzí. Má pomoci uživatelům při migraci.
  • MISRA C: 2012 - Dodatek 2: Pokrytí MISRA C: 2012 podle ISO / IEC TS 17961: 2013 „C Secure“[18]
  • MISRA C: 2012 - Dodatek 3: Pokrytí MISRA C: 2012 proti CERT C[19]

Příklad sady

Ukázková sada (pro MISRA-C: 2004 a MISRA C: 2012) je k dispozici v MISRA GitLab[20] úložiště. To umožňuje uživatelům nástrojů vyhodnotit a porovnat podporu kontroly poskytovanou různými nástroji MISRA; navíc poskytuje implementátorům nástrojů určité pokyny ohledně záměru pokynů MISRA.

Nástroje

I když existuje mnoho softwarových nástrojů, které tvrdí, že kontrolují kód pro „shodu MISRA“, neexistuje žádný proces certifikace MISRA.[21]

Většinu pokynů lze zkontrolovat pomocí nástrojů, které fungují statická analýza kódu. Zbývající pokyny vyžadují použití dynamická analýza kódu.

Mezi nástroje, které kontrolují shodu kódu s MISRA, patří:

Překladače C / C ++, které podporují shodu MISRA, zahrnují:

Kritika

Některé výsledky výzkumu zpochybňují účinnost MISRA.

V článku, který srovnává dřívější práce o MISRA C: 1998 s MISRA C: 2004, Les Hatton dochází k závěru, že:[27]

S ohledem na zjevný rozšiřující se vliv standardu MISRA C se tento článek pokouší posoudit, zda byly uspokojivě vyřešeny důležité nedostatky v původním standardu. Bohužel nemají a důležitý poměr reálného k falešně pozitivnímu není v MISRA C 2004 mnohem lepší než v MISRA C 1998 a v obou je nepřijatelně nízký.

Dále uvádí:[27]

Ve své současné podobě se jediní lidé, kteří budou mít prospěch z aktualizace MISRA C 2004, zdají být prodejci nástrojů a je třeba doufat, že budou přijata opatření jak ke zjednodušení formulace, tak ke snížení poměru falešně pozitivních výsledků v budoucích revizích trochu více pozornosti zveřejněných experimentálních údajů a menšího pokušení vymýšlet pravidla na základě toho, že se jeví jako dobrý nápad.

Studie na TU Delft „Cathal Boogerd a Leon Moonen empiricky hodnotí hodnotu MISRA C: 2004. Došlo k podobným výsledkům:[28]

Ze získaných údajů můžeme provést následující klíčová pozorování. Za prvé, existuje 9 ze 72 pravidel, u nichž byla pozorována porušení, která při lokalizaci chybových linek fungují výrazně lépe (α = 0,05) než náhodný prediktor. Skutečné kladné sazby pro tato pravidla se pohybují od 24 do 100%. Zadruhé jsme pozorovali negativní korelaci mezi porušením pravidel MISRA a pozorovanými poruchami. Navíc 29 ze 72 pravidel mělo nulovou skutečnou kladnou míru. Společně s Adamsovým pozorováním, že všechny úpravy mají nenulovou pravděpodobnost zavedení poruchy, to umožňuje, že dodržování standardu MISRA jako celku by způsobilo, že software bude méně spolehlivý.

Viz také

Reference

  1. ^ „MISRA objasňuje bezpečné a bezpečné používání jazyka C.“. www.misra.org.uk. Citováno 2019-10-09.
  2. ^ Na jaře 1997 softwaroví inženýři v Skupina Austin Rover (ARG) zaslala návrh standardu kódování C společnosti Programming Research Ltd (PRL) ke kontrole. Kontrolu provedl tehdejší senior konzultant PRL David Blyth, který navrhl nahradit návrh znatelně silnější sadou kódovacích pravidel. Tato pravidla, s drobnými změnami, tvořila základ prvního vydání MISRA C.
  3. ^ „Společné standardy kódování C Strike Fighter Air Vehicle C ++“ (PDF). Citováno 2019-07-16.
  4. ^ „Standardy kódování NASA JPC C“ (PDF). Citováno 2019-07-16.
  5. ^ „ISO 26262-6: 2011 Silniční vozidla - Funkční bezpečnost - Část 6: Vývoj produktu na softwarové úrovni“. iso.org. ISO. Citováno 2019-07-16.
  6. ^ „ISO 26262-6: 2018 Road vehicles - Functional safety - Part 6: Development product at the software level“. iso.org. ISO. Citováno 2019-07-16.
  7. ^ „AUTOSAR 4.2 Obecná specifikace softwaru“ (PDF). autosar.org. Citováno 2019-07-16.
  8. ^ „AUTOSAR 4.3 Obecná specifikace základních softwarových modulů“ (PDF). autosar.org. AutoSAR. 2016-11-30. Citováno 2019-07-16.
  9. ^ Publikace MISRA
  10. ^ A b „Informační list: MISRA C: 2012 (PDF)“ (PDF). programmingresearch.com. Citováno 10. června 2013.
  11. ^ „Soulad s MISRA: 2016 (PDF)“. MISRA. Citováno 22. července 2016.
  12. ^ „Soulad s MISRA: 2020 (PDF)“. MISRA. Citováno 8. dubna 2020.
  13. ^ „Dosahování souladu s MISRA C: 2012“. Parasoft. Citováno 29. května 2017.
  14. ^ „Stručná historie MISRA C“. MISRA. 2013-03-18. Citováno 2014-06-30.
  15. ^ „Oznámeno datum vydání MISRA C: 2012“. MISRA. 26. února 2013. Citováno 10. června 2013.
  16. ^ „MISRA C: 2012 - Dodatek 1 (PDF)“. MISRA. Citováno 31. října 2019.
  17. ^ „MISRA C: 2012 - Dodatek 1: Mapování pravidel (PDF)“.
  18. ^ „MISRA C: 2012 - Dodatek 2: Pokrytí MISRA C: 2012 podle ISO / IEC TS 17961: 2013„ C Secure “(PDF)“.
  19. ^ „MISRA C: 2012 - Dodatek 3: Pokrytí MISRA C: 2012 oproti CERT C (PDF)“.
  20. ^ Úložiště MISRA GitLab
  21. ^ „Seznam MISRA C FAQ.“ Konsorcium MISRA
  22. ^ https://www.perforce.com/products/helix-qac
  23. ^ https://www.roguewave.com/company/news/2019/perforce-software-acquires-rogue-wave-software
  24. ^ https://www.perforce.com/products/klocwork
  25. ^ Kontrola shody MISRA, PC-lint / FlexeLint, Gimpel Software.
  26. ^ Jazyky a standardy; iar.com
  27. ^ A b Podmnožina jazyků v průmyslovém kontextu: srovnání MISRA C 1998 a MISRA C; Les Hatton; University of Kingston; 2004.
  28. ^ Hodnocení hodnoty kódovacích standardů: empirická studie; C. J. Boogerd a L. Moonen; Delft University of Technology; 2008.

externí odkazy