Typer, verktøy og beste praksis

Når du skriver programvare, vil det garantert oppstå feil i koden din. Dette kan være i form av syntaksfeil, logikkfeil, kjøretidsfeil, ytelsesfeil, datafeil eller enda verre.

Den nesten allestedsnærværende karakteren av feil mens du skriver programvare gjør testing av programvare til et viktig skritt i programvareutvikling. Riktig og effektiv testing resulterer ikke bare i programvare av høy kvalitet som tilfredsstiller brukernes behov, men også programvare som er i samsvar med regelverket og har lite eller ingen sårbarheter som kan utnyttes av angripere.

Programvaretesting kan gjøres i form av automatisert testing, enhetstesting, integrasjonstesting, eller testing av hele programvaren gjennom systemtesting.

En viktig sak som oppstår under programvare er imidlertid hvordan du avgjør om programvaren din har blitt testet grundig. Er testene du har kjørt på programvaren nok?

Har du testet alle deler av programvaren, eller er det kodebiter som ikke er testet i det hele tatt?

Slike spørsmål vil garantert dukke opp når du tester programvare, og det er dette som gjør kodedekning så viktig.

Kodedekning er en programvaretesting som forteller deg hvor mye av koden din som er utført og dermed testet av testene du har kjørt på programvaren du tester. Kodedekningsresultater er uttrykt i prosent.

Denne prosentandelen viser hvor mye av koden din som har blitt dekket av testene du har kjørt på koden. Hvis du for eksempel kjører en test og får tilbake en kodedekning på 60 %, betyr det at 40 % av koden din ikke har blitt dekket av testene du har skrevet, og dermed kan det være feil og sårbarheter i den ikke-testede koden.

Av denne grunn lar kodedekning deg analysere effektiviteten og fullstendigheten til testene du har kjørt på programvaren. Dette har fordelen av å sikre at programvaren er skikkelig og omfattende testet før den utgis. Dette reduserer programvarefeil i produksjonsprogramvare som kan påvirke brukernes opplevelse med programvaren.

Så mye som en kodedekning på 100 % ikke nødvendigvis betyr at programvaren du skriver er helt feilfri, vil du sikte på høy kodedekning for å sikre effektiv testing av programvaren din.

I kritiske bransjer som romfart og medisin, hvor programvarefeil kan føre til død, krever regelverket 100 % programvaredekning under testing.

Typer kodedekningsmål

Det finnes flere typer kodedekningsmålinger som kan måles mens du tester programvare. De inkluderer:

  • Statement Coverage – måler prosentandelen av kjørbare setninger i kildekoden som har blitt utført under testing.
  • Funksjonsdekning – måler prosentandelen av definerte funksjoner som har blitt kalt under testing.
  • Branch Coverage – måler prosentandelen av grener eller mulige stier som er utført fra alle beslutningspunktene i kildekoden. Den brukes til å sikre at alle grener som oppstår fra beslutningskontrollstrukturer som if, switch-setninger og if else-setninger er fullstendig testet.
  • Tilstandsdekning – måler prosentandelen av boolske uttrykk som er testet for både sanne og usanne verdier.
  • Loop Coverage – måler prosentandelen av looper i kildekoden som har blitt utført under testing.
  • Banedekning – måler prosentandelen av alle mulige utførelsesbaner i kildekoden som har blitt testet.

Beregningene ovenfor er vanligvis inkludert i en kodedekningsrapport.

Beste praksis for kodedekning

Det er visse beste praksiser som anbefales når du utfører kodedekning for å sikre effektiviteten og kvaliteten på kodedekningen. De inkluderer:

Ha klare dekningsmål

I enhver programvaretesting som foretas, angi måldekningsprosenter for hver testdekningsverdi som er passende. Dette har fordelen av ikke bare å gi klare testmål, men også bidra til å redusere defekter i programvare ved å styre teamarbeidet i å øke kodedekningen. Det hjelper også med å sikre at programvaretesting gis den oppmerksomheten den fortjener under programvareutvikling.

Fokus på testkvalitet

Det er viktig å merke seg at kodedekningen ganske enkelt viser prosentandelen av koden som er testet og ikke viser om de er testet riktig eller om programvaren er feilfri. Derfor i stedet for bare å fokusere på å få kodedekning nærmere 100 prosent, bør det legges vekt på å skrive kvalitet og effektive tester som tester programvaren korrekt og gir verdi.

Øk kodedekningen i koden som skiftes ofte

Mens det kan være vanskelig å oppnå høye kodedekningstall i store prosjekter, kan det settes inn innsats for å sikre at kodedekningen blir bedre over tid.

En flott måte å gjøre dette på er å kreve høy kodedekning på over 90 prosent i hver nye forpliktelse som gjøres til prosjektkodebasen.

Å håndheve kodedekning på forpliktelsesnivå er ikke bare realistisk og gjennomførbart, men sikrer også at alle nye endringer som gjøres i programvaren har utmerket kodedekning.

Mål og analyser kodedekningsdata

Utnytte resultatene fra kodedekning til å identifisere områder som fortsatt trenger testing, og for også å veilede fremtidig testing med prioritet på områder med lav kodedekning.

Analyser kodedekningsdata for å identifisere kritiske områder av en applikasjon som ennå ikke skal testes, og rett innsatsen mot å teste de utestede kritiske områdene fullstendig. Bruk av kodedekningsdata for å forbedre og prioritere programvare resulterer i bedre testet programvare med færre defekter.

Kodedekning kontra testdekning

Mens begge brukes til å fastslå effektiviteten til tester, er kodedekning og testdekning fundamentalt forskjellige i bruken og hva de måler.

Testdekning er en beregning som brukes til å bestemme i hvilken grad de skriftlige testene dekker kravene til programvaren. Det innebærer å teste hvert programvarekrav, og det hjelper å finne ut hvor godt programvare har blitt testet i forhold til å oppfylle kravene.

Testdekningsresultater viser prosentandelen av programvarekravene som er testet. Testdekning utføres vanligvis av fagfolk innen kvalitetssikring.

Kodedekning, derimot, er en programvaretesting som brukes til å bestemme prosentandelen av kildekoden som er utført av de skriftlige testene.

Resultatene av en kodedekning viser i hvilken grad utsagn, funksjoner, stier, sløyfer, grener og betingelser i kildekoden har blitt utført av de skriftlige enhetstestene. Kodedekning brukes til å evaluere hvor godt testene som er skrevet dekker kildekoden og gjøres vanligvis av programvareutviklere.

Kodedekning er en viktig beregning å måle mens du tester programvare. Her er noen verktøy for å hjelpe deg med kodedekning:

Kløver

Clover er et dekningsverktøy med åpen kildekode som opprinnelig ble utviklet av Atlassian, et australsk programvareselskap som utvikler produkter for programvareutviklingsteam. Verktøyet er skrevet rent i Java og kan kjøres på ethvert operativsystem som tilfredsstiller kravene til Java Runtime Environment.

Clover kan brukes til å utføre kodedekning på kode skrevet i programmeringsspråkene Java, Groovy eller AspectJ. Den har støtte for testrammeverk som JUnit, TestNG og Spock, og den kan også integreres med IDE-er som IntelliJ IDEA og Eclipse.

Clover kan brukes til å måle kodedekningsmålinger som metode, setning, gren, global og per-testdekning.

Fra en kodedekningsøvelse kan den generere svært konfigurerbare HTML-rapporter som viser kodedekningsresultatene i tillegg til de beste risikoområdene i programvaren og kan brukes i testoptimaliseringer.

Rapportene kan også genereres i PDF, XML, JSON eller ren tekst. De viktigste fordelene med kløver er at det kan integreres med mange forskjellige verktøy, og det utvikles og forbedres aktivt.

JaCoCo

JaCoCo er et gratis kodedekningsbibliotek for programmeringsspråket Java utviklet av EclEmma-teamet. Biblioteket er implementert i EclEmma, ​​som er et gratis Java-kodedekningsverktøy for Eclipse IDE.

JaCoCo gir en rik dekningsanalyse hvis resultater umiddelbart blir oppsummert og uthevet i Java Source code editor og lar brukere gå ned i dekningsresultatene til metodenivå.

Resultatene presenteres ved hjelp av en tilpassbar fargekode som fremhever kodelinjene som er helt, delvis eller ennå ikke dekket av tester som er kjørt på kildekoden. Det gir mulighet for sammenslåing og vurdering av forskjellige testkjøringer for å komme frem til en total kodedekning av kildekoden.

JaCoCo er et lettvektsverktøy og krever ikke at du endrer prosjektene dine eller utfører andre oppsett for bruk for analyse av kodedekning.

Cobertura

Cobertura er et gratis Java-kodedekningsverktøy med åpen kildekode som er basert på Jcoverage og kan brukes alene, gjennom Ant-skript eller gjennom Maven-plugin. Å bruke den gjennom en Maven-plugin er den vanligste måten å bruke Cobertura for kodedekning.

Cobertura måler prosentandelen av linjer eller grener som er utført av tester som er kjørt på en Java-kildekode. Den gir beregninger som linjedekning som viser prosentandelen av utsagn utført under tester, og også grendekning som viser prosentandelen av grener som er dekket under tester.

Den viser også en kompleksitetsfaktor som øker etter hvert som antall grener i Java-koden din øker.

Kodedekningsresultatene presenteres i HTML eller XML, og viser hvilke deler av kildekoden som ikke er testet. Bortsett fra å vise testdekningsresultater, kan Cobertura også brukes til å finne utestet kode og feil og også identifisere uoppnåelig kode.

Istanbul

Istanbul er et kodedekningsverktøy for JavaScript-kode med støtte for ES6+. Dette verktøyet kan installeres i et hvilket som helst Javascript-prosjekt som en utviklingsavhengighet ved å bruke nodepakkebehandleren.

Istanbul tilbyr kodedekningsmålinger som uttalelse, filial, funksjon og linjedekning. Den viser også linjene i kildekoden som ikke er dekket av testene. Den gjør dette ved å legge til linjetellere i JavaScript-koden din, slik at den kan spore i hvilken grad enhetstestene utfører kildekoden.

Kodedekningsresultater fra Istanbul kan sendes ut i terminalen eller i form av HTML. I tillegg tilbyr Istanbul støtte for applikasjoner som skaper underprosesser, kildetilordnet dekning av Babel- og TypeScript-prosjekter.

Pytest-cov

Pytest-cov er en gratis Python-plugin som brukes til å generere kodedekningsrapporter for Python-kode. Den installeres ved hjelp av Pythons pakkeinstallasjonsprogram Pip og betjenes fra kommandolinjen.

Kodedekningsrapporten viser utsagnene i Python-prosjektet ditt, de som ikke dekkes av tester, og den gir en testdekningsprosent som viser prosentandelen av Python-koden som dekkes av tester.

Pytest-cov tilbyr underprosessstøtte, xdist-støtte og konsekvent pytest-oppførsel. Pytest-covs standardoppførsel under gjennomføring av tester er å slette eksisterende dekningsdatafiler for å sikre nye og rene data for hver nye testkjøring. Imidlertid lar det også brukere kombinere kodedekningstestresultatene fra tidligere testkjøringer.

Coverage.py

Coverage.py er et kodedekningsverktøy for Python-programmer, og det er installert i prosjekter som bruker pip.

Som standard måler den linje- eller setningsdekning og gir resultater som viser antall setninger i programmet, de som ble savnet av tester, og prosentvis dekning fra testen, og den viser også linjene i Python-kildekoden som har blitt savnet av testene. Imidlertid kan den fortsatt konfigureres til å måle grendekning i Python-programmer.

Coverage.py kan også brukes til å fortelle hvilke tester som kjørte hvilke linjer i kildekoden. Kodedekningsrapporten kan presenteres i terminalen og også i HTML-, XML-, JSON- og LCOV-formater.

SimpleCov

SimpleCov er et robust kodedekningsverktøy for Ruby programmeringsspråk. Den bruker Rubys innebygde dekningsbibliotek for å samle relevante data som skal brukes til å bestemme kodedekningen etter å ha kjørt tester.

Det beste med SimpleCov er presentasjonen av kodedekningsresultater. Den slår også sammen resultater fra forskjellige typer tester som er utført, slik at rapporten som genereres viser resultatene fra alle testene som er utført, noe som gjør det enkelt å identifisere utestede deler av koden.

Den formaterer også kildekoden med fargekoder som enkelt kan brukes til å identifisere testede og ikke-testede deler av koden. Som standard måler og rapporterer SimpleCov linjedekningen av tester. Den kan imidlertid konfigureres til å måle og rapportere om grendekningen til de utførte testene.

Deep Cover

Deep Cover er et nøyaktig kodedekningsverktøy for Ruby-kode. Den tilbyr mer nøyaktige linjedekningsrapporter ved å sikre at en linje anses som dekket bare når den utføres helt og ikke delvis.

I tillegg tilbyr den støtte for node- og grendekning som valgfritt kan brukes til å finne ut om det er noen grener som ikke er tatt av testene.

Deep Cover er ikke bare enkel å bruke uten behov for konfigurasjoner, men den kan integreres i prosjekter ved å bruke andre kodedekningsverktøy som Rubys innebygde kodedekningsbibliotek eller SimpleCov. I slike tilfeller gjør Deep Cover verktøyene strengere ved kun å merke linjer som utførte bare hvis alt på kodelinjen er fullstendig utført.

Konklusjon

Så mye som høyere kodedekning ikke nødvendigvis vil resultere i feilfri programvare, er det en avgjørende beregning som må tas med i beregningen når du tester programvare. Kodedekning er viktig for å evaluere hvor mye testene som er skrevet faktisk tester en programvares kildekode.

I tillegg vil arbeidet med å forbedre kodedekningen under testingen resultere i bedre testet programvare som er mindre utsatt for feil i produksjonen. For å utføre kodedekning mens du tester programvare, bør du vurdere å bruke verktøyene som er foreslått i artikkelen.

Du kan også utforske skybaserte lasttestingsverktøy.