In unserer beruflichen Vergangenheit wurden wir des Öfteren im ersten Kundengespräch mit der Frage konfrontiert: "Wie gut kennen Sie sich mit dem Tool Loadrunner aus?"
Bei solch einer Frage erläutern wir dem Kunden, dass wir eine Vielzahl an Werkzeugen kennen. Entscheidend für den Erfolg ist aber nicht das Tool, sondern das Wissen, wie solche Tests vorbereitet und durchgeführt werden. Da ist das Werkzeug nur ein Bestandteil des Prozesses, in das wir uns als Engineers oft in kurzer Zeit einarbeiten. Das Tool sagt einem aber nicht, wie man Last- und Performance- Testprojekte zum Erfolg bringt, sondern es ist nur Mittel zum Zweck.
Unsere Erfahrungen zeigen, dass ein methodisches Vorgehen und das frühzeitige Erkennen von Hindernissen entscheidend für den Erfolg sind. Mit welcher Methodik wir von der SwissQ (Xebia Switzerland) LuP- (Last- und Performance-) Tests erfolgreich meistern, zeigen wir in diesem Beitrag.
Dass unsere Vorgehensweise erfolgreich ist, zeigt folgendes Beispiel aus der Praxis: Eines Tages bekamen wir den Auftrag, bei einem unserer Kunden Last- und Performance-Tests einer Webanwendung durchzuführen. In der Vergangenheit gab es mehrere Versuche, die Anwendung unter Last zu testen, die jedoch alle gescheitert waren. Hier konnten wir nun unter Beweis stellen, dass wir auch unter schwierigen Bedingungen Resultate liefern können.
Der Grund für diesen Erfolg war neben unseren eigenen Erfahrungen sicher die methodische Vorgehensweise bei Leistungstest-Projekten. Dieses Bild stellt die Phasen dieses Vorgehensmodells dar:
Wir als Performancetest-Engineers bei SwissQ greifen damit auf ein erprobtes Vorgehen zurück, welches bei verschiedenen Kunden in unterschiedlichen Branchen erfolgreich war und ist. Mit unserer Methodik können wir schnell auf die individuellen Situationen bei Kunden reagieren und die optimalen Schritte festlegen.
Der PoC – „Drum prüfe, wer sich ewig bindet“
Eingangs erwähnten wir, dass die Werkzeuge zur Lastgenerierung, Antwortzeitmessung, Monitoring etc. Bestandteile unserer Methodik sind. Mit geeigneten Tools können Kosten gespart werden. Ihr Einfluss ist jedoch nicht so gross, dass sich unsere Methodik ändern würde. Insbesondere das Monitoring wirkt sich stark auf den Projektaufwand aus.
Damit wir uns ein Bild:
- vom Kundenumfeld
- von der Infrastruktur (insbesondere den Monitoring-Möglichkeiten)
- vom Umfang an Entwicklungs-Aktivitäten
und
- von eventuellen Hindernissen
machen können, starten wir mit einem Proof of Concept (PoC). Diesen führen wir an 1-2 ausgewählten Geschäftsprozessen durch.
Solch eine Überprüfung hat für beide Parteien einen positiven Effekt:
- Der Kunde „opfert“ einen kleinen Teil des verfügbaren Budgets und erhält mehr Sicherheit für ein erfolgreiches Projekt.
- Wir sehen in kurzer Zeit, welche Hindernisse auf uns zukommen werden und können das Vorgehen mit dem Kunden besprechen und planen.
Der Übergang vom Proof of Concept in die nächste Phase des Projektes erfolgt nicht automatisch. Der PoC muss ein Quality Gate (Q-Gate) überwinden. Das Q-Gate beinhaltet die Analyse und Bewertung der bisherigen Ergebnisse, die Diskussion der sich daraus ergebenden Detailplanung und deren Auswirkungen auf das Projektbudget. Zusammen mit dem Kunden arbeiten wir auf eine Go/NoGo-Entscheidung für die Umsetzung des Projektes hin. Es kommt häufiger vor, dass Projektziele oder -budgets angepasst werden, als dass die Leistungstests bereits nach dem PoC beendet werden.
Ich persönlich halte den Proof of Concept für eine der wichtigsten Komponenten erfolgreicher Last- und Performance-Testprojekte. Mit ihm gewinne ich mehr Sicherheit und gehe die Projekte effizienter an, als wenn ich mich direkt in das „kalte Wasser“ stürze. (Niko Messerschmidt)
Häufig entdecken wir „Stolpersteine“, die zu Beginn nicht sichtbar waren und Einfluss auf die Testdurchführung haben.
Gute Vorbereitung ist das A und O
Nach der Entscheidung, das Testprojekt umzusetzen, kann die Vorbereitungsphase starten. In dieser Phase konzentriert man sich auf:
- Kick-Off mit dem Team und weiteren Stakeholdern
- das Setup der Testinfrastruktur (z.B. Systemzugänge, Monitoring)
- Testdaten und Test-Skripte erstellen
- Abgleich der Testszenarien mit dem Kunden / Business
- Planung der Tests mit dem Team
Während der Entwicklung der Last-Skripte prüfen wir mit einigen wenigen virtuellen Nutzern, ob die implementierten Szenarien erfolgreich durchlaufen werden. Ausserdem prüfen wir die einwandfreie Funktionsweise im Fall der parallelen Abarbeitung.
Die Auslastung von Subsystemen bekommen wir hauptsächlich von Überwachungssystemen, die bereits beim Kunden eingesetzt werden oder die vom Lasttesttool mitgeliefert werden. Für uns ist das Monitoring ein zentraler Aspekt für gute Last- und Performance-Tests.
Ein weiterer wichtiger Bestandteil während der Testvorbereitung ist die Kommunikation. Es beginnt mit dem Kennenlernen der Stakeholder. Diejenigen von ihnen, die aktiv am Test mitwirken, bilden das Testteam. Die Entwickler gehören idealerweise auch dazu. Mit dem Team sind wir fast täglich in Kontakt. Damit wir die Ziele des Kunden genau verstehen und keine Missverständnisse aufkommen, kommunizieren wir anfangs intensiv mit ihnen. Uns ist es ein Bedürfnis, dass wir nicht nur LuP-Tests durchführen – sie sollen zielgerichtet sein und den Bedarf des Kunden decken.
Aus meiner bisheriger Erfahrung bilden erst klar definierte Anforderungen an das zu testende System eine solide Grundlage für den Last- und Performance Test. Ohne diese Anforderungen ist eine Zielbestimmung eher ein Gefühlswert. (Hendrik Eichert)
Voraussetzung für eine realitätsnahe Last-Erzeugung ist die Umsetzung von wichtigen Geschäftsprozessen in Lasttest-Skripten. Sie bilden die Szenarien ab, die während der Last-Erzeugung durchgeführt werden. Damit das System unter verschiedenen Last-Situationen geprüft werden kann, stellen wir mehrere Lastprofile zusammen. Das sind häufig Profile zur Simulation von:
- Minimal-Last
- Normal-Last
- Maximal-Last und
- Überlast.
Die Informationen zum Verlauf der Systemlast in der Produktion fliessen in die Definition der Lastprofile ein. Damit bilden wir die Realität in der Produktion auf dem Testsystem ab. Ein Beispiel dafür wäre die Anmeldung von hunderten oder tausenden Mitarbeitern am System in einer definierten Zeitspanne. Oder die Reduktion an Transaktionen während der Mittagspause.
Schritt für Schritt nähern wir uns dem Ziel
Nach einer guten Vorbereitung folgt die spannende Phase für uns – wir setzen die Testinfrastruktur „unter Strom“. Das heisst, wir erzeugen Last auf dem System durch die Simulation von vielen Anwendern. Dazu dienen uns das Testtool und unsere vorbereiteten Lastscripts. Nun beginnt die Suche nach dem Flaschenhals. Anhand verschiedener Lastprofile führen wir mehrere Testläufe durch. Das Monitoring nutzen wir, um Engpässe zu erkennen. Es kann vorkommen, dass wir während der Testphase unsere Scripts anpassen müssen, um auf unerwartete Situationen zu reagieren. Oder wir führen Vergleichsmessungen oder Optimierungen am System durch. Danach müssen wir die Tests nochmals ausführen.
Wenn wir dann Flaschenhälse identifizieren, werden diese analysiert und Lösungen mit dem Team besprochen. Das Team führt Modifikationen durch und wir starten eine weitere Testrunde. Dabei prüfen wir die Auswirkungen der Anpassungen und greifen bei Bedarf erneut ein. Dieser Zyklus erfolgt so lange, bis die Anforderungen erfüllt sind.
Während der Durchführungs-Phase informieren wir die Stakeholder über den Fortschritt der Tests, bisherige Haupterkenntnisse und weitere Schritte. Falls Entscheidungen vom Auftraggeber erforderlich sind, berufen wir ein Treffen mit den betreffenden Personen ein und stellen die aktuelle Situation dar.
Auch der beste Lasttest hat ein Ende
Die letzte Phase in unserem Vorgehen schliesst sich an die Durchführungsphase an und beinhaltet Abschlussarbeiten. Für uns bedeutet das, dass wir:
- die Testergebnisse zusammenfassen und bewerten
- eine Dokumentation und/oder eine Präsentation anfertigen
- sämtliche Unterlagen beim Kunden ablegen
- die Ergebnisse den Stakeholdern präsentieren, diskutieren und
- weitere Schritte mit dem Auftraggeber besprechen.
Diese Phase ist für den Kunden spannend, da nun „die Wahrheit ans Licht tritt“. Für uns ist sie eine Herausforderung, da wir uns eine optimale Darstellung der Testergebnisse überlegen müssen, um die Erkenntnisse auf den Punkt zu bringen. Es geht nicht darum, dass nur wir die Resultate interpretieren können – der Auftraggeber und alle Stakeholder müssen die Ergebnisse verstehen und entsprechende Schlüsse daraus ziehen können.
In den Fällen, in denen die getestete Softwareversion live geht und weitere Versionen entwickelt werden sollen, findet eine Verlagerung in die Produktion statt. Das bedeutet unter anderem, dass die Testergebnisse mit den Beobachtungen auf dem produktiven System – via Monitoring – verglichen werden. Auffälligkeiten und Differenzen zu bisherigen Annahmen und Anforderungen werden sofort in das Projekt zurückgespiegelt. Darauf basierend können die entwickelten Skripte zur Last-Erzeugung angepasst werden. Damit erreicht man für künftige Testrunden Lastszenarien, welche die Situation in der Produktion besser abbilden.
Da wir unser Vorgehen laufend optimieren wollen, führen wir zum Abschluss eine Feedbackrunde durch und entwickeln daraus „Lessons learned“.
Fazit
Last- und Performance-Tests führen wir bei SwissQ methodisch durch. Damit können wir dem Kunden nebst unseren Erfahrungen mit Leistungstests ein bewährtes Vorgehensmodell anbieten. Unser zielgerichtetes Vorgehen bringt den Vorteil, dass wir dem Kunden durch den Einsatz von PoC und Quality Gate frühzeitig Sicherheit für das geplante Budget und den Projekterfolg geben können. Bisher erhielten wir durchweg positives Feedback dazu, wie wir die Aufgaben anpacken und umsetzen.
Unsere Vorgehensweise erfolgt step-by-step und weist in der Durchführungsphase eine iterative Komponente auf.
Ein geordneter Abschluss ist ebenso wichtig wie eine optimale Vorbereitung, wobei eine gute Vorbereitung wiederum einen erfolgreichen Abschluss ermöglicht.
Unsere Methodik liefert die Leitplanken, zwischen denen wir uns während der Leistungstest-Projekten bewegen. Die Ziele und Anforderungen des Kunden steuern den Umfang und die Intensität, mit der die Aufgaben auf dem Weg zur Testdurchführung erledigt werden. So ist praktisch jedes dieser Testprojekte einzigartig und individuell, wenn es im Detail betrachtet wird. Andererseits ähneln sie sich im Vorgehen sehr, sobald sie aus einer grösseren Flughöhe betrachtet werden.
Einen Einblick in verschiedene Herangehensweisen von Last- und Performance-Tests konnten die Besucher der letzten Swiss Testing Night in Zürich erhalten. Es wurden unterschiedliche Tools und Methodiken vorgestellt und im anschliessenden Talk heiss diskutiert. Für weitere Informationen schauen Sie doch gleich vorbei bei der Swiss Testing Night.
Im nächsten Beitrag zeigen wir, was die Ursachen für eine Auswahl an auffälligen Mess-Ergebnissen sein können. Es ist oft nicht einfach, die Nuss zu knacken „welche Systemkomponenten den Flaschenhals bilden“. Also seien Sie gespannt auf einen weiteren LuP-Blog.
Wir, Hendrik und Niko, sind ein Teil des Performance-Test-Teams der SwissQ. Mit Leistungstests befassen wir uns liebend gern und freuen uns auf jeden neuen Auftrag.
Hendrik Eichert | Niko Messerschmidt |