Skillnaden mellan vitlåde- och svartlådetestning
Svartlådetestning utvärderar programvarans funktionalitet utan kunskap om den interna koden och fokuserar på indata och utdata. Vitlådetestning undersöker den interna kodstrukturen och logiken och kräver åtkomst till källkoden.
Svartlådetestning utförs vanligtvis av QA-team för att validera användarorienterad funktionalitet med tekniker som ekvivalensklassindelning och gränsvärdesanalys.
Däremot utförs vitlådetestning av utvecklare för att säkerställa kodens korrekthet och täckning med metoder som sats- och grentäckning.
Genom att kombinera båda metoderna förbättras testtäckningen och programvarans kvalitet.
I det här inlägget går jag igenom båda typerna av testning och förklarar vad de är, de viktigaste skillnaderna mellan dem, hur de används samt deras för- och nackdelar.
Vad är svartlådetestning?
Svartlådetestning, som ibland kallas beteendebaserad testning, är en typ av programvarutestning där testaren inte har åtkomst till källkoden för det system som testas. Den utförs vanligtvis av kvalitetssäkringsteamet och kräver inte nödvändigtvis avancerade tekniska färdigheter, såsom programmering.
Vid svartlådetestning skrivs testfallen utifrån indata och utdata för AUT, enligt kravspecifikationerna.
De mest anmärkningsvärda teknikerna för svartlådetestning är:
- Ekvivalensklassindelning: där indata kategoriseras i ekvivalensklasser (eller partitioner), vilket innebär att varje värde inom en klass genererar samma utdata. Endast ett testfall per ekvivalensklass behövs för god testtäckning.
Exempel: Om ett fält accepterar heltalsvärden mellan 1 och 10 innehåller den giltiga klassen alla tal mellan 1 och 10, medan de två ogiltiga klasserna är tal mindre än 1 och tal större än 10. Det innebär att totalt 3 testfall räcker för att täcka alla möjliga klasser.
- Gränsvärdesanalys: där de extrema indatavärdena, som löper större risk att orsaka defekter, testas.
Exempel: Med samma fält som ovan är de giltiga gränserna 1 och 10, och de ogiltiga är 0 och 11.
- Beslutstabellstestning: där relationerna mellan indata och utdata visas i tabellform. Tabellen innehåller vanligtvis kolumner för villkor och rader för de olika kombinationerna. Varje rad bör ha ett motsvarande testfall.
Exempel: Den här tekniken fungerar för mer komplexa scenarier. Anta att vi har en ansökan om ett banklån med följande villkor:
| Villkor | Ålder minst 25 år | Inkomst minst 50000 USD | Resultat |
|---|---|---|---|
| 1 | Sant | Sant | Godkänn lån |
| 2 | Sant | Falskt | Avslå lån |
| 3 | Falskt | Falskt | Hänvisa till en chef |
| 4 | Falskt | Falskt | Avslå lån |
Vi har fyra möjliga kombinationer, så fyra testfall måste köras.
- Testning av tillståndsövergångar: verifierar ett systems beteende när det övergår mellan olika tillstånd.
Exempel: Anta att du testar en enkel felhanterare. Statusdiagrammet ser ut så här:

De tillgängliga övergångarna är:
- Från Ny till Pågående
- Från Pågående till Under testning
- Från Under testning till Stängd
- Från Under testning tillbaka till Pågående
För fullständig täckning måste du se till att varje övergång och varje status testas minst en gång.
- Erfarenhetsbaserad testning, till exempel undersökande testning. Den här typen av testning innebär att tester utförs utifrån testarens erfarenhet av systemet eller liknande system samt kunskap om appens beteende.
Exempel: Föreställ dig att du testar en ny app för sociala medier. Ditt mål är att utforska appen för att hitta eventuella defekter eller problem som behöver åtgärdas.
Under explorativ testning kan du utföra följande åtgärder:
- Registrera ett nytt konto
- Ladda upp en profilbild
- Skriva ett inlägg
- Visa din egen profil
- Söka efter vänner
- Skicka en vänförfrågan
- Acceptera en vänförfrågan
- Gilla och kommentera ett inlägg
Med explorativ testning skulle du utföra dessa åtgärder på ett ostrukturerat sätt utan en förutbestämd plan. Fokus skulle ligga på att hitta defekter eller förbättringsområden i appen.
Om du vill lära dig mer om explorativ testning tyckte jag att Elisabeth Hendricksons bok, Explore It!, var mycket användbar.
Fördelar och nackdelar med testning med svart låda
Det finns naturligtvis både fördelar och nackdelar med att utföra testning med svart låda.
Fördelar:
- Det är mer tidskrävande
- Kontrollen över testfallen är begränsad
- Vissa specifika scenarier kan vara svåra att testa
- Begränsad information om grundorsaken till ett fel
- Vissa fel kan missas
- Begränsade möjligheter att testa prestanda och skalbarhet
Nackdelar:
- Att förbereda testmiljön och genomföra testerna kan vara mer tidskrävande
- Kontrollen över testfallen är begränsad
- Vissa specifika scenarier kan vara svåra att testa
- Begränsad information om grundorsaken till ett fel
- Vissa fel kan missas
- Begränsade möjligheter att testa prestanda och skalbarhet
När ska testning med svart låda användas?
Verktyg för testning med svart låda kan användas på alla testnivåer. Det är dock bättre att använda dem på en högre nivå och överlåta testning på lägre nivå till testning med vit låda. Det innebär att även om metoden kan användas för att testa på enhetsnivå, är metodiken med svart låda mer lämplig för systemtestning och acceptanstestning.
Tekniker för testning med svart låda kan användas för funktionella och icke-funktionella tester, till exempel prestandatestning, användbarhet och tillgänglighet.
De bör också tillämpas på nyimplementerade funktioner, eller så kan befintliga testfall som identifierats med dessa tekniker köras under regressionstestning.
Vad är testning med vit låda?
Testning med vit låda (ibland kallad testning med genomskinlig låda, testning med glaslåda, kodbaserad testning eller strukturell testning) är en testmetod som fokuserar på hur UAT fungerar internt.
Metoder för testning med vit låda:
- Satstäckning: alla kodsatser (kodrader) körs minst en gång på källkodsnivå. Formeln för att beräkna täckningen är:
Satstäckning = (Antal körda satser / Totalt antal satser i källkoden) * 100
Exempel: Anta att vi har följande kod:
if(condition1 or condition2)) {
print(“test 1 OK”)
}
else {
if(condition3) {
print(“test 2 OK”)
}
}
- För fullständig satstäckning måste du gå igenom varje kodrad minst en gång. Det innebär att flera tester behövs:
- condition1=true condition2=false, vilket skriver ut “test 1 OK”
- condition1=false, condition2=false och condition3=true, vilket skriver ut “test 2 OK”.
- Grenomfång: med denna teknik täcker testscenarierna alla grenar i kontrollflödesgrafen. Varje villkors möjliga sanna och falska utfall täcks minst en gång. Formeln som används för grenomfånget är:
- Täckning av förgreningar = (Antal körda förgreningar / Totalt antal förgreningar i koden) * 100
- Exempel: För samma kod är satstäckningen 100 %, men alla möjliga förgreningar täcks inte. Du behöver ytterligare ett test där:
- condition1=false, condition2=false, condition3=false – på så sätt täcker vi även den falska vägen i den andra if-satsen. Ingenting ska skrivas ut i detta testfall,
- Villkorstäckning: en omfattande teknik där alla vägar testas. Den säkerställer att varje programväg täcks av minst ett test. Den är särskilt användbar för komplexa appar. Exempel: För koden ovan behöver vi ytterligare ett test för fullständig villkorstäckning:
- condition1=false, condition1=true, vilket får samma resultat som det första testet, men täcker ett annat villkor för att nå resultatet.
Fördelar och nackdelar med vitlådetestning
Vi ska titta på fördelarna och nackdelarna med vitlådetestning.
Fördelar:
- Kan hitta fel tidigt i programvaruutvecklingens livscykel
- Testar den interna kodstrukturen.
- Testar kodtäckning och logik.
- Förbättrar kunskapen om kodbasen.
- Kan användas vid prestanda- och skalbarhetstestning.
Nackdelar:
- Fungerar bättre på en lägre testnivå
- Kräver goda kunskaper i systemets programmeringsspråk
- Begränsad testning ur slutanvändarens perspektiv
- Kan förbise scenarier från verkligheten
När ska vitlådetestning användas
Vitlådetester passar bäst på lägre nivåer, till exempel vid enhets- och integrationstestning. Detta hjälper till att identifiera fel och brister tidigt i utvecklingsprocessen. Det är en bra idé att köra dessa tester efter varje driftsättning, särskilt när man arbetar i en CI/CD-miljö.
Vitlådetestning kan användas för att testa funktionalitet, men den kan också användas för att upptäcka sårbarheter i systemet – något som skulle vara svårt att uppnå med svartlådetestningstekniker.
Svartlådetestning jämfört med vitlådetestning: sammanfattning
Här är de viktigaste skillnaderna mellan svartlådetestning och vitlådetestning:
| Svartlådetestning | Vitlådetestning |
| Ingen kunskap om den interna funktionaliteten behövs. | Bygger på en god förståelse av systemets kod. |
| Utförs oftast av kvalitetssäkringsteamet. | Utförs vanligtvis av utvecklarna. |
| Fokuserar på systemets beteende. | Fokuserar på programvarans logik och implementering. |
| Teknikerna omfattar: Ekvivalensklassindelning Analys av gränsvärden Beslutstabell Övergång mellan tillstånd | Teknikerna omfattar: Täckning av satser Täckning av förgreningar Villkorstäckning |
| Scenarier kan köras manuellt eller automatiseras. | Utförs vanligtvis genom automatiserad testning. |
| Passar bättre för högre testnivåer. | Fungerar bäst på lägre testnivåer. |
| Testar ur slutanvändarnas perspektiv. | Testar ur ett tekniskt perspektiv. |
Men låt oss inte glömma att även om båda metoderna har fördelar och nackdelar bör vi använda båda i vår testprocess för att få god test- och kodtäckning och hitta de viktigaste felen.
Slutsatser
Svartlådetestning och vitlådetestning är två olika metoder, och de passar för olika behov under utvecklingsprocessen. Vitlådetestning utförs främst av utvecklare och används vid testning på lägre nivåer, medan svartlådetestning utförs av kvalitetssäkringsteamet på högre nivåer. De fungerar bäst när de används tillsammans.
Om du tyckte om den här artikeln kan du prenumerera på nyhetsbrevet för att få alla nypublicerade artiklar om testning och kvalitetssäkring!
