Databasetesten bestaat uit black-box-testen, white-box-testen en ACID (atomiciteit, consistentie, isolatie en duurzaamheid). In deze handleiding geef ik definities, uitleg en voorbeelden.
Wat zijn databasetesten?
Databasetesten, back-endtesten of datatesten verschillen van de tegenhanger voor de gebruikersinterface doordat ze zich helemaal niet bezighouden met de visuele interface van de systeemsoftware. De belangrijkste taak is controleren of alle interne processen correct worden uitgevoerd en gegevens snel, nauwkeurig en veilig kunnen ophalen.
Bij databasetesten worden het databaseschema, de tabellen en de triggers van de database getest. De database wordt zwaar belast en er kunnen complexe query's worden uitgevoerd om de mogelijkheden en reactiesnelheid grondig te testen. Ook databasebeheersystemen (DBMS) zoals Oracle en SQL Server worden getest.
Gerelateerd artikel: DE POSITIEVE RESULTATEN VAN NEGATIEF TESTEN
Wat is een databaseschema?
Een databaseschema is een logische structuur die de organisatie en relaties van gegevens binnen een database definieert. Het beschrijft de blauwdruk voor de manier waarop gegevens in een DBMS worden opgeslagen, benaderd en bewerkt. Het schema beschrijft de gegevenstypen, beperkingen en relaties tussen database-entiteiten, zoals tabellen, weergaven, indexen en triggers.
Het databaseschema is essentieel om de integriteit en consistentie van gegevens binnen een database te waarborgen. Het biedt ontwikkelaars en databasebeheerders een raamwerk om gegevens op een betekenisvolle manier te organiseren en structureren. Het helpt er ook voor te zorgen dat de gegevens in de database aan specifieke vereisten voldoen, zoals gegevensvalidatie, gegevensbeveiliging en gegevenstoegankelijkheid. Organisaties kunnen een databaseschema gebruiken om organisatie en optimalisatie in hun databases te waarborgen voor efficiënt gegevensbeheer, betere bedrijfsprocessen en betere besluitvorming.
Waarom zijn databasetesten belangrijk?
Databasetesten zijn belangrijk omdat
- Sommige bugs kunnen alleen via databasetesten worden gevonden
- Bepaalde gebruiksomstandigheden kunnen alleen met databasetests worden getest
- Databasetesten verbeteren de stabiliteit en beveiliging
- Databasetesten waarborgen de consistentie
Voorbeeld van een databasefunctie
Stel je voor dat je een app voor online bankieren op je telefoon opent (of open de app voor online bankieren daadwerkelijk op je telefoon). Maak nu een klein bedrag over van je betaalrekening naar je spaarrekening. Denk er na afloop over na hoeveel dingen er in die paar seconden achter de schermen moesten gebeuren.
- De app stuurde de transactiegegevens naar de database.
- Geen van je gegevens (oftewel GELD) is onderweg verloren gegaan.
- De app is niet vastgelopen en heeft de overdracht voltooid.
- De transactie vond veilig plaats.
- Je geld staat nu comfortabel op je spaarrekening (gefeliciteerd!)
Al die functies vinden plaats binnen de database. Het databasetestproces is belangrijk omdat het systeem bij een kritieke storing van een databasesysteem tot stilstand komt. Er kan dan geen informatie worden verzonden, opgehaald, overgedragen of beveiligd. De applicatie lijkt aan de oppervlakte misschien te werken (je kunt door vensters navigeren en je voorbereiden op transacties), maar er gebeurt niets met daadwerkelijke gevolgen.
Aan de buitenkant ziet alles er goed uit, maar intern is het een ramp.

Databasetesten zorgen ervoor dat er geen ramp plaatsvindt. Geen brand, geen stilstand en geen ontbrekend geld. Het is in ieders belang dat databasetesten worden uitgevoerd. Daarom heb ik een uitgebreide handleiding geschreven waarmee je erop kunt vertrouwen dat alles grondig is getest zodra je klaar bent.
Principes van databasetesten
Het woord ‘principes’ klinkt misschien eerder als een uitleg van het waarom dan van het hoe. Geloof me, dit zijn twee belangrijke, praktische concepten.
- ACID-eigenschappen
- Atomiciteit
- Consistentie
- Isolatie
- Duurzaamheid
- Gegevensintegriteit
Wat zijn ACID-eigenschappen?
Dit is de veiligste vorm van zuur die je ooit zult gebruiken. Handschoenen zijn niet nodig; de ACID-eigenschappen staan voor Atomiciteit, Consistentie, Isolatie en Duurzaamheid. Elke afzonderlijke transactie bij databasetesten moet aan deze principes voldoen.
Een transactie is een groep taken. Zelfs een eenvoudige transactie uit de echte wereld, zoals de bankoverschrijving die ik eerder noemde, omvat verschillende taken van een lagere orde. De ACID-eigenschappen zijn bedoeld om te bevestigen dat elke transactie nauwkeurig, volledig en integer wordt voltooid.
ACID-eigenschappen
- Atomiciteit stelt dat elke transactie moet worden behandeld als een atomair geheel. In niet-moleculaire termen betekent dit dat elke transactie volledig moet worden voltooid, anders mislukt deze. Door elke transactie op deze manier te behandelen, wordt de rommelige situatie voorkomen waarin een geldoverdracht slechts gedeeltelijk wordt voltooid. Dat klinkt stressvol, nietwaar? Dankzij atomiciteit mislukt de hele transactie als deze halverwege is voltooid wanneer er iets misgaat. Geld terug. Geen stress.
- Consistentie vereist dat de database na een transactie consistent blijft. Geen enkele transactie mag andere gegevens in de database negatief beïnvloeden. Als je geld op je bankrekening stort, wordt er niets van de rekening van iemand anders afgeschreven.
- Isolatie voorkomt dat gegevensstromen elkaar kruisen. Dit zorgt ervoor dat bij meerdere transacties die tegelijkertijd plaatsvinden, elke transactie wordt behandeld alsof deze de enige transactie in de database is. Niemand krijgt zijn gegevens vermengd met de gegevens van anderen.
- Duurzaamheid vereist dat de database duurzaam genoeg is om alle meest recente transacties te bewaren, zelfs als er een systeemstoring optreedt. Ook hiervoor zijn praktische redenen om een dergelijke duurzaamheid van een database te eisen. Als je geld overmaakt en de database tien minuten later uitvalt, hoe zou je dan weten dat je de overschrijving opnieuw moet uitvoeren? Dergelijke strenge vereisten voorkomen verwarring aan de kant van eindgebruikers.
Gegevensintegriteit
Gegevensintegriteit is het proces waarbij wordt gecontroleerd of alle meest recente gegevens overal zijn bijgewerkt. Er zijn vier afzonderlijke onderdelen die samen bevestigen dat de gegevens integer zijn. Voor een hoog niveau van gegevensintegriteit moet een QA-tester bevestigen dat:
- De gegevens verifieerbaar zijn
- De gegevens opvraagbaar zijn
- De gegevens nauwkeurig zijn
- De gegevens volledig zijn
Als de gegevens niet aan die vier vereisten voldoen, voldoen ze waarschijnlijk niet aan de norm voor gegevensintegriteit. Tools voor gegevensbeheer kunnen hierbij helpen, maar uiteindelijk is het aan jou om de hoogst mogelijke gegevenskwaliteit te waarborgen.
Zoals Huw Price aangaf in de aflevering van de podcast De QA Lead met de titel Je gegevenskwaliteit is waardeloos, wordt het steeds belangrijker om ervoor te zorgen dat je systemen draaien op hoogwaardige, veilige gegevens, naarmate steeds meer bedrijven hun eigen gegevensbanken opbouwen.
Datamanipulatietaal
Een datamanipulatietaal (DML) is een programmeertaal die wordt gebruikt om gegevens binnen een databasebeheersysteem te manipuleren. DML wordt voornamelijk gebruikt voor taken zoals het invoegen, bijwerken, verwijderen en ophalen van gegevens uit een database. In wezen biedt DML een reeks opdrachten en functies waarmee gebruikers met gegevens in een database kunnen werken en deze gegevens volgens specifieke criteria kunnen wijzigen of ophalen. DML is een essentieel onderdeel van elk databasesysteem, waarmee gebruikers bewerkingen op gegevens kunnen uitvoeren zonder de onderliggende structuur of technologie van de database te begrijpen.
DML-opdrachten worden doorgaans gebruikt in combinatie met een databasedefinitietaal (DDL), die wordt gebruikt om databaseobjecten zoals tabellen, weergaven en indexen te maken en te wijzigen. DDL en DML vormen de kernonderdelen van een databasesysteem, waarmee gebruikers gegevens op een veilige, efficiënte en betrouwbare manier kunnen maken, wijzigen en manipuleren. Dankzij het gebruik van DML bij databasebeheer kunnen organisaties grote hoeveelheden gegevens opslaan, beheren en analyseren, waardoor het een cruciaal hulpmiddel is voor bedrijven in de huidige datagedreven wereld.
Soorten databasetests
Nu we twee van de kernprincipes van databasetests hebben behandeld, kunnen we doorgaan met verschillende testtypen. Je hebt waarschijnlijk al eerder van sommige van deze benaderingen gehoord. Onthoud dat ik inderdaad zei dat je, als je QA-testen begreep, zonder problemen databasetests zou kunnen leren. Hier leg ik uit hoe elk van deze concepten van toepassing is op databasetests.
Er zijn drie soorten databasetests:
- Structureel
- Functioneel
- Niet-functioneel
Binnen die drie soorten databasetests bestaan subtypen. Maak je geen zorgen, die leg ik ook uit.
Structureel testen
Bij structureel testen worden elementen binnen de gegevensopslag gevalideerd die worden gebruikt voor het opslaan van gegevens. Deze elementen zijn verborgen voor eindgebruikers en werken volledig achter de schermen. Databasetesters voeren deze tests uit door SQL-query's te schrijven.
Gegevenstoewijzing testen
Het in kaart brengen van gegevensstructuren is het proces waarbij verbindingen tussen twee verschillende gegevensmodellen worden vastgesteld. Een test voor gegevenstoewijzing, die ook wel schematest wordt genoemd, valideert de frontend en de backend. Deze test zorgt ervoor dat de twee goed met elkaar communiceren.
Als je bijvoorbeeld een registratieformulier op een website invult, zorgt een correcte gegevensmapping ervoor dat het webformulier wordt overgezet naar de database. Je naam, e-mailadres en wachtwoord worden opgeslagen waar dat hoort. Testen van gegevensmapping bevestigt dat dit proces werkt.
Er zijn verschillende tools voor gegevensmapping waarmee een QA-tester werkt. Een korte lijst met tools voor gegevensmapping omvat:
Testen van databasetabellen
Bij het testen van tabellen worden verschillende controles uitgevoerd op de structuur van de gegevensmapping. Er wordt gecontroleerd of de velden aan de voor- en achterkant compatibel met elkaar zijn. Ook wordt de lengte van de databasevelden gevalideerd. Daarnaast wordt gecontroleerd of er niet-gekoppelde databasetabellen of -kolommen zijn die je moet aanpakken.
Validatie van de databaseserver
Servervalidaties zorgen ervoor dat de serverconfiguratie aan de vereisten voldoet. Ook wordt gecontroleerd of iedereen die toegang probeert te krijgen tot bepaalde delen van de databaseserver over de juiste autorisatie beschikt. Dit is een belangrijke stap om de database veilig en beveiligd te houden voor zijn gebruikers. Tot slot zorgt de servervalidatie ervoor dat de server het maximale aantal transacties tegelijk kan verwerken.
Een servervalidatie voor een bankierenapp zou bijvoorbeeld controleren of de server de financiële transacties van een bepaald aantal gebruikers kan verwerken en of alle gebruikers alleen toegang hebben tot hun eigen gegevens.
Functioneel testen
We brengen het plezier terug in functioneel testen. Echt waar. Bij functioneel testen draait alles om controleren of de database voldoet aan de specificaties van de klant en of de handelingen van de eindgebruiker overeenkomen met die vereisten. Dat betekent dat je je vaak moet voordoen als de eindgebruiker. Klinkt dat niet leuk? Ik vind het leuk klinken.
Black-boxtesten
Black-boxtesten is een strategie voor het testen van software waarbij het ontwerp van het geteste softwaresysteem onbekend is bij de tester. Zonder diepgaande kennis van het ontwerp van de software benadert de tester de software met verwachtingen die vergelijkbaar zijn met die van de eindgebruiker.
Black-boxtesten wordt uitgevoerd tijdens het testen van databases omdat hiermee fouten worden gevonden in veelgebruikte paden die de eindgebruiker waarschijnlijk tegenkomt. Het is de ultieme testrun als eindgebruiker.
We hebben black-boxtesten uitgebreid behandeld in onze gids over 9 soorten softwaretests die elke QA-analist moet kennen.
White-boxtesten
White-boxtesten is het tegenovergestelde van black-boxtesten. Bij white-boxtesten begrijpt het QA-teamlid de interne structuur en het ontwerp van de geteste software volledig.
De test wordt benaderd als een inspecteur. White-boxtesten wordt soms clear-boxtesten genoemd, omdat de tester tijdens het testen van de software de interacties tussen eenheden observeert. In tegenstelling tot bij black-boxtesten houdt een white-boxtester zich veel minder bezig met de gebruikerservaring.
Unittesten
Unittesten is een techniek voor het testen van software waarbij afzonderlijke eenheden of componenten van een applicatie geïsoleerd van de rest van het systeem worden getest. Bij dit testtype worden afzonderlijke databaseobjecten getest, zoals tabellen, weergaven, opgeslagen procedures en functies. Door deze objecten afzonderlijk te testen, kunnen ontwikkelaars controleren of elk object werkt zoals bedoeld.
Unittests voor databases bestaan doorgaans uit het schrijven van geautomatiseerde tests die specifieke SQL-opdrachten uitvoeren op een databaseobject of -module en controleren of de verwachte resultaten worden geretourneerd. Bij een unittest voor een opgeslagen procedure kunnen bijvoorbeeld een aantal invoerparameters aan de procedure worden doorgegeven, waarna wordt gecontroleerd of de uitvoer correct is. Door unittests op deze manier te gebruiken, kunnen ontwikkelaars controleren of elk databaseobject naar verwachting werkt en of wijzigingen in het databaseschema of de programmacode geen onbedoelde gevolgen of fouten veroorzaken.
Niet-functioneel testen
Bij niet-functioneel testen draait het helemaal niet om de eindgebruiker. Niet omdat de eindgebruiker niet belangrijk is. Die heeft simpelweg andere dingen om zich zorgen over te maken. Niet-functionele tests controleren de prestaties van de database onder belasting en stress en zoeken naar mogelijkheden om de prestaties te optimaliseren.
Belastingtesten
Databaseloadtesten zijn een type prestatietest van databases waarbij wordt gecontroleerd of de gebruikersbelasting geen dramatisch negatieve invloed heeft op de databaseprestaties. De QA-tester voert een reeks laadquery's uit en herhaalt deze steeds opnieuw om een actieve gebruikersgroep te simuleren.
Stresstesten
Stresstests zijn laadtests, maar dan intensiever. Ze willen niet zien of de database trager wordt, maar waar deze defect kan raken. Dit is veel destructiever. Dus dat is leuk.
Heb je ooit reikhalzend uitgekeken naar de release van een nieuwe videogame of telefoon? Als dat zo is, ben je misschien bekend met het laden van de website of het openen van de app om je aankoop te doen, om vervolgens te worden geconfronteerd met ongewoon lange laadschermen, onverwachte foutcodes en problemen bij het verwerken van je gegevens. Dat is een database die onder stress staat.
Het verschilt van loadtesten, omdat de database wordt blootgesteld aan een plotselinge, onverwacht grote hoeveelheid verkeer.
Geautomatiseerd testen van databases
Geautomatiseerd testen van databases is de afgelopen jaren steeds populairder geworden. Het handmatig testen van de database zou te veel tijd kosten, te veel mensen vereisen en simpelweg te veel geld kosten.
Er zijn veel manieren om geautomatiseerd te testen. Hier volgt een lijst met enkele databasebeheertools die testfuncties bieden.
Een database testen met een API
Een API (applicatieprogrammeerinterface) is een reeks protocollen en standaarden waarmee verschillende softwaretoepassingen met elkaar kunnen communiceren. Bij het testen van databases kan een API verbinding maken met een database en verschillende bewerkingen uitvoeren, zoals het invoegen, bijwerken, verwijderen en ophalen van gegevens.
De relatie tussen een API en het testen van databases is dat API's kunnen worden gebruikt om het testproces te automatiseren en te stroomlijnen. Door een API te gebruiken om verbinding te maken met een database, kunnen testers taken zoals het invoegen, bijwerken en verwijderen van gegevens automatiseren en query's uitvoeren om gegevens op te halen en resultaten te valideren. Dit kan de tijd en moeite die nodig zijn voor handmatig testen aanzienlijk verminderen en de nauwkeurigheid en consistentie van testresultaten verbeteren.
Aanvullende bronnen
Na het lezen van dit artikel zou je moeten begrijpen hoe je databasetests uitvoert. Natuurlijk is het onmogelijk om absoluut alles in één artikel te behandelen. Hier zijn twee aanvullende bronnen die je kunnen helpen specifieke problemen te overwinnen.
- Een regressietest voor een relationele database uitvoeren
- Een prestatietest uitvoeren op een SQL Server-instantie
Wat vind jij?
De verantwoordelijkheid krijgen voor het testen van een database kan aanvoelen als een grote verantwoordelijkheid. Ik heb er alle vertrouwen in dat je dit aankunt. Voel je je zekerder over je aanpak van het testen van databases? Laat het me weten in de reacties!
