När du skriver programvara kommer fel uppstå i din kod. Detta kan vara i form av syntaxfel, logiska fel, körtidsfel, prestandafel, datafel eller ännu värre.
Den nästan allestädes närvarande karaktären av fel när du skriver programvara gör testning av mjukvara till ett viktigt steg i mjukvaruutveckling. Korrekt och effektiv testning resulterar inte bara i högkvalitativ mjukvara som möter användarnas behov utan också programvara som följer reglerna och har få eller inga sårbarheter som kan utnyttjas av angripare.
Programvarutestning kan göras i form av automatiserad testning, enhetstestning, integrationstestning eller testning av hela mjukvaran genom systemtestning.
En viktig sak som uppstår under programvara är dock hur du avgör om din programvara har testats heltäckande. Räcker testerna du har kört på programvaran?
Har du testat alla delar av din programvara helt, eller finns det kodbitar som inte har testats alls?
Sådana frågor kommer säkert att uppstå när man testar mjukvara, och det är detta som gör kodtäckning så viktig.
Kodtäckning är ett mätvärde för mjukvarutestning som talar om för dig hur mycket av din kod som har exekverats och därmed testats av de tester du har kört på programvaran du testar. Kodtäckningsresultat uttrycks i procent.
Denna procentandel visar hur mycket av din kod som har täckts av testerna du har kört på koden. Om du till exempel kör ett test och får tillbaka en kodtäckning på 60 %, betyder det att 40 % av din kod inte har täckts av de tester du har skrivit, och därför kan det finnas fel och sårbarheter i den oprövade koden.
Av denna anledning låter kodtäckning dig analysera effektiviteten och fullständigheten av de tester du har kört på din programvara. Detta har fördelen av att säkerställa att programvaran testas ordentligt och heltäckande innan den släpps. Detta minskar programvarubuggar i produktionsprogramvara som kan påverka användarnas upplevelse av programvaran.
Så mycket som en kodtäckning på 100 % inte nödvändigtvis betyder att programvaran du skriver är helt felfri, vill du sikta på hög kodtäckning för att säkerställa effektiv testning av din programvara.
I kritiska branscher som flyg och medicin, där programvarufel kan leda till dödsfall, kräver regleringar 100 % mjukvarutäckning under testning.
Innehållsförteckning
Typer av kodtäckningsmått
Det finns flera typer av kodtäckningsmått som kan mätas när du testar programvara. De inkluderar:
- Statement Coverage – mäter andelen körbara uttalanden i källkoden som har körts under testning.
- Funktionstäckning – mäter andelen definierade funktioner som har anropats under testning.
- Branch Coverage – mäter andelen grenar eller möjliga sökvägar som har exekveras från alla beslutspunkter i källkoden. Det används för att säkerställa att alla grenar som uppstår från beslutskontrollstrukturer som if, switch-satser och if else-satser har testats fullständigt.
- Villkorstäckning – mäter procentandelen booleska uttryck som har testats för både sanna och falska värden.
- Loop Coverage – mäter procentandelen loopar i källkoden som har körts under testning.
- Path Coverage – mäter procentandelen av alla möjliga exekveringsvägar i källkoden som har testats.
Ovanstående mätvärden ingår vanligtvis i en kodtäckningsrapport.
Best Practices för kodtäckning
Det finns vissa bästa praxis som rekommenderas när du utför kodtäckning för att säkerställa effektiviteten och kvaliteten på kodtäckningen. De inkluderar:
Ha tydliga täckningsmål
I alla programvarutestningar som genomförs, ställ in måltäckningsprocent för varje testtäckningsmått som är lämpligt. Detta har fördelen av att inte bara tillhandahålla tydliga testmål utan också bidra till att minska defekter i mjukvara genom att styra teamarbetet för att öka kodtäckningen. Det hjälper också till att säkerställa att mjukvarutestning ges den uppmärksamhet den förtjänar under mjukvaruutveckling.
Fokus på testkvalitet
Det är viktigt att notera att kodtäckning helt enkelt visar procentandelen kod som har testats och inte visar om de har testats korrekt eller om programvaran är buggfri. Därför snarare än att bara fokusera på att få kodtäckning närmare 100 procent, bör tyngdpunkten ligga på att skriva kvalitet och effektiva tester som korrekt testar programvaran och tillför värde.
Öka kodtäckningen i kod som ändras ofta
Medan det kan vara svårt att uppnå höga kodtäckningsnummer i stora projekt, kan ansträngningar göras för att säkerställa att kodtäckningen blir bättre med tiden.
Ett bra sätt att göra detta är att kräva hög kodtäckning på över 90 procent i varje ny commit som görs till projektkodbasen.
Att upprätthålla kodtäckning på commit-nivå är inte bara realistiskt och genomförbart utan säkerställer också att alla nya ändringar som görs i programvaran har utmärkt kodtäckning.
Mät och analysera kodtäckningsdata
Använd resultaten från kodtäckning för att identifiera områden som fortfarande behöver testas och för att även vägleda framtida testinsatser med prioritet på områden med låg kodtäckning.
Analysera kodtäckningsdata för att identifiera kritiska områden i en applikation som ännu inte ska testas och rikta dina ansträngningar på att helt testa de oprövade kritiska områdena. Att använda kodtäckningsdata för att förbättra och prioritera programvara resulterar i bättre testad programvara med färre defekter.
Kodtäckning kontra testtäckning
Medan båda används för att fastställa effektiviteten av tester, är kodtäckning och testtäckning fundamentalt olika i deras användning och vad de mäter.
Testtäckning är ett mått som används för att bestämma i vilken utsträckning de skriftliga proven täcker programvarans krav. Det innebär att testa varje programvarukrav och det hjälper till att fastställa hur väl programvaran har testats för att den uppfyller dess krav.
Testtäckningsresultat visar procentandelen av programvarukraven som har testats. Testtäckning utförs vanligtvis av kvalitetssäkringspersonal.
Kodtäckning, å andra sidan, är ett testmått för programvara som används för att bestämma procentandelen av källkoden som har utförts av de skriftliga testerna.
Resultaten av en kodtäckning visar i vilken utsträckning satser, funktioner, sökvägar, loopar, grenar och villkor i källkoden har exekveras av de skriftliga enhetstesten. Kodtäckning används för att utvärdera hur väl de skrivna testerna täcker källkoden och görs vanligtvis av mjukvaruutvecklare.
Kodtäckning är ett viktigt mått att mäta när man testar programvara. Här är några verktyg som hjälper dig med kodtäckning:
Klöver
Clover är ett täckningsverktyg med öppen källkod som ursprungligen utvecklades av Atlassian, ett australiensiskt mjukvaruföretag som utvecklar produkter för programvaruutvecklingsteam. Verktyget är skrivet rent i Java och kan köras på vilket operativsystem som helst som uppfyller kraven för Java Runtime Environment.
Clover kan användas för att utföra kodtäckning på kod skriven i programmeringsspråken Java, Groovy eller AspectJ. Den har stöd för testramverk som JUnit, TestNG och Spock, och den kan även integreras med IDE som IntelliJ IDEA och Eclipse.
Clover kan användas för att mäta kodtäckningsmått som metod, uttalande, gren, global och per-test täckning.
Från en kodtäckningsövning kan den generera mycket konfigurerbara HTML-rapporter som visar kodtäckningsresultaten utöver de främsta riskområdena i programvaran och kan användas i testoptimeringar.
Rapporterna kan också genereras i PDF, XML, JSON eller vanlig text. De viktigaste fördelarna med klöver är att den kan integreras med många olika verktyg och att den aktivt utvecklas och förbättras.
JaCoCo
JaCoCo är ett gratis kodtäckningsbibliotek för programmeringsspråket Java utvecklat av EclEmma-teamet. Biblioteket är implementerat i EclEmma, som är ett gratis verktyg för Java-kodtäckning för Eclipse IDE.
JaCoCo tillhandahåller en rik täckningsanalys vars resultat omedelbart sammanfattas och markeras i Java-källkodsredigeraren och tillåter användare att drilla ner täckningsresultaten till metodnivå.
Resultaten presenteras med hjälp av en anpassningsbar färgkod som framhäver de kodrader som helt, delvis eller ännu inte har täckts av tester som körts på källkoden. Det möjliggör sammanslagning och övervägande av olika testkörningar för att komma fram till en total kodtäckning av källkoden.
JaCoCo är ett lättviktigt verktyg och kräver inte att du ändrar dina projekt eller utför några andra inställningar för kodtäckningsanalys.
Cobertura
Cobertura är ett gratis Java-kodtäckningsverktyg med öppen källkod som är baserat på Jcoverage och kan användas på egen hand, genom Ant-skript eller genom Maven-plugin. Att använda det via ett Maven-plugin är det vanligaste sättet att använda Cobertura för kodtäckning.
Cobertura mäter andelen rader eller grenar som har körts av tester som körs på en Java-källkod. Den tillhandahåller mätvärden som linjetäckning som visar procentandelen av uttalanden som körs under tester, och även grentäckning som visar procentandelen grenar som täcks under tester.
Den visar också en komplexitetsfaktor som ökar när antalet grenar i din Java-kod ökar.
Kodtäckningsresultaten presenteras i HTML eller XML, och visar vilka delar av källkoden som inte har testats. Förutom att visa testtäckningsresultat kan Cobertura också användas för att lokalisera opestad kod och buggar och även identifiera oåtkomlig kod.
Istanbul
Istanbul är ett kodtäckningsverktyg för JavaScript-kod med stöd för ES6+. Detta verktyg kan installeras i alla Javascript-projekt som ett utvecklingsberoende med hjälp av nodpakethanteraren.
Istanbul tillhandahåller kodtäckningsmått som uttalande, filial, funktion och linjetäckning. Den visar också de rader i källkoden som inte har täckts av testerna. Den gör detta genom att lägga till radräknare i din JavaScript-kod så att den kan spåra i vilken utsträckning dina enhetstester exekverar din källkod.
Kodtäckningsresultat från Istanbul kan matas ut i terminalen eller i form av HTML. Dessutom erbjuder Istanbul stöd för applikationer som skapar delprocesser, källmappad täckning av Babel- och TypeScript-projekt.
Pytest-cov
Pytest-cov är ett gratis Python-plugin som används för att generera kodtäckningsrapporter för Python-kod. Den installeras med Pythons paketinstallationsprogram Pip och styrs från kommandoraden.
Dess kodtäckningsrapport visar påståendena i ditt Python-projekt, de som inte omfattas av tester, och den ger en testtäckningsprocent som visar procentandelen av din Python-kod som täcks av tester.
Pytest-cov erbjuder underprocessstöd, xdist-stöd och konsekvent pytest-beteende. Pytest-covs standardbeteende när man utför tester är att radera befintliga täckningsdatafiler för att säkerställa ny och ren data för varje ny testkörning. Men det tillåter också användare att kombinera kodtäckningstestresultaten från tidigare testkörningar.
Coverage.py
Coverage.py är ett kodtäckningsverktyg för Python-program, och det installeras i projekt som använder pip.
Som standard mäter den linje- eller satstäckning och ger resultat som visar antalet satser i programmet, de som missats av tester och den procentuella täckningen från testet, och den visar också raderna i din Python-källkod som har missats av testerna. Den kan dock fortfarande konfigureras för att mäta filialtäckning i Python-program.
Coverage.py kan också användas för att berätta vilka tester som körde vilka rader i källkoden. Dess kodtäckningsrapport kan presenteras i terminalen och även i HTML-, XML-, JSON- och LCOV-format.
SimpleCov
SimpleCov är ett robust kodtäckningsverktyg för programmeringsspråket Ruby. Den använder Rubys inbyggda täckningsbibliotek för att samla in relevant data som ska användas för att bestämma kodtäckningen efter körning av tester.
Det bästa med SimpleCov är dess presentation av kodtäckningsresultat. Den slår också samman resultat från olika typer av tester som gjorts så att den genererade rapporten visar resultaten från alla tester som gjorts, vilket gör det enkelt att identifiera oprövade delar av koden.
Den formaterar även källkoden med färgkoder som enkelt kan användas för att identifiera testade och oprövade delar av koden. Som standard mäter och rapporterar SimpleCov linjetäckningen för tester. Den kan dock konfigureras för att mäta och rapportera om grentäckningen för de utförda testerna.
Deep Cover
Deep Cover är ett korrekt kodtäckningsverktyg för Ruby-kod. Den erbjuder mer exakta linjetäckningsrapporter genom att säkerställa att en linje endast anses täckt när den körs helt och inte delvis.
Dessutom erbjuder den stöd för nod- och grentäckning som valfritt kan användas för att ta reda på om det finns några grenar som inte tagits av testerna.
Deep Cover är inte bara lätt att använda utan behov av konfigurationer, utan det kan integreras i projekt med hjälp av andra kodtäckningsverktyg som Rubys inbyggda kodtäckningsbibliotek eller SimpleCov. I sådana fall gör Deep Cover verktygen strängare genom att bara markera rader som exekverade endast om allt på kodraden är helt kört.
Slutsats
Så mycket som högre kodtäckning inte nödvändigtvis kommer att resultera i felfri programvara, är det ett avgörande mått som måste beaktas när man testar programvara. Kodtäckning är viktig för att utvärdera hur mycket testerna som skrivs faktiskt testar en programvaras källkod.
Arbetet med att förbättra kodtäckningen under testning resulterar dessutom i bättre beprövad programvara som är mindre benägen för fel i produktionen. För att utföra kodtäckning medan du testar programvara, överväg att använda verktygen som föreslås i artikeln.
Du kan också utforska molnbaserade belastningstestverktyg.