Testen? Dat is toch niet nodig als je goed bouwt?

Geschreven door Eibert Dijkgraaf

Gepubliceerd op 01 oktober 2014

Kent u zo iemand? Of, misschien bent u er zelf wel één? Die niet alleen denkt, maar ook nog hardop zegt dat dat hele testgedoe overbodig zou moeten zijn? Als we het nou gewoon ‘ns in één keer goed doen?
De gedachte is niet nieuw, maar bestaat al zolang de tester geld vraagt voor zijn werk. En…, misschien is het wel waar? Als niemand fouten maakt, waarom zou je dan nog willen testen?

Als niemand fouten maakt.

Tja, dat is nogal wat. Het gaat daarbij  natuurlijk niet alleen om goed bouwen, maar ook om goed ontwerpen. Want ‘build as designed’ kan toch tot vervelende situaties leiden.
En verder kijkend: hoe zit het met de requirements? Zijn ze wel eenduidig, helder, goed omschreven en stabiel? Iedere vorm van instabiliteit op dit vlak of iedere vorm van multi-interpretabel is een potentiële fout.
Maar, toegegeven, met een hoge mate van professionaliteit, punctualiteit en communicatie kan er heel goed worden gescoord. Helemaal als je een oneindige zak met geld tot je beschikking hebt en niet de druk ervaart van een verplichte go-live datum.
De werkelijkheid wordt lastiger als politieke afwegingen en andersoortige belangen mee gaan spelen. Denk aan contractvormen tussen demand en supply, integratie in ketens met verschillende organisaties, maatwerk-implementaties van standaardpakketten, met een continue stroom van ongevraagde updates, etc.
Wie durft er nog te zeggen dat er in de huidige heksenketel foutloos gewerkt kan worden?

Als je dit gaat beseffen, kom je uit bij de basisvraag: waar is testen voor bedoeld? Als u zich bij het begin aangesproken voelde omdat u “zo’n iemand” bent of kent, dan is de kans groot dat u het volgende antwoord ook herkent: Testen is nodig om fouten te vinden en op te lossen.
Als er geen fouten zijn, hoef je dus ook niet te testen.
Tja, daar zit een kern van waarheid in. Echter, hoe weet je nu zeker dat er geen fouten zijn…? Vooruit, een multiple-choice om het te vergemakkelijken.
Antwoord a: door te testen…! Zelfs ik als tester zeg dan: NEE. Als tester mag je nooit concluderen dat ergens geen fouten meer inzitten. Conform het oude gezegde “Eén dwaas kan meer vragen dan duizend wijzen kunnen beantwoorden” geldt ook dat één software systeem al gauw tot een oneindig aantal testcombinaties kan leiden. Je kunt daarom niet alles testen.
Antwoord b: door fouten te voorkomen…! Dat klinkt beter, maar hoe weet je dat dat gelukt is?
antwoord c: dat weet je nooit zeker. Volgens mij het enige juiste antwoord.
We herhalen daarom de basisvraag: waar is testen voor bedoeld?
Testen is een proces dat inzicht geeft in en adviseert over de kwaliteit en de daaraan gerelateerde risico’s.
Met testen kun je dus aantonen of iets werkt (onder bepaalde omstandigheden). Dit is interessant als je je risico’s wil beperken. Het maakt dan helemaal niet zo veel uit of je wel of geen fouten vind. Ergo, het argument dat er foutloos geprogrammeerd is, wordt daarmee veel minder spannend.
Conclusie: het gaat niet om ‘no fault; no test’ , maar om ‘no risk; no test’.
Tot zover de theorie; maar hoe zit dat dan in de praktijk? Dagelijks zijn er problemen in het nieuws, waarbij (gebrekkige?) software een cruciale rol speelt. Foutloos programmeren lijkt wat dat betreft eerder een utopie.
Er zijn wel interessante onderzoeken gaande om in de toekomst de code volledig geautomatiseerd te controleren op fouten. Als men dat eenmaal goed in de vingers heeft, dan zou de stap naar foutloze software niet groot meer zijn.
Ik kom toch tot een andere conclusie. Dergelijke onderzoeken zien software als een separaat stuk code. Dat wordt getest op basis van allerlei standaard regeltjes. In de praktijk echter is automatisering een wirwar geworden van verschillende ICT-systemen die op allerlei manieren aan elkaar geknoopt worden. Keteninformatisering, Cloud services, Big data etc. maken dat systemen niet meer afzonderlijk beoordeeld kunnen worden op hun werking. Daarnaast worstelt men al decennia lang om klantwensen zodanig te specificeren dat dit leidt tot de software die de klant wenst. Dit soort fouten zullen niet op het niveau van broncode ontdekt kunnen worden.
Testen blijft dus noodzaak. Echt waar? De vooroorlogse generatie is met bovenstaande nog niet altijd overtuigd. Mijn vader, als representant van die generatie, zegt dan: als die computers vastlopen, doe je het maar gewoon met je handen. Voor hem heb ik de volgende foto gemaakt. Voor mij het ultieme bewijs van onze afhankelijkheid van goed werkende ICT:

pinstoring 300x234 - Testen? Dat is toch niet nodig als je goed bouwt?

Schrijf een reactie

Gerelateerde artikelen