Wat is modelgebaseerd testen?

⚡ Slimme samenvatting

Modelgebaseerd testen controleert het runtimegedrag van software aan de hand van voorspellingen die zijn gedaan door een abstract model.tracHet modelleren van het systeem, waarbij testgevallen automatisch worden gegenereerd op basis van eindige toestandsautomaten, toestandsdiagrammen of UML-notaties in plaats van handmatig.

  • 🧭 Kernidee: Een model beschrijft het verwachte gedrag, en elk testgeval is afgeleid van dat model in plaats van afzonderlijk te worden geschreven.
  • 🔀 Twee raamwerken: Bij offline generatie wordt de suite vóór de uitvoering opgebouwd, terwijl bij online generatie de stappen tijdens de uitvoering dynamisch worden gegenereerd.
  • 📐 Modelnotaties: Eindige toestandsautomaten, toestandsdiagrammen, beslissingstabellen, dataflow- en controlflow-grafieken en UML-diagrammen.
  • ⚙️ Werkproces: Bouw het model, kies dekkingscriteria, genereer abstract-tests uitvoeren, deze concretiseren in scripts, uitvoeren en vervolgens oordelen toekennen.
  • tooling: GraphWalker, fMBT, Conformiq, MaTeLo, MBTsuite en Spec Explorer genereren paden vanuit gerichte grafieken of toestandsmodellen.
  • Afweging: Het onderhoud neemt af en de dekking neemt toe, maar de techniek vereist modelleervaardigheden en een initiële investering in kennis.

Modelgebaseerd testen leidt automatisch testgevallen af ​​uit een gedragsmodel van het systeem.

Wat is modelgebaseerd testen?

Modelgebaseerd testen Testen is een softwaretesttechniek waarbij het runtimegedrag van de te testen software wordt vergeleken met voorspellingen van een model. Een model is een beschrijving van het gedrag van een systeem, uitgedrukt in termen van invoersequenties, acties, voorwaarden, uitvoer en de datastroom van invoer naar uitvoer. Een bruikbaar model moet praktisch begrijpelijk, herbruikbaar en deelbaar zijn, en het moet het te testen systeem nauwkeurig beschrijven.

Er zijn talloze modellen beschikbaar, en elk model beschrijft een ander aspect van het systeemgedrag. Veelvoorkomende voorbeelden zijn:

Modelgebaseerd testen beschrijft hoe een systeem reageert op een actie die door het model is bepaald. De actie wordt ingevoerd en vervolgens wordt gecontroleerd of het systeem reageert zoals het model voorspelt. Elke afwijking tussen beide duidt op een defect in de software of een fout in het model, en het is de moeite waard om beide op te sporen.

Het is een lichtgewicht, formele methode voor het valideren van een systeem, en het is even goed toepasbaar op hardwaretesten als op softwaretesten. Omdat de tests gebaseerd zijn op een specificatie van het gedrag in plaats van op de code, sluit de techniek aan bij de black box testen familie van software testtechnieken.

Modelgebaseerd testvoorbeeld

De eenvoudigste manier om een ​​gedragsmodel te lezen, is door het stap voor stap te doorlopen. Het onderstaande diagram modelleert een kleine tekstbewerkingstaak, waarbij elk vakje een toestand van de applicatie vertegenwoordigt en elke pijl een actie die een gebruiker kan uitvoeren.

Voorbeeld van modelgebaseerd testen: het modelleren van de toestanden en acties bij het schrijven van een gedicht in Kladblok.

Het model legt een vereenvoudigde aanpak uit voor het schrijven van poëzie in Kladblok en de mogelijke acties die bij elke stap horen. Voor elke actie, zoals het starten van de applicatie, het invoeren van een gedicht of het opslaan van het bestand, wordt een testcase De resultaten kunnen worden gegenereerd en geverifieerd. Door bijvoorbeeld een ander pad door hetzelfde diagram te volgen, zoals starten en sluiten zonder op te slaan, ontstaat een andere testcase zonder extra ontwerpkosten. Dit is het economische argument voor de hele techniek.

Soorten MBT

Er bestaan ​​twee soorten frameworks voor modelgebaseerd testen, en het verschil daartussen zit hem simpelweg in het moment waarop de teststappen worden uitgevoerd:

  • Offline / a priori: Het genereren van testsuites vóór de uitvoering ervan. Een testsuite is een verzameling testgevallen, en in deze modus wordt de suite opgeslagen, beoordeeld en opnieuw uitgevoerd zoals elke andere suite. automatisering testen troef.
  • Online / spontaan: Het genereren van testsuites tijdens de testuitvoering, waarbij de volgende stap wordt gekozen op basis van hoe het systeem daadwerkelijk op de vorige stap heeft gereageerd.

Offline generatie is geschikt voor gereguleerde omgevingen die een controleerbare, herhaalbare reeks resultaten vereisen. Online generatie is geschikt voor langdurige verkennende sessies met stateful systemen, omdat de generator kan reageren op de werkelijke respons in plaats van op de voorspelde respons.

Hoe werkt modelgebaseerd testen?

Welk framework er ook gebruikt wordt, de techniek doorloopt dezelfde vijf fasen. Elke fase produceert een artefact dat in de volgende fase gebruikt wordt. Daarom is het model, en niet het testscript, hetgeen dat het team onderhoudt.

  • Stap 1: Bouw het model. Vertaal eisen of een specificatie naar een abstracte vorm.tracEen model van het verwachte gedrag, waarin de toestanden, de overgangen daartussen en de inputs die elke overgang teweegbrengen, worden gedefinieerd.
  • Stap 2: Kies de selectiecriteria voor de tests. Criteria geven de generator aan wanneer hij moet stoppen. Veelgebruikte criteria zijn: dekking van alle toestanden, waarbij elke toestand minstens één keer wordt bezocht; dekking van alle overgangen, waarbij elke pijl minstens één keer wordt doorlopen; en pad- of gegevensstroomdekking voor een diepere verkenning.
  • Stap 3: Genereer abstract testgevallen. De tool doorloopt het model en genereert reeksen abs.tract stappen die voldoen aan de gekozen criteria, samen met het verwachte resultaat bij elke stap.
  • Stap 4: De buikspieren concretiserentract-toetsen. Een adapterlaag brengt elk abs in kaart.tracom over te gaan tot een daadwerkelijke actie tegen het systeem, zoals een UI-interactie, een API oproep of een protocolbericht. Deze kaartping wordt eenmaal geschreven en hergebruikt door elke gegenereerde test.
  • Stap 5: Uitvoeren en uitspraken toewijzen. Bij de concrete tests die op het te testen systeem worden uitgevoerd, wordt elke waargenomen respons vergeleken met de modelvoorspelling en wordt een oordeel (geslaagd of niet geslaagd) vastgelegd. tracterugverwezen naar het modelelement dat het heeft geproduceerd.

De tracDe in stap 5 gecreëerde flexibiliteit is de praktische winst. Wanneer een vereiste verandert, verandert het model en worden de betreffende tests opnieuw gegenereerd in plaats van herschreven. Daarom werken teams die frequent regressietesten Het voordeel van een stabiele specificatie is het grootst.

Verschillende modellen in testen

Om MBT te begrijpen, is het nodig om enkele van de onderstaande modellen te begrijpen. Elk model maakt een afweging tussen expressieve kracht en inspanning, dus de keuze hangt af van hoe complex het te testen gedrag daadwerkelijk is.

Eindige-toestandsmachines

Dit model helpt testers het resultaat te beoordelen op basis van de geselecteerde invoer. Verschillende combinaties van de invoer kunnen resulteren in een overeenkomstige toestand van het systeem.

Het systeem heeft een specifieke toestand en een huidige toestand, die wordt bepaald door een reeks invoerwaarden die door de testers worden gegeven.

Neem het volgende voorbeeld. Een systeem stelt medewerkers in staat om in te loggen op een applicatie. De huidige status van de medewerker is 'Uit' en verandert in 'In' zodra de medewerker is ingelogd. In de 'In'-status kan een medewerker documenten in het systeem bekijken, afdrukken en scannen.

De toestandsmachine voor dat voorbeeld wordt hier weergegeven, waarbij elke pijl is gelabeld met de invoer die de overgang veroorzaakt.

Eindige-toestandsmachinemodel dat de Uit- en In-toestanden van een werknemersaanmeldingssysteem weergeeft

Staatskaarten

Een toestandsdiagram is een uitbreiding van de eindige toestandsmachine en kan worden gebruikt voor complexe en realtime systemen. Toestandsdiagrammen beschrijven verschillende gedragingen van het systeem, ze hebben een vast aantal toestanden en het gedrag van het systeem wordt geanalyseerd en weergegeven in de vorm van gebeurtenissen voor elke toestand. De uitbreiding die in de praktijk van belang is, is de hiërarchie: een toestandsdiagram maakt geneste en parallelle toestanden mogelijk, waardoor een machine die tientallen platte toestanden nodig zou hebben, compact kan worden weergegeven.

Defecten worden bijvoorbeeld in de defectbeheertool geregistreerd met de status 'Nieuw'. Zodra een defect door ontwikkelaars is opgelost, moet de status worden gewijzigd naar 'Opgelost'. Als een defect niet wordt opgelost, verandert de status naar 'Heropend'. Statecharts moeten zo worden ontworpen dat voor elke status een gebeurtenis wordt aangeroepen.

De levenscyclus van een defect is hieronder weergegeven, waarbij elke status als een toestand en elke workflowactie als de gebeurtenis die het defect tussen de toestanden verplaatst, wordt getoond.

Toestandsdiagram van de levenscyclus van een defect, met de statussen Nieuw, Opgelost en Heropend.

Uniforme modelleringstaal (UML)

Uniforme modelleringstaal (UML) UML is een gestandaardiseerde, algemene modelleertaal. UML omvat een reeks grafische notatietechnieken die worden gebruikt om visuele modellen te creëren die zeer complex systeemgedrag kunnen beschrijven.

UML heeft notaties zoals:

  • Activiteiten
  • Acteurs
  • Bedrijfsproces
  • Componenten
  • Programmeertaal

De activiteits- en toestandsdiagrammen zijn de diagrammen die testontwikkelaars het vaakst lezen, zoals het onderstaande UML-modelvoorbeeld illustreert.

UML-diagramnotatie gebruikt als bronmodel voor het genereren van testgevallen.

Modelgebaseerde testtools

Een model op papier genereert op zichzelf niets. Er is een generator nodig om het model te doorlopen en testpaden te genereren, en de markt voor dergelijke tools is opgesplitst in open-source generators en commerciële testontwerpplatformen.

  • GraphWalker — een open-source tool die modellen leest die de vorm hebben van gerichte grafieken en daaruit testpaden genereert, met selecteerbare generatoren en stopvoorwaarden.
  • fMBT — een open-source, modelgebaseerde testtoolset van Intel die het genereren en uitvoeren van tests tegen toestandsmodellen ondersteunt.
  • Conformiq — een commercieel, geautomatiseerd testontwerpproduct dat testgevallen en -scripts afleidt uit grafische gedragsmodellen.
  • MaTeLo en MBTsuite — commerciële platforms gericht op statistische gebruiksmodellen en het genereren van tests voor bestaande automatiseringsframeworks.
  • Spec Explorer - MicrosoftDe modelgebaseerde testuitbreiding van Visual Studio, die veelvuldig wordt aangehaald in de literatuur over protocoltesten.

De keuze hangt minder af van de functielijst dan van twee vragen: welke notatie het team daadwerkelijk kan gebruiken en of de tool tests kan genereren binnen het bestaande automatiseringsframework. Een generator die testsuites produceert die niemand kan uitvoeren, voegt een extra stap toe aan het proces in plaats van er een te verwijderen.

Modelgebaseerd testen versus traditioneel testontwerp

Het contrast met handgeschreven toetsen is het vermelden waard, omdat de twee benaderingen op verschillende punten tekortschieten en niet zozeer dat de ene simpelweg beter is dan de andere.

Aspect Modelgebaseerd testen Traditioneel testontwerp
Bron van testgevallen Automatisch gegenereerd op basis van een gedragsmodel. Individueel geschreven door een tester op basis van de vereisten.
Effect van een wijziging in de vereisten Werk het model bij en genereer de betreffende tests opnieuw. Zoek en bewerk elk getroffen testgeval handmatig.
Dekking Gemeten aan de hand van modelcriteria zoals alle toestanden of alle overgangen. Gemeten aan de hand van de vereisten en afhankelijk van het oordeel van de tester.
Kosten vooraf Hoog: modelleervaardigheid, gereedschapsinstellingen en een adapterlaag Laag: een tester kan direct beginnen met schrijven.
Beste pasvorm Stateful, duurzame systemen met een stabiele specificatie. Korte projecten, eenmalige projecten en verkennend werk
Belangrijkste storingsmodus Een onjuist of verouderd model genereert ongemerkt onjuiste tests. Er ontstaan ​​hiaten en duplicaten in een grote suite.

De onderstaande evolutie plaatst de techniek in de juiste context: handmatige testuitvoering maakte plaats voor geautomatiseerde uitvoering, en modelgebaseerde benaderingen verplaatsen de automatisering naar een eerder stadium, namelijk naar het testontwerp zelf.

De evolutie van softwaretesten, van handmatige uitvoering via automatisering naar modelgebaseerd testen.

Uitdagingen van modelgebaseerd testen

De implementatie van MBT in een organisatie vereist een aanzienlijke investering in geld en inspanning. De volgende punten zijn de nadelen van MBT: software engineering:

  • Testers hebben modelleervaardigheden nodig die bij traditioneel testontwerp niet vereist zijn.
  • Het leerproces is lang en het eerste project kost meestal meer dan het oplevert.
  • Het model zelf kan lastig te begrijpen en te evalueren zijn, vooral wanneer het groeit.
  • Een model dat niet meer aan de specificaties voldoet, genereert zelfverzekerde, maar onjuiste tests.
  • De adapterlaag die abs omzettracDe stappen die in de praktijk worden omgezet, moeten afzonderlijk worden beschreven en bijgehouden.
  • De omvang van een model groeit snel, waardoor een onbeperkt toestandsmodel meer paden kan genereren dan welk team dan ook kan uitvoeren.

Geen van deze punten is een reden om de techniek te vermijden, maar samen verklaren ze waarom MBT meestal eerst op één stabiel subsysteem wordt geïntroduceerd in plaats van op een volledig subsysteem. levenscyclus van softwaretests onmiddelijk.

Voordelen van modelgebaseerd testen

Tegenover die kosten staan ​​de voordelen van MBT:

  • Eenvoudig onderhoud van testcases en testsuites, omdat het model wordt bewerkt in plaats van de individuele tests.
  • Kostenbesparing gedurende de looptijd van een langlopend project.
  • Verbeterde test dekking, omdat de generator paden verkent die een persoon zou overslaan.
  • Verschillende gegenereerde testsuites kunnen parallel op een willekeurig aantal machines worden uitgevoerd.
  • Vroege foutdetectie, omdat onduidelijkheden aan het licht komen tijdens het bouwen van het model, voordat er code wordt uitgevoerd.
  • Een toename van het aantal gevonden defecten bij dezelfde testinspanning.
  • Tijdsbesparing bij het ontwerpen van tests zodra het model en de adapter beschikbaar zijn.
  • De tevredenheid van testers neemt toe, doordat de focus verschuift van repetitief scripten naar modelleren en analyseren.

Testers ontwikkelen sowieso mentale modellen tijdens hun werk, en MBT zet die mentale modellen simpelweg over op papier, waar ze kunnen worden beoordeeld, van versies voorzien en hergebruikt. Hoe de techniek zich verhoudt tot de andere beschikbare benaderingen wordt uiteengezet in soorten softwaretesten.

Veelgestelde vragen

Zwarte doos. Tests worden afgeleid van een model van gespecificeerd gedrag, niet van de broncode. De techniek wordt pas een grijze doos als het model is opgebouwd uit interne ontwerpdocumenten in plaats van externe eisen.

Test alleen het gedrag waarvoor het de moeite waard is om tests te genereren. Modelleer één stateful workflow, zoals een checkout of een defectlevenscyclus, op het grofste niveau dat nog steeds de werkelijke uitkomsten onderscheidt. Het modelleren van alles leidt tot een explosie aan statusinformatie die niemand kan uitvoeren.

Het model hoort in versiebeheer te staan, samen met de code, met een benoemde eigenaar en een beoordelingsstap in hetzelfde wijzigingsproces als de specificatie. Een model zonder eigenaar raakt ontregeld, en een ontregeld model genereert zelfverzekerde maar onjuiste tests.

Nee. Een generator onderzoekt alleen wat het model beschrijft, dus alles wat het model weglaat, blijft ongetest. Verkennende sessies blijven de manier waarop teams gedrag ontdekken dat niemand had gespecificeerd, en ze onthullen vaak de hiaten die het model vervolgens opvult.

Langdurige, stateful systemen met een geschreven specificatie: communicatieprotocollen, embedded en automotive controllers, medische apparaten, bankprocessen en telecommunicatieapparatuur. Deze domeinen combineren een stabiele specificatie met een te groot aantal geldige sequenties om handmatig op te sommen.

Wanneer de specificaties sneller veranderen dan het model kan bijbenen, wanneer de functionaliteit klein of van korte duur is, of wanneer niemand in het team de notatie kan bijhouden. In die situaties zijn handgeschreven casussen kosteneffectiever gedurende het project.

Machine learning leidt conceptstatusmodellen af ​​uit productielogboeken en opgenomen sessies, markeert overgangen die het model nooit dekt en rangschikt gegenereerde paden op basis van defectgeschiedenis, zodat de sequenties met het hoogste risico als eerste worden uitgevoerd. Engineers valideren het afgeleide model nog steeds.

Ja, vooral voor de adapterlaag: de stapmethoden, paginaobjecten en beweringen die abs binden.tracHet model koppelt acties aan echte gesprekken. Beslissen wat het model moet bevatten en welke dekkingscriteria van belang zijn, blijft een ontwerpbeslissing.

Vat dit bericht samen met: