Skillnaden mellan code coverage och test coverage

Att skriva helautomatiska tester som körs varje gång förändringar i koden ska göras är ett bra sätt att förhindra att buggar uppstår. Det går förstås aldrig att vara helt säker på detta, men om du har ett test som ser till att en användare beställa ett nytt lösenord genom att klicka på en länk och detta test körs varje gång någon lägger till en ny funktion i appen så är det troligt att just den där funktionen fungerar även om tre, fem eller tio år framöver. Det är viktigt för oss, för vi jobbar med ett långsiktigt tänk.

Idag fick jag frågan från en av våra juniora utvecklare: ”Vad är skillnaden mellan code coverage och test coverage? Är det samma sak?”

Nej, det är inte riktigt samma sak. Båda mäts i procent (0-100%) där högt oftast är bra och lågt är dåligt.

Code coverage

Code coverage är ett mått på hur stor del av din kod som täcks av tester. Antalet rader i din kodbas jämförst med hur stor del av den som har körts igenom av dina tester. Generellt kan man säga att om du har 100 rader kod och du testar 75 av dem är din code coverage 75 %.

Det finns många verktyg som mäter code coverage på ett bra sätt helt automatiskt, så du behöver inte sitta och räkna för hand.

Test coverage

Ibland används test coverage slarvigt som en synonym för code coverage. Den egentliga betydelsen är hur stor del av användarfallen/kraven som täcks av tester. Om man använder testdriven utveckling brukar den här vara mycket hög. Säg att kunden har tre krav:

  1. Man ska kunna logga in
  2. Man ska kunna logga ut
  3. Man ska kunna skriva ut sidan

Vi skriver tester för punkt 1 och 2 och skippar punkt 3, då har vi 67 % test coverage.

Vad är rimliga nivåer på code coverage och test coverage?

I nya kodbaser där man tänker på code coverage och test coverage från början är det ganska enkelt att hålla sig över 95% utan att anstränga sig, medan det kan vara onödigt mycket jobb att försöka uppnå detta genom att ändra i gamla projekt. Då jobbar vi istället med positiv förändring, dvs att värdet på code coverage och test coverage alltid ska förbättras jämfört med tidigare (eller i alla fall inte försämras) och att den nya koden du skickar upp ska ha hög code coverage.

Som vanligt är det till slut en fråga om hur viktigt det är att allt fungerar jämfört med kostnaden för att testa varenda utfall som man kan tänka sig.

Betyder hög code coverage hög kvalitet?

Nja, det är inte riktigt sant heller. Vi kan skriva tester som kör igenom all kod, men som inte testar utfallet på ett rimligt sätt. Vi kan exempelvis testa att man kan besöka alla delar i vår webbapp och får statuskoden 200 OK överallt, men det säger ju ingenting om att innehållet är korrekt. Behandla inte siffran som det enda sanna värdet kring om din kod är bra eller inte, men använd den gärna som ett steg på vägen mot bättre kod.

Källor:

  • IEEE Standard glossary of Software engineering terminology [pdf]
  • Wikipedia-diskussion om Code Coverage vs Test coverage [länk]

Leave a Reply

Your email address will not be published.