ERSTELLUNG EINES KONZEPTS ZUM TESTEN DER PERFORMANCE VON JAVA CODE MIT HILFE DER FRAMEWORKS JUNIT UND TESTNG VORTRAG ZUR SEMINARARBEIT JOHANNES WALLFAHRER 20. JANUAR 2016
Inhalt 1. Einleitung 2. Was ist Performance? 3. Definition Performance-Tests 4. Erstellung von Performance-Tests 5. Konzept: Ablaufplan Performance-Testing 6. Problembehandlung 7. Fazit 8. Ausblick
1. Einleitung Programm zur Datenverarbeitung Datendurchsatz 2013: 10.000 Datensätze in 700 Millisekunden Datendurchsatz heute: 10.000 Datensätze in 1360 Millisekunden Benutzer empfinden deutliche Verlangsamung erschwert die Arbeit mit der Software
1. Einleitung Aufgabe: Programm muss wieder performanter werden Problem: Kein Entwickler weiß, welches Feature die Laufzeit stark erhöht hat Problemvermeidung in der Zukunft: Performance-Test
2. Was ist Performance? Allgemein: Übersetzt: Leistung / -fähigkeit IT: Leistung einen Computers / Systems Wissenschaft: Programm ist performant, wenn Rechenzeit Speicherbedarf Ggf. Datentransfer möglichst gering sind
2. Was ist Performance? Im Blickpunkt: verwendete Algorithmen können mathematisch analysiert werden Drei mögliche Fälle bei der Analyse: 1. Obere Schranke (worst case) 2. Untere Schranke (best case) 3. Mittlerer Fall (average case)
2. Was ist Performance? Ist Performance wichtig? Rechenoperationen werden jedes Jahr ca. 53% günstiger Wirtschaft: Laufzeit (= Geld) kann eingespart werden Eigene Erfahrung: Nur wenn jemand auf das Ergebnis wartet, ist Performance relevant Frage kann nur anwendungsbezogen beantwortet werden
3. Definition Performance-Tests IEEE-Standard: Testing conducted to evaluate the compliance of a system or component with specified performance requirements. Testen, ob das Programm den Leistungs- anforderungen gerecht wird Funktionalität wird damit nicht getestet
3. Definition Performance-Tests Bestandteile von Performance-Tests: 1. Zeitnahme zu Beginn des Tests 2. Durchführung zu Testender Funktionsaufruf(e) mit Testdaten 3. Zeitnahme zum Abschluss der Funktionsaufrufe 4. Bilden der Differenz von Start- und Endzeit 5. Überprüfung, ob die Differenz im Erwartungsbereich liegt Umsetzung in Form eines Unit-Tests
4. Erstellung von Performance-Tests Verwendung von Frameworks: Junit & TestNG Frei verfügbar Unit-Tests Erstellung von Testklassen Primär: Zustand von Variablen prüfen
4. Erstellung von Performance-Tests Aufbau: @Test Timeout AssertEquals
4. Erstellung von Performance-Tests Laufzeiten vom Beispiel: Funktion: Laufzeit: min. max. Mittel Objektinitialisierung 781 ms 801 ms 788 ms dosomething 1127 ms 1160 ms 1136 ms Objektinitialisierung & dosomething 1903 ms 1947 ms 1929 ms
4. Erstellung von Performance-Tests Bedingungen für Beispiel: Testszenario: Objektinitialisierung dosomething Objektinitialisierung & dosomething Erlaubte Laufzeit: 805 ms 1165 ms 1950 ms
5. Konzept: Ablaufplan Performance- Testing Fünf Phasen Inspiriert durch Christof Schmalenbachs Testplan für Performance- und Lasttests aus dem Buch Performancemanagement für serviceorientierte Java- Anwendungen Auf Problem aus der Einleitung hin optimiert
5. Konzept: Ablaufplan Performance-Testing 5.1. Testplanung Programm-code und Profiling-Ergebnisse liegen vor Anforderungen vom Stakeholder einholen und auf Machbarkeit prüfen Validierte Anforderungen dokumentieren Nötiger Zeit- und Personalaufwand feststellen
5. Konzept: Ablaufplan Performance-Testing 5.2 Testvorbereitung Aufsetzen Testplattform Testzeitpunkt bestimmen Erstellen verschiedener Konfigurationen erwägen Performance-Tests schreiben Testvorbereitung dokumentieren
5. Konzept: Ablaufplan Performance-Testing 5.3 Testdurchführung Test auf den vorbereiteten Systemen durchführen Möglichst viele Ergebnisse erfassen und festhalten
5. Konzept: Ablaufplan Performance-Testing 5.4 Erstellung Testbericht Gesammelte Daten analysieren und auswerten Testerfolge und fehlschläge betrachen Handlungsempfehlung formulieren Bericht dem Stakeholder vorlegen
5. Konzept: Ablaufplan Performance-Testing 5.5 Zirkuläre Testdurchführung Dauerhafte Phase Tests werden in regelmäßigen Abständen auf neuster Programmversion durchgeführt Beispiel: Bamboo von Atlassian Automatisches Erstellen von Reporten erwägen
6. Problembehandlung Mögliche Fragen und Probleme 1. Es schlagen alle Tests einer Konfiguration wegen zu hoher Laufzeit fehl 2. Bei der Auswertung hat sich herausgestellt, dass einzelne Tests immer fehlschlagen. Sollte hier der Programmcode verbessert, oder muss hier der Erwartungsbereich nochmal angepasst, werden?
6. Problembehandlung Mögliche Fragen und Probleme Mehrere Konfigurationen führen zu einem positivem Endergebnis, welche sollte genommen werden? Nach dem Einfügen von neuem Code schlagen einige Tests fehl
7. Fazit Einfache Laufzeitüberwachung Fehlschlagende Tests warnen früh Entwickler Überschaubarer Aufwand JUnit und TestNG sind bei Performance- Tests sehr ähnlich Problem aus der Einleitung wäre durch Verwendung von Performance-Tests nicht entstanden
8. Ausblick Testplan anwenden Tests auf gesamte Java-Programme erweitern Einführung bei den Web-Apps Datentransfer beobachten Guide zur Problembehandlung pflegen
Fragen? Vielen Dank für Ihre Aufmerksamkeit