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:
- The AUTOSAR Obecná specifikace softwaru (SRS_BSW_00007) rovněž cituje MISRA C:
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ří:
- Astrée podle Abs
- Apartmá Axivion Bauhaus Axivion GmbH. MISRA C: 2004, C: 2012, C: 2012 Dodatek 1, C ++: 2008, Shoda: 2016.
- CodeSonar podle GrammaTech
- Krytí podle Synopsys - Statická analýza
- Cppcheck - Otevřený zdroj statické analýzy pro C / C ++
- ECLAIR od BUGSENG
- Goanna Red Lizard Software - softwarový analytický nástroj pro C / C ++.
- Helix QAC podle Software Perforce. MISRA C: 1998, C: 2004, C: 2012, C ++: 2008.[22]
- Klocwork podle Rogue Wave Software (nyní ve vlastnictví společnosti Perforce Software[23]). MISRA C: 2012, C: 2012 Změna 1, C ++: 2008.[24]
- Testovací lože LDRA podle Liverpool Data Research Associates
- Test Parasoft C / C ++ od společnosti Parasoft
- PC-Lint od společnosti Gimpel Software. MISRA C: 1998, C: 2004, C: 2012, C ++: 2008.[25]
- Polyprostor podle MathWorks
- PVS-Studio systémy ověřování programů
- SonarQube podle SonarSource (Otevřený zdroj s některými komerčními zásuvnými komponentami)
- SQuORE od Squoring Technologies
- Rozumět podle SciTools
Překladače C / C ++, které podporují shodu MISRA, zahrnují:
- Software Green Hills
- Systémy IAR - MISRA C: 1998, C: 2004, C: 2012, C ++: 2008.[26]
- ÚKOLY - MISRA C: 1998, C: 2004, C: 2012.
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
- ^ „MISRA objasňuje bezpečné a bezpečné používání jazyka C.“. www.misra.org.uk. Citováno 2019-10-09.
- ^ 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.
- ^ „Společné standardy kódování C Strike Fighter Air Vehicle C ++“ (PDF). Citováno 2019-07-16.
- ^ „Standardy kódování NASA JPC C“ (PDF). Citováno 2019-07-16.
- ^ „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.
- ^ „ISO 26262-6: 2018 Road vehicles - Functional safety - Part 6: Development product at the software level“. iso.org. ISO. Citováno 2019-07-16.
- ^ „AUTOSAR 4.2 Obecná specifikace softwaru“ (PDF). autosar.org. Citováno 2019-07-16.
- ^ „AUTOSAR 4.3 Obecná specifikace základních softwarových modulů“ (PDF). autosar.org. AutoSAR. 2016-11-30. Citováno 2019-07-16.
- ^ Publikace MISRA
- ^ A b „Informační list: MISRA C: 2012 (PDF)“ (PDF). programmingresearch.com. Citováno 10. června 2013.
- ^ „Soulad s MISRA: 2016 (PDF)“. MISRA. Citováno 22. července 2016.
- ^ „Soulad s MISRA: 2020 (PDF)“. MISRA. Citováno 8. dubna 2020.
- ^ „Dosahování souladu s MISRA C: 2012“. Parasoft. Citováno 29. května 2017.
- ^ „Stručná historie MISRA C“. MISRA. 2013-03-18. Citováno 2014-06-30.
- ^ „Oznámeno datum vydání MISRA C: 2012“. MISRA. 26. února 2013. Citováno 10. června 2013.
- ^ „MISRA C: 2012 - Dodatek 1 (PDF)“. MISRA. Citováno 31. října 2019.
- ^ „MISRA C: 2012 - Dodatek 1: Mapování pravidel (PDF)“.
- ^ „MISRA C: 2012 - Dodatek 2: Pokrytí MISRA C: 2012 podle ISO / IEC TS 17961: 2013„ C Secure “(PDF)“.
- ^ „MISRA C: 2012 - Dodatek 3: Pokrytí MISRA C: 2012 oproti CERT C (PDF)“.
- ^ Úložiště MISRA GitLab
- ^ „Seznam MISRA C FAQ.“ Konsorcium MISRA
- ^ https://www.perforce.com/products/helix-qac
- ^ https://www.roguewave.com/company/news/2019/perforce-software-acquires-rogue-wave-software
- ^ https://www.perforce.com/products/klocwork
- ^ Kontrola shody MISRA, PC-lint / FlexeLint, Gimpel Software.
- ^ Jazyky a standardy; iar.com
- ^ A b Podmnožina jazyků v průmyslovém kontextu: srovnání MISRA C 1998 a MISRA C; Les Hatton; University of Kingston; 2004.
- ^ Hodnocení hodnoty kódovacích standardů: empirická studie; C. J. Boogerd a L. Moonen; Delft University of Technology; 2008.
externí odkazy
- Oficiální webové stránky
- „Úvod do MISRA C“. embedded.com.
- „MISRA C: Bezpečnější je lepší“. Časopis Electronic Design.
- „Komentář k prvnímu vydání pokynů MISRA C“. knosof.co.uk.
- „Nová verze MISRA C: Proč by vás to mělo zajímat?“. Časopis Electronic Design.
- „MISRA C: 2012: Spousta dobrých důvodů ke změně“. Časopis Electronic Design.
- „Informační list MISRA C: 2012“ (PDF). programmingresearch.com.
- „MISRA C: 2012 zajišťuje bezpečnost automobilového softwaru“. Časopis EE Times.
- „Soulad s MISRA C: Generování kódu“. Mathworks.