Softwaretests zijn niet afdoende. Dat zegt hoogleraar Jan Friso Groote van Technische Universiteit Eindhoven. Hij leidt daar de faculteit Systeemontwerp en is gespecialiseerd in de softwareveiligheid van ingebedde systemen. 'Als iemand zegt: de software is door en door getest, dan moet je in de lach schieten. Want dat kan niet.'
'Door software te testen, zul je nooit alle mogelijke fouten kunnen ontdekken.' De hoogleraar rekent voor dat het onmogelijk is de software onder alle mogelijke omstandigheden te testen. 'Stel je een systeem voor met twintig sensoren, die elk twee mogelijke waarden kunnen aannemen. Dan is het aantal mogelijke situaties gelijk aan 2 tot de twintigste macht. Dat zijn ruim een miljoen mogelijke situaties.'
Softwareverificatie
Volgens de hoogleraar kan software het best worden getest door het geautomatiseerd analyseren van een vereenvoudigde model van de software.
Daarnaast is het belangrijk dat aan universiteiten ontwikkelde softwareverificatiesystemen gemakkelijker toepasbaar worden in de praktijk. 'Technisch gezien is het al lang mogelijk om foutloze software te maken, via prototype verificatiesystemen zoals Coq en PVS. Die technieken bestaan al in een algemene vorm. Maar er ligt een innovatiegat tussen de universiteiten die deze technieken ontwikkelen en de ontwikkelaars die ermee in de praktijk moeten werken. Daardoor zijn er nog geen praktisch inzetbare tools.'
Die komen er ook waarschijnlijk niet snel, zo vreest Groote. 'Het probleem is dat zowel universiteiten als bedrijven de mankracht niet hebben om praktische verificatietools te ontwerpen. Wetenschappers hebben niet het budget om tientallen manjaren te bouwen aan dat soort tools. En de onderzoeklabs binnen grote bedrijven zijn bijna allemaal weggesaneerd.'
Software-eisen
Daarnaast zijn goede softwarespecificaties essentieel bij het voorkomen van programmeerfouten: 'Wat wil je dat de software wel doet, en wat juist niet?'
'Softwarespecificaties zijn vaak vaag, inconsistent en ze bevatten fouten. Een voorbeeld van een vage omschrijving is: de software moet gebruiksvriendelijk zijn. Daaruit kan een programmeur niet opmaken of hij een bepaald edit-veldje wel of niet moet aanmaken, hoe competent hij ook is.'
Hierdoor ontstaat volgens Groote 'een cultuur waarin programmeurs systemen bouwen naar eigen inzicht en steeds minder acht slaan op softwarespecificaties. Dat leidt tot een enorme verspilling van programmeerinspanningen en een slechte software-architectuur.'
Hoe inefficiënt die werkwijze is, illustreert Groote aan de hand van een metafoor: 'Stel je de bouw van een huis voor aan de hand van een onduidelijke schets. Stel je voor dat de aannemer desondanks begint met de bouw van het huis. Het gevolg: hak- en breekwerk, omleggen van leidingen, de constructie van extra steunpilaren, Kortom: enorme vertragingen en een gebrekkige architectuur.'
Agile ontwikkeling
Agile ontwikkeling helpt ook niet bij het voorkomen van programmeerfouten, aldus Groote. Bij deze ontwikkelmethode worden tussenversies weliswaar grondig getest, maar de methode staat volgens Groote de bouw van een gedegen software-architectuur in de weg. Opnieuw komt Groote met een huismetafoor om zijn stelling te verduidelijken: 'Het in korte sprintjes ontwerpen van je huisinrichting is prima te doen, maar een heel flatgebouw bij elkaar scrummen is heel andere koek.'
Het zijn een aantal open deuren die ingetrapt worden in dit verhaal.
Al tijden is het duidelijk dat het meerendeel van de academische ideeen rond software ontwikkeling en software testen in het geheel niet aansluiten op de huidige IT industrie.
Ik kan niet veel anders dan het roerend eens zijn met Anko’s commentaar: alle drie de voornaamste punten welke Jan Friso noemt zijn waar.
Een aantal van de voorbeelden door Jan Friso aangehaald zijn heel erg theoretische voorbeelden. De specs zo slecht als hij hier aanhaalt heb ik in mijn bijna 15 jaar in de IT not niet gezien en ik heb redelijk wat erbarmelijke specificaties gezien. Elke software ontwikkelaar of tester met enig zelf respect zal zulke specificaties ook niet accepteren, laat staan ermee aan de gang gaan.