Antwoord.
Achtergrond van de vraag:
Testdekking (test coverage) is een van de belangrijkste kwaliteitsmetrics van testen. Dekkingstrategieën zijn ontstaan in de vroege dagen van automatisering, toen het aantal tests snel begon te groeien en het onmogelijk werd om handmatig niet-gedekte scenario's bij te houden. Sindsdien zijn de benaderingen geëvolueerd van intuïtieve naar strikte analytische methoden, inclusief het gebruik van traceerbaarheidseisen, code coverage tools en het beheer van de testpyramide.
Probleem:
- Evenwichtige en doordachte testdekking is een uitdaging vanwege de verschillende testtypes (unit, integratie, E2E), hun uitvoeringstijden, onderhoudskosten en de noodzaak om een balans te vinden tussen ROI en het risico op gemiste defecten.
- Vaak is er een valse indruk van volledige bescherming alleen op basis van een hoog percentage code-dekking, terwijl "hiaten" in de bedrijfslogica of gebruiksscenario's worden genegeerd.
Oplossing:
- Het is nodig om een combinatie van verschillende technieken te gebruiken: code coverage, traceability matrix, risk-based testing.
- Het is belangrijk om de strategie af te stemmen met het ontwikkelingsteam en de bedrijfsvoering om de werkelijke prioriteiten te begrijpen.
- Een belangrijke praktijk is het regelmatig auditen van de dekking (handmatig en automatisch), het aanpassen van prioriteiten en het afzien van het idee van "honderd procent code-dekking" ten gunste van een meer doordachte, scenario-gebaseerde en risico-georiënteerde aanpak.
Belangrijke kenmerken:
- Gebruik van verschillende soorten dekking: statement, branch, condition, feature, requirements coverage.
- Integratie van traceability matrix en code coverage voor maximale volledigheid.
- Regelmatige herziening van de strategie en automatische rapportage.
Vragen met een valstrik.
Kan een hoog percentage code-dekking de kwaliteit van het product volledig garanderen?
Nee, dat kan niet. Een hoog percentage code-dekking (bijvoorbeeld 95%) betekent vaak dat alleen bepaalde delen van de code door tests zijn "doorgelopen", maar garandeert niet de validiteit van de bedrijfslogica of gebruiksscenario's.
Moet je altijd streven naar 100% code-dekking?
Nee. Het streven naar honderd procent dekking verhoogt de onderhoudskosten en vereist soms het schrijven van tests voor onbeduidende of onbereikbare delen. Het is beter om prioriteiten te stellen op basis van risico en voordeel.
Is het voldoende om alleen unit-tests te gebruiken voor betrouwbare dekking?
Nee. Unit-tests dekken geen integratiescenario's en interactie tussen componenten. Verschillende testtypes moeten worden gecombineerd volgens de testpiramide.
Typische fouten en anti-patronen
- Blinde ambitie voor een hoog percentage code-dekking
- Negeert dekking van gebruiksscenario's en eisen
- Geen betrokkenheid van het bedrijfsteam bij het bepalen van dekprioriteiten
- Alle tests van één type: alleen unit of alleen E2E
Voorbeeld uit het leven
Negatief geval
Het team heeft een pipeline geïmplementeerd met een verplicht 90% testdekking voor elke pull request. Uiteindelijk kwamen er "lege" tests die alleen regels dekten, maar geen scenario's. Fouten in de bedrijfslogica bleven onopgemerkt.
Voordelen:
- Snelle voldoening aan een formeel criterium
- Motivatie om meer tests te schrijven
Nadelen:
- Tests vangen geen echte bugs
- Technische schuld groeit, het team verliest vertrouwen in de tests
Positief geval
Het team heeft een dekkingstrategie opgebouwd met behulp van traceability matrix en risk-based testing: de meest kritieke functionaliteit is gedekt door E2E, minder belangrijke onderdelen door unit-tests. Een keer per maand wordt de dekking op scenario's geaudit.
Voordelen:
- Kritieke scenario's zijn altijd beschermd
- Minder bugs bereiken de gebruikers
- Tests zijn onderhoudbaar en echt nuttig
Nadelen:
- Vereist tijd voor audits en revisies
- Het is nog steeds mogelijk dat zeldzame, niet-berokkende scenario's optreden.