C a C++ jsou nejrozšířenější jazyky pro vývoj embedded softwaru. Nedávný výzkum VDC ukázal, že jazyk C používá více než 70 % z dotazovaných výrobců embedded systémů a C++ používá 42 % výrobců. V současné době je jazyk C implementován prakticky na každý procesor a i díky tomu je dnes k dispozici široká škála zdrojů a knihoven, podporovaná velkým množstvím nástrojů.
Při programování v jazyce C však mohou vývojáři udělat i řadu chyb. Napsat kód, který může mít za následek selhání celé aplikace či její nedefinované chování, je až příliš snadné. Nejběžnějším příkladem je kód, který přistupuje k paměti mimo hranice pole, nebo aritmetické operace, které mají za následek přetečení celého čísla.
Obecným trendem k eliminaci kritických míst v kódu je používání tzv. Coding Standard. Zjednodušeně řečeno se jedná o definici souboru ustálených kódových standardů. Přestože použití jednotného stylu zápisu může být v rámci jednoho daného projektu užitečné, nijak to neřeší další důležité atributy kvality softwaru, jakými jsou spolehlivost, přenositelnost a další udržovatelnost kódu. Základní úlohou kódových standardů je definovat soubor pravidel, která eliminují vznik rizikových struktur.
Kódové instrukce MISRA tyto principy bezpečného vývoje integrují a po celém světě jsou akceptovány jako standard pro návrh bezpečného kódu v jazycích C a C++. Jejich širokému rozšíření pomohla rovněž jejich přehledná a dobře čitelná struktura. Nedávný průzkum provedený na 500 respondentech (Ganssle, 2014) ukázal některé zajímavé údaje o míře použití kódových standardů. V první řadě to bylo zjištění, že asi 60 % všech používaných kódových standardů vychází právě ze standardu MISRA. Rovněž bylo zajímavé zjištění, že pravidla kódování na bázi MISRA zásadně využívá až 75 % vývojových týmů, zatímco v případě jiných pravidel je to méně než 50 %.
Kódové standardy MISRA obsahují obecně akceptované pokyny pro vývoj v jazycích C a C++. Tyto pokyny se zaměřují především na otázky, které jsou důležité při vývoji kritických softwarových systémů. V některých situacích je však striktní použití standardů MISRA nevhodné, nebo dokonce nemožné, a tak je občas nutné se od některých pravidel odchýlit. V případě takové odchylky se uvádí důvod, proč není v souladu s konkrétním kódovým pravidlem a jaké okolnosti k tomu vedly. Součástí je i zdůvodnění a popis, do jaké míry nebylo konkrétní pravidlo dodrženo, a obsahuje správně sestavené opatření, které zmírňuje účinky způsobené odchýlením se od pravidel.
Pokud by rozsah nedodržení standardu nebyl pečlivě popsán, mohla by být odchylka špatně pochopena, nebo dokonce zneužita a v konečném důsledku by pak ohrozila celkovou účinnost dodržení standardu.
Tak jako vytvoření kódových standardů vyžaduje objektivní a dobře srozumitelný přístup, důvody pro odchýlení se od těchto pravidel vyžadují rovněž správnou interpretaci a přesně definovaný rozsah jejich použití. Při řešení tohoto úkolu měl a stále má dominantní úlohu automobilový průmysl. Jak asociace MISRA (Motor Industry Software Reliability Association), tak také Japonská automobilová asociace výrobců (JAMA), zahájily proces pro přesné stanovení podmínek, za kterých lze akceptovat určité odchylky od standardu MISRA.
Hlavním cílem je přitom definovat soubor možných odchylek a jejich pravidel, které budou mít pevně definovaný rozsah. Prvním a zároveň nejdůležitějším krokem je potřeba roztřídění široké škály důvodů pro odchylky od pouhého nedodržování pravidel.
Rozdělením odchylek do následujících kategorií se stávají problémy s dodržením standardu více zřejmé. Tato kategorizace navíc chrání standardní zaměření kódu před použitím nevhodné odchylky a oslabení kódové struktury.
Kategorizace různých důvodů pro použití odchylek je prvním krokem k vytvoření řádné struktury kódu. To vede přirozeně k vypracování všech konkrétních známých případů odchylek řazených podle pravidel a podle kategorií. MISRA a JAMA jsou dobře zdokumentované, popisující sadu pravidel omezení rozsahu působnosti, vždy s podrobným odůvodněním a připojenou bezpečnostní dokumentací.
Tyto iniciativy jsou důležité dokonce i mimo automobilový průmysl. Kódový standard MISRA byl sice původně určen pro automobilový průmysl, ale od svého vzniku se rozšířil i v mnoha jiných embedded systémech, od spotřebitelských produktů po lékařská zařízení, průmyslové řídicí systémy až po EDA. Zavedení řízené odchylky je však stejně tak důležité pro udržení struktury kódu i ve všech jiných standardizačních organizacích, které je přijaly.
Standardní způsob kódování bez použití automatizovaných nástrojů, správného auditu a tvorby zpráv produkuje obvykle dále nevyužívané knihovny. Výchozím bodem pro příslušné automatizované nástroje statické analýzy musí být přesnost diagnostického výstupu, srozumitelnost a zodpovězení každé položené otázky a také podrobná evidence kroků každé další verze softwarového projektu.
Ale i prostředí s použitím automatizovaného nástroje potřebuje mít informace o aplikaci schválených odchylek. Obě pravidla pro kódování a řízení odchylek musí být vhodná pro vývojáře, důvěryhodná pro vedení týmu a musí usnadňovat podrobné vykazování QA.
Základní systém řízení odchylky bude vázat každé porušení pravidel na daný typ odchylky, která je podporována, přičemž zachová toto uspořádání po celou dobu životnosti příslušného zdrojového kódu. Požadavky jsou náročnější v případě, kdy se jedná o řízené, kontrolované odchylky. Každá změna příslušných kódovacích pravidel musí vzít v potaz platnost přísnějších omezení a v rámci kontrolovaného nastavení odchylek nemůže dojít k dalšímu potlačení pravidel. Při výběru konkrétního místa kódu, kde má být potlačeno diagnostické hlášení, musí být vývojář omezen pouze na potlačení v rámci povoleného rozsahu řízených odchylek.
Kódové standardy MISRA C jsou synonymem pro bezpečné a defenzivní použití jazyka C v mnoha embedded systémech i mimo ně. Při komplexním a rozsáhlém restriktivním využívání jazyka C se systém řízení odchylky jeví jako akceptovatelná nutnost. V tomto článku jsme zkoumali kategorie odchylek a přiblížili si, jak oprávněné jsou specifické důvody pro jejich použití v průmyslu. Dnes jsou k dispozici plně sofistikované a automatizované nástroje pro podporu řízení odchylek, stejně jako možnosti generování hlášení a další elementy pro řešení shody se standardy.
Fergus Bolger je CTO ve společnosti Programming Research Ltd (PRQA). Získal tituly B.E. a Masters of Engineering na University College Dublin. Vztah společnosti PRQA ke standardům MISRA sahá téměř 20 let do minulosti. Hlavní pravidla obou standardů, MISRA-C i MISRA-C++, byla odvozena z vlastních kódových standardů firmy PRQA a její odborníci zůstávají i nadále klíčovými členy pracovních skupin MISRA-C a MISRA-C++.