Erfahren Sie, was es Neues in MISRA C:2012 AMD3 gibt und wie Sie mit C/C++test 2022.2 die UMFANGREICHSTE Abdeckung erhalten! Auf Abruf ansehen >>

Bewältigen Sie die Herausforderungen des Leistungstests

Von Sergej Baranow

15. Dezember 2022

5  min lesen

Leistungstests sagen Ihnen, wie sich Ihre Anwendung verhält, wenn sie der realen Welt ausgesetzt ist und einem Strom von Anfragen von Benutzern ausgesetzt ist. Holen Sie sich Leistungstestmethoden und -strategien, um Ihre Anwendung effizient und zuverlässig auf die Produktionslasten vorzubereiten und ihren Erfolg sicherzustellen.

Softwareentwicklungsorganisationen stehen unter Druck bieten eine hervorragende Benutzererfahrung bei gleichzeitigem Ausgleich von Entwicklungs- und Wartungskosten. Für eine Server-Softwareanwendung wie eine Webanwendung oder eine API sind konsistent schnelle und zuverlässige Antworten ebenso wichtig wie die funktionale Korrektheit, um die Benutzerzufriedenheit und den Anwendungserfolg sicherzustellen.

Leistungstest ist der Bereich der Software-Qualitätssicherung, der sich auf die Reaktionsfähigkeit und Zuverlässigkeit einer Anwendung konzentriert, wenn sie einem Strom von Anfragen von mehreren Benutzern ausgesetzt ist. Es bewertet, wie sich eine Anwendung verhält unter erwarteten Serviceanforderungslasten und analysiert die Ergebnisse, sodass Engpässe und andere Ineffizienzen, die einen reibungslosen Betrieb unter Last verhindern, identifiziert und behoben werden können.

  • Leistungstest-Tools können dabei helfen, sicherzustellen, dass Ihr System mit Folgendem umgehen kann:
  • Regelmäßige Last von Serviceanfragen und
  • Variationen in Anfragetypen und Verkehrsmustern.

Allerdings reichen selbst die besten Tools nicht aus, wenn sie nicht im Kontext der richtigen Performance-Testing-Strategie und -Praxis eingesetzt werden. Nur die Kombination aus beidem sichert den Erfolg.

Probleme des traditionellen Ansatzes

Leistungstests beruhen traditionell auf einer nahezu funktionsfähigen Anwendung, die in einer Produktions- oder Vorproduktionsumgebung ausgeführt wird. Implizit ist dies spät im Entwicklungslebenszyklus, um wichtige Probleme herauszufinden. Probleme, die so spät entdeckt werden, wirken sich stark auf Kosten und Zeitplan aus.

Darüber hinaus begrenzt der Zeit- und Arbeitsaufwand, der erforderlich ist, um den vollständigen Zyklus der manuellen Leistungstests abzuschließen, die Häufigkeit, mit der dies durchgeführt werden kann, wodurch entweder die Häufigkeit der Freigabezyklen begrenzt wird oder Unternehmen mit teilweisen oder keinen Leistungstests Freigaben erhalten.

Die Suche nach Lösungen, die die durch die oben beschriebenen Probleme verursachten Unsicherheiten und Risiken verringern würden, veranlasste Unternehmen, Leistungstests auf Agile- und Shift-Left-Strategien anzuwenden, die bereits verwendet werden und sich in anderen Bereichen des Softwaretestens als effektiv erwiesen haben.

Herausforderungen moderner Leistungstests

Shift-Left-Performance-Tests besagt, dass die Probleme des traditionellen Ansatzes darauf zurückzuführen sind, dass zu spät und zu selten getestet wird. Daher müssen Sie früh und oft testen.

Das klingt in der Theorie gut, aber wie setzt man es in der Praxis um?

Damit die Shift-Left-Testversprechungen eintreten, müssen Sie die folgenden Probleme lösen:

  • Wie testet man die Leistung einer Anwendung, die noch nicht existiert?
  • Wie findet man die Balance zwischen Agilität und Kosten?
  • Wie kann sich die Automatisierung von Leistungstests auszahlen?
  • Wie lassen sich Einrichtungs- und Betriebskosten reduzieren?

Problem 1: Wie testet man die Leistung einer Anwendung, die noch nicht existiert?

Die Anforderung, früh zu beginnen, bedeutet, dass Leistungstests zusammen mit Einheiten- und Funktionstests erstellt werden sollten, was lange dauern kann, bis die endgültige Anwendung Gestalt annimmt. Mit diesen beiden Hauptmethoden können Sie mit dem Leistungstest einer Serveranwendung beginnen, bevor sie voll funktionsfähig ist.

  • Service-Virtualisierung
  • Leistungstests auf Einheitenebene

Die Dienstvirtualisierung ermöglicht das frühzeitige Testen von Anwendungen, indem das Verhalten ihrer externen Abhängigkeiten – wie APIs, Datenbanken, Messagingsysteme und mehr – emuliert wird, die in den Anfangsphasen der Entwicklung aus einem der folgenden Gründe möglicherweise nicht verfügbar sind:

  1. Sie werden parallel zur Application Under Test (AUT) bearbeitet.
  2. Der Zugang zu ihnen ist beschränkt.

Ein Dienstvirtualisierungstool sollte es Ihnen ermöglichen, die Reaktionen externer Abhängigkeiten und deren Leistungsparameter nachzuahmen, z. B. Reaktionsverzögerungen, die sich auf realistische Weise auf die Leistung der AUT auswirken.

Leistungstests auf Einheitenebene ermöglichen es Ihnen, Drittanbieter- und interne Komponenten zu evaluieren, die Sie in Ihre Anwendung integrieren möchten. Sie können beispielsweise die Leistung alternativer JSON-Parserbibliotheken für die Anforderungsgrößen und Laststufen bewerten, die Sie von Ihrer Zielanwendung erwarten. Dies hilft Ihnen bei der Auswahl der besten Alternative und realistische Leistungserwartungen setzen für Ihre Anwendung basierend auf der Leistung der verwendeten Komponenten.

Problem 2: Agilität vs. Kosten. Wie finde ich das Gleichgewicht?

Die Anforderung, häufig zu testen, kann darauf hindeuten, dass Leistungstests so oft wie Einheiten- oder Funktionstests in einem Build-Prozess für kontinuierliche Integration (CI) ausgeführt werden sollten, der durch Einchecken von Quellcode ausgelöst wird.

Während Leistungstests ein integraler Bestandteil der kontinuierlichen Anwendungsbereitstellung sein müssen, ist die Anwendung derselben Testhäufigkeitslogik, die für Komponenten- oder Funktionstests funktioniert, möglicherweise nicht praktikabel, da die Ausführung der vollständigen Suite von Leistungstests normalerweise erheblich mehr Zeit und Rechenressourcen erfordert.

Um dieses Problem zu lösen, sollte die Application Performance Test Suite aus verschiedenen Leistungstesttypen bestehen, deren Ausführungshäufigkeit umgekehrt proportional zu der Zeit und den Ressourcen ist, die für die Ausführung dieser Tests erforderlich sind. Mit einem solchen Ansatz können im Rahmen des CI-Build-Prozesses relativ kurze Smoke- oder Baseline-Performance-Tests durchgeführt werden, während umfassendere Tests regelmäßig, aber seltener durchgeführt werden.

Testfrequenz Testtyp
Jeder CI-BuildRauch-/Baseline-Test, Unit-Performance-Tests
Täglich/nachtsDurchschnittlicher Belastungstest
Einmal pro WocheBelastungstest, Belastungstest

Problem 3: Wie lässt sich die Leistungstestautomatisierung auszahlen?

Die automatisierte Ausführung von Leistungstests allein wird ohne die Automatisierung der Testergebnisanalyse wenig Wert haben. Ein Leistungstest kann viele Daten generieren. Mit fortschreitender Anwendungsentwicklung werden die Anzahl der Leistungstests, die Komplexität ihrer Szenarien und ihre Dauer zunehmen. Die kontinuierliche Ausführung dieser Tests erzeugt eine Flut von Daten, die auf eine Pass/Fail-Antwort reduziert werden muss. Diese Antwort ist in der Regel das Ergebnis von SLA-Prüfungen (Service Level Agreement), die automatisch auf die nach Abschluss des Tests erfassten Leistungstestdaten angewendet werden.

Das Erstellen eines umfassenden Satzes stabiler SLA-Prüfungen für jeden Leistungstest ist der Schlüssel für eine erfolgreiche Automatisierung von Leistungstests.

Key Performance Indicator (KPI)SLA-Akzeptanzkriterien
Durchschnittliche ReaktionszeitSollte weniger als 1 Sekunde betragen
FehlerrateSollte weniger als 0.01 % betragen

Um den vollen Nutzen aus der kontinuierlichen Testausführung zu ziehen, sollten die Ergebnisse der Leistungstests automatisch in einem Berichts- und Analyse-Dashboard veröffentlicht werden, damit Sie Trenddaten schnell verstehen können. Der Shift-Left-Ansatz fügt zusätzlich zu Managern und Testern Entwickler als Dashboard-Benutzer hinzu. Das Dashboard muss also die Low-Level-Details enthalten, nach denen die Entwickler suchen, um die Ursachen für SLA-Fehler oder historische Trends effektiv zu untersuchen und festzustellen.

Last- und Leistungstests in einer DevOps Delivery-Pipeline

Die Testautomatisierung muss nicht in der Phase der Leistungstestausführung und Pass/Fail-Analyse enden. Die nächste Ebene ist automatisierte Ursachenanalyse von Leistungstests.

4. Wie lassen sich Einrichtungs- und Betriebskosten senken?

Die Vorteile von Shift-Left-Automatisierungstests gehen zu Lasten des Aufbaus der Testautomatisierungsinfrastruktur, der Erstellung oder Änderung von Tests und möglicherweise des Erwerbs und Erlernens neuer Tools und kultureller Veränderungen.

Auf diesem Weg müssen Sie sicherstellen, dass die von Ihnen verwendeten Leistungstest-Tools den neuen Prinzipien entsprechen, die Sie in die Praxis umsetzen. Nachfolgend finden Sie eine Liste der Leistungstest-Tool-Funktionen, mit denen Sie beim Einrichten und Verwalten automatisierter Tests Zeit sparen.

  • Bietet eine umfangreiche Befehlszeilenschnittstelle für die automatisierte Ausführung von Leistungstests.
  • Ermöglicht die Wiederverwendung von Testressourcen, wie Funktionstest-Assets, Leistungsmonitoren, SLA-Prüfungen usw.
  • Kann in Cloud- und Closed-Computing-Umgebungen verwendet werden.
  • Bietet Funktionen für Massenaktualisierungen von Leistungstestprojekten.
  • Unterstützt die automatisierte Generierung von Testfällen.
  • Unterstützt die automatisierte Fehlerursachenanalyse.
  • Macht alltägliche Dinge einfach und fortgeschrittene Dinge möglich.

In der Praxis bedeutet dies, dass das Tool zwar eine GUI für gängige Leistungstestaufgaben bietet, aber eine Option bietet, um seine Funktionalität mit Skripting in allen wichtigen Funktionsbereichen zu erweitern. Eine GUI-Schnittstelle für allgemeine Aufgaben sorgt für Produktivität und eine schnelle Lernkurve, während die Erweiterbarkeit mit Skripting oder Programmierung sicherstellt, dass das Tool unabhängig davon, wie spezifisch Ihre automatisierten Testanforderungen sind, Mittel bereitstellt, um sie zu erfüllen.

Teststabilität und Wartbarkeit tragen viel zur Senkung der Betriebskosten für Leistungstests bei. Obwohl dieses Thema einen separaten Artikel verdient, werden wir einen Bereich erwähnen, der oft übersehen wird, wenn man Performance-Tests von Webanwendungen aus einer traditionellen Perspektive betrachtet. Moderne Webanwendungen verwenden in großem Umfang API-Aufrufe, der Trend geht dahin, ausschließlich API-Aufrufe zu verwenden, um dynamische Inhalte von Servern abzurufen.

Diese wachsende Abhängigkeit von Webanwendungen von API-Aufrufen führt zu einem qualitativen Wandel bei modernen Leistungstests. Wenn der statische Inhalt einer Webanwendung von hochverfügbaren Content Delivery Networks (CDNs) bereitgestellt wird, entfällt der Großteil der Ladezeit von Webseiten auf die API-Aufrufe. Die Leistung solcher Webanwendungen wird zu einer Funktion der Leistung der APIs, von denen sie abhängt, was den Ersatz der Benutzeroberfläche durch API-Leistungstests rechtfertigt.

Ein solcher Austausch bringt mehrere Vorteile mit sich.

  • Stabilere API-Tests
  • Für die Ausführung sind deutlich weniger Rechenressourcen erforderlich
  • Einfache Wiederverwendung aus bestehenden Funktionstests

Das Ersetzen von UI- durch API-Leistungstests für qualifizierende Webanwendungen kann erheblich zur Stabilität Ihrer Leistungstests beitragen und die Betriebskosten senken.

Wohin als nächstes?

Moderne Leistungstests führen neue Prinzipien ein, die von der Testautomatisierung angetrieben werden. Die Ineffizienzen des traditionellen Testverfahrens werden verworfen, aber die Grundlagen bleiben bestehen. Und es ist wichtig, neue Praktiken zu überdenken und effizient anzuwenden.

Best Practices-Leitfaden für Leistungstests

Von Sergej Baranow

Sergei ist Principal Software Engineer bei Parasoft und konzentriert sich auf Last- und Leistungstests innerhalb von Parasoft SOAtest.

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