Papers we love: Test coverage

Test coverage: meer dekking levert geen beter test suite op?
De paper die ik deze mand uit wil lichten is een recente uit 2014. Hij heet ‘Coverage is not strongly correlated with test suite effectiveness [1] en is ook weer vrij beschikbaar. De paper doet, zoals de titel doet vermoeden, een vrij harde claim over de relatie tussen test coverage en kwaliteit van de testsuite. Dat geeft wel te denken: vinden wij, als engineers, dat je kwaliteit kunt afleiden van de hoeveelheid test coverage? Vinden we überhaupt wel dat test coverage een interessante kwaliteits metriek is?

Dit is gelijk een gevoelig onderwerp. Enerzijds voelt het intuïtief om een hoge coverage ratio te zien als een kwaliteitsindicatie. Er ligt, bijvoorbeeld bij gesprekken met collega’s, vaak een standpunt op tafel in lijn van ‘hoe meer coverage hoe beter’. Hiermee wordt dus gezegd dat, naarmate er een toename is van het aantal lines of code welke worden getest, het ook waarschijnlijker is dat deze code dan ook correct werkt. Daarnaast zijn we door deze testen dan ook in staat om onze code aan te passen en te verbeteren, zonder bang te zijn dat we fouten introduceren in bestaande code. Hiermee hebben we dan dus een kwaliteitsaspect van software te pakken.

De hamvraag is dan natuurlijk of dit wel zo is. Is het zo dat, aangenomen dat we daadwerkelijk test cases schrijven die ‘goed’ zijn, we een betere test suite krijgen als het percentage code coverage hoger wordt? En op wat voor manier moet je deze coverage dan bepalen? De paper van deze week stelt deze vragen en probeert daar ook antwoord op te vinden. Er wordt aandacht besteed aan enkele verschillende manieren van code coverage bepalen en er wordt toelichting gegeven over wat hier implicaties van zijn. Ondanks dat niet het centrale punt is van het paper, levert het wel een leerzame sectie op.

Om op de titel van de paper terug te komen: dit paper suggereert dat de kwaliteit van de test suite los staat van de test coverage percentage.Volgens hen is het alleen maar direct gekoppeld is aan het aantal testen uit een suite. Het hebben van een hoge test coverage heeft hierdoor dan waarschijnlijk ook geen direct waardegevolg voor de kwaliteit van de test suite. Als dit inderdaad zo is dan levert dit ons wel uitdagingen op. Heeft een metriek als code coverage nog waarde? Moeten we tijd besteden aan het inrichten van dit soort cijfers? Of moeten we het als indicator gebruiken wanneer het tegenovergestelde geld: lage coverage gebruiken als ‘gevaar-indicator’ om de focus neer te leggen waar we het meest kunnen bijdragen waarna we bij een hoge coverage over de gehele breedte kunnen blijven bijdragen. Zijn er misschien andere ideeën?

Er zijn in deze paper ontzettend veel leuke dingen te zien die je aan het denken zetten. Wat vind ik een kwaliteitsmetriek? Wat is een goede test suite? Hoe pas ik mutation testing toe (tip: pitest[4])? Welke coverage metrieken zijn interessant? Hoe moet ik de getallen lezen, met elkaar vergelijken? Zal dit effect ook optreden wanneer we een niet-open source codebase bekijken, bijvoorbeeld bij een klant? Kortom, legio vragen die je jezelf (en collega’s!) kunt stellen om hier over na te denken. Veel van deze vragen zijn ook nog niet (geheel) beantwoord, dus vaak zal je hier het antwoord ook nog niet op kunnen krijgen.

Dit laat wel weer zien dat het leuk is om je af en toe met dit soort zaken bezig te houden. Het houdt je scherp, voorkomt dat je zaken als ‘waar’ gaat aannemen. Een uitspraak als ‘je moet je test coverage omhoog brengen’ zal na het lezen van dit paper iets zijn wat je (gefundeerd) in twijfel kunt trekken. Mocht je daarnaast je verder willen verdiepen in dit onderwerp is dit ook zeker mogelijk, dit is een recente paper uit 2014, wat betekend dat (veel) van de directe referenties ook nog recent zijn. Dit maakt het zoeken naar de huidige ‘state of the art’ wat gemakkelijker. Kortom, er zijn genoeg zaken om over na te denken en met collega’s, zowel binnen en buiten Sogyo, over te praten!

[1] Laura Inozemtseva and Reid Holmes. 2014. Coverage is not strongly correlated with test suite effectiveness. In Proceedings of the 36th International Conference on Software Engineering (ICSE 2014). ACM, New York, NY, USA, 435-445. DOI=10.1145/2568225.2568271 http://doi.acm.org/10.1145/2568225.2568271


Over deze papers we love: binnen Sogyo hebben we de traditie dat we maandelijks een nieuwsbrief rondsturen. De nieuwsbrief gaat veel over interne feitjes, echter sinds februari 2015 verzorgd Kevin van der Vlist het topic: papers we love. Hij deelt met ons papers die interessant zijn om te lezen en ons kunnen inspireren. De topic is uitgegroeid tot een mooie verzameling die we ook graag hier willen delen.