Softwaretooling - Error!
Softwaretooling - Error!
Softwaretooling - Error!
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
50 | 3<br />
Achtergrond Codeerstandaarden<br />
Eenieder die C-code klopt voor missiekritieke<br />
embedded systemen heeft een<br />
goede kans dat hij zich moet houden<br />
aan de Misra-standaarden: een set restricties<br />
waarmee het iets moeilijker wordt om<br />
veelgemaakte fouten ook daadwerkelijk te<br />
begaan. Oorspronkelijk werd de standaard<br />
opgesteld door een groep Britse leveranciers<br />
in de automotivesector, maar ondertussen<br />
zijn de richtlijnen tot ver buiten deze markt<br />
verspreid. Uit een recente inventarisatie<br />
van VDC Research bleek dat de helft van de<br />
bedrijven die een codeerrichtlijn gebruiken<br />
hun eigen standaard ontwikkelen, maar<br />
daarna is Misra-C veruit het populairst met<br />
een aandeel van bijna achttien procent. Bovendien<br />
zijn de interne richtlijnen vaak ook<br />
weer op Misra-C gebaseerd.<br />
De Misra-richtlijnen werden oorspronkelijk<br />
in 1998 gepubliceerd en in 2004<br />
aangepast aan de voortschrijdende inzichten.<br />
Dat gebeurt nu opnieuw: op 18 maart<br />
is de Misra-C:2012-richtlijn gepubliceerd.<br />
Bits&Chips sprak met Paul Burden van Programming<br />
Research, dat onder meer tools<br />
ontwikkelt om broncode op het naleven<br />
van Misra en andere codeerstandaarden te<br />
controleren. Als lid van het standaardisatiecommité<br />
was Burden betrokken bij de ontwikkeling<br />
van de nieuwe versie.<br />
Wat doet de Misra-standaard<br />
eigenlijk precies?<br />
‘Misra is een set regels om op een defensieve<br />
manier code te schrijven, zodat de<br />
kans kleiner wordt dat je bugs introduceert<br />
– het soort bugs dat je niet met een tool<br />
kunt vinden. De standaard voorkomt dat je<br />
code produceert die weliswaar valide is in C,<br />
maar waarschijnlijk wel fout.’<br />
Nieuw setje duimschroeven voor<br />
missiekritieke programmeurs<br />
Misra is een van de populairste richtlijnen voor C-code om bugs te vermijden. Na<br />
acht jaar kwam half maart de nieuwe versie uit, onder meer met ondersteuning voor<br />
C:99. Misra-specialist Paul Burden van Programming Research legt uit wat de standaard<br />
precies behelst en wat er allemaal is veranderd in de 2012-versie.<br />
Pieter Edelman<br />
Kunt u een voorbeeld geven?<br />
‘Er is een simpele regel die betrekking<br />
heeft op het for-statement. Als je na de drie<br />
controle-expressies per ongeluk een puntkomma<br />
schrijft, is dat compleet valide in<br />
C, want een puntkomma is een statement<br />
Paul Burden van Programming Research<br />
werkte mee aan de nieuwe Misra-versie.<br />
op zichzelf – het null-statement dat niks<br />
doet. Maar het is in potentie een bug, zelfs<br />
zeer waarschijnlijk een bug. Dus een van de<br />
Misra-regels is dat er op een for-statement<br />
altijd een samengesteld statement tussen<br />
accolades moet volgen. Dat voorkomt ook<br />
dat je een enkel ingesprongen statement<br />
als blok kunt gebruiken. Daarmee kun je de<br />
mist in gaan als je een extra statement wilt<br />
toevoegen aan je loop-body.’<br />
‘Codeerregels beperken je ook in de operaties<br />
die een grote kans hebben om fout te<br />
zijn. Het is in C bijvoorbeeld toegestaan om<br />
een negatieve waarde toe te kennen aan een<br />
unsigned variabele, maar dat is niet verstandig<br />
om te doen.’<br />
Het zijn dus allemaal regels die makkelijk<br />
met een tool te controleren zijn?<br />
‘De meeste wel. Een codeerstandaard<br />
heeft alleen zin als je kunt controleren of<br />
die wordt nageleefd. Maar er is een onderscheid<br />
tussen wat we noemen rules en<br />
directives. De meeste codeervoorschriften<br />
zijn eigenschappen van de broncode,<br />
dat zijn harde rules. Van alle 143 van deze<br />
regels in de nieuwe 2012-standaard kan<br />
een tool zeggen of ze worden nageleefd<br />
door simpelweg naar de broncode te kijken.<br />
Er zijn echter ook voorschriften waarover<br />
een tool niet simpel een beslissing kan nemen.<br />
Misra-C verbiedt het bijvoorbeeld<br />
om een stuk code te inactiveren met commentaarsymbolen.<br />
Een probleem met een<br />
dergelijke regel is dat een tool daarvoor het<br />
commentaar moet analyseren en beslissen<br />
of dat C-code is of niet. Voor ons is dat eenvoudig,<br />
maar voor de tool is dat erg lastig.<br />
Die geeft bij zo’n voorschrift een subjectief<br />
oordeel in plaats van een zwart-witbeslissing.<br />
Daarom noemen we dat een directive.<br />
In Misra-C:2012 zijn er zestien van dergelijke<br />
richtlijnen.’<br />
Waarom is er nu een nieuwe versie?<br />
‘Er zijn twee belangrijke redenen. Een: we<br />
zagen ruimte voor verbetering, en twee: