MISRA C - MISRA C

MISRA C je sada pokynů pro vývoj softwaru pro programovací jazyk C vyvinutá The MISRA Consortium . Jeho cílem je zajistit bezpečnost , zabezpečení , přenositelnost a spolehlivost kódu v kontextu vestavěných systémů , konkrétně systémů naprogramovaných v ISO C / C90 / C99 .

Tento článek také neobsahuje sadu pokynů pro MISRA C ++.

Dějiny

  • Předloha: 1997
  • První vydání: 1998 (pravidla, povinné/poradenské)
  • Druhé vydání: 2004 (pravidla, povinné/poradenské)
  • Třetí vydání: 2012 (směrnice; pravidla, rozhodnutelné/nerozhodnutelné)
  • Soulad s MISRA: 2016, aktualizováno 2020

U prvních dvou vydání MISRA-C (1998 a 2004) byly všechny Pokyny považovány za Pravidla. Vydáním MISRA C: 2012 byla zavedena nová kategorie pokynů - směrnice, jejíž shoda je otevřenější interpretaci nebo se týká procesních nebo procesních záležitostí.

Přijetí

Ačkoli byl původně speciálně zaměřen na automobilový průmysl, MISRA C se vyvinul jako široce přijímaný model osvědčených postupů předními vývojáři v sektorech včetně automobilového, leteckého, telekomunikačního, zdravotnického zařízení, obrany, železnice a dalších. Například:

  • Joint Strike Fighter projekt C ++ Kódovací standardy jsou založeny na Misra-C: 1998.
  • NASA Jet Propulsion Laboratory C Kódovací standardy jsou založeny na Misra-C: 2004.
  • ISO 26262 Funkční bezpečnost - Silniční vozidla uvádí MISRA C jako vhodnou podskupinu jazyka C:
    • ISO 26262-6: 2011 Část 6: Vývoj produktu na softwarové úrovni cituje MISRA-C: 2004 a MISRA AC AGC.
    • ISO 26262-6: 2018 Část 6: Vývoj produktu na softwarové úrovni cituje MISRA C: 2012.
  • AUTOSAR Specifikace General Software (SRS_BSW_00007) rovněž cituje MISRA C:
    • Obecná specifikace softwaru AUTOSAR 4.2 vyžaduje, že Pokud je implementace modulu BSW napsána v jazyce C, pak musí odpovídat standardu MISRA C: 2004.
    • Obecná specifikace softwaru AUTOSAR 4.3 vyžaduje, že Pokud je implementace modulu BSW napsána v jazyce C, pak musí odpovídat standardu MISRA C: 2012.

Klasifikace a kategorizace pokynů

Když je spuštěn nový softwarový projekt, měl by 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, které na ně musí odkazovat.

Klasifikace

Každý pokyn je klasifikován jako povinný (nový pro MISRA C: 2012), požadovaný nebo poradní . Kromě toho dokument MISRA o shodě umožňuje, že Poradní pokyny budou zrušeny .

  • Vždy musí být dodrženy povinné pokyny
  • Požadované pokyny musí být dodrženy, pokud nepodléhají odchylce
  • Poradní pokyny jsou považovány za správnou praxi, ale dodržování předpisů je méně formální.

Kategorizace

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

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

Rozsah

MISRA C: 2012 zvlášť klasifikuje každý směr buď jako jednotného překladatelského útvaru nebo systému .

Rozhodnutelnost

MISRA C: 2012 klasifikuje pravidly (ale ne směrnice ) jako rozhodnutelný nebo nerozhodnutelné .

Dosažení shody

Soulad s MISRA

Dokumenty publikované společností MISRA poskytují další pokyny k pochopení a dosažení souladu s MISRA.

  • MISRA Compliance: 2016 , byla vydána společností MISRA v dubnu 2016.
  • MISRA Compliance: 2020 , přepracované vydání, bylo vydáno v únoru 2020.

Dodržování

Aby mohl software prohlašovat, že je v souladu s pokyny MISRA C, musí být splněna všechna povinná pravidla a všechna požadovaná pravidla a směrnice musí být buď splněna, nebo podléhají formální odchylce. Poradní pravidla mohou být zrušena bez formální odchylky, ale toto by mělo být stále zaznamenáno v projektové dokumentaci.

Poznámka: Pro účely dodržování předpisů neexistuje žádný rozdíl mezi pravidly a směrnicemi .

Odchylky

Mnoho pravidel MISRA C lze charakterizovat jako směrnice, protože za určitých podmínek se softwaroví inženýři mohou od pravidel odchýlit a přesto je považovat za vyhovující normě. Odchylky musí být zdokumentovány buď v kódu, nebo v souboru. Navíc; musí být předložen důkaz, že softwarový inženýr zvážil bezpečnost systému a že odchylka od pravidla nebude mít negativní dopad, požadavky na odchylky také zahrnují:

  • Pravidlo se odchýlilo od.
  • Odchylka.

Publikované dokumenty

MISRA C: 1998

První vydání MISRA C, „Guidelines for the use of the C language in vehicle based software“, který byl vydán v roce 1998 a je oficiálně známý jako MISRA-C: 1998 .

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

MISRA C: 2004

V roce 2004 bylo vydáno druhé vydání „Pokyny pro používání jazyka C v kritických systémech “ neboli MISRA-C: 2004 s mnoha zásadními změnami v pokynech, včetně úplného přečíslování pravidel.

MISRA-C: 2004 obsahuje 142 pravidel, z nichž 122 je „povinný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 na verzi C99 jazyka C (při zachování pokynů pro C90), kromě toho obsahuje řadu vylepšení, která mohou snížit náklady a složitost dodržování předpisů a současně napomáhat konzistentnímu a bezpečnému používání C v kritických oblastech systémy.

MISRA-C: 2012 obsahuje 143 pravidel a 16 „směrnic“ (tj. Pravidel, jejichž dodržování je otevřenější interpretaci nebo se týká procesních nebo procesních záležitostí); každý z nich je klasifikován jako povinný , požadovaný nebo poradní . Jsou samostatně klasifikovány jako jedna překladová jednotka nebo systém . Pravidla jsou navíc klasifikována jako Rozhodnutelná nebo Nerozhodnutelná .

Změna 1

V dubnu 2016 MISRA zveřejnila (zdarma ke stažení) MISRA C: 2012 - dodatek 1: Další bezpečnostní pokyny, které přidaly čtrnáct nových bezpečnostních pokynů.

Změna 2

V únoru 2020 společnost MISRA zveřejnila (zdarma ke stažení) MISRA C: 2012 - dodatek 2: Aktualizace základní funkce ISO/IEC 9899: 2011/18, která přidává mapování nedefinovaných, nespecifikovaných a implementací definovaných chování v rámci C11/C18.

Podpůrné dokumenty

MISRA zveřejnila následující dodatky k podpoře MISRA C: 2012:

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

Příklad sady

Příkladná sada (pro MISRA-C: 2004 a MISRA C: 2012) je k dispozici v úložišti MISRA GitLab (je nutné přihlášení). 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, pokud jde o záměr pokynů MISRA.

Nástroje

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

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

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

Mezi kompilátory C/C ++, které podporují shodu s MISRA, patří:

Kritika

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

V dokumentu, který porovnává dřívější práci na MISRA C: 1998 s MISRA C: 2004, Les Hatton dochází k závěru, že:

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

Dále uvádí:

V současné podobě se zdá, že jediní lidé, kteří mají prospěch z aktualizace MISRA C 2004, jsou prodejci nástrojů a lze doufat, že budou přijata opatření jak pro zjednodušení formulace, tak pro snížení falešně pozitivního poměru v budoucích revizích přijetím trochu více upozornění na publikovaná experimentální data a menší pokušení vymyslet 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. Dochází k podobným výsledkům:

Ze získaných dat můžeme učinit 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 linek souvisejících se závadami fungují výrazně lépe (α = 0,05) než náhodný prediktor. Skutečné kladné sazby pro tato pravidla se pohybují od 24 do 100%. Za druhé, pozorovali jsme negativní korelaci mezi porušováním pravidel MISRA a pozorovanými chybami. Navíc 29 ze 72 pravidel mělo nulovou skutečnou kladnou sazbu. Spolu s Adamsovým pozorováním, že všechny modifikace mají nenulovou pravděpodobnost vzniku chyby, to umožňuje, že dodržování standardu MISRA jako celku by způsobilo, že software bude méně spolehlivý.

Viz také

Reference

externí odkazy