Een systeemtest is een test waarbij testers (of in de Agile wereld projectmedewerkers die testwerkzaamheden uitvoeren) vaststellen of de opgeleverde programmatuur juist en volledig werkt conform de vooraf afgesproken functionele documentatie.
Het testproces en de systeemtest
In de praktijk zijn er veel kreten die door elkaar gebruikt worden, maar grofweg zijn de testsoorten in drie “fasen” te ondervangen:
- De unit testen (ook wel “ontwikkelaarstesten” genoemd) waarbij de programmeur of ontwikkelaar zelf een aantal testen uitvoert. Focus hierbij ligt op de techniek en de werking van het stukje software dat de ontwikkelaar ontwikkelt of gewijzigd heeft;
- De systeemtest waarbij (in de traditionele waterval projecten) de tester vaststelt of de ontwikkelaar de functionaliteit juist heeft gebouwd. Focus ligt hierbij op de functionele werking van het systeem;
- De acceptatietesten waarbij (een vertegenwoordiging van) de eindgebruikers vaststellen of het systeem past binnen de bedrijfsprocessen van de organisatie.
Het verloop van de systeemtest
In de traditionele trajecten is een systeemtest een belangrijke fase waarin vastgesteld wordt of de functionaliteit juist en volledig is. Om tot een gedegen oordeel daarover te komen, dienen de volgende stappen doorlopen te worden, idealiter nader uitgewerkt in een systeemtestplan:
- Planningsfase waarin exacte opdracht(afbakening) gemaakt wordt, randvoorwaarden afgesproken worden en een tijdsplan opgesteld wordt. Als er een testplan gemaakt wordt, wordt dat in deze fase gedaan;
- Beheerfase, welke feitelijk gelijk start met de fase planning en doorloopt tot het einde van het project. In deze fase wordt de voortgang bewaakt, risico management gedaan en worden de systeemtest rapportages opgesteld met als laatste document een testrapport waarin aangegeven wordt of er een positief of eventueel een negatief advies is n.a.v. de uitgevoerde testen;
- Infra fase, deze fase begint na de planningsfase en loopt tot het einde van het traject. Belangrijkste activiteit is het specificeren, regelen en onderhouden van de benodigde test infrastructuur inclusief koppelvlakken, testtools en dergelijke;
- Voorbereidingsfase is de fase waarin uitgangsdocumentatie, ook wel testbasis genoemd, verzameld en vastgesteld wordt;
- Specificatiefase is de fase waarin testgevallen en testsituaties nader uitgewerkt worden. Om de systeemtesten zo gedegen en grondig mogelijk te laten verlopen wordt vooraf beschreven of er speciale informatie in het systeem aanwezig moet zijn en tevens wordt de verwachte uitkomst beschreven. Uiteraard zijn hierop afwijkingen mogelijk afhankelijk van beschikbare tijd, budget en de mate waarin de documentatie aan verandering onderhevig is;
- Uitvoerfase start als de programmatuur opgeleverd wordt en als de (vooraf) uitgewerkte testen uitgevoerd worden. Van geconstateerde verschillen worden bevindingen aangemaakt. Deze bevindingen worden beoordeeld of enerzijds de programmatuur aangepast moet worden, de systeemtester een foutieve aanname heeft gedaan of dat eventueel de documentatie aangepast dient te worden. De mate waarin dit proces formeel gemaakt wordt hangt af van de duur van het project, de organisatie en de beschikbare tijd. Wenselijk is de oplevering vanuit de ontwikkelaars geautomatiseerd te doen om installatie fouten te voorkomen. Tevens is het wenselijk een “hand-over” te doen waarbij de ontwikkelaars een korte demo geven van wat er opgeleverd is. Dit om foute aannames te voorkomen, feitelijk is dit een variant op de “witness-testen”;
- Afrondingsfase is de afsluitende fase waarin met name een stukje leren en evalueren gedaan wordt. Ook wordt de testdocumentatie geborgd. Er wordt gekeken of de documentatie volledig is en indien mogelijk herbruikbaar gemaakt.
Systeemtest in een Agile wereld
In een Agile traject wordt er (ook) een functionele test, en dus ook een systeemtest uitgevoerd. Met als belangrijkste twee verschillen dat alle hierboven genoemde activiteiten onderdeel zijn van de diverse sprints en dat de rol tester minder expliciet is dan tijdens een waterval traject.