De zin en onzin van code coverage

Veel ontwikkelteams zijn trots op hun code, er zijn weinig bugs en de code coverage is bijna 100%. Kan hiermee gezegd worden dat de kwaliteit van de code goed is? Na het lezen van dit artikel weet je wat de zin en onzin is van een (hoge) code coverage en welke conclusies je wel of niet mag trekken.

Wat is code coverage?

Cove coverage betekent hoe goed jouw testset jouw code test. Hierbij wordt vaak in een percentage aangegeven hoeveel regels van code wordt uitgevoerd bij alle tests. Bij een coverage van 90% betekent het dus dat 10% van de code niet door tests worden uitgevoerd. De coverage meet 4 aspecten van de code:

  1. Statements, worden alle if paden uitgevoerd?
  2. Branches, zijn alle if-else paden uitgevoerd?
  3. Functions, worden alle functies / methods aangeroepen?
  4. Lines, worden alle regels code uitgevoerd?

Wat is code coverage niet?

De meest gemaakte fout van code coverage is dat het wordt gebruikt als doel. Code coverage is geen doel, maar een tool die je helpt om inzicht te krijgen hoeveel code wordt getest. Een hoge coverage zegt in principe niets over de kwaliteit van de code. Bij een applicatie met een coverage van 100% is het zeker mogelijk dat er bugs ontstaan.

Code coverage zegt nauwelijks iets over de kwaliteit van de code. Een applicatie is niet direct slecht als er een lage coverage is, of juist goed als er een hoge coverage is.

Code coverage zegt niets over de kwaliteit van testen. De coverage geeft alleen aan hoeveel er getest is, niet of de tests daadwerkelijk goed controleren of de code doet wat het moet doen.

Omgaan met code coverage?

Nu we weten dat de coverage nauwelijks invloed heeft op de kwaliteit van de geschreven code is een logische vraag of code coverage dan wel gebruikt moet worden. Code coverage helpt ontwikkelteams zeker, zo kan per applicatie bijvoorbeeld worden bepaald dat er een minimale effort gestoken moet worden in het testen van code. Door de coverage bij elke toevoeging te meten kun je dit nagaan. Als team zou je dus kunnen afspreken dat 75% van de regels die worden geschreven door een test moeten worden uitgevoerd.

Daarnaast brengt de code coverage gamification mee in het ontwikkelproces. Gamification is het toevoegen van spelelementen aan alledaagse processen. Doordat er een percentage / rapportcijfer wordt gegeven aan elke testtoevoeging zijn programmeurs eerder geneigd om tests te schrijven.

Het belangrijkste om te onthouden van het introduceren van een code coverage is om te weten dat de coverage niets zegt over de kwaliteit van code, maar alleen aangeeft hoeveel code er wordt uitgevoerd bij de tests.