Skip to main content

Ett av mina favorituttryck är ”arbeta smartare, inte hårdare”. Detta gäller naturligtvis även programvarutestning. Det innebär att jag vill ha ett sätt att utföra så lite arbete som möjligt och samtidigt skapa så stort värde som möjligt.

Så låt oss prata om tekniker för svartlådetestning och hur de kan tillämpas för att skapa testfall och hitta de viktigaste felen i applikationen som testas.

Vad är svartlådetestning?

Låt oss börja med att förstå vad svartlådetestning är—i motsats till vitlådetestning. Det är en typ av programvarutestning där testaren inte har tillgång till den interna strukturen i appen som testas. I stället kan testaren endast komma åt systemets indata och utdata och testa programvarans funktionalitet utifrån kravspecifikationerna.

Continue Reading for Free

Create a free account to finish this article, plus get ongoing access to timely insights and practical resources.

Kom ihåg att svartlådetestning endast omfattar programvarans externa funktionalitet och inte verifierar hur källkoden fungerar internt. Därför kallas den ibland ”beteendetestning”. Den bör alltså användas tillsammans med vitlådetestning, som fokuserar på att testa den interna koden. På så sätt kan du känna dig säkrare på att programvaran är fullständigt testad och så felfri som möjligt.

Get regular tech leadership wisdom for delivering better software and systems.

5 typer av svartlådetestningstekniker

Vi använder dessa tekniker för svartlådetestning för att öka testtäckningen och samtidigt minska antalet testfall. Genom att identifiera rätt testdata kan vi skapa så få tester som möjligt med största möjliga täckning.

De tekniker jag kommer att tala om kan tillämpas på alla testnivåer—inklusive enhetstestning, integrationstestning och systemtester, samt funktionell och icke-funktionell testning.

1. Ekvivalensklassindelning

Ekvivalensklassindelning är en teknik som används inom programvarutestning för att dela upp möjliga indata i en uppsättning ekvivalensklasser, eller partitioner, med målet att hitta och testa en representativ uppsättning indata från varje klass. Alla element som tillhör en ekvivalensklass förväntas ge samma utdata, så det bör räcka att testa ett enda värde från mängden.

Detta bidrar till att minska antalet testfall som behöver skapas och köras, samtidigt som en god täckning bibehålls. Klasserna definieras utifrån funktionella eller icke-funktionella krav och kan ta hänsyn till faktorer som datatyper, intervall och relationer mellan indatavärden.

När du definierar ekvivalensklasserna bör du alltid se till att även inkludera de ogiltiga, så att du också täcker negativa testscenarier. Enligt min erfarenhet upptäcks de flesta fel när ogiltiga indata används, snarare än giltiga.

Vi tittar på ett exempel:

Du har ett valfritt fält som endast tillåter heltalsvärden mellan 1 och 10. Då får du följande ekvivalensklasser:

  • inget värde (giltig partition)
  • värden mellan 1 och 10 (giltig partition)
  • värden mindre än 1 (ogiltig partition)
  • värden större än 10 (ogiltig partition)

Du behöver alltså endast fyra testfall – ett för varje partition. Det tillför inget värde att testa samma partition igen med flera värden—om du testade värdet 5 skulle du få samma resultat för värdena 4, 8 och så vidare.   

2. Gränsvärdesanalys

Gränsvärdesanalys är en teknik som används inom programvarutestning för att identifiera och testa indatavärden vid eller nära kanten, eller ”gränsen”, för programmets indatadomän. Tanken är att dessa värden löper större risk att orsaka fel eller oväntat beteende, eftersom de ofta omfattar specialfall eller gränsfall som programmet kanske inte har utformats för att hantera korrekt.

Om du till exempel testar ett program som accepterar ett heltalsintervall mellan 1 och 100 är gränsvärdena 1, 100 och alla värden precis utanför intervallet, till exempel 0 och 101.

De två typerna av gränsvärdestestning är:

  • Testning av inre gränsvärden: fokuserar på de indatavärden som ligger precis innanför kanten av indatadomänen, till exempel de lägsta och högsta tillåtna värdena.
  • Testning av yttre gränsvärden: fokuserar på de indatavärden som ligger precis utanför kanten av indatadomänen, till exempel värden som ligger något över eller under de lägsta och högsta tillåtna värdena.

Gränsanalys är en viktig teknik för att hitta fel och säkerställa att ett program fungerar korrekt för alla indata, inte bara för dem i mitten av indatadomänen. Detta kan hjälpa till att identifiera och åtgärda buggar som annars kanske skulle förbli oupptäckta.

3. Testning med beslutstabeller

Vid testning med beslutstabeller testar vi programvarans logik och beteende när flera villkor är tillgängliga. Det är ett sätt att representera relationerna mellan indata och utdata i tabellform. Tabellen har vanligtvis kolumner för villkor och rader för de olika kombinationerna. För varje rad behöver du skapa ett specifikt testfall. Det förväntade resultatet för testfallet bör också inkluderas i tabellen.

Låt oss föreställa oss ett exempel på ett programvarukrav där denna teknik kan användas: en app som beräknar kostnaden för ett köp baserat på artikel, antal och leveransmetod:

I det här exemplet är Artikel, Antal och Leveransmetod indata, medan Kostnad är utdata. Tabellen visar alla möjliga kombinationer av indata och motsvarande utdata i varje fall. Genom att använda denna tabell kan du snabbt identifiera testfallen och deras förväntade resultat, vilket gör det enkelt att testa och verifiera de tillgängliga kombinationerna.

Testning med beslutstabeller är användbar när ett program har flera indata och villkor som samverkar på komplexa sätt. Genom att dela upp indata och villkor i en tabell blir det enklare att identifiera och testa alla möjliga kombinationer och variationer.

4. Testning av tillståndsövergångar

Testning av tillståndsövergångar är en svartlådebaserad testteknik där vi testar ett programs beteende när det övergår mellan olika tillstånd eller lägen. Ett tillstånd är ett villkor eller en uppsättning villkor som programmet kan befinna sig i, och en övergång är en förändring från ett tillstånd till ett annat. Tanken bakom testning av tillståndsövergångar är att identifiera alla möjliga tillstånd och övergångar som ett program kan genomgå och sedan skapa testfall för att verifiera att programmet beter sig korrekt i varje tillstånd och gör giltiga övergångar mellan tillstånden.

Ett exempel på testning av tillståndsövergångar gäller en e-handelswebbplats där kunder kan lägga till artiklar i sin varukorg, gå vidare till kassan, ange sina betalningsuppgifter och leveransuppgifter och slutligen lägga en beställning. Tillstånden i detta exempel skulle vara:

  • Bläddra bland produkter
  • Lägga till artiklar i varukorgen
  • Gå till kassan
  • Ange betalnings- och leveransuppgifter
  • Orderbekräftelse

Övergångarna mellan dessa tillstånd skulle vara:

  • Bläddra bland produkter -> Lägga till artiklar i varukorgen
  • Lägga till artiklar i varukorgen -> Gå till kassan
  • Gå till kassan -> Ange betalnings- och leveransuppgifter
  • Ange betalnings- och leveransuppgifter -> Orderbekräftelse

Denna teknik hjälper till att identifiera och testa alla möjliga vägar som en användare kan ta genom systemet och kan bidra till att hitta och åtgärda buggar som är relaterade till specifika flöden. Testning av tillståndsövergångar är särskilt användbar för att testa system med komplexa interaktioner, till exempel finansiella system, e-handelssystem eller system som styr fysiska enheter.

5. Parvis testning

Parvis testning är en svartlådebaserad testteknik som används för att skapa testfall som täcker alla möjliga par av kombinationer av indatavärden för en given uppsättning parametrar. Den används när antalet tillgängliga indata är stort, vilket skulle göra det extremt svårt att testa alla möjliga kombinationer mellan dem.

Låt oss säga att vi har en app med tre fält: A, B och C. Varje fält kan ta emot tre möjliga värden: 1, 2 eller 3.

Med traditionella testmetoder skulle vi behöva testa 27 (3^3) möjliga kombinationer av indata individuellt för att validera alla möjliga kombinationer. Detta skulle vara extremt tidskrävande och ineffektivt.

Med parvis testning kan du identifiera användningsfall som täcker alla möjliga unika kombinationer av indata. Det skulle kunna se ut så här:

Som du kan se har antalet tester minskat drastiskt, från 27 till 9. Testtäckningen har inte förändrats; vi säkerställer fortfarande att alla möjliga kombinationer av värden tas med i beräkningen.

Det finns flera verktyg för parvis testning som kan användas. Nedan listar jag några exempel:

  • AllPairs: Ett verktyg för att skapa parvisa testfall baserat på användarspecificerade parameterlistor och begränsningar. Det finns både som en version med öppen källkod och som en kommersiell version.
  • PICT (Parvis oberoende kombinatorisk testning): Ett verktyg som använder en genetisk algoritm för att generera parvisa testfall. Det finns som ett verktyg med öppen källkod.
  • SmartBear TestComplete: Ett kommersiellt verktyg för testautomatisering som har inbyggt stöd för parvis testning.
  • Pairwise Test Case Generator: Ett verktyg med öppen källkod som finns på GitHub och kan användas för att generera parvisa testfall.
  • Parvisa tester kan också genereras med Excel eller OpenOffice Calc genom att använda makron eller insticksprogram för att generera dina testfall.

Detta är bara några exempel, och det kan även finnas andra tillgängliga verktyg. Jag rekommenderar att du undersöker och utvärderar de olika tillgängliga alternativen och tar reda på vilket verktyg som fungerar bäst för dina specifika behov och krav.

Avslutande tankar

Att använda dessa tekniker är ett utmärkt sätt att uppnå god täckning i alla skeden av programvaruutvecklingens livscykel. Det kan bli ännu bättre om du lägger till andra typer i din testprocess, till exempel explorativ testning eller felgissning, kompatibilitetstestning, användbarhetstestning och så vidare.

Om de resulterande testfallen dessutom hamnar i regressionstestsviten bör du överväga att automatisera dem – för UI-tester kan du använda verktyg som Selenium, Cypress och Appium. För API-testning kan du låta utvecklingsteamet skriva integrationstester, eller använda verktyg som Postman. 

Om du tyckte att den här artikeln var användbar föreslår jag att du prenumererar på QA Lead-nyhetsbrevet, där du får information om allt nytt innehåll och alla nya handledningar om kvalitetssäkring och testning.