Empfohlenes Webinar: MISRA C++ 2023: Alles, was Sie wissen müssen | Zum Video

Erwecken Sie die Service-Virtualisierung zum Leben: Stateful- und State-Transition-Tests

Parasoft-Würfel-Logo 300x300
3. August 2023
8 min lesen

Das Erstellen einer stabilen virtuellen Darstellung, um ein zustandsbehaftetes Verhalten Ihrer Entwicklungsworkloads zu erreichen, kann schwierig sein. So kann Ihnen Parasoft Virtualize dabei helfen, Ihre virtuellen Dienste zu simulieren und zu testen.

Bei der Servicevirtualisierung ein entscheidender Teil von Erstellen realistischer virtueller Dienste stellt sicher, dass der Dienst über ein zustandsbehaftetes Verhalten verfügt, sodass er seinen Zustand von Testlauf zu Testlauf beibehalten kann. Aber wo liegt die Grenze? Wann wird Simulation zu viel Simulation? Lassen Sie uns in die Zustandsübergangstests eintauchen und erfahren, wie Sie wissen, wann Sie sie benötigen.

Um Funktionstests zu beschleunigen, ist der uneingeschränkte Zugriff auf eine vertrauenswürdige und realistische Testumgebung unerlässlich. Eine vollständige Testumgebung umfasst die zu testende Anwendung (AUT) und alle ihre abhängigen Komponenten, wie APIs, Dienste von Drittanbietern, Datenbanken, Anwendungen und andere Endpunkte.

Durch die Servicevirtualisierung können Teams Folgendes tun, was letztendlich dazu führt, dass Teams frühere, schnellere und umfassendere Tests durchführen können.

  1. Erhalten Sie Zugriff auf die vollständige Testumgebung, die sie benötigen, einschließlich aller kritischen abhängigen Systemkomponenten.
  2. Ändern Sie das Verhalten dieser abhängigen Komponenten auf eine Weise, die mit einer abgestuften Testumgebung nicht möglich wäre.

Zustandsbehaftetes Verhalten

Ein entscheidender Teil der Erstellung realistischer virtualisierter Abhängigkeiten ist zustandsbehaftetes Verhalten. Mit anderen Worten: Eine virtualisierte Abhängigkeit kann ihren Zustand von Testlauf zu Testlauf beibehalten. Betrachten Sie ein Beispiel für die Simulation einer virtualisierten Warenkorbkomponente. Eine einfache API ermöglicht das Suchen, Hinzufügen, Abrufen und Löschen von Artikeln im Warenkorb.

Bei zustandslosem Verhalten ändert die Simulation der Suche und das Speichern von Artikeln im Warenkorb den Status des Warenkorbs nicht. Das Testen der Reihenfolge des Abrufens und Löschens von Daten aus dem Warenkorb schlägt fehl, da der Warenkorb in seinem ursprünglichen Zustand (leer) verbleibt, wie unten dargestellt.

Wenn dem virtuellen Warenkorb jedoch ein zustandsbehaftetes Verhalten zugewiesen wird, bei dem sein Zustand (leer oder mit einem oder mehreren Artikeln darin) von Test zu Test beibehalten wird und sich auch basierend auf den Eingaben der zu testenden Anwendung ändert, können Sie mit dem Testen beginnen den Prozess sinnvoll gestalten.

Durch zustandsbehaftete Tests kann der virtualisierte Dienst nun seinen Status von „leer“ in „mit hinzugefügten Elementen gefüllt“ ändern und die entsprechenden Informationen zurückgeben. Wenn ein Artikel zum Warenkorb hinzugefügt wird und die AUT den Warenkorb abfragt, werden die entsprechenden Daten zurückgegeben. Ein realistischerer Test ist mithilfe von Stateful-Tests möglich. Bei der Abfrage des Warenkorbs wird nun der hinzugefügte Artikel zurückgegeben, wie unten gezeigt.

Zusammenfassend lässt sich sagen, dass es für vertrauenswürdige und wiederverwendbare virtuelle Dienste von entscheidender Bedeutung ist, dass sie den realen Dienst ausreichend nachahmen können, um der getesteten Anwendung eine aussagekräftige Ausgabe zurückzugeben. Dies kann zustandsbehaftete Tests erfordern.

Zusätzlich zur Zustandsbezogenheit des virtuellen Dienstes selbst müssen Sie möglicherweise auch Zustandsänderungen auf der Grundlage verschiedener potenzieller Eingaben simulieren. Dies wird als Zustandsübergangstest bezeichnet.

Was ist Zustandsübergangstest?

Zustandsübergänge sind die Aktionskomponente von Zustandsautomaten, die definiert sind als:

„…eine abstrakte Maschine, die sich zu jedem Zeitpunkt in genau einem von endlich vielen Zuständen befinden kann.“ Der FSM kann als Reaktion auf einige externe Eingaben von einem Zustand in einen anderen wechseln; Der Übergang von einem Zustand in einen anderen wird als Übergang bezeichnet. Ein FSM wird durch eine Liste seiner Zustände, seinen Anfangszustand und die Bedingungen für jeden Übergang definiert.“

–Wikipedia

Zustandsmaschinen sind eine nützliche Methode zur Beschreibung von Objekten und werden häufig explizit als Programmiermodell verwendet. In anderen Testfällen, wie unserem Warenkorb, könnte es einen impliziten Zustandsautomaten geben, der sein Verhalten beschreibt. Betrachten Sie den folgenden Zustandsautomaten für das obige Warenkorb-Beispiel.

Der Ausgangszustand des Warenkorbs ist leer. Wenn Artikel zum Warenkorb hinzugefügt werden, wechselt der Status von „Leer“ zu „Artikel im Warenkorb“. Übergänge werden als Reaktion auf Ereignisse eingeleitet. In diesem Fall das Hinzufügen oder Entfernen eines Artikels aus dem Warenkorb.

Übergänge unterliegen häufig Bedingungen, bevor sie angenommen werden. Der Übergang zurück in den Leer-Zustand erfolgt beispielsweise nur, wenn die Anzahl der Elemente wieder Null ist. Übergänge führen häufig Aktionen aus, wie in diesem Beispiel das Erhöhen der Anzahl der Artikel im Warenkorb. Obwohl es unwahrscheinlich ist, dass der Wagen als Zustandsmaschine programmiert ist, gibt es eine implizite, die zur Definition seines Verhaltens nützlich ist.

Stellen Sie sich ein weiteres einfaches Beispiel für eine Benutzeranmeldekomponente vor, die einen Benutzer nach einer bestimmten Anzahl von Wiederholungsversuchen sperrt:

In der Login-Komponente ist der Ausgangszustand abgemeldet. Ein Benutzer kann sich nur anmelden, wenn eine korrekte PIN eingegeben wird. Nach einer definierten Anzahl von Anmeldeversuchen (MAX_RETRIES) wird das Konto gesperrt. In diesem Testfall kann „Konto gesperrt“ als endgültiger Status betrachtet werden, da es keine Möglichkeit gibt, von diesem Zustand aus überzugehen.

Zustandsübergangsdiagramme

Wie in den beiden obigen Übergangsbeispielen gezeigt, sind Zustandsdiagramme grafische Darstellungen endlicher Zustandsautomaten. Sie modellieren das Verhalten eines Systems oder Prozesses, das in verschiedenen Zuständen existieren kann, sowie die Übergänge zwischen diesen Zuständen basierend auf bestimmten Ereignissen oder Bedingungen.

In einem Zustandsdiagramm werden Zustände als abgerundete Kästchen und Übergänge zwischen Zuständen als Pfeile dargestellt. Jeder Zustand repräsentiert einen bestimmten Zustand oder Modus des Systems. Übergänge geben an, wie das System von einem Zustand in einen anderen übergehen kann, und werden normalerweise mit dem Ereignis gekennzeichnet, das den Übergang verursacht.

Ereignisse in Zustandsautomaten können externe Eingaben, interne Aktionen oder der Zeitablauf sein. Wenn ein Ereignis eintritt, durchläuft das System einen Übergang und wechselt in einen neuen Zustand.

Zustandsübergangstabellen

Zustandsübergangstabellen sind tabellarische Darstellungen, mit denen das Verhalten einer Zustandsmaschine systematisch beschrieben wird. Die Tabelle definiert die möglichen Zustände, Eingabeereignisse und daraus resultierenden Zustandsübergänge.

In einer Zustandsübergangstabelle repräsentieren Zeilen Zustände und Spalten ein Eingabeereignis oder eine Eingabebedingung. Die Zellen der Tabelle geben den resultierenden Zustand an, wenn ein bestimmtes Ereignis in einem bestimmten Zustand auftritt. Dies ermöglicht eine prägnante und strukturierte Darstellung der Zustandsübergänge.

Status / EreignisPIN eingegeben
(PIN prüfen, PIN korrekt)
PIN eingegeben
(PIN, PIN falsch, Wiederholungsversuche erhöhen, Wiederholungsversuche >=MAX)
PIN eingegeben
(PIN prüfen, PIN falsch, Wiederholungsversuche erhöhen, Wiederholungsversuche
Abmelden
AbgemeldetEingeloggtKonto gesperrtAbgemeldet
EingeloggtAbgemeldet
Konto gesperrt

Vor- und Nachteile von Zustandsübergangstests

Zu den Vorteilen der Verwendung von Zustandsübergangstests gehören die folgenden.

  • Bietet eine umfassende Testabdeckung durch systematische Untersuchung aller möglichen Zustände und Übergänge in der API, was eine umfassendere Abdeckung des Verhaltens der API gewährleistet.
  • Durch die erhöhte Abdeckung wird eine bessere Erkennung von Fehlern und Sicherheitslücken erreicht.
  • Wird zu einer prägnanteren Möglichkeit, Verhalten auszudrücken, wenn Tester damit vertrauter werden, und vereinfacht API-Tests insgesamt.
  • Wiederverwendbare Tests reduzieren den Aufwand für Regressionstests.

Zustandsübergangstests haben einige Nachteile. An erster Stelle steht der Aufwand, der für die Darstellung einer komplexen API erforderlich ist. Wenn die Übersetzung der API-Verhalten Ausgaben in einer komplexen Zustandsmaschine, wird es schwierig sein, sie zu verstehen, zu verwenden und zu warten. Darüber hinaus reagieren Zustandsübergangstests empfindlich auf Änderungen in der API – sie erfordern eine ständige Wartung, um mit diesen Aktualisierungen Schritt zu halten.

Wann sollten Zustandsübergangstests verwendet werden?

Es überrascht nicht, dass das Testen von Zustandsübergängen am sinnvollsten ist, wenn die API einen zustandsbehafteten Charakter hat, z. B. die Aufrechterhaltung einer Sitzung oder eines Kontexts über mehrere Anforderungen hinweg. Diese Art von Tests hilft zu überprüfen, ob die API den Status während der gesamten Interaktion korrekt verwaltet und aufrechterhält, wodurch ein konsistentes Verhalten über verschiedene Anforderungen und Übergänge hinweg sichergestellt wird.

APIs können ihr Verhalten in Form von Zuständen und Ereignissen dokumentieren. In diesem Fall kann die Überprüfung in derselben Form erfolgen. In anderen Fällen handelt es sich bei der API möglicherweise um einen komplexen Geschäftsprozess, der mehrere Phasen im Workflow umfasst. Zustandsübergangstests können verwendet werden, um diese komplexen Szenarien besser zu testen.

Zustandssimulation mit Parasoft Virtualize

Wie hilft dies beim Testen und bei virtuellen Diensten? Nun, es ist möglich zu verwenden Parasoft Virtualisieren um ein zustandsbehaftetes Verhalten zu simulieren, sodass Dienste von Testlauf zu Testlauf geeignete Antworten zurückgeben, die realistische Werte darstellen, die vom AUT erwartet werden.

Virtualisierte Dienste reagieren auf Eingaben von Tests und behalten Werte nach Bedarf bei, wodurch der Nutzen erfasster und simulierter Testdaten erweitert wird, die statisch bleiben, sofern sie nicht durch zustandsbehaftetes Verhalten erweitert werden. In Parasoft Virtualize wird ein Dienst als CRUD (Erstellen, Lesen, Aktualisieren, Löschen) virtualisiert, um anzuzeigen, dass seine Testdatenquelle persistent ist und während des Tests nach Bedarf manipuliert werden kann. Siehe den Screenshot unten.

Parasoft Virtualize unterstützt zustandsbehaftetes Verhalten in der Testdatenquelle oder Engine, die jedem virtuellen Dienst zugeordnet ist und nicht nur Testdaten speichert, sondern auch das CRUD-Tool bereitstellt, um Daten basierend auf der Reaktion auf empfangene API-Anfragen zu manipulieren. Diese Aktualisierungen der Daten in der Testdatumsquelle basieren auf Eingabeereignissen, wie sie oben in den Zustandsübergangsdiagrammen besprochen wurden – Eingabeereignis trifft ein, Zustandsübergang findet statt und Aktion wird ausgeführt.

Um all dies zu unterstützen, hat die Testdatenverwaltung Das Tool in Parasoft Virtualize ist so konfiguriert, dass es ein Update basierend auf einer Datenquelle und einem ankommenden Ereignis durchführt.

Bei den Aktualisierungen der Testdatenquelle kann es sich um einzelne Datenelemente oder ganze Objekte handeln. Das Tool ermöglicht Ihnen auch das Erstellen und Löschen von Datensätzen abhängig von den erforderlichen Geschäftsregeln. Tatsächlich ist es leistungsstark genug, um komplexes Verhalten zu simulieren, was die Frage aufwirft: Wann ist zu viel Simulation zu viel?

Die Vor- und Nachteile der Stateful Virtualisierung

Die Verwendung reiner Virtualisierung ist beim Testen hilfreich, da sie die Komplexität des Umgangs mit einem realen Dienst beseitigt und die zu testende Anwendung isoliert. Darüber hinaus bedeutet das Entfernen von Live-Diensten, dass Tests parallel auf mehreren Desktops gleichzeitig ausgeführt werden können, ohne dass dies Auswirkungen auf die Produktionssysteme hat oder eine dedizierte Kopie des Dienstes erforderlich ist. Ein rein virtueller Server gibt jedoch nur eine Bestätigung wie „Ja, diese API wurde aufgerufen“ zurück. In vielen Fällen ist dies ausreichend, bis es natürlich nicht mehr der Fall ist. Da immer komplexere Testfälle entstehen, müssen unsere virtualisierten Server intelligenter werden.

Anhand des Warenkorb-Beispiels von oben ist es für Ihren virtuellen Einkaufsdienst viel nützlicher, nicht nur zu bestätigen, dass Artikel zum Warenkorb hinzugefügt wurden, sondern tatsächlich das Hinzufügen von Artikeln zum Warenkorb zu simulieren. Auf diese Weise wird eine Abfrage zur Bestimmung der Anzahl der Artikel im Warenkorb mit einem korrekten Wert erfolgreich durchgeführt. Wir könnten auch einen „Warenkorb voll“-Zustand simulieren, wie in der Zustandsautomatendarstellung oben beschrieben. Zustandsbehaftetes Verhalten ist notwendig, um unseren Tests aussagekräftigere Ergebnisse zu liefern und die Abdeckung von Testfällen zu erhöhen.

Aber irgendwann wird die Simulation der Geschäftslogik zu komplex. Der Zweck der Virtualisierung besteht darin, den Arbeitsaufwand zu verringern und die Produktivität zu steigern, weshalb die Simulation von Komplexität immer weniger Vorteile bringt.

Der Grenzwert ist schwer zu sagen, aber wenn die Komplexität weit über unseren Warenkorb oder unser Login-Beispiel hinausgeht, wird es schwierig, den Aufwand zu rechtfertigen. Wie können Sie sicher sein, dass Sie das richtige Verhalten simulieren? Sie möchten nicht, dass Ihre Anwendung für die Zusammenarbeit mit einem simulierten Dienst konzipiert ist, mit der Realität jedoch nicht richtig funktioniert! Bei der Validierung ist weiterhin die Nutzung von Live-Diensten erforderlich. Glücklicherweise, Der Umgebungsmanager von Parasoft CTP Modul erleichtert den Wechsel.

Zusammenfassung

Zustandsbehaftetes Verhalten ist ein entscheidender Bestandteil bei der Erstellung realistischer virtualisierter Dienste, der zur Isolierung der zu testenden Anwendungen erforderlich ist. Für realistischere und nützlichere Tests ist es notwendig, den Testdatenstatus von Test zu Test beizubehalten. Parasoft Virtualisieren bietet eine umfassende Testdatenverwaltungslösung, die virtualisierten Diensten mit zustandsbehafteten und zustandsbasierten Antworten auf Eingaben von API-Aufrufen Leben einhaucht.

Simulationen sollten mit Vorsicht eingesetzt werden, da die Simulation komplexer Geschäftslogiken geringere Erträge mit sich bringt und das Risiko besteht, zu weit von der Realität abzuweichen. Ein intelligenter Einsatz der Simulation bringt isoliert große Vorteile mit sich, was wiederum die Abhängigkeiten von Live-Servern entkoppelt. Da Live-Server jedoch immer noch eine Rolle bei der endgültigen Validierung spielen, sind Service-Virtualisierungstools wie Parasoft Virtualize erforderlich, um die nahtlose Mischung und Anpassung dieser Umgebungen zu unterstützen.

So wählen Sie das richtige Service-Virtualisierungstool aus