Het belang van software testen

Afgelopen semester heb ik een blok over testen gehad. Nu wist ik natuurlijk allang wat het inhield en hoe het ongeveer ging, maar de precieze details wist ik nog niet. Plus ik heb geleerd hoe ik automatisch een programma kan testen als er een model van dat programma is (en dat is er lang niet altijd, maar áls het er is, dan kan ik het). Dat is héél erg nuttig, hoewel je bij die manier van testen snel aanloopt tegen de vraag: “zit de fout in het programma of in het model?”. Maar als je het eenmaal weet, wordt sowieso één van beiden beter.

Maar wat is nou eigenlijk het belang van software testen? Het is sowieso héél erg belangrijk, want elke fout kan leiden tot een heleboel problemen: van ontevreden klanten tot dode mensen. Dat eerste kan bijvoorbeeld gebeuren als een website niet goed getest is en de klanten kunnen er niet goed gebruik van maken. Dat tweede bij vliegtuigen, want je wil niet weten hoeveel software daar aan boord is. En níemand kan garanderen dat die software helemaal foutvrij is.

Dat is het grote nadeel aan testen: je kan nooit zeker weten dat alles werkt, hoe goed je ook test. Zelfs bij een super simpel programma zijn er al een heleboel mogelijke scenario’s. Stel je kan één getal invoeren en daar komt één getal uit (bijvoorbeeld het ingevoerde getal plus één, dus je geeft 6 en er komt 7 uit): ga je dan alle getallen testen? Maar wat is alle getallen? Als je bij 1 begint, kan je jaaaaren doorgaan en nog kan je zeggen dat je minimaal één getal nog niet hebt gedaan. Stel dat je bij 293.723.948.739.487.234 bent geëindigd, dan heb je 293.723.948.739.487.235 niet gedaan. Dit is een simpel voorbeeld en hierbij test je maar één ding: invoer die je wil accepteren. Er is ook nog invoer die je niet wil accepteren (letters, woorden, symbolen, meerdere getallen, etcetera). Bij testen maak je dus keuzes in wat je test en wat niet. Je zegt bijvoorbeeld: “ik wil -1, 0 en 1 sowieso testen, want die liggen op de grens van positieve getallen dus misschien gebeurd daar iets interessants”. Je maakt aannames op basis van je kennis, aannames die héél goed kunnen zijn, maar toch kan je altijd iets missen.

Het probleem van testen is dat je eigenlijk nooit blij bent met het resultaat. Als je een programma héél goed hebt getest en er komt uit dat er geen fouten inzitten,  moet je je afvragen of je wel goed genoeg hebt getest, want in elk programma zitten fouten (ook in software van vliegtuigen). Als je een programma hebt getest en je vindt duizenden fouten, is je directe leidinggevende niet blij, want die moet ervoor zorgen dat al die fouten ook weer worden opgelost. Jij als tester kost dus alleen maar geld: als je test zonder fouten te vinden, is het “verspilde moeite”. Als je test en je vindt fouten, moet er geld worden besteed om die fouten op te lossen.

Natuurlijk kan je bij een stukje software ergens wat tekst zetten op welke manieren het is getest en hoeveel fouten er gevonden plus opgelost zijn. Maar wie kijkt daar nou echt naar? Wie zou het snappen als er technische termen gebruikt worden? Minder dan 1% van de wereld, gegarandeerd. In softwarebedrijven valt de keuze tussen een oude functionaliteit testen en een nieuwe functionaliteit ontwikkelen te vaak op het laatste. Veel software is niet uitgebreid getest en bevat zeker weten een hele hoop fouten die grote gevolgen kúnnen hebben, als ze ooit gevonden worden.

Dit bericht is geplaatst in de categorie Beta. Bookmark de permalink.

Geef een reactie

Jouw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *