Faran med code coverage som kvalitetsmått

När man skriver enhetstester så brukar man mäta hur stor del av koden som täcks av enhetstester. Detta ger en möjlighet att identifiera ställen i koden där man behöver komplettera med testfall.

I en del projekt sätter man upp krav att code coverage ska uppnå en viss nivå. Genom detta vill man säkerställa att lösningen ska hålla en hög kvalitet. Sannolikt så är ett projekt med högre coverage bättre testat än ett projekt med låg coverage. Code coverage är dock ett kvantitativt mått som inte säger så mycket om kvalitet. Det är möjligt att uppnå hög coverage utan att testerna för den delen håller en hög kvalitet eller tester rätt saker. Däremot är det ett utmärkt verktyg under utvecklingen för att identifiera ställen i koden som behöver testas mer.

Det är också viktigt att mäta coverage över rätt del av systemet. Om man bygger på en plattform som automatgenererar kod så tillför det inte så mycket att skapa testfall för dessa klasser och då bör de uteslutas helt från mätning för att inte snedvrida coverage för de kritiska delarna.

Det finns också flera sätt att mäta coverage. Till exempel kan man mäta antal metoder som täcks av tester, antal kodrader, antal klasser, antal villkorsgrenar, antal kombinationer av parametrar en metod kan ta emot m.m. Dessa mått ger olika information om vad som testas. Att ange ett generellt mått för coverage utan att veta vilken aspekt av coverage som avses är inte till så stor hjälp.

Code coverage är ett kraftfullt verktyg när det används rätt. Det ger möjlighet att analysera vilka delar av koden som täcks av tester och på vilket sätt de täcks. Däremot kan det bli väldigt missvisande om det används som ett generellt mått för kvalitet.