Vad är modellbaserad testning?

⚡ Smart sammanfattning

Modellbaserad testning kontrollerar programvarans körningsbeteende mot förutsägelser gjorda av en ABStract-modell av systemet, generera testfall automatiskt från finita tillståndsmaskiner, tillståndsdiagram eller UML-notationer snarare än för hand.

  • 🧭 Kärnidé: En modell beskriver förväntat beteende, och varje testfall härleds från den modellen istället för att skrivas individuellt.
  • 🔀 Två ramverk: Offline-generering bygger sviten före körning, medan online-generering producerar steg i farten under körningen.
  • 📐 Modellnotationer: Finita tillståndsmaskiner, tillståndsdiagram, beslutstabeller, dataflödes- och kontrollflödesgrafer och UML-diagram.
  • ⚙️ Arbetsprocess: Bygg modellen, välj täckningskriterier, generera abstract-tester, konkretisera dem till skript, köra och sedan tilldela domslut.
  • 🛠️ Verktyg: GraphWalker, fMBT, Conformiq, MaTeLo, MBTsuite och Spec Explorer genererar banor från riktade grafer eller tillståndsmodeller.
  • ⚖️ Avvägning: Underhållet minskar och täckningen ökar, men tekniken kräver modelleringsförmåga och en initial investering i lärande.

Modellbaserad testning som automatiskt härleder testfall från en beteendemodell av systemet

Vad är modellbaserad testning?

Modellbaserad testning är en mjukvarutestningsteknik där körtidsbeteendet hos den testade programvaran kontrolleras mot förutsägelser gjorda av en modell. En modell är en beskrivning av ett systems beteende, uttryckt i termer av inmatningssekvenser, handlingar, villkor, utdata och dataflödet från indata till utdata. En användbar modell måste vara praktiskt förståelig, återanvändbar och delbar, och den måste beskriva det testade systemet exakt.

Det finns många modeller tillgängliga, och var och en beskriver en annan aspekt av systembeteende. Vanliga exempel är:

Modellbaserad testning beskriver hur ett system beter sig som svar på en handling som bestäms av modellen. Ange handlingen och kontrollera sedan om systemet svarar som modellen förutspår. Eventuella skillnader mellan de två är antingen en defekt i programvaran eller ett fel i modellen, och båda är värda att hitta.

Det är en lätt formell metod för att validera ett system, och den kan lika gärna tillämpas på hårdvarutestning som på mjukvarutestning. Eftersom testerna kommer från en specifikation av beteende snarare än från koden, passar tekniken med svartbox testning familj av tekniker för mjukvarutestning.

Modellbaserat testexempel

Det enklaste sättet att läsa en beteendemodell är att följa den till fullo. Diagrammet nedan visar en liten textredigeringsuppgift, där varje ruta representerar ett tillstånd som applikationen kan vara i och varje pil representerar en åtgärd en användare kan vidta.

Modellbaserat testningsexempel som modellerar tillstånd och handlingar vid skrivning av en dikt i Anteckningar

Modellen förklarar ett förenklat tillvägagångssätt för att skriva poesi i Anteckningar och de möjliga åtgärderna relaterade till varje steg. För varje åtgärd, som att starta programmet, skriva in en dikt eller spara filen, en testfall kan genereras och utdata verifieras. Att gå en annan väg genom samma diagram, till exempel starta och stänga utan att spara, producerar ett annat testfall utan extra designkostnad, vilket är det ekonomiska argumentet för hela tekniken.

Typer av MBT

Det finns två typer av modellbaserade testramverk, och skillnaden mellan dem är helt enkelt när teststegen produceras:

  • Offline / a priori: Generering av testsviter innan de körs. En testsvit är en samling testfall, och i detta läge lagras, granskas och körs om sviten som alla andra automatiseringstestning tillgång.
  • Online / i farten: Generering av testsviter under testkörning, där nästa steg väljs baserat på hur systemet faktiskt reagerade på det föregående.

Offline-generering passar reglerade miljöer som behöver en granskningsbar, repeterbar svit. Online-generering passar långvariga utforskande sessioner mot tillståndskänsliga system, eftersom generatorn kan reagera på det verkliga svaret snarare än det förutspådda.

Hur modellbaserad testning fungerar

Oavsett vilket ramverk som används följer tekniken samma fem steg. Varje steg producerar en artefakt som nästa steg konsumerar, vilket är anledningen till att modellen, och inte testskriptet, blir det som teamet underhåller.

  • Steg 1: Bygg modellen. Översätt krav eller en specifikation till en abstracen modell för förväntat beteende, som definierar tillstånden, övergångarna mellan dem och de insignaler som utlöser varje övergång.
  • Steg 2: Välj urvalskriterier för testet. Kriterier talar om för generatorn när den ska stoppa. Vanliga kriterier är täckning av alla tillstånd, som besöker varje tillstånd minst en gång; täckning av alla övergångar, som utövar varje pil minst en gång; och täckning av sökvägar eller dataflöden för djupare utforskning.
  • Steg 3: Generera magmusklertract-testfall. Verktyget går runt modellen och avger sekvenser av abstracde steg som uppfyller de valda kriterierna, tillsammans med det förväntade resultatet vid varje steg.
  • Steg 4: Konkretisera magmusklernatract-tester. Ett adapterlager mappar varje abstracatt vidta en verklig åtgärd mot systemet, såsom en interaktion med användargränssnittet, en API samtal eller ett protokollmeddelande. Den här kartanping skrivs en gång och återanvänds av varje genererat test.
  • Steg 5: Verkställ och tilldela domar. De konkreta testerna körs mot systemet som testas, varje observerat svar jämförs med modellförutsägelsen och ett godkänt eller underkänt omdöme registreras. tractillbaka till modellelementet som producerade den.

Ocuco-landskapet tracDen praktiska utdelningen som skapades i steg 5 är den praktiska vinsten. När ett krav ändras ändras modellen, och de berörda testerna genereras istället för att skrivas om, vilket är anledningen till att team som utför frekventa regressionstestning mot en stabil specifikation gynnas mest.

Olika modeller i testning

För att förstå MBT är det nödvändigt att förstå några av de modeller som förklaras nedan. Var och en av dem byter uttryckskraft mot ansträngning, så valet beror på hur komplicerat beteendet som testas verkligen är.

Finita tillståndsmaskiner

Denna modell hjälper testare att bedöma resultatet beroende på vald ingång. Olika kombinationer av ingångarna kan resultera i ett motsvarande tillstånd i systemet.

Systemet kommer att ha ett specifikt tillstånd och ett aktuellt tillstånd, vilket styrs av en uppsättning indata som ges av testarna.

Tänk på exemplet nedan. Ett system låter anställda logga in i en applikation. Medarbetarens nuvarande status är "Ute" och blir "In" när medarbetaren loggar in i systemet. I statusen "In" kan en medarbetare visa, skriva ut och skanna dokument i systemet.

Tillståndsmaskinen för det exemplet visas här, med varje pil märkt med den ingång som orsakar övergången.

Finita tillståndsmaskinmodell som visar ut- och intillstånden för ett anställdas inloggningssystem

Statliga diagram

Ett tillståndsdiagram är en utvidgning av den finita tillståndsmaskinen och kan användas för komplexa och realtidssystem. Tillståndsdiagram beskriver olika beteenden hos systemet, de har ett bestämt antal tillstånd, och systemets beteende analyseras och representeras i form av händelser för varje tillstånd. Den utvidgning som är viktig i praktiken är hierarkin: ett tillståndsdiagram tillåter kapslade och parallella tillstånd, så en maskin som skulle behöva dussintals platta tillstånd kan ritas kompakt.

Till exempel rapporteras fel i felhanteringsverktyget med statusen Ny. När ett fel har åtgärdats av utvecklare måste statusen ändras till Åtgärdat. Om ett fel inte är åtgärdat ändras statusen till Återöppna. Tillståndsdiagram bör utformas så att en händelse anropas för varje tillstånd.

Den fellivscykeln ritas nedan, där varje status visas som ett tillstånd och varje arbetsflödesåtgärd som den händelse som flyttar felet mellan dem.

Tillståndsdiagram för en defektlivscykel som går igenom statusarna Ny, Åtgärdad och Återöppnad

Unified Modelling Language (UML)

Unified Modelling Language (UML) är ett standardiserat modelleringsspråk för allmänt bruk. UML innehåller en uppsättning grafiska notationstekniker som används för att skapa visuella modeller som kan beskriva mycket komplicerat systembeteende.

UML har notationer som:

  • Stationer & aktiviteter
  • Skådespelare
  • Affärsprocess
  • Komponenter
  • Programmeringsspråk

Aktivitets- och tillståndsmaskindiagrammen är de som testgeneratorer läser oftast, vilket exempel-UML-modellen nedan illustrerar.

UML-diagramnotation som används som källmodell för att generera testfall

Modellbaserade testverktyg

En modell på papper genererar ingenting på egen hand. En generator behövs för att följa modellen och generera testvägar, och verktygsmarknaden är uppdelad i generatorer med öppen källkod och kommersiella testdesignplattformar.

  • GraphWalker — ett verktyg med öppen källkod som läser modeller formade som riktade grafer och genererar testvägar från dem, med valbara generatorer och stoppvillkor.
  • fMBT — en uppsättning modellbaserade testverktyg med öppen källkod från Intel som stöder testgenerering och exekvering mot tillståndsmodeller.
  • Conformiq — en kommersiell automatiserad testdesignprodukt som härleder testfall och skript från grafiska beteendemodeller.
  • MaTeLo och MBTsuite — kommersiella plattformar inriktade på statistiska användningsmodeller och generering av tester i befintliga automatiseringsramverk.
  • Spec Explorer - Microsofts modellbaserade testtillägg för Visual Studio, flitigt citerat i litteraturen om protokolltestning.

Urvalet beror mindre på funktionslistor än på två frågor: vilken notation teamet faktiskt kan rita, och om verktyget kan generera tester i det automatiseringsramverk som redan används. En generator som producerar sviter som ingen kan köra lägger till ett steg i processen istället för att ta bort ett.

Modellbaserad testning kontra traditionell testdesign

Kontrasten mot handskriven testdesign är värd att lyfta fram, eftersom de två metoderna misslyckas på olika ställen snarare än att den ena helt enkelt är bättre.

Aspect Modellbaserad testning Traditionell testdesign
Källa för testfall Genereras automatiskt från en beteendemodell Skrivet individuellt av en testare utifrån kraven
Effekt av en kravändring Uppdatera modellen, generera de berörda testerna på nytt Lokalisera och redigera varje påverkat testfall manuellt
Rapportering Mätt mot modellkriterier som alla tillstånd eller alla övergångar Mätt mot krav och beroende på testarens bedömning
Kostnad på förhand Hög: modelleringsförmåga, verktygsuppsättning och ett adapterlager Låg: en testare kan börja skriva omedelbart
Bästa passform Tillståndsstarka, långlivade system med stabil specifikation Korta projekt, engångsreportage och utforskande arbete
Huvudfelläge En felaktig eller inaktuell modell genererar tyst felaktiga tester Luckor och dubbletter ackumuleras i en stor svit

Utvecklingen nedan sätter tekniken i sitt sammanhang: manuell testkörning gav vika för automatiserad körning, och modellbaserade metoder flyttar automatiseringen en nivå tidigare, in i själva testdesignen.

Utvecklingen av mjukvarutestning från manuell exekvering via automatisering till modellbaserad testning

Utmaningar med modellbaserad testning

Implementering av MBT i en organisation kräver en avsevärd investering av pengar och ansträngning. Följande är nackdelarna med MBT i mjukvaruutveckling:

  • Testare behöver modelleringsfärdigheter som traditionell testdesign inte kräver.
  • Inlärningskurvan är lång, och det första projektet kostar oftast mer än det sparar.
  • Själva modellen kan vara svår att förstå och granska, särskilt när den väl växer.
  • En modell som avviker från specifikationen genererar säkra, felaktiga tester.
  • Adapterlagret som förvandlar magmusklernatracStegen till verkliga handlingar måste skrivas och underhållas separat.
  • Modellstorleken växer snabbt, så en obegränsad tillståndsmodell kan producera fler sökvägar än något team kan utföra.

Inget av detta är en anledning att undvika tekniken, men tillsammans förklarar de varför MBT vanligtvis introduceras på ett stabilt delsystem först snarare än över ett helt system. livscykel för mjukvarutestning genast.

Fördelar med modellbaserad testning

I motsats till dessa kostnader är fördelarna med MBT:

  • Enkelt underhåll av testfall och testsviter, eftersom modellen redigeras snarare än de enskilda testerna.
  • Kostnadsreduktion under ett långvarigt projekts livslängd.
  • Förbättrad testtäckning, eftersom generatorn utforskar vägar som en person skulle hoppa över.
  • Olika genererade sviter kan köras parallellt på ett valfritt antal maskiner.
  • Tidig defektdetektering, eftersom oklarheter uppstår medan modellen byggs, innan någon kod exekveras.
  • En ökning av antalet defekter som hittas för samma testinsats.
  • Tidsbesparingar vid testdesign när modellen och adaptern väl finns.
  • Förbättrad arbetstillfredsställelse för testare, i takt med att arbetet övergår från repetitivt skriptarbete till modellering och analys.

Testare konstruerar mentala modeller ändå medan de arbetar, och MBT flyttar helt enkelt dessa mentala modeller till papper där de kan granskas, versioneras och återanvändas. Var tekniken passar in i de andra tillgängliga metoderna beskrivs i typer av mjukvarutestning.

Vanliga frågor

Svart låda. Tester härleds från en modell av specificerat beteende, inte från källkod. Tekniken blir grå låda endast när modellen byggs från interna designdokument snarare än externa krav.

Endast beteendet som är värt att generera tester för. Modellera ett tillståndsbaserat arbetsflöde, såsom utcheckning eller en defektlivscykel, på den grövsta nivån som fortfarande skiljer verkliga resultat åt. Att modellera allt producerar en tillståndsexplosion som ingen kan utföra.

Modellen hör hemma i versionshanteringen tillsammans med koden, med en namngiven ägare och ett granskningssteg i samma ändringsprocess som specifikationen. En modell utan ägare avviker, och en avvikande modell genererar säkra men felaktiga tester.

Nej. En generator utforskar bara vad modellen beskriver, så allt som modellen utelämnar förblir oprövad. Utforskande sessioner är fortfarande det sätt som team hittar beteenden som ingen specificerat, och de avslöjar ofta de luckor som modellen sedan absorberar.

Långlivade tillståndskänsliga system med en skriftlig specifikation: kommunikationsprotokoll, inbyggda och fordonsstyrenheter, medicintekniska produkter, bankarbetsflöden och telekomutrustning. Dessa domäner kombinerar en stabil specifikation med för många juridiska sekvenser för att räkna upp för hand.

När specifikationen ändras snabbare än modellen kan följa, när funktionen är liten eller kortlivad, eller när ingen i teamet kan underhålla notationen. I dessa situationer kostar handskrivna fall mindre jämfört med projektet.

Maskininlärning härleder utkast till tillståndsmodeller från produktionsloggar och inspelade sessioner, flaggar övergångar som modellen aldrig täcker och rangordnar genererade sökvägar efter felhistorik så att de sekvenser med högst risk körs först. Ingenjörer validerar fortfarande den härledda modellen.

Ja, främst för adapterlagret: stegmetoderna, sidobjekten och påståendena som binder abstracModellåtgärder till verkliga anrop. Att bestämma vad modellen ska innehålla och vilka täckningskriterier som är viktiga förblir en designbedömning.

Sammanfatta detta inlägg med: