Was ist modellbasiertes Testen?

⚡ Intelligente Zusammenfassung

Modellbasiertes Testen überprüft das Laufzeitverhalten von Software anhand von Vorhersagen eines absoluten Algorithmus.tract Modell des Systems, wobei Testfälle automatisch aus endlichen Zustandsautomaten, Zustandsdiagrammen oder UML-Notation generiert werden, anstatt manuell.

  • 🧭 Kernidee: Ein Modell beschreibt das erwartete Verhalten, und jeder Testfall wird aus diesem Modell abgeleitet, anstatt einzeln geschrieben zu werden.
  • 🔀 Zwei Rahmenwerke: Bei der Offline-Generierung wird die Suite vor der Ausführung erstellt, während bei der Online-Generierung die Schritte während der Laufzeit dynamisch generiert werden.
  • 📐 Modellbezeichnungen: Endliche Zustandsautomaten, Zustandsdiagramme, Entscheidungstabellen, Datenfluss- und Kontrollflussgraphen sowie UML-Diagramme.
  • ⚙️ Arbeitsprozess: Erstellen Sie das Modell, wählen Sie die Abdeckungskriterien aus, generieren Sie absolute Werte.tract-Tests durchführen, diese in Skripte umsetzen, ausführen und anschließend die Ergebnisse zuweisen.
  • Werkzeug: GraphWalker, fMBT, Conformiq, MaTeLo, MBTsuite und Spec Explorer generieren Pfade aus gerichteten Graphen oder Zustandsmodellen.
  • Abtausch: Der Wartungsaufwand sinkt und die Abdeckung steigt, aber die Technik erfordert Modellierungskenntnisse und eine anfängliche Investition in das Lernen.

Modellbasiertes Testen leitet Testfälle automatisch aus einem Verhaltensmodell des Systems ab.

Was ist modellbasiertes Testen?

Modellbasiertes Testen Das Modell ist eine Softwaretesttechnik, bei der das Laufzeitverhalten der zu testenden Software mit den Vorhersagen eines Modells verglichen wird. Ein Modell beschreibt das Verhalten eines Systems anhand von Eingabesequenzen, Aktionen, Bedingungen, Ausgaben und dem Datenfluss von der Eingabe zur Ausgabe. Ein praktikables Modell muss praktisch verständlich, wiederverwendbar und teilbar sein und das zu testende System präzise beschreiben.

Es stehen zahlreiche Modelle zur Verfügung, und jedes beschreibt einen anderen Aspekt des Systemverhaltens. Gängige Beispiele sind:

Modellbasiertes Testen beschreibt das Verhalten eines Systems als Reaktion auf eine durch das Modell bestimmte Aktion. Man führt die Aktion aus und prüft anschließend, ob das System wie vom Modell vorhergesagt reagiert. Jede Abweichung zwischen den beiden Ergebnissen deutet entweder auf einen Softwarefehler oder einen Modellfehler hin – beides gilt es zu finden.

Es handelt sich um eine leichtgewichtige, formale Methode zur Systemvalidierung, die sich sowohl für Hardware- als auch für Softwaretests eignet. Da die Tests auf einer Verhaltensspezifikation und nicht auf dem Code basieren, ist die Technik mit der Black-Box-Test Familie von Softwaretesttechniken.

Beispiel für modellbasiertes Testen

Am einfachsten lässt sich ein Verhaltensmodell verstehen, indem man es durchläuft. Das folgende Diagramm veranschaulicht eine kleine Textbearbeitungsaufgabe. Jedes Kästchen repräsentiert einen möglichen Zustand der Anwendung und jeder Pfeil eine mögliche Benutzeraktion.

Beispiel für modellbasiertes Testen: Modellierung der Zustände und Aktionen beim Schreiben eines Gedichts in Notepad

Das Modell erklärt eine vereinfachte Vorgehensweise zum Schreiben von Gedichten in Notepad und die möglichen Aktionen in jedem Schritt. Für jede Aktion, wie das Starten der Anwendung, das Eingeben eines Gedichts oder das Speichern der Datei, wird ein Testfall Die Ergebnisse können generiert und überprüft werden. Ein anderer Pfad durch dasselbe Diagramm, beispielsweise das Starten und Schließen ohne Speichern, erzeugt einen anderen Testfall ohne zusätzlichen Entwicklungsaufwand – das ist das wirtschaftliche Argument für die gesamte Technik.

Arten von MBT

Es gibt zwei Arten von modellbasierten Testframeworks, deren Unterschied lediglich darin besteht, wann die Testschritte generiert werden:

  • Offline / a priori: Generierung von Testsuiten vor deren Ausführung. Eine Testsuite ist eine Sammlung von Testfällen, und in diesem Modus wird die Suite wie jede andere gespeichert, überprüft und erneut ausgeführt. Automatisierungstests Gut.
  • Online / spontan: Generierung von Testsuiten während der Testausführung, wobei der nächste Schritt auf der Grundlage der tatsächlichen Reaktion des Systems auf den vorherigen Schritt ausgewählt wird.

Die Offline-Generierung eignet sich für regulierte Umgebungen, die eine überprüfbare und reproduzierbare Testsuite benötigen. Die Online-Generierung eignet sich für langlaufende explorative Sitzungen gegen zustandsbehaftete Systeme, da der Generator auf die tatsächliche Antwort und nicht auf die vorhergesagte reagieren kann.

Wie modellbasiertes Testen funktioniert

Unabhängig vom verwendeten Framework folgt die Technik denselben fünf Phasen. Jede Phase erzeugt ein Artefakt, das die nächste Phase verwendet. Daher ist es das Modell und nicht das Testskript, das vom Team gepflegt wird.

  • Schritt 1: Das Modell erstellen. Anforderungen oder eine Spezifikation in eine abstrakte Sprache übersetzentract-Modell des erwarteten Verhaltens, das die Zustände, die Übergänge zwischen ihnen und die Eingaben definiert, die jeden Übergang auslösen.
  • Schritt 2: Wählen Sie die Testauswahlkriterien. Kriterien geben dem Generator vor, wann er stoppen soll. Gängige Kriterien sind die Abdeckung aller Zustände, bei der jeder Zustand mindestens einmal besucht wird; die Abdeckung aller Übergänge, bei der jeder Pfeil mindestens einmal ausgeführt wird; und die Pfad- oder Datenflussabdeckung zur tiefergehenden Erkundung.
  • Schritt 3: Absolutwerte generierentract-Testfälle. Das Tool durchläuft das Modell und gibt Sequenzen von Absolutwerten aus.tract Schritte, die die gewählten Kriterien erfüllen, zusammen mit dem erwarteten Ergebnis in jedem Schritt.
  • Schritt 4: Die Bauchmuskeln konkretisierentract-Tests. Eine Adapterschicht ordnet jedem Abs zutraceine tatsächliche Aktion gegen das System auszulösen, wie beispielsweise eine Interaktion mit der Benutzeroberfläche, API Anruf oder eine Protokollnachricht. Diese Karteping wird einmal geschrieben und von jedem generierten Test wiederverwendet.
  • Schritt 5: Urteile ausführen und zuweisen. Die konkreten Tests werden am zu testenden System durchgeführt, jede beobachtete Reaktion wird mit der Modellvorhersage verglichen, und ein Ergebnis (bestanden/nicht bestanden) wird festgehalten. traczurück zum Modellelement, das es erzeugt hat.

Das tracDie in Schritt 5 geschaffene Funktionalität ist der praktische Nutzen. Wenn sich eine Anforderung ändert, ändert sich das Modell, und die betroffenen Tests werden neu generiert, anstatt neu geschrieben zu werden. Deshalb arbeiten Teams, die häufig Tests durchführen, so effizient. Regressionstests Im Gegensatz zu einer stabilen Spezifikation profitieren die meisten davon.

Verschiedene Modelle im Test

Um MBT zu verstehen, ist es notwendig, einige der unten erläuterten Modelle zu kennen. Jedes Modell wägt Ausdrucksstärke gegen Aufwand ab, daher hängt die Wahl davon ab, wie komplex das zu testende Verhalten tatsächlich ist.

Finite-State-Maschinen

Dieses Modell hilft Testern, das Ergebnis in Abhängigkeit von den gewählten Eingaben zu beurteilen. Verschiedene Kombinationen der Eingaben können zu einem entsprechenden Systemzustand führen.

Das System verfügt über einen spezifischen Zustand und einen aktuellen Zustand, der durch eine Reihe von Eingaben der Tester bestimmt wird.

Betrachten Sie das folgende Beispiel: Ein System ermöglicht es Mitarbeitern, sich in eine Anwendung einzuloggen. Der aktuelle Status des Mitarbeiters ist „Abwesend“ und ändert sich zu „Angemeldet“, sobald er sich im System anmeldet. Im Status „Angemeldet“ kann ein Mitarbeiter Dokumente im System anzeigen, drucken und scannen.

Die Zustandsmaschine für dieses Beispiel ist hier dargestellt, wobei jeder Pfeil mit der Eingabe beschriftet ist, die den Übergang auslöst.

Endliches Zustandsautomatenmodell zur Darstellung der Zustände „Abmelden“ und „Anmelden“ eines Mitarbeiter-Anmeldesystems

Staatskarten

Ein Zustandsdiagramm ist eine Erweiterung des endlichen Automaten und eignet sich für komplexe Echtzeitsysteme. Zustandsdiagramme beschreiben verschiedene Systemverhaltensweisen, besitzen eine festgelegte Anzahl von Zuständen, und das Systemverhalten wird in Form von Ereignissen für jeden Zustand analysiert und dargestellt. Die in der Praxis relevante Erweiterung ist die Hierarchie: Ein Zustandsdiagramm ermöglicht verschachtelte und parallele Zustände, sodass ein Automat, der Dutzende flacher Zustände benötigen würde, kompakt dargestellt werden kann.

Beispielsweise werden Fehler im Fehlerverwaltungstool mit dem Status „Neu“ erfasst. Sobald ein Fehler von Entwicklern behoben wurde, muss der Status auf „Behoben“ geändert werden. Bleibt ein Fehler bestehen, ändert sich der Status zu „Wieder öffnen“. Zustandsdiagramme sollten so gestaltet sein, dass für jeden Zustand ein Ereignis ausgelöst wird.

Der Lebenszyklus dieses Defekts ist unten dargestellt, wobei jeder Status als Zustand und jede Workflow-Aktion als das Ereignis dargestellt wird, das den Defekt zwischen diesen Zuständen verschiebt.

Zustandsdiagramm eines Fehlerlebenszyklus, der die Status „Neu“, „Behoben“ und „Wieder geöffnet“ durchläuft

Einheitliche Modellierungssprache (UML)

Einheitliche Modellierungssprache (UML) UML ist eine standardisierte, universell einsetzbare Modellierungssprache. UML umfasst eine Reihe grafischer Notationstechniken, die zur Erstellung visueller Modelle verwendet werden, welche das Verhalten sehr komplexer Systeme beschreiben können.

UML hat Notationen wie:

  • Aktivitäten
  • Lebensmittelbranche
  • Geschäftsprozess
  • Komponenten
  • Programmiersprache

Aktivitäts- und Zustandsdiagramme sind diejenigen, die Testgeneratoren am häufigsten lesen, wie das untenstehende UML-Beispielmodell veranschaulicht.

UML-Diagrammnotation, die als Quellmodell für die Generierung von Testfällen verwendet wird

Modellbasierte Testwerkzeuge

Ein Modell auf dem Papier erzeugt von sich aus nichts. Es wird ein Generator benötigt, um das Modell zu durchlaufen und Testpfade auszugeben, und der Werkzeugmarkt teilt sich in Open-Source-Generatoren und kommerzielle Testdesignplattformen auf.

  • GraphWalker — ein Open-Source-Tool, das Modelle in Form gerichteter Graphen einliest und daraus Testpfade generiert, mit auswählbaren Generatoren und Abbruchbedingungen.
  • fMBT — ein Open-Source-Modell-basiertes Test-Toolset von Intel, das die Generierung und Ausführung von Tests anhand von Zustandsmodellen unterstützt.
  • Conformiq — ein kommerzielles, automatisiertes Testdesignprodukt, das Testfälle und Skripte aus grafischen Verhaltensmodellen ableitet.
  • MaTeLo und MBTsuite — kommerzielle Plattformen, die auf statistische Nutzungsmodelle und die Generierung von Tests in bestehende Automatisierungsframeworks abzielen.
  • Spec Explorer - MicrosoftDie modellbasierte Testerweiterung für Visual Studio wird in der Literatur zum Protokolltesten häufig zitiert.

Die Auswahl hängt weniger von Funktionslisten ab als von zwei Fragen: Welche Notation kann das Team tatsächlich verwenden, und kann das Tool Tests in das bereits verwendete Automatisierungs-Framework einspeisen? Ein Generator, der Testsuiten erzeugt, die niemand ausführen kann, fügt dem Prozess einen zusätzlichen Schritt hinzu, anstatt einen zu entfernen.

Modellbasiertes Testen vs. traditionelles Testdesign

Der Kontrast zum handgeschriebenen Testdesign muss hervorgehoben werden, weil die beiden Ansätze an unterschiedlichen Stellen scheitern und nicht etwa einer einfach besser wäre.

Aspekt Modellbasiertes Testen Traditionelles Testdesign
Quelle der Testfälle Automatisch aus einem Verhaltensmodell generiert Individuell von einem Tester anhand der Anforderungen erstellt
Auswirkungen einer Anforderungsänderung Aktualisieren Sie das Modell, generieren Sie die betroffenen Tests neu. Suchen und bearbeiten Sie jeden betroffenen Testfall manuell.
Abdeckung Gemessen an Modellkriterien wie allen Zuständen oder allen Übergängen Gemessen an den Anforderungen und abhängig vom Urteil des Testers
Kosten im Voraus Hoch: Modellierungskenntnisse, Werkzeugkonfiguration und eine Adapterschicht Niedrig: Ein Tester kann sofort mit dem Schreiben beginnen.
beste Passform Zustandsbehaftete, langlebige Systeme mit einer stabilen Spezifikation Kurzprojekte, einmalige Features und explorative Arbeiten
Hauptausfallmodus Ein fehlerhaftes oder veraltetes Modell erzeugt stillschweigend fehlerhafte Tests. In einer großen Suite häufen sich Lücken und Duplikate.

Die folgende Entwicklung stellt die Technik in den Kontext: Die manuelle Testausführung wich der automatisierten Ausführung, und modellbasierte Ansätze verlagern die Automatisierung eine Stufe früher, nämlich in den Testentwurf selbst.

Entwicklung des Softwaretests von der manuellen Ausführung über die Automatisierung bis hin zum modellbasierten Testen

Herausforderungen des modellbasierten Testens

Die Einführung von MBT in einer Organisation erfordert einen erheblichen finanziellen und personellen Aufwand. Im Folgenden werden die Nachteile von MBT aufgeführt. Softwareentwicklung:

  • Tester benötigen Modellierungsfähigkeiten, die im traditionellen Testdesign nicht gefordert werden.
  • Die Lernkurve ist lang, und das erste Projekt kostet in der Regel mehr, als es einspart.
  • Das Modell selbst kann schwer zu verstehen und zu überprüfen sein, insbesondere wenn es wächst.
  • Ein Modell, das von der Spezifikation abweicht, erzeugt zwar selbstsichere, aber falsche Testergebnisse.
  • Die Adapterschicht, die ABS umwandelttracDie Umsetzung der Schritte in konkrete Maßnahmen muss separat geschrieben und gepflegt werden.
  • Die Modellgröße wächst schnell, sodass ein unbeschränktes Zustandsmodell mehr Pfade erzeugen kann, als ein Team ausführen kann.

Keiner dieser Punkte ist ein Grund, die Technik zu vermeiden, aber zusammen erklären sie, warum MBT üblicherweise zuerst an einem stabilen Teilsystem und nicht an einem gesamten System eingeführt wird. Lebenszyklus von Softwaretests auf einmal.

Vorteile des modellbasierten Testens

Im Vergleich zu diesen Kosten ergeben sich folgende Vorteile der MBT:

  • Einfache Wartung der Testfälle und Testsuiten, da das Modell und nicht die einzelnen Tests bearbeitet werden.
  • Kostenreduzierung über die gesamte Laufzeit eines Langzeitprojekts.
  • Verbesserte Testabdeckungda der Generator Wege erkundet, die ein Mensch überspringen würde.
  • Verschiedene generierte Testreihen können auf beliebig vielen Maschinen parallel ausgeführt werden.
  • Frühe Fehlererkennung, da Unklarheiten bereits beim Aufbau des Modells auftreten, bevor überhaupt Code ausgeführt wird.
  • Eine Zunahme der Anzahl der gefundenen Fehler bei gleichem Testaufwand.
  • Zeitersparnis bei der Testentwicklung, sobald Modell und Adapter vorhanden sind.
  • Verbesserte Arbeitszufriedenheit der Tester, da sich der Arbeitsaufwand von sich wiederholenden Skripten hin zu Modellierung und Analyse verlagert.

Tester erstellen während ihrer Arbeit ohnehin mentale Modelle, und MBT überträgt diese mentalen Modelle einfach aufs Papier, wo sie überprüft, versioniert und wiederverwendet werden können. Wo sich die Technik im Vergleich zu anderen verfügbaren Ansätzen einordnet, wird in [Referenz einfügen] erläutert. Arten von Softwaretests.

Häufig gestellte Fragen

Black-Box-Tests werden aus einem Modell des spezifizierten Verhaltens abgeleitet, nicht aus dem Quellcode. Die Technik wird erst dann zu einer Grey-Box-Technik, wenn das Modell aus internen Designdokumenten anstatt aus externen Anforderungen erstellt wird.

Beschränken Sie sich auf das Verhalten, für das es sich lohnt, Tests zu generieren. Modellieren Sie einen zustandsbehafteten Workflow, wie beispielsweise einen Checkout oder einen Fehlerlebenszyklus, auf der gröbsten Ebene, die noch reale Ergebnisse erkennbar macht. Die Modellierung aller Zustände führt zu einer Zustandsexplosion, die niemand ausführen kann.

Das Modell gehört zusammen mit dem Code in die Versionskontrolle, mit einem benannten Verantwortlichen und einem Überprüfungsschritt im selben Änderungsprozess wie die Spezifikation. Ein Modell ohne Verantwortlichen driftet ab, und ein abgedriftetes Modell generiert zwar zuverlässige, aber fehlerhafte Tests.

Nein. Ein Generator untersucht nur das, was das Modell beschreibt; alles, was das Modell auslässt, bleibt ungetestet. Explorative Sitzungen sind weiterhin die Methode, mit der Teams Verhaltensweisen entdecken, die niemand spezifiziert hat, und sie decken oft die Lücken auf, die das Modell anschließend schließt.

Langlebige zustandsbehaftete Systeme mit schriftlicher Spezifikation: Kommunikationsprotokolle, eingebettete Systeme und Fahrzeugsteuerungen, Medizingeräte, Bankprozesse und Telekommunikationsausrüstung. Diese Bereiche kombinieren eine stabile Spezifikation mit einer zu großen Anzahl zulässiger Sequenzen, um sie manuell aufzulisten.

Wenn sich die Spezifikation schneller ändert, als das Modell folgen kann, wenn das Feature klein oder kurzlebig ist oder wenn niemand im Team die Notation pflegen kann, sind handgeschriebene Fälle über das gesamte Projekt hinweg kostengünstiger.

Maschinelles Lernen leitet aus Produktionsprotokollen und aufgezeichneten Sitzungen Entwurfszustandsmodelle ab, kennzeichnet Übergänge, die das Modell nie abdeckt, und ordnet die generierten Pfade nach Fehlerhistorie, sodass die Sequenzen mit dem höchsten Risiko zuerst ausgeführt werden. Die Ingenieure validieren das abgeleitete Modell weiterhin.

Ja, hauptsächlich für die Adapterschicht: die Schrittmethoden, Seitenobjekte und Assertions, die absolute Daten binden.tracDie Modellaktionen werden realen Anrufen zugeordnet. Die Entscheidung, was das Modell enthalten soll und welche Abdeckungskriterien relevant sind, bleibt eine Designentscheidung.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: