Parasoft C/C++test 2022.2 unterstützt das neue MISRA C:2012 Amendment 3 und eine Entwurfsversion von MISRA C++ 202x. Erfahren Sie mehr >>

Verwendung der Stateful Virtualization, um Produktmanager dazu zu bringen, sich auf das Wesentliche zu konzentrieren

Von Omar Ramírez

24. Juli 2019

5  min lesen

Wenn es um Endbenutzer geht, ist ihnen der Back-End-Wahnsinn auf Ihrer Website egal. Das Hauptanliegen eines Benutzers ist es, alles zu erledigen, was er auf der Webseite erledigt hat, unabhängig von der Reihenfolge der Schritte, die erforderlich sind, um dorthin zu gelangen. Ein virtueller Service, der dieses Verhalten simulieren kann, ermöglicht frühere End-to-End-Tests, eine verbesserte Abdeckung aller Anforderungen an die Geschäftslogik und effektive Produktdemos für Produktmanager.

In einem unserer weniger glamourösen Sprint-Reviews zeigte sich einer der Produktmanager frustriert über die Demo unseres Teams, da wir nur die neu implementierten Funktionen / Services einzeln und nicht den End-to-End-Workflow zeigen konnten. Der Grund dafür war einfach, dass noch nicht genügend Funktionen implementiert wurden, um die Daten zwischen den verschiedenen Diensten zu verknüpfen. Für diese spezielle User Story war es dem Produktmanager nicht wichtig, die einzelnen Teile des Puzzles zu sehen, er wollte, dass die Teile als Ganzes zusammengesetzt wurden: die Geschäftslogik.

Da es sich also um ein Unternehmen handelt, das Softwaretest-Tools herstellt, sind wir benutzte einen von ihnen unserem Produktmanager zu geben, was er wollte. Und seitdem nutzen wir die Service-Virtualisierung (Sie wissen nicht, was das ist? Lesen Sie hier mehr über die Service-Virtualisierung.) in vielen unserer Demos und in unserem gesamten Workflow. Die Servicevirtualisierung ermöglicht es uns, virtuelle Services zu verwenden, um nicht verfügbare Services darzustellen, die noch in der Entwicklung von anderen Teams sind, die in unterschiedlichen Sprint-Kadenzen arbeiten. Es erlaubt uns, „intelligente Stubs“ aufzustellen, die realistisches Abhängigkeitsverhalten oder völlig fiktives Verhalten zeigen, um unseren Bedürfnissen gerecht zu werden. Indem wir die Teile unserer Demos simulieren, die nicht verfügbar sind, können wir Produktmanagement-Demos anbieten, die ganze Workflows zeigen, um das benötigte Feedback zu erhalten, ohne sich an den Teilen aufhängen zu müssen, die außerhalb des Umfangs liegen.

Service-Virtualisierung mit dem Data Repository CRUD Tool

Die Virtualisierung einzelner Serviceanrufe ist einfach genug, aber sicherzustellen, dass sich diese einzelnen Anrufe als Teil eines gesamten Systems entsprechend verhalten, ist etwas anderes. Das Thema wird interessanter, wenn für einige dieser Dienste zwischen den Anrufen dauerhafte Daten gepflegt werden müssen. Wenn persistente Daten betroffen sind, ist es für den virtuellen Dienst wichtig, die Daten über die verschiedenen Zustände hinweg zu verwalten und das Verhalten des realen Dienstes wirklich zu simulieren, um die Geschäftslogik hinter der Anwendung genauer darzustellen. Wir nennen dies "Stateful Virtualization" und Sie können alles darüber in unserem Blog über lesen Hinzufügen von Leben zur Service-Virtualisierung durch Stateful- und State-Transition-Tests. Hier kommt das Data Repository CRUD-Tool ins Spiel.

Parasoft Virtualisieren (unsere Service-Virtualisierungslösung) verfügt über eine Funktion namens Data Repository CRUD-Tool. Das CRUD-Tool (Erstellen, Lesen, Aktualisieren, Löschen) des Datenrepositorys wurde erstellt, um das Problem der Datenpersistenz zu lösen, das häufig mit Webdiensten verbunden ist, für die ein Statusübergang erforderlich ist.

Betrachten Sie das traditionelle Warenkorb-Erlebnis. Angenommen, ein Warenkorbsystem besteht aus drei Webdiensten: dem Inventarservice, dem Warenkorbservice und dem Zahlungsservice. Jeder dieser Dienste verfügt über einen eigenen Datensatz, aber ihre Datensätze teilen sich ein Element oder Attribut (Inventar-ID, Warenkorb-ID, Transaktions-ID), das berücksichtigt werden muss, um zum nachgeschalteten Dienst zu gelangen. Zusätzlich zum gemeinsam genutzten Element müssen die Aufzeichnung der Artikel im Warenkorb, ihre Menge und der berechnete Gesamtpreis während des gesamten Einkaufserlebnisses gepflegt werden, um den Bestellvorgang zu erfüllen.

Eine minimale Lösung wäre die Virtualisierung eines festen Szenarios, in dem ein Benutzer nach einem statischen Artikel sucht, den Artikel in den Warenkorb legt und schließlich die Kaufabwicklung abschließt. Wir wissen jedoch, dass Online-Shopping komplexer sein kann. Wenn der reale Dienst gegen den virtuellen Dienst ausgetauscht wird, sollte das Verhalten für alle anderen mit ihm interagierenden Dienste nahtlos und transparent sein. Daher können wir nicht davon ausgehen, dass dies das einzige Szenario ist, das für den virtuellen Dienst ausgeführt wird.

Ein Benutzer kann sich entscheiden, einen anderen Artikel hinzuzufügen, den Originalartikel zu aktualisieren oder alles zusammen zu entfernen, wenn plötzlich Unzufriedenheit oder Einkaufsmüdigkeit auftreten. Menschliches Verhalten ist unvorhersehbar. Mit dem CRUD-Tool für das Datenrepository können wir diese Unvorhersehbarkeit simulieren, indem wir Datensätze erstellen und ändern im laufenden Betrieb und zwischen Benutzeraktionen beibehalten. Auf diese Weise können wir jede Abfolge von Ereignissen, die auf den virtuellen Dienst ausgelöst werden, problemlos ausführen. Jede arithmetische oder zusätzliche Logik wird vom Tool mühelos verarbeitet.

Abgesehen von unseren Sprint-Demos hatte ich das Privileg, in diesem Jahr an zwei separaten Projekten mitzuwirken, bei denen sich die Funktionen des CRUD-Tools für das Datenrepository als unglaublich wertvoll erwiesen haben. Lass mich dich durch sie führen.

Stabilisierung dynamischer Umgebungsdaten während Leistungstests

Für eine Anwendung, die in mehrere Dienste von Drittanbietern integriert ist, war ein Leistungstest erforderlich. Das Entwicklungsteam verfügte bereits über ein oder zwei statische Datensätze, anhand derer überprüft wurde, ob sich die Anwendung im Verlauf des Tests wie erwartet verhalten hat. Damit der Leistungstest jedoch gültig ist, müssen die Daten und die im Test durchgeführten Aktionen zufällig und mit hoher Variabilität sein, um ein reales Szenario ordnungsgemäß zu simulieren. Der Status einzelner Datensätze musste zwischen allen einzelnen Diensten, einschließlich der Dienste von Drittanbietern, konsistent sein. Es wäre für das Entwicklungsteam einfach genug gewesen, neue Datenbankdatensätze in jeden abhängigen Drittanbieter-Service einzufügen, aber leider war der Zugriff auf die Sandbox-Umgebungen mit hohen Kosten und einer Vielzahl potenzieller Kopfschmerzen verbunden.

Das Team konnte seinen Leistungstest mithilfe der Servicevirtualisierung und des Data Repository CRUD-Tools erfolgreich implementieren. Jeder Datensatz, der zur Laufzeit nicht im virtualisierten Dienst vorhanden war, wird vom Tool in einer Ausgangskonfiguration in seinem Ausgangszustand erstellt. Der virtuelle Dienst würde dann den neu erstellten Datensatz verwenden, um erfolgreich auf die Anforderung zu antworten und ihn über die Lebensdauer des Tests zu ändern. Die Einrichtung war überraschend schmerzlos und garantierte einen echten und zuverlässigen End-to-End-Ablauf für jeden einzelnen Benutzer, der mit dem Leistungstest-Tool generiert wurde.

Injizieren von Echtzeitdaten in ein zu testendes System

Der zweite Fall war ungewöhnlich, aber es machte sicherlich Spaß, ihn zu virtualisieren. Der Fall umfasste das Testen einer Anwendung, die mit einem staatlichen Fahrzeugregistrierungssystem funktionierte. Jedes Mal, wenn der Anwendung eine neue Fahrgestellnummer (Fahrzeugidentifikationsnummer) hinzugefügt wurde, wurden asynchrone Anrufe an das Registrierungssystem gesendet, um die vollständigen Informationen des Fahrzeugs anzufordern. Wenn die VIN nicht im System vorhanden wäre, würde sie als nicht registriert antworten. Leider hatte das Registrierungssystem eine verbindliche Richtlinie, nach der die neuen Fahrzeuginformationen von einer Person (ja, einer lebenden, atmenden Person) manuell eingegeben werden mussten. Das System würde anders reagieren, wenn die Informationen für die angeforderte Fahrgestellnummer nach einer bestimmten Anzahl von Anforderungen nicht registriert würden.

Dieses allgemeine Verhalten ist bei asynchronen Diensten üblich. Dies ist im Wesentlichen das Äquivalent eines Kindes, das fragt: "Sind wir schon da?" während eines Road Trips - eine Frage, die man normalerweise ignoriert, wenn sie sich nicht tatsächlich nähern.

Sobald die Person die Informationen manuell registriert hat, antwortet das System mit der Bestätigungsnutzlast. Ziel war es, das Fahrzeugregistrierungssystem zu simulieren, um die Anwendung unabhängig zu testen. Die Herausforderung bestand darin, zu bestimmen, wie der virtuelle Dienst so konfiguriert werden soll, dass er zu unterschiedlichen Zeiten unterschiedlich auf eine identische Anforderung reagiert. Um dies zu erreichen, haben wir das CRUD-Tool des Datenrepositorys verwendet, um die Anzahl der Anrufe zu zählen, die mit derselben Anforderung getätigt wurden. Nachdem eine bestimmte Anzahl erreicht wurde, aktualisiert das CRUD-Tool den Status des Datensatzes, damit das virtuelle Asset anders reagiert. Das CRUD-Tool wurde auch so konfiguriert, dass innerhalb eines erwarteten Zeitfensters zufällig ein neuer Datensatz für jede angeforderte Fahrgestellnummer erstellt wird, um den manuellen Registrierungsprozess zu simulieren. Etwas, das anfangs schwierig erschien, konnte mit dem richtigen Werkzeug leicht erreicht werden.

Zusammenfassung

Die Wahrheit ist, dass wenn es um einen Endbenutzer oder einen Produktmanager geht, der Back-End-Wahnsinn, der während einer einfachen Webseitenaktion auftritt, vernachlässigbar ist. Das Hauptanliegen eines Benutzers ist, dass alles, was er auf der Webseite erledigt hat, erfolgreich erledigt wird, unabhängig von der Reihenfolge der Schritte, die erforderlich sind, um dorthin zu gelangen. Ein virtueller Service, der dieses Verhalten simulieren kann, ermöglicht frühere End-to-End-Tests, eine verbesserte Abdeckung aller Anforderungen an die Geschäftslogik und effektive Produktdemos. Mit den jüngsten Verbesserungen an Parasoft VirtualisierenDank der Benutzeroberfläche und des Konfigurationsdesigns des CRUD-Tools ist es jetzt viel einfacher, komplexe Szenarien zu handhaben und die Funktionen der realen Welt bereitzustellen, nach denen Ihre Stakeholder, Produktmanager und Tester so früh wie möglich suchen.

Auswahl der richtigen Service-Virtualisierungslösung

Von Omar Ramírez

Omar ist SQA-Ingenieur bei Parasoft.

Erhalten Sie die neuesten Nachrichten und Ressourcen zum Testen von Software sofort.