Suchen

Software auf dem Prüfstand Performance von Anwendungen testen

| Autor / Redakteur: Christian Rentrop / Stephan Augsten

Egal ob große Anwendung oder kleine App: Software-Performance-Testing sollte immer durchgeführt werden, um die Solidität unter Stresssituationen auf die Probe zu stellen. Zudem ist das Performance-Testing ein wichtiger Qualitätsfaktor.

Firma zum Thema

Um Performance-Probleme bei einer Anwendung aufzuspüren, gibt es eine Reihe von Testverfahren.
Um Performance-Probleme bei einer Anwendung aufzuspüren, gibt es eine Reihe von Testverfahren.
(Bild: geralt - Pixabay.com / CC0 )

Die Leistungsfähigkeit einer Software setzt sich üblicherweise aus drei Faktoren zusammen: Zunächst einmal entscheidet die zugrundeliegende Hardware natürlich über die Leistungsfähigkeit. Faktoren wie Nutzerzahlen oder die Zahl der Hardware-Zugriffe – etwa auf Festplatten oder den Arbeitsspeicher – beeinflussen die Performance. Als dritter Faktor sind natürlich auch die Sauberkeit der Programmierung und Optimierung auf das Zielsystem wichtig.

Nur wenn die Software auf die Leistungsfähigkeit des Zielsystems und die Anforderungen der User optimiert ist, kann sie auch unter Stress optimal arbeiten. Um herauszufinden, ob das der Fall ist, empfiehlt sich vor dem Release jeder Software ein umfassender Performance-Test. Denn nur so können Entwickler herausfinden, ob ihre Programme auch unter Last leisten, was sie leisten sollen.

Software-Performance-Testing – wofür?

Das Performance-Testing stellt einen wichtigen Qualitätsfaktor bei der Softwareentwicklung dar und hilft dabei, Flaschenhälse und andere Probleme in der Anwendung aufzuspüren. Ein praktisches Beispiel wäre zum Beispiel eine große Web-Anwendung, die auf mehreren Clients und Servern arbeitet, darunter neben dem Webserver und dem Datenbank-Server auch der Rechner eines oder mehrerer Kunden.

Was in der Theorie gut arbeitet – der Webserver berechnet und liefert zusammen mit dem Datenbankserver PHP, CSS, Bilder und andere Inhalte an den Browser des Users aus, der seinerseits die Inhalte rendert und dem Anwender anzeigt – kann in der Praxis verschiedene Probleme aufweisen.

So könnte es sein, dass die Verbindung zwischen Webserver und Datenbankserver unter Last einbricht und einen massiven Engpass darstellt. Oder das schlicht aufgrund zu optimistischer Webentwicklung zu viele Inhalte auf den Client übertragen werden, woraufhin der Webserver in Liefernöte kommt oder der Client selbst in Sachen Rechenleistung überfordert wird.

Das ist natürlich nur ein simples Beispiel, zeigt aber, wo Probleme liegen können, die bei der regulären Entwicklung mit nur einer kleinen Zahl Anwender in aller Regel nicht auftreten. Diese lassen sich nur durch die Simulation einer Lastsituation aufspüren. Gleichzeitig kann auf diese Weise auch die Skalierbarkeit des geplanten Systems auf die Probe gestellt werden. Außerdem lässt sich durch das Testing auch vor dem Release herausfinden, ob die Software den gewünschten Anforderungen gewachsen ist.

Verfahren fürs Performance-Testing

Um die Flaschenhälse einer Anwendung aufzuspüren, gibt es eine Reihe von Testverfahren, die natürlich nicht nur bei Webanwendungen zum Einsatz kommen können, sondern bei jeder Art von Software:

Load Testing

Der Lasttest ist die einfachste Form des Performance-Tests: Mit ihm lässt sich herausfinden, wie sich die Software und das Gesamtsystem verhält, wenn zum Beispiel große Nutzerzahlen oder Datenmengen anfallen.

Dazu sollte – etwa mit einem Testing-Tool wie Tsung, Apache JMeter, HP Loadrunner oder LoadView – eine typische Situation mit vielen gleichzeitig aktiven Nutzern und typischen Anfragen herbeigeführt werden. Auf diese Weise lässt sich herausfinden, ob das System selbst unter maximaler Last die nötige Performance aufweist. Gleichzeitig können Flaschenhälse, die unter Last auftreten, effektiv aufgespürt werden.

Stress Testing

Der Stresstest ist eine Ergänzung des Lasttests mit dem Ziel, die Schwachpunkte einer Applikation herauszufinden: Mit ihm lässt sich die Anwendung gezielt unter Stress unter die Lupe nehmen. Der Stresstest simuliert im Grunde eine Extremsituation. Viele User greifen auf bestimmte Funktionen zu oder fragen gleichzeitig oder in kurzen Abständen Daten ab.

Im Falle einer Webanwendung könnte das eine verteilte Dienstblockade (Distributed Denial of Service, DDoS-Attacke) sein; denkbar wäre aber eben auch ein einfacher Benutzeransturm, etwa weil die Anwendung im TV genannt oder auf einer großen Plattform verlinkt wurde: Mit einem Stresstest kann herausgefunden werden, ob die Software-/Hardware-Kombination unter diesen Bedingungen zuverlässig arbeitet und wo mögliche Bruchstellen und Optimierungspotentiale liegen.

Endurance Testing

Der Ausdauertest ist eine weitere Variante des Lasttests: Die hier gestellte Anforderung: Wie lange kann die Anwendung eine Lastsituation aushalten? Hier sind es vor allem Caches, Speicherkapazitäten und zuverlässige Verbindungen, die „brechen“ können. So mag eine Anwendung einen Lasttest und einen Stresstest bestehen, doch erst durch den Dauerlastbetrieb kann herausgefunden werden, ob zum Beispiel Datenspeicher, Caching-Methoden oder das Kühlsystem der Hardware den Anforderungen gewachsen sind.

Spike Testing

Der Lastspitzentest beinhaltet eine plötzliche Steigerung oder Absenkung der Last, etwa durch plötzliche Auf- und Abschaltung vieler User. Auf diese Weise kann überprüft werden, ob das System in solchen Situationen Probleme bereitet sowie ob und unter welchen Bedingungen die Lastspitzen sonderbares Verhalten hervorrufen.

Volume Testing

Beim Volumentest werden bestimmte Daten wiederholt in die Datenbank oder die Softwaresysteme geschrieben, die Anwendung und Hardware wird dabei beobachtet. Ziel dieses Tests ist es, herauszufinden, ob die Performance zum Beispiel bei sehr vollen Caches und Datenbanken erhalten bleibt.

Scalability Testing

Der Skalierbarkeitstest ergänzt die anderen Testmethoden: Durch gezieltes Zu- und Abschalten von Hardwarekapazitäten unter Last können Anwendungsentwickler herausfinden, welche Kapazitäten notwendig sind, um zum Beispiel eine große Last oder eine Stresssituation abzufangen. Diese Kapazitäten können später entweder als stille Reserve mitlaufen oder im Fall von Cloud-Computing-Lösungen wie etwa Amazon gezielt in Lastsituationen aufgebucht werden.

Qualitätsziel optimale Performance

Unter dem Strich sind vor allem der Lasttest, der Stresstest und der Ausdauertest wichtig, um herauszufinden, ob die Anwendung in der richtigen Umgebung arbeitet und auch unter hoher Last weiterhin einsatzfähig bleibt. Lange Lade- und Latenzzeiten unter Last sind immer ein Indiz für einen Flaschenhals oder schlechte Skalierbarkeit des Systems.

Neben der Software selbst sollten dabei auch das zugrundeliegende Betriebssystem und die verwendete Hardware sowie beim Einsatz mehrerer Hardware-Einheiten auch deren Verbindung genau unter die Lupe genommen werden, um diese Flaschenhälse aufzuspüren.

Das Beheben offensichtlicher Probleme und die anschließende Wiederholung des Tests helfen dabei, Performance-Probleme auch unter Extrembedingungen zu vermeiden. Dadurch entsteht mit relativ einfachen Mitteln eine deutlich verbesserte Qualität der Software noch vor dem Release.

Gleichzeitig können Entwickler mit Hilfe von Performance-Tests ihre Systeme besser kennenlernen und herausfinden, wo mögliche Schwachpunkte liegen – und ob diese überhaupt für die Anwendung relevant sind. Schließlich hilft ein Last- oder Stresstest auch dabei, überskalierte und dementsprechend teure Lösungen aufzuspüren.

(ID:44841937)

Über den Autor

 Christian Rentrop

Christian Rentrop

IT-Fachautor