Automatische tests toevoegen aan een reeds bestaande applicatie
Door Stan DaniëlsVan een PHP-applicatie wil je natuurlijk de werking kunnen garanderen; dat het systeem doet wat het hoort te doen en zo min mogelijk bugs bevat. Daarnaast dient bij elke iteratie gecontroleerd worden of alles nog steeds naar behoren werkt. Daarvoor moet de applicatie getest worden, zodat hierover een uitspraak gedaan kan worden. Het testen van een applicatie kan ten eerste op twee manieren uitgevoerd worden: handmatig en automatisch.
Verschil tussen handmatig en automatisch testen
Handmatig testen is een menselijke vorm van testen. Simpelweg zit er een persoon aan een computer die door een applicatie heen klikt, verschillende opties probeert en invoervelden invult. Aan de hand van een controlelijst controleert hij/zij of het resultaat overeenkomt met de verwachtingen.
Automatisch testen wordt door een computer uitgevoerd. Hiervoor wordt gebruik gemaakt van een tool die vooraf opgenomen acties in gecontroleerde omgevingen afspeelt en de resultaten daarvan vergelijkt met de verwachtingen. Elke taak van een automatische test legt een andere route af in de applicatie. Automatische tests zijn sneller dan handmatige. Wanneer deze tests ingericht zijn kunnen ze daarnaast makkelijk en snel herhaald worden.
Testen van de applicatie is noodzakelijk
Waar kun je nu als beste beginnen als je een applicatie voor ogen krijgt die nog niet getest wordt? Allereerst wordt geen enkele applicatie niet getest. Daarbij moet ik denken aan een tweet van @stahnma uit 2015
”Everybody has a testing environment. Some people are lucky enough to have a totally separate environment to run production in.“
Hiermee wordt bedoeld dat elke applicatie getest wordt, zij het niet door de eindklant. Het liefst ben je dit voor en test je zelf om te voorkomen dat een klant last heeft van bugs. Of erger nog, van bugs misbruik kan maken. Daarom is er vaak een soort van staging-omgeving aanwezig waarbij handmatig de belangrijkste en/of nieuwste functionaliteiten worden doorlopen om te controleren of er fouten optreden.
Het moment van handmatig naar automatisch testen
Het lijkt nu aannemelijk dat automatisch testen een essentieel onderdeel is van softwareontwikkeling , om zo op lange termijn tijd en geld te besparen. Toch krijgt automatisch testen niet van alle organisaties een hoge prioriteit. Zie bijvoorbeeld start-ups die op een korte termijn met maximaal rendement een applicatie neer moeten zetten. Zij nemen de nadelen van enkel handmatig testen voor lief. Echter, wanneer een applicatie succesvol is, een langere levensloop heeft dan verwacht of meer en onverwachte features krijgt neemt de last voor het handmatig testen alleen maar toe.
Wanneer handmatig testen zo veel tijd kost dat het niet meer in verhouding is met de opbrengsten, is het punt waarop automatisch testen een must is bereikt. Hoe kun je automatisch testen op dat moment introduceren?
Automatisch testen stap voor stap introduceren
Allereerst zijn er verschillende soorten tests te onderscheiden. De applicaties van INOVA bevatten meestal een combinatie van unit tests, integration tests, end-to-end tests, acceptance tests en static analysis. Wat deze precies inhouden lees je in de blog ‘Verschillende soorten tests voor een PHP-applicatie’.
End-to-end en acceptance tests zijn een goed startpunt om automatische tests toe te voegen aan een bestaande codebase. Echter is deze soort een van de traagste en ten tweede zijn vaak niet alle test-cases volledig te automatiseren. Op dat moment kan de volgende stap genomen worden: het toevoegen van integration tests. Als er een functionaliteit getest wordt waarbij gecheckt wordt dat een e-mail na een bepaalde actie verstuurd en ontvangen wordt, kan het eerste deel geautomatiseerd worden. Bijvoorbeeld: “als gebruiker x en daarna y uitvoert wordt e-mail z verstuurd”. Deze zelfde stappen kunnen daarna herhaald worden met a of b i.p.v. x. Hierdoor kan bij veel van de handmatige tests een aantal stappen worden overgeslagen.
Unit tests zijn vaak lastiger te introduceren. Want als er geen unit tests aanwezig zijn, is de code vaak niet geschreven met geïsoleerd testen in het achterhoofd. Hiervoor zal de code gerefactord moeten worden. Dit is mogelijk doordat end-to-end en integration tests aanwezig waardoor de high-level de functionaliteit gewaarborgd wordt. Het is ook mogelijk om eerst static analysis toe te voegen zodat geïnventariseerd wordt of functies, methodes en classes accepteren en retourneren wat ze horen te accepteren en te retourneren en op deze manier low-level bugs te ontdekken.
Op deze manier kun je stapsgewijs automatische tests toevoegen aan een bestaand project en kun je met vertrouwen het project laten groeien.
Voor meer informatie neem gerust contact op met mij: stan@teaminova.nl.