Was ist Parallelitätstest beim Softwaretest?
⚡ Intelligente Zusammenfassung
Durch Parallelitätstests werden Fehler aufgedeckt, die nur dann auftreten, wenn mehrere Benutzer gleichzeitig auf dieselbe Anwendung zugreifen. Dadurch werden Deadlocks, verlorene Aktualisierungen und Sperrprobleme sichtbar, die bei sequenziellen Funktionsprüfungen nie erkannt werden.
Was ist Parallelitätstest?
Parallelitätstests ist eine Testmethode, die dazu dient, Fehler in einer Anwendung zu erkennen, wenn mehrere Benutzer gleichzeitig angemeldet sind. Anders ausgedrückt: Sie überwacht die Auswirkungen, während mehrere Benutzer dieselbe Aktion gleichzeitig ausführen.
Parallelitätstests werden auch als MehrbenutzertestsDas Testen eines nebenläufigen Programms ist aufgrund von Nichtdeterminismus und Synchronisationsproblemen anspruchsvoller als das Testen eines sequenziellen Programms: Derselbe Test kann bei einem Durchlauf erfolgreich sein und beim nächsten fehlschlagen, ohne dass sich eine einzige Codezeile geändert hat.
Das folgende Diagramm veranschaulicht die Idee – mehrere Benutzer greifen gleichzeitig auf dieselbe Anwendungsressource zu, und der Test beobachtet, wie die Anwendung mit der Überschneidung umgeht.
Warum Parallelitätstests
Zwei Fragen rechtfertigen den Aufwand, und beide sind für Einzelbenutzer-Funktionsläufe unsichtbar.
- Es ermittelt die Auswirkungen des gleichzeitigen Zugriffs auf dieselben Datenbankeinträge, Module oder denselben Anwendungscode.
- Es identifiziert und misst das Ausmaß von Deadlocks, Sperren, der Verwendung von Single-Thread-Code und des eingeschränkten Zugriffs auf gemeinsam genutzte Ressourcen.
Eine Funktion kann für einen Benutzer vollständig korrekt funktionieren und dennoch Daten für den zweiten Benutzer verlieren, der eine Millisekunde später eintrifft. Aus diesem Grund wird diese Technik neben anderen Verfahren eingesetzt. Leistungstest anstatt innerhalb von Funktionstests.
Wie man Parallelitätstests durchführt
Parallelitätstests folgen einer wiederholbaren Abfolge. Die folgenden Schritte bewegen sich von scoping zur Auflösung.
- Schritt 1) Identifizieren Sie Datenflüsse, die anfällig für Parallelität sind. Achten Sie auf gemeinsame Status: gleichzeitige Anmeldungen, Sitz- oder Aktienreservierungen, Aktualisierungen des Kontostands, Batch-Jobs, die in dieselbe Tabelle schreiben, und alle Single-Thread-Komponenten im Pfad.
- Schritt 2) Legen Sie ein Ziel für die Parallelität fest. Entscheiden Sie, wie viele Nutzer gleichzeitig aktiv werden müssen, und zwar anhand realer Nutzungsspitzen anstatt einer gerundeten Zahl.
- Schritt 3) Entwerfen Sie die Testfälle. . Der Testfall Verknüpft die gemeinsame Ressource, die konkurrierenden Aktionen und den erwarteten Endzustand – zum Beispiel dürfen nicht beide Sitzungen erfolgreich sein, die von einem Konto abheben.
- Schritt 4) Skript erstellen und das Werkzeug auswählen. Es wird ein Lastgenerator benötigt, der konfigurierbare virtuelle Benutzer erzeugt; JMeter ist die gängige Open-Source-Wahl, und ihre Thread-Gruppeneinstellungen lassen sich direkt auf Parallelitätsszenarien abbilden.
- Schritt 5) Ramp schrittweise. Erhöhen Sie die Anzahl gleichzeitiger Nutzer schrittweise anstatt sprunghaft.ping zum Ziel, sodass die Ebene, auf der die Auseinandersetzung beginnt, sichtbar ist.
- Schritt 6) Überwachen und analysieren. Achten Sie auf Wartezeiten bei Sperren, Streuung der Antwortzeiten, Fehlerraten und Datenbankblockierungen gleichzeitig – ein Fehler in der Parallelverarbeitung zeigt sich oft zuerst als Zeitanomalie, bevor er sich als Fehler bemerkbar macht.
- Schritt 7) Beheben und erneut ausführen. Beheben Sie die Ursache für ein Problem mit der Synchronisierung, der Indizierung oder der Sperrung und wiederholen Sie dann den gleichen Durchlauf, um zu bestätigen, dass sich das Verhalten geändert und nicht nur verschoben hat.
Häufige Fehler bei der Parallelverarbeitung
Fehler in der Parallelverarbeitung lassen sich in eine kleine Anzahl erkennbarer Klassen einteilen, und die korrekte Benennung der Klasse führt in der Regel direkt zur Lösung.
| Defekt | Was ist loss | Typisches Symptom |
| Race Bedingung | Das Ergebnis hängt davon ab, welche Sitzung zuerst beendet wurde. | Bei einigen Läufen stimmen die Summen, bei anderen nicht. |
| Deadlock | Zwei Sitzungen halten jeweils ein Schloss, das die andere benötigt | Transaktionen hängen sich auf, anstatt einen Fehler zurückzugeben. |
| Verlorenes Update | Ein zweiter Schreibvorgang überschreibt den ersten, ohne ihn zu lesen. | Gespeichertes Wechselgeld verschwindet stillschweigend. |
| Datenkorruption | Eine gemeinsame Struktur wird nur teilweise geschrieben | Datensätze in einem Zustand, der keine gültige Transaktion erstellen konnte |
| Verhungern | Eine Sitzung erhält niemals die Ressource, auf die sie wartet. | Ein einzelner Benutzerpfad ist aufgrund eines Timeouts ausgefallen, obwohl das System scheinbar einwandfrei funktioniert. |
Da diese Fehler nur sporadisch auftreten, müssen bei jedem Lauf Protokolle und Zeitstempel erfasst werden; andernfalls kann der Fehler nicht glaubwürdig gemeldet werden. Fehlermanagementprozess.
Beispiel für Parallelitätstests
Stellen Sie sich einen Online-Shop vor, der das letzte Exemplar eines Produkts auf Lager hat. Zwei Kunden öffnen den Artikel gleichzeitig und drücken beide auf „Klicken“. Kaufen.
- Szenario: Zwei Sitzungen lesen den Lagerbestand = 1, beide bestehen die Verfügbarkeitsprüfung und schreiben den Lagerbestand auf 0.
- Erwartetes Ergebnis: Eine Bestellung wird bestätigt, die andere erhält eine Meldung, dass der Artikel nicht vorrätig ist, und der Lagerbestand wird niemals negativ.
- Fehlerindikator: Beide Aufträge werden bestätigt, oder der Lagerbestand landet bei -1, was zeigt, dass die Verfügbarkeitsprüfung und die Dekrementierung nicht als ein einziger atomarer Schritt ausgeführt werden.
- Varianten, die es wert sind, ausprobiert zu werden: In zwei Sitzungen wird ein Profildatensatz bearbeitet, dieselbe Anfrage wird zweimal genehmigt, und während ein Benutzer speichert, aktualisiert ein Batch-Job die Tabelle.
Das gleiche Muster lässt sich verallgemeinern: Es wird eine Ressource und zwei Autoren gefunden, ohne Garantie auf die Reihenfolge. Das Szenario wird ausgeführt während Systemtests, bevor Last hinzugefügt wird, hält die Diagnose sauber.
Vorteile von Parallelitätstests
- Dadurch wird der Aufwand für das Testen einer Anwendung relativ reduziert, indem der Umfang der gleichzeitigen Interaktionen auf wenige, weit verbreitete und gut getestete Komponenten beschränkt wird.
- Durch die Kapselung kann das Verhalten eines Teils eines Programms analysiert werden, ohne die gesamte Codebasis überprüfen zu müssen.
- Es trägt zur Verbesserung der Zuverlässigkeit und Robustheit paralleler Programme bei.
- Es deckt Sperr- und Blockierungsgrenzen frühzeitig auf, sodass Kapazitätsentscheidungen auf gemessener Auslastung und nicht auf Schätzungen beruhen.
Nachteile von Parallelitätstests
Die folgenden Nachteile treten typischerweise bei Testern während der Durchführung von Parallelitätstests auf.
- Die Anwendung muss auf mehreren Plattformen getestet werden.
- Parallelverarbeitungsszenarien erfordern intensivere Tests als sequentielle Szenarien.
- Funktionen geben ihr Ergebnis nicht sofort an den Aufrufer zurück; stattdessen kann das Ergebnis später über Benachrichtigungen, Blöcke, Rückruffunktionen oder ähnliche Mechanismen übermittelt werden, was das Testen erschwert.
- Der Informations- oder Programmfluss wird nicht im Aufrufstapel widergespiegelt.
- Die Anzahl der Ausführungspfade im System kann extrem groß sein, da die Prozesse in einem nebenläufigen System während ihrer Ausführung miteinander interagieren.
- Parallele Programme weisen eine höhere Ausfallrate auf als sequentielle Programme.
- Das Debuggen von parallelen Programmen ist schwierig, da das Anhängen eines Debuggers den Zeitpunkt verändert, der den Fehler verursacht hat.

