key successful unit testing how developers test their own code
Black Box-testare bryr mig inte om enhetstestning. Deras huvudsyfte är att validera ansökan mot kraven utan att gå in på implementeringsdetaljerna.
Men som en nyfikenhet eller Utanför lådan att tänka , har du någonsin undrat hur utvecklare testar sin kod? Vilken metod använder de för att testa innan de släpper kod för testning? Hur är utvecklingstestning viktig i en smidig process? Svaret på allt detta är enhetstestning. Jag vill utbilda dig om vikten av Unit Testing så att utvecklings- och testteam kan arbeta mer tillsammans för att designa, testa och släppa en utmärkt applikation.
Vem vet i framtiden kan några av er till och med byta till vitlåda-test och använda dessa kodvaliderings- och förbättringstekniker!
Vad du kommer att lära dig:
Vad är enhetstestning?
Enhetstestning är inte ett nytt koncept. Det har varit där sedan de första dagarna av programmeringen. Vanligtvis utvecklare och ibland Vitlåda testare skriva enhetstester för att förbättra kodkvaliteten genom att verifiera varje enhet av koden som används för att implementera funktionskrav (aka test driven development TDD eller test-first development).
De flesta av oss kanske känner till den klassiska definitionen -
'Enhetstestning är metoden för att verifiera den minsta biten av testbar kod mot dess syfte.' Om syftet eller kravet misslyckades har enhetstestet misslyckats.
Med enkla ord betyder det - att skriva en kod (enhetstest) för att verifiera den kod (enhet) som är skriven för implementeringskrav.
Enhetstestning i SDLC
Vid enhetstestning använder utvecklare manuella eller automatiska tester för att säkerställa att varje enhet i programvaran uppfyller kundens krav. Enheten kan vara en enskild funktion, ett objekt, en metod, en procedur eller en modul i programvaran som testas.
Att skriva enhetstester för att testa de enskilda enheterna gör det lättare att skriva omfattande tester när alla enheter är sammanställda. Under mjukvaruutveckling görs det som den första testnivån.
Betydelsen av skrivenhetstester
Enhetstestning används för att designa robusta programvarukomponenter som hjälper till att upprätthålla kod och eliminera problem i kodenheter. Vi vet alla vikten av att hitta och åtgärda defekter i ett tidigt skede av programutvecklingscykeln. Denna testning har samma syfte.
Det är en integrerad del av den agila programvaruutvecklingsprocessen. När en testpaket för byggnadskörningsenheter varje natt ska köras och rapporten ska genereras. Om någon av enhetstesterna har misslyckats bör inte QA-teamet acceptera den byggnaden för verifiering.
Om vi ställer in detta som en standardprocess skulle många defekter fångas under den tidiga utvecklingscykeln, vilket sparar mycket testtid.
Jag vet att många utvecklare hatar att skriva enhetstester. De antingen ignorerar eller skriver dåliga enhetstestfall på grund av snäva schemalagda eller bristande allvar (ja de skriver tomma enhetstester, så 100% av dem klarar framgångsrikt ;-)). Det är viktigt att skriva bra enhetstest eller inte skriva dem alls. Det är ännu viktigare att tillhandahålla tillräcklig tid och en stödjande miljö för verkliga fördelar.
Enhetstestmetoder
Det kan utföras på två sätt:
- Manuell testning
- Automatiserad testning
I Manuell testning , kör testaren manuellt testfall utan att använda något automatiseringsverktyg. Här utförs varje steg i testet manuellt. Manuell testning är tråkig, särskilt för tester som är repetitiva och kräver mer ansträngningar för att skapa och utföra testfall. Manuell testning kräver inte kunskap om något testverktyg.
Det är ett faktum att 100% av automatiseringen inte är möjlig och därför kommer det alltid att finnas någon nivå av manuell testning.
I Automatiserad testning, automatiseringsverktyg för programvarutestning används för att automatisera tester / testfall. Automationsverktyget kan spela in och spara ditt test och det kan spelas om så många gånger som behövs utan ytterligare mänsklig inblandning.
Dessa verktyg kan till och med mata in testdata i systemet som testas, och det kan jämföra de förväntade resultaten med de faktiska resultaten och automatiskt generera rapporterna. Den initiala kostnaden för att installera testautomationsverktyg är dock hög.
Tekniker inom enhetstestning
# 1) Vitlåda testning:
ai-programvara lär sig att göra ai-programvara
Vid vitlåda-testning känner testaren till den interna strukturen i programvaran inklusive koden och kan testa den mot designen och kraven. Därför är vitlåda testning också känd som transparent testning .
# 2) Black box-testning:
Vid black-box-test känner inte testaren till de interna strukturerna varken programvarans kod.
# 3) Grå låda testning:
Detta kallas också halvtransparent tekniktestning som betyder, testarna är bara delvis medvetna av den interna strukturen, funktionerna och designerna tillsammans med kraven. Felsökning görs genom faktiska inmatningar från front-end för att få exakta data i back-end. Den grå lådan betraktas därför som en kombination av tekniker för svart låda och vit låda.
Test av grå låda täcker följande typer av tester:
- Matrisprovning.
- Mönstertestning.
- Ortogonal mönster testning.
- Regressionstestning.
Fördelar med enhetstestning
- Processen blir smidig: För att lägga till nya funktioner eller funktioner i den befintliga programvaran måste vi göra ändringar i den gamla koden. Men att ändra saker till den redan testade koden kan vara både riskabelt och dyrt.
- Kodkvaliteten förbättras: Kodens kvalitet förbättras automatiskt när enhetstestningen är klar. De fel som identifierats under denna testning fixas innan de skickas till integreringstestfasen. Resultat i robust design och utveckling när utvecklare skriver testfall genom att först förstå specifikationerna.
- Upptäcker buggar tidigt: När utvecklare kör enhetstester upptäcker de buggar tidigt i programvaruutvecklingen och löser dem. Detta inkluderar brister eller saknade delar i specifikationen samt fel i programmerarens implementering.
- Enklare förändringar och förenklade integrationer: Att göra enhetstester gör det enkelt för utvecklaren att omstrukturera koden, göra ändringar och underhålla koden. Det gör det också mycket enklare att testa koden efter integrering. Åtgärda ett problem i Unit Testing kan åtgärda många andra problem som uppstår i senare utvecklings- och testfaser
- Dokumentation tillgänglighet: Utvecklare som undersöker funktionerna i ett senare skede kan hänvisa till enhetens testdokumentation och kan enkelt hitta enhetens testgränssnitt och korrigera eller arbeta snabbt och enkelt.
- Enkel felsökningsprocess: Det hjälper till att förenkla felsökningen. Om testet misslyckas i något skede måste koden felsökas eller annars kan processen fortsättas utan några hinder.
- Lägre kostnad: När fel upptäcks och löses under enhetstester minskas kostnaden och utvecklingstiden. Utan denna testning, om samma fel upptäcks i ett senare skede efter kodintegrationen, blir det svårare att spåra och lösa, vilket gör det dyrare och ökar utvecklingstiden.
- Kodens fullständighet kan visas med hjälp av enhetstester: Detta är mer användbart i den smidiga processen. Testare får inte de funktionella byggnaderna för att testa förrän integrationen är klar. Kodens slutförande kan inte motiveras genom att visa att du har skrivit och kontrollerat koden. Men att köra enhetstest kan visa kodens fullständighet.
- Sparar utvecklingstid: Kodavslutning kan ta mer tid men på grund av färre buggar i system- och acceptantestningen kan den totala utvecklingstiden sparas.
- Kodtäckning kan mätas
Enhetstestcykel
(bild källa )
Vad gör ett bra enhetstest?
Jag är inte rätt person som berättar vad som gör ett bra enhetstest, men baserat på mina observationer på olika projekt kan jag berätta egenskaperna hos ett bra enhetstest. Det dåliga enhetstestet tillför inte mervärde till projektet. Istället ökar projektkostnaderna betydligt genom att skriva och hantera dåliga enhetstester.
Hur skriver man bra enhetstester?
- Ett enhetstest bör skrivas för att verifiera en enda kodenhet och inte integrationen.
- Små och isolerade enhetstest med tydlig namngivning skulle göra det mycket enkelt att skriva och underhålla.
- Att ändra en annan del av programvaran bör inte påverka enhetstestet om de är isolerade och skrivna för en specifik kodenhet.
- Det ska gå snabbt
- Ett enhetstest bör kunna återanvändas
Enhetstestramverk
Enhetstestningsramar används mest för att skriva enhetstester snabbt och enkelt. De flesta programmeringsspråk stöder inte enhetstestning med den inbyggda kompilatorn. Tredjeparts öppen källkod och kommersiella verktyg kan användas för att göra enhetstester ännu roligare.
Lista över populära Enhetstestverktyg för olika programmeringsspråk:
- Java-ramverk - JUnit
- PHP-ramverk - PHPUnit
- C ++ ramar - UnitTest ++ och Google C ++
- .NET ramverk - NUnit
- Python-ramverk - py.test
Missuppfattningar och sanningar
- Det tar mer tid att skriva kod med enhetstestfall, och vi har inte tid för det - i själva verket skulle det spara din utvecklingstid på lång sikt.
- Enhetstestning kommer att hitta alla fel - Det kommer inte att göra, eftersom avsikten med enhetstestet inte är att hitta buggar utan att utveckla robusta programvarukomponenter som kommer att ha färre defekter i senare skeden av SDLC.
- 100% kodtäckning betyder 100% testtäckning - Detta garanterar inte att koden är felfri.
Hur accepterar jag enhetstestning?
Bra enhetstestning kan utföras i 3 grundläggande delar.
- Skriv enhetens testkod
- Kör enhetens testkod för att kontrollera om den uppfyller systemkravet
- Utför mjukvarukoden för att testa för eventuella defekter och om koden uppfyller systemkravet.
Efter att ha genomfört ovanstående 3 steg, om koden verkar vara korrekt, sägs enhetstestet vara godkänt. Och om det inte uppfyller systemkraven misslyckas testet. I det här fallet måste utvecklaren kontrollera och korrigera koden igen.
I vissa fall är det nödvändigt att separera koden för att utföra denna testning mer exakt.
Bästa praxis
För att skapa den bästa koden under denna testning, överväg följande punkter:
- Koden ska vara stark: Det finns tillfällen där testet misslyckas eller i värsta fall inte körs alls om koden bryts.
- Förståeligt och rimligt: Koden ska vara lätt att förstå. Detta gör det enkelt för utvecklaren att skriva koden och även andra utvecklare som kommer att arbeta med koden senare kommer att finna det lätt att felsöka.
- Bör vara det enskilda fallet: Tester som definierar flera fall i ett är komplicerade att arbeta med. Således är det bästa sättet att skriva en enda ärendekod, vilket gör koden lättare att förstå och felsöka.
- Tillåt automatiserade tester: Utvecklarna bör se till att testet körs i automatiserad form. Det ska vara i en kontinuerlig leveransprocess eller integrationsprocess.
Andra punkter som ska hållas i åtanke är följande:
- Istället för att skapa testfall för alla förhållanden, fokusera på testet som påverkar systemets beteende.
- Det finns chanser att buggen återkommer på grund av webbläsarens cache.
- Testfall bör inte vara beroende av varandra.
- Var också uppmärksam på slingans tillstånd.
- Planera testfall oftare.
Slutsats
Enhetstestning kommer till bild när det krävs att testa varje funktion separat. Det är mycket rimligt att upptäcka och fixa buggar under denna testning och spara tid och kostnad, snarare än att hitta i det senare skedet av programvaruutveckling.
Även om det erbjuder många fördelar, finns det också begränsningar med att använda det. Noggrann disciplin och konsekvens krävs under programvaruutvecklingsprocessen för att övervinna begränsningar och få de avsedda fördelarna.
Dina kommentarer är mycket välkomna!
Som en svart låda testare, vad är dina observationer om enhetstestning på ditt team? Har någon en bättre idé för framgångsrik enhetstestning?
Rekommenderad läsning
- Skillnaderna mellan enhetstestning, integrationstestning och funktionstestning
- 20 mest populära enhetstestverktyg 2021
- Skrivenhetstester med Spock Framework
- Bästa verktyg för testning av programvara 2021 (QA Test Automation Tools)
- Viktiga skillnader mellan Black Box Testing och White Box Testing
- Lasttestning med HP LoadRunner-handledning
- Skillnad mellan Desktop, Client Server Testing och Web Testing
- Vad är gammatestning? Det sista testetappen