20.09.2013 Views

Softwaretooling - Error!

Softwaretooling - Error!

Softwaretooling - Error!

SHOW MORE
SHOW LESS

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:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!