Kvalitetssäkring blir alltmer populärt. Experter uppskattar att antalet testtjänster enbart i USA kommer att öka med 25 % under det kommande decenniet. Om det intresserar dig kanske du undrar var du ska börja lära dig om programvarutestning.
I den här artikeln besvarar jag frågor som hjälper dig att komma igång med programvarutestning. Jag går igenom vad programvarutestning är, de viktigaste testkoncepten och några verktyg för programvarutestning att överväga.
Programvarutestning förklarad
Processen som består av alla aktiviteter under livscykeln, både statiska och dynamiska, och som omfattar planering, förberedelse och utvärdering av en komponent eller ett system samt relaterade arbetsprodukter, för att fastställa att de uppfyller angivna krav, visa att de är lämpliga för sitt ändamål och upptäcka defekter.
ISTQB:s ordlista
Programvarutestning spelar en viktig roll i programvaruutvecklingsprocessen genom att validera att programvaruapplikationen fungerar som avsett och uppfyller slutanvändarnas krav och förväntningar.
Målet är att identifiera defekter, fel och inkonsekvenser i programvaruapplikationen innan den släpps till allmänheten. Testning innebär att köra programvaran under olika förhållanden, konfigurationer och scenarier för att säkerställa att den fungerar korrekt och effektivt.
Om du är nyfiken på hur du kan börja inom programvarutestning finns här en lista med vanliga frågor vid QA-intervjuer (och svar!).
Programvarutestningens livscykel
Programvarutestningens livscykel (STLC) är den process som programvarutestare följer för att säkerställa att applikationen som testas uppfyller angivna kvalitetsstandarder och krav. STLC består vanligtvis av flera faser som är utformade för att säkerställa att programvaruapplikationen testas grundligt och uppnår önskad kvalitetsnivå innan den släpps till slutanvändarna. Följande är faserna i programvarutestningens livscykel:

Kravanalys
I denna fas analyserar programvarutestarna kraven och specifikationerna. De identifierar funktionella och icke-funktionella krav, förstår programvaruapplikationens syfte och målgrupp samt utvecklar testfall och scenarier utifrån detta.
Testplanering
I denna fas identifierar testteamet testningens omfattning, testmetoden och de resurser som krävs för testningen. Testplanen identifierar även riskerna och begränsningarna som är förknippade med testprocessen och beskriver tidsplanen för testningen.
Testdesign
I denna fas utformar testteamet testfall och scenarier baserat på kraven och specifikationerna. De identifierar även de testdata som krävs för testningen och utvecklar testskript som automatiserar testprocessen.
Testgenomförande
Testarna genomför testfallen och scenarierna som utformades i föregående fas. Testresultaten dokumenteras och eventuella defekter eller fel som hittas i programvaruapplikationen rapporteras.
Testrapportering
I denna fas sammanställer testteamet en rapport med testresultaten och de defekter som identifierats under testningen. Rapporten kan innehålla deras rekommendationer för att åtgärda defekterna och förbättra programvaruapplikationens övergripande kvalitet.
Testavslut
Detta är den sista fasen, då testteamet utvärderar testprocessen och identifierar områden som kan förbättras. De tar även fram en rapport om testavslutet som sammanfattar testprocessen och testresultaten.
Programvarutestningens livscykel är en kontinuerlig process som kräver samarbete mellan testteamet och utvecklingsteamet för att säkerställa att programvaruapplikationen uppnår önskad kvalitets- och funktionsnivå.
Typer av programvarutestning
Det finns olika typer av programvarutestning som används av QA-teamen, beroende på projektets sammanhang och krav.
Vi kan skilja mellan manuell testning och automatiserad testning beroende på hur testerna utförs. Baserat på vad som testas kan vi skilja mellan funktionell och icke-funktionell testning. Beroende på vilka metoder som används har vi statisk och dynamisk testning. Baserat på tillvägagångssättet kan vi identifiera testtyperna vitbox-testning och svartbox-testning. Vi har även explorativ testning, rök- och sanitetstestning samt regressionstestning. Alla dessa testtyper kan överlappa varandra beroende på hur de används.
Manuell testning
Vid manuell testning utförs testningen av en person utan användning av automatiserade verktyg eller skript. Den kan vara mer benägen att innehålla fel och tar vanligtvis längre tid.
Automatiserad testning
Automatiserad testning utförs av en maskin som kör skript skrivna i förväg. Den kräver mer teknisk kompetens, till exempel kunskaper i ett programmeringsspråk och automatiseringsverktyg som Selenium. Den kan vara dyrare än manuell testning, och vissa delar av testprocessen kan inte automatiseras.
Funktionell testning
Funktionell testning innebär att verifiera vad applikationen gör. Funktionell testning kontrollerar programvaruapplikationens funktioner och möjligheter och säkerställer att de uppfyller kraven och specifikationerna.
Icke-funktionell testning
Till skillnad från funktionell testning fokuserar icke-funktionella tester på hur appen beter sig. Det finns flera undertyper av icke-funktionell testning, beroende på vilket huvudmål testerna har. I den här artikeln tar jag endast upp några av dem.
Prestandatestning: Mäter programvaruapplikationens svarstid, genomströmning och skalbarhet under olika belastningsförhållanden. Den kontrollerar programvaruapplikationens förmåga att hantera flera användare och transaktioner samtidigt och säkerställer att den fungerar effektivt under hög belastning.
Belastningstestning: Simulerar verkliga användarbelastningar och utförs för att fastställa ett systems beteende under normala förhållanden och hög belastning. Den används för att identifiera om den infrastruktur som används för att vara värd för applikationen är tillräcklig och visar hur många samtidiga användare applikationen kan hantera samt vilken omfattning av maskinvara, nätverkskapacitet och annat som krävs för applikationen så att fler användare kan komma åt den.
Stresstestning: Innebär testning utöver den normala kapaciteten, ofta fram till en brytpunkt, för att observera resultaten. Målet är att säkerställa att programvaran inte kraschar under förhållanden med otillräckliga beräkningsresurser (såsom minne, diskutrymme, nätverksbegäran och så vidare).
Säkerhetstestning: Säkerställer att programvaruapplikationen är säker och skyddad mot obehörig åtkomst. Säkerhetstestning kontrollerar om det finns sårbarheter och svagheter i programvaruapplikationens säkerhetsprotokoll och identifierar potentiella säkerhetshot.
Användbarhetstestning: Används för att bedöma om applikationen är användarvänlig. Den kontrollerar hur enkelt det är för användare att navigera i programvaruapplikationen och utföra de avsedda funktionerna effektivt.
Tillgänglighetstestning: Tillgänglighetstestning betraktas som en delmängd av användbarhetstestning och utförs för att säkerställa att applikationen som testas kan användas av personer med funktionsnedsättningar.
Lokaliseringstestning: En typ av programvarutestning där programvarans beteende testas för en specifik region, lokal eller kultur. Några attribut att ta hänsyn till under lokaliseringstestning är att texten är korrekt översatt, valuta, måttenheter, tillåtna specialtecken och format för telefonnummer
Kompatibilitetstestning: Testar om applikationen är tillräckligt väl anpassad för att köras i olika webbläsare, databaser, maskinvarumiljöer, operativsystem, mobila enheter och nätverk
Statisk och dynamisk testning
Statisk testning bygger på manuell granskning av arbetsprodukter (det vill säga granskningar) eller verktygsbaserad utvärdering av koden (tänk kodgranskningar) eller andra arbetsprodukter (det vill säga statisk analys). Den kan utföras på, men är inte begränsad till, specifikationer, verksamhetskrav, acceptanskriterier, källkod, testplaner, testfall, testskript och användarhandböcker.
Dynamisk testning är den faktiska körningen av programvaran som testas. Den kan vara manuell eller automatiserad, eller
Vitbox-testning och svartbox-testning
Testning med vit låda är en typ av testning där testaren har kunskap om den interna strukturen i applikationens kod, medan testning med svart låda utförs utan att man behöver förstå källkoden. Var och en av dessa testtyper använder olika testtekniker, såsom ekvivalensklassindelning, analys av gränsvärden och beslutstabeller för testning med svart låda samt sats- och beslutstäckning för testning med vit låda.
Explorativ testning
Explorativ testning är en typ av erfarenhetsbaserad testning. Den innebär minimal planering och maximal testkörning.
Testdesign och testutförande genomförs parallellt, vanligtvis utan att testvillkoren, testfallen eller testskripten dokumenteras formellt.
Det är en användbar metod när specifikationer saknas eller är bristfälliga och tiden är mycket begränsad, eller så fungerar den utmärkt som komplement till automatiserad testning.
Röktestning
Röktestning, som ibland kallas ”byggverifieringstestning” eller ”konfidenstestning”, är en programvarutestningsprocess där testarna verifierar om den driftsatta versionen är stabil. Röktestning är en validering av att vi kan gå vidare med ytterligare programvarutestning. Den består av ett minimalt antal tester som körs vid varje bygge för att testa kritiska programvarufunktioner.
Rimlighetstestning
Rimlighetstestning är en typ av programvarutestning som utförs efter leveransen av ett programvarubygge med mindre kod- eller funktionsändringar för att bekräfta att felen har åtgärdats och att inga nya problem har introducerats till följd av dessa ändringar. Målet är att bekräfta att den föreslagna funktionen fungerar ungefär som förväntat.
Regressionstestning
Regressionstestning är en typ av programvarutestning där vi testar befintliga funktioner på nytt för att validera att de fortfarande fungerar korrekt efter ändringar eller uppdateringar av programvaruapplikationen. Regressionstestning säkerställer att de nya ändringarna eller uppdateringarna inte har påverkat programvaruapplikationens befintliga funktionalitet.
Kompatibilitetstestning
Kompatibilitetstestning används för att säkerställa att programvaruapplikationen fungerar korrekt på olika plattformar, enheter och webbläsare. Den kontrollerar att programvaruapplikationen är kompatibel med olika maskinvaru- och programvarukonfigurationer

Testnivåer
Programvarutestning kan kategoriseras i olika nivåer baserat på testningens omfattning och mål. Följande är de vanligaste nivåerna av programvarutestning:
Enhetstestning
Enhetstestning är den första testnivån och fokuserar på att testa enskilda komponenter eller kodenheter isolerat. Enhetstestning verifierar att varje kodenhet fungerar som förväntat och uppfyller de angivna kraven.
Integrationstestning
Integrationstestning fokuserar på att testa interaktionerna mellan olika moduler eller komponenter i programvaruapplikationen. Integrationstestning verifierar att modulerna eller komponenterna fungerar tillsammans som avsett och uppfyller de angivna kraven.
Systemtestning
Systemtestning är den testnivå där hela programvaruapplikationen testas som ett komplett system. Systemtestning verifierar att programvaruapplikationen uppfyller de angivna kraven och fungerar som förväntat i olika scenarier.
Användaracceptanstestning
Acceptanstestning är den testnivå där programvaruapplikationen testas ur slutanvändarens perspektiv. Acceptanstestning verifierar att programvaruapplikationen uppfyller slutanvändarens behov och krav och fungerar som förväntat i användarmiljön. Vanliga typer av användaracceptanstestning är alfatestning och betatestning.
Varje testnivå är viktig och fyller ett specifikt syfte i programvarutestningsprocessen. Testning bör utföras på varje nivå för att säkerställa att programvaruapplikationen uppnår önskad kvalitet och funktionalitet och fungerar som förväntat i olika scenarier.
Principer för programvarutestning
Det finns sju huvudsakliga testprinciper, enligt ISTQB:
- Testning visar att det finns fel, inte att de saknas: Du kan inte garantera att applikationen är felfri bara för att den har testats. Efter testningen kan dock förtroendet för produkten öka.
- Uttömmande testning är omöjlig: De flesta appar är oerhört komplexa, så det är omöjligt att testa varje möjlig kombination och variation, särskilt eftersom tiden och resurserna för testning också är begränsade.
- Tidig testning: Ju tidigare buggar och fel upptäcks under programvarans utvecklingslivscykel, desto enklare är de att åtgärda. Där har Agile rätt, eftersom testaktiviteterna börjar mycket tidigt.
- Fel samlas i kluster: Det innebär att områden där fel har hittats sannolikt kommer att innehålla ännu fler fel. Enligt Pareto-principen kan 80 % av felen hittas i 20 % av funktionerna.
- Bekämpningsmedelsparadoxen: Om samma tester körs upprepade gånger utan att uppdateras kommer de sannolikt inte att upptäcka några nya problem.
- Testning är kontextberoende: Applikationer testas på olika sätt beroende på deras kontext – till exempel testar du ett API på ett annat sätt än ett användargränssnitt, och webbapplikationer testas på ett annat sätt än mobil- eller datorappar.
- Felslutet om frånvaro av fel: Kort sagt innebär det faktum att felen har hittats och åtgärdats inte att programvaran är användbar för dess användare.
Slutsats
Programvarutestning är ett mycket komplext område, och många typer av tester kan genomföras. Det är viktigt att anpassa din teststrategi utifrån kontexten för den programvaruprodukt som testas. Det finns oändligt många resurser om programvarutestning, bland annat podcastavsnitt, böcker och mycket mer.
Om du tyckte om den här artikeln kan du prenumerera på QA Leads nyhetsbrev och bli först med att få veta om nya inlägg som handlar om testning och kvalitet.
