Om du någonsin har behövt spåra en bugg i din kod vet du hur frustrerande det kan bli. Denna frustration ökar bara om du arbetar på en stor kodbas.
Testning låter dig kontrollera om resultaten av din kod matchar dina förväntningar. På så sätt kan du enkelt identifiera och åtgärda ett problem innan du distribuerar din applikation. Förutom att hjälpa dig att upptäcka kodfel snabbare, tvingar testning dig också att skriva bra kod.
1. Statisk testning
Statisk testning avser tester som körs utan att exekvera kod. Detta sker genom att jämföra koden med tidigare inställda kodningsregler. De vanligaste sätten att göra statiska tester inkluderar ludd och typkontroll.
Linting innebär att kontrollera koden för programmerings- och stilfel. En linter analyserar koden och flaggar potentiella fel. Exempel på lintverktyg är EsLint, PyLint och CSSLint.
Typkontroll är processen för att upprätthålla skrivregler och begränsningar för värden. Vissa programmeringsspråk är starkt typade, vilket innebär att de ger fel när värden inte är välskrivna.
Vissa språk som JavaScript har dock ett svagt skrivsystem och är mer förlåtande. På dessa språk är misstag svåra att fånga, och ett typkontrollbibliotek är viktigt. För JavaScript kan du använd TypeScript för att tvinga fram stark skrivning.
Du kan också använda statiska analysverktyg för att analysera kod automatiskt. Dessa verktyg verifierar kodens kvalitet och rapporterar om eventuella problem som upptäcks. Exempel på statiska analysverktyg på marknaden är SonarQube, DeepSource och SpotBugs. När du väljer en statisk analysator, se till att den stöder ditt programmeringsspråk.
2. Enhetstest
Enhetstest kontrollerar de minsta testbara delarna av en applikation för att avgöra om de fungerar som förväntat. Du kan skriva enhetstester för funktioner, moduler, objekt osv.
Även om enhetstester kan vara tidskrävande bör de spara mer tid än du skulle spendera felsöka applikationen efter att du har skrivit all kod.
Generellt består enhetstestning av fyra steg:
- Skapar testerna
- Granska testet
- Baselining
- Utför testet.
Du kan skriva enhetstester manuellt eller automatisera dem med hjälp av ett enhetstestningsramverk. I ett manuellt test skulle du skriva kod för att testa funktionen eller enheten du behöver och sedan radera testkoden.
Om du använder ett ramverk, specificera enheten du testar och de förväntade resultaten och kör sedan testet. Testramverket skulle sedan logga de underkända och godkända testerna. Det är generellt sett bättre att använda ett ramverk eftersom det är snabbare.
När du skriver ett enhetstest, se till att enheten du testar är oberoende. Om det förlitar sig på externa data som variabler kan du använda hånar. Spot ersätter den saknade data som används i enheten.
Till exempel, om du testar en funktion som förlitar sig på data hämtade från ett API, kan du skapa ett falskt dataobjekt för teständamål.
3. Integrationstest
Integrationstest kontrollerar hur olika komponenter fungerar tillsammans. Detta är till skillnad från enhetstester som testar oberoende komponenter. Du skriver integrationsprov efter enhetstester.
Integrationstester är viktiga eftersom de säkerställer att din applikationslogik håller.
Tänk till exempel på två moduler: en som hämtar data från ett API och en annan som analyserar den. Du vill försäkra dig om att din kod hämtade rätt data och analyserade den korrekt.
Det är här integrationstester kommer in. Det säkerställer inga buggar i det logiska flödet från en modul till en annan.
4. End-to-end-test
End-to-end-testning kontrollerar applikationsflödet från slutanvändarens perspektiv. Processen testar applikationen från början till slut, eftersom användaren kommer att använda applikationen. Dessa tester ger mer täckning än enhetstester eller integrationstester.
End-to-end-tester definierar applikationens beroenden, databaser och extern kommunikation. De replikerar ett scenario i den verkliga världen så exakt som möjligt.
Till exempel, när du testar ett registreringsformulär kommer ett slut-till-ände-test att testa olika scenarier som:
- En användare som skickar in både e-post och lösenord
- En användare som använder ett svagt lösenord
- En användare som använder en ogiltig e-post
- En användare som endast skickar ett e-postmeddelande
- En användare som endast anger ett lösenord
Slut-till-ände-testerna säkerställer att applikationen beter sig som förväntat i dessa scenarier.
Att skriva prov vs. Att skriva kod
Det är viktigt att testa din applikation tidigt i utvecklingsprocessen. Även om alla dessa tester är viktiga, är det viktigt att hitta en balans som fungerar för dig. Annars kommer du att lägga för mycket tid på att skriva test istället för kod.
Enhetstestning är avgörande för de flesta applikationer, och du kanske vill avsätta tillräckligt med tid till det. När du har utfört enhetstester kan du vara säker på att byggstenarna i din applikation fungerar korrekt.