Blog

Last- und Performancetest: Such den Flaschenhals!

04 Sep, 2013
Xebia Background Header Wave

Nachdem das (manuelle) Testen in vielen Unternehmen verbessert wurde, bemerken wir die zunehmende Bedeutung von Last- und Performance-Tests. Das spiegelt sich auch in der aktuellen Version der Software Testing Trends Schweiz 2013 wieder. Hier ist zu lesen, dass „Load- and Performancetests“ im Trend liegen. Aus diesem Grund möchten wir aufzeigen, wie wir von der SwissQ solche Tests angehen und zu einem erfolgreichen Ende bringen.

Trendkurve

Warum investieren unsere Kunden Geld für Performancetests?

Häufig erhalten wir Aufträge für Last- und Performancetests, bei denen die Performance von bereits produktiven Software-Releases in der Test-Umgebung überprüft werden soll. Die Hintergründe dafür sind negative Erfahrungen, die während der jährlichen „Hochsaison“ in der Live-Umgebung gesammelt wurden. Die Aufträge hatten als Ziel, die Ursachen für die Performance-Einbrüche zu identifizieren. Diese sollten rechtzeitig vor der nächsten Hochlast beseitigt werden. Und so ist es nie zu spät für einen Leistungstest. Wir empfehlen solche Tests begleitend zur Entwicklung durchzuführen, und nicht erst am Projektende einzuplanen.

Es ist klar, dass die Mehrzahl der Internet-User hohe Erwartungen an angebotene Dienstleistungen hat. Sie sind nicht bereit den Grossteil ihrer Zeit mit Warten zu verbringen. Im eCommerce-Bereich springen Nutzer bereits nach 5 Sekunden Wartezeit ab, suchen sich einen anderen Shop und kaufen dort ein.

Nutzer seien eher gewillt, weitere fünf Minuten über Google und andere Seiten nach dem gewünschten Produkt zu suchen, als auf der ersten Shop-Seite länger als fünf Sekunden zu warten. (Quelle)

Dieses Verhalten möchten unsere Kunden vermeiden oder zumindest minimieren. Sie beauftragen uns daher mit der Suche nach den Übeltätern im System.

In einem anderen Fall bat uns der Kunde, ihn bei einem Last-Test seines Webportals zu unterstützen. Da es fortlaufend weiterentwickelt wurde, mussten die Tests stets überprüft und angepasst werden. Die Herausforderung in diesem Projekt war, mit sehr wenigen Anforderungen und ohne genauen Zielvorgaben einen Last- Test vorzubereiten und diesen im Anschluss durchzuführen.  Begonnen wurde mit dem Aufzeichnen des System-Aufbaus. Die wichtigsten Kundenwünsche wurden festgehalten und auf dieser Basis ein Vorgehen vorgeschlagen. Anschliessend detaillierten wir die ungenügend spezifizierten Anforderungen und den konkreten Test-Ablauf, wobei auch spezifische Test-Profile erstellt wurden. Die Zielvorgaben wurden mit dem Kunden besprochen und auf einen notwendigen Detailgrad definiert. Die Tests konnten im Projektverlauf durchgeführt und zur Verfeinerung angepasst werden. Somit tasteten wir uns schrittweise an die definierten Zielvorgaben heran und erreichten diese schlussendlich.

Was verbirgt sich hinter dem Begriff „Last- und Performancetest“?

Im allgemeinen Sprachgebrauch werden die Begriffe Performanz- und Lasttest meist synonym verwendet. Sie sind dem Qualitäts-Merkmal Effizienz zuzuordnen. Folgendes Bild aus einem unserer SwissQ-Kurse stellt die Testarten anschaulich dar, mit denen dieses Qualitäts-Merkmal überprüft werden kann:

Overview-LuP

Die Effizienz ist eines der sechs Haupt-Qualitäts-Merkmale nach ISO 9126 und bezieht sich auf „die Fähigkeit eines Software-Produkts, unter festgelegten Bedingungen eine angemessene Leistung zu erbringen, bezogen auf den Umfang der eingesetzten Betriebsmittel“.  Die Effizienz wird mit Tests, wie den Stress-, Volumen-, Zeit- (Performance-) und Lasttest überprüft. Das folgende Bild zeigt, was sich hinter diesen Tests verbirgt:

LuP-Testarten

Zu diesen Tests gesellen sich zusätzlich Abwandlungen, die einen speziellen Fokus im Rahmen der Leistungs-Messung haben. Als Vertreter dieser Gattung sei an dieser Stelle der Stabilitäts- und Zuverlässigkeitstest zu nennen, der auch als Langzeit- oder Dauertest bezeichnet wird. Er prüft das Verhalten des Systems unter normaler Last über eine längere Zeit, d.h. über mehrere Stunden oder Tage. Je nach Projekt-Situation und Kunden-Bedürfnis können diese Tests kombiniert werden, da die Messungen grösstenteils auf den selben Metriken beruhen. Das sind beispielsweise die Antwortzeiten und Transaktionen über die Last, die Anzahl an Anfragen an den Server pro Sekunde, die Anzahl paralleler Benutzer, sowie der Verlauf der System-Belastungen für Load-Balancer, Web-Server, App-Server und Datenbank.

Im Weiteren möchten wir diese Tests hier unter dem Begriff „LuP-Tests“, also Last- und Performancetests, zusammenfassen.

Wie aufwendig sind solche Tests?

In der Vergangenheit assoziierte man mit LuP-Tests aufwendige und sehr komplexe Tests, die alleine nicht zu bewältigen sind und oft das verfügbare Budget für Testing sprengen. Sicher sind solche Tests bei hoch komplexen Software-Systemen kostenintensiv. Aber es existieren auf dem Markt beispielsweise Web-Anwendungen, die unter Belastung getestet werden können ohne gleich das Projekt in finanzielle Schieflage zu bringen. Bei dieser Art der Projekte führen wir die Last- und Performancetests vorwiegend mit JMeter durch, einer in Java entwickelten Open Source Software. Damit kann das Projekt-Budget geschont werden. Unsere Herangehensweise bei solchen Tests ist auf die Kundenbedürfnisse abgestimmt. Wir bieten eine bewährte Vorgehensweise, die wir dem Kunden vorstellen und anpassen. Mit JMeter bringen wir ein Werkzeug mit, welches wir schnell und einfach einsetzen können und mit dem die Diskussionen um Lizenz-Kosten entfallen.  Mit diesem pragmatischen und zielgerichteten Vorgehen sparen wir massiv Kosten. Ausserdem können wir durch die Weiterentwicklung von JMeter neben Tests von Web-Anwendungen weit mehr Bedürfnisse abdecken.  Und wir sind agiler.

In unseren Projekten ist die Liste der Anforderungen eher klein. Der Kunde hat meist 1-2 Hauptziele, die er mit den Leistungs-Tests in kurzer Zeit – in einigen Tagen oder Wochen – erreichen möchte. Das können Vergleiche zwischen einzelnen Releases oder Hardware-Konfigurationen, die klassische Identifikation von Flaschenhälsen oder dem Austesten der optimalen Konfiguration von Komponenten sein.

Was braucht man für Last- und Performancetests?

Es ist schon fast eine Regel, dass LuP-Tests von Experten durchgeführt werden, da eine grosse Portion Erfahrungen dazugehört, die viele Projekte nicht oder nicht in ausreichendem Masse intern verfügbar haben. Das betrifft unter anderem die Analyse der Test-Infrastruktur incl. dem Monitoring der Teil-Systeme und der Server, dem Datenbestand, der dem Umfang der Daten in der Produktion möglichst nahe kommen soll, sowie die verwendeten Technologien. Die fehlenden Erfahrungen und Unsicherheiten bezüglich Performance-Tests und der Prüfungen von nichtfunktionalen Anforderungen sind eventuell Gründe dafür, dass wenige bis keine expliziten Anforderungen  existieren, oder diese unzureichend definiert sind.

Wir sind als Experten in der Lage, qualitativ gute nicht-funktionale Anforderungen zu formulieren und bestehende auf  Vollständigkeit und Testbarkeit zu prüfen. Unsere typischen LuP-Test-Projekte weisen ein begrenztes Budget auf und ein Anforderungs-Katalog fehlt. In solchen Fällen ist es zwingend notwendig, dass die Ziele der Tests sehr genau besprochen und die Anforderungen aus den Gesprächen heraus von uns aufgenommen werden. Dabei entstehen erwartungsgemäss am Anfang Aufwände für die Anforderungs-Analyse. Ausserdem ist ein hohes Mass an Kommunikation mit dem Auftraggeber und den Stakeholdern des Projektes erforderlich. Die Anforderungen an das Testobjekt sind das A und O bei Last- und Performancetests. Ohne sie gäbe es weder ein klares Ziel, noch könnte eine vollständige Beurteilung der Test-Resultate erfolgen. Während der Tests werden die Stakeholder laufend über den Fortschritt informiert. Ausserdem überprüfen wir mit dem Kunden regelmässig Ziele und Anforderungen, um Missverständnisse zu vermeiden.

Bei Last- und Performancetests stellen wir uns den unterschiedlichsten Herausforderungen. In den seltensten Fällen findet man ein Testsystem vor, das dem Ausbau der Produktions-Infrastruktur gleich kommt. So sind wir sehr froh, wenn die Tests auf einer exklusiven Umgebung durchgeführt werden können. Allerdings zeigen unsere Erfahrungen, dass wir häufig die hohen Erwartungen des Kunden erfüllen müssen - mit einem System, auf dem sich beispielsweise:

  • Nur 10% des Datenvolumens der Produktion befindet,
  • Die Server zahlenmässig geringer, dafür ein bis zwei Generationen jünger zur Verfügung stehen,
  • Die Load-Balancer existieren, haben aber nichts zu „balancieren“, da nur eine Maschine angehängt ist.

Oder es entstehen zusätzliche Aufwände, wenn man Testuser für Last-Tests mit Testern teilen muss, die manuelle Tests durchführen und die Einstellungen im Profil für ihre Tests anpassen. Dann funktionieren die Last-Skripte bei einigen Usern nicht und die Fehler-Suche beginnt von vorne.

Mobile Apps, Zentrale Services, Cloud und Co.

Neben dem Testen von komplexen Applikationen und Web-Anwendungen setzen wir JMeter für Webservice-Tests und für Tests des Backends ein, welches mit MobileApps zusammenspielt. Wenn beim Kunden der Bedarf vorhanden ist hohe Last auf den Test-Systemen zu erzeugen, nutzen wir soweit möglich Services in der Cloud wie beispielsweise die Amazon Elastic Compute Cloud. Diese haben den Vorteil, dass die Anzahl der zu erzeugenden Clients und die Leistung deren Systeme je nach Anforderung angepasst werden können.

Ein grosser Vorteil der Cloud Services ist die flexible Anpassung der Kapazitäten. Ein potentieller Nachteil sind die Sicherheits-Aspekte im Bezug auf den Daten-Transfer im Internet während der Tests.

Fazit

In unserem Berufsleben haben wir verschiedene Arten von LuP-Tests erlebt und durchgeführt und stellen fest, dass sie von Projekt zu Projekt variieren. Wir fokussieren uns hauptsächlich auf die zu testende Software und deren kritischen Funktionalitäten. Die Prüfung der Performance einer Datenbank, des Netzwerkes oder anderen 3rd Party Produkten ist im Grunde nicht unsere Aufgabe als Last- und Performance Tester. Diese Artefakte sind i.d.R. Bestandteil der Test-Infrastruktur und werden im Zuge der Tests automatisch mit einbezogen. Vordergründig interessiert uns, ob sie einen Flaschenhals für die Performance des Gesamt-Systems darstellen oder nicht.  Das kann beispielsweise ein fehlender Index sein, der einen full table scan zur Folge hat und dadurch eine längere Bearbeitungszeit als gefordert aufweist.

Die Ziele des Kunden und der Umfang seiner Anforderungen haben starken Einfluss auf die Grösse und die Dauer der Tests. Weitere Einfluss-Faktoren sind beispielsweise das Projekt-Budget, die Mitwirkungs-Leistungen des Kunden und die Komplexität der Systeme.

Für die Durchführung von LuP-Tests werden grundsätzlich erfahrene Tester benötigt. Diese können anhand ihres Wissens und dem methodischen Vorgehen optimal auf verschiedene Situationen reagieren. Last- und Performancetest- Projekte bestehen nicht nur aus dem Generieren von Last der Test-Systeme. Sie erstrecken sich vom Initialgespräch mit dem Kunden bis zur Ergebnis-Präsentation und ggf. zur Transition in die Produktion.  Wir zeigen im nächsten Beitrag zu diesem Thema, wie der Weg – basierend auf unserer Methodik – aussehen kann.

Questions?

Get in touch with us to learn more about the subject and related solutions