You are here: SE » ThesesHome » ThesisMKPMAW

Diplomarbeit

Methoden zur kontinuierlichen Performance-Messung bei der agilen Entwicklung von Web-Anwendungen

Einleitung

Die Entwicklung von Web-Anwendungen wird immer schwieriger. Häufig ändern sich noch vor der Fertigstellung die Anforderungen und stellen damit die Entwickler vor neue Herausforderungen.

Die agilen Methoden haben sich bei der Bewältigung dieser Aufgaben als sehr hilfreich erweisen. Kurze Iterationen erlauben eine flexible und schnelle Umsetzung neuer Anforderungen. Testgetriebene Entwicklung hilft bei der Sicherstellung einer hohen Codequalität. Sie gibt durch die kontinuierliche Integration fortdauernd Auskunft über die funktionale Korrektheit des getesteten Codes.

Die hohe Komplexität moderner Web-Anwendungen macht die Betrachtung der Performance notwendig. Eine lange Ladezeit, bedingt durch eine schlechte Performance, hat nicht nur Auswirkungen auf die Zufriedenheit des Endanwenders; schon kleinste Verzögerungen im Bereich von 100 Millisekunden haben eine direkten Einfluss auf den möglicherweise zu erwirtschafteten Umsatz (vgl. Untersuchungen von Google und Amazon).

Ruby on Rails ist ein sehr verbreitetes Framework zur Entwicklung von Web-Anwendungen. Dabei sind "Don't Repeat Yourself" und "Convention over Configuration" die Prinzipien des Frameworks und ermöglichen eine rasche Realisierung von Anforderungen. Zusammen mit RSpec, einem Behaviour Driven Development Testframework für Ruby on Rails, stellt es den aktuellen Stand der Technik dar und eignet sich vorzüglich für die agile Entwicklung.

Bei den aktuellen Frameworks werden leider nur funktionale Aspekte beim Testen betrachtet. Performance-Tests finden getrennt von den funktionalen Tests oft erst am Ende der Entwicklung statt. Idealerweise sollten diese Tests jedoch schon frühzeitig und kontinuierlich erfolgen, da die spätere Optimierung nur schwer und teuer realisierbar ist.

Beweggründe

Die Funktionsweise einer Web-Anwendung ist ein vielschichtiger Prozess. Die Anwendung wird auf einem Webserver ausgeführt und die Interaktion erfolgt über den lokalen Webbrowser des Benutzers. Sowohl auf der Server-, als auch auf der Client-Seite sind viele Komponenten beteiligt.

Durch die Eingabe des URL im Browser wird die Anwendung gestartet. Die so generierte Anfrage wird vom Webserver empfangen und an das eigentliche Programm übergeben. Bis eine Antwort-Seite erzeugt und an den Browser über den Webserver gesendet werden kann, sind viele Einzelschritte notwendig. Das Programm erzeugt Datenbank- und Dateisystemzugriffe, schickt seinerseits Anfragen an andere Server und wertet deren Antworten aus. Dabei werden viele Komponenten des Betriebssystems, diverse Treiber sowie Übertragungverfahren einbezogen und tragen damit ihren Teil zur Gesamtperformance bei. Die so erzeugte und an den Browser übertragene Seite kann diesen wiederum dazu veranlassen, neue Anfragen zu erzeugen, um weitere Elemente nachzuladen. Ferner können mit Ajax-Requests weitere dynamische Inhalte angefordert werden und die bereits dargestellte Seite nachträglich verändern. Die klassische Seiten-Logik ist damit vollständig durchbrochen.

Existierende Werkzeuge analysieren nur einzelne ganz spezielle Aspekte einer ganzen Kette von Schritten. Meistens wird dabei nur die Serverseite betrachtet. Es wird weder die für die Darstellung und die Interaktion notwendige Client-Seite untersucht, noch wird die Gesamtperformance der Anwendung gemessen.

Die Analysewerkzeuge verfügen über keine einheitliche Ein- und Ausgabe, was ihre Kombinierbarkeit erschwert und eine Erweiterung der Test-Szenarien unnötig verkompliziert. Erschwerend kommt hinzu, dass viele Analysewerkzeuge erst im Produktivbetrieb eingesetzt werden können und damit die Performance-Untersuchung erst nach der Entwicklung der Anwendung statt findet.

Ein weiteres Defizit der betrachteten Tools besteht darin, dass keine durch den Benutzer der Web-Anwendung durchgeführten Eingaben untersucht werden. Dabei können so erzeugte Daten Auswirkungen auf die Performance der Anwendung haben und eine Optimierung notwendig machen.

Dem Entwickler würde es helfen, wenn die Tests automatisch und kontinuierlich durchgeführt würden. Zusätzlich sollte der Entwickler die Möglichkeit haben, auf vergangene Messwerte zuzugreifen und so über die Entwicklung der Performance (Gesamt und aufgeschlüsselt nach Komponente) über die Projektlaufzeit Auskunft zu erhalten. Damit ließe sich gezielt nach Code suchen, welcher zur gegebenen Zeit modifiziert wurde. Eine solche Verwendung ist bisher mit den untersuchten Tools nicht ohne weiteres möglich.

Zielsetzung

Im Verlauf der Diplomarbeit sollen Testmethoden definiert und ein Framework entwickelt werden. Damit soll eine automatisierte Analyse der Gesamtperformance ermöglicht und durch die Auswertung der Ergebnisse, hinsichtlich der Einhaltung definierter Grenzwerte, der Entwickler bei der kontinuierlichen Performance-Optimierung unterstützt werden. Hierzu sind folgende Schritte notwendig:

  • Vorhandene Tools sind auf ihre Verwendbarkeit hin zu untersuchen und zu einem großen Framework zu kombinieren.

  • Problemlose Integration in die bestehende Test-Infrastruktur soll gewährleistet werden. (kontinuierliche Integration auf Basis von CruiseControl.rb)

  • Es soll eine einfache Möglichkeit zur Definition von Anwendungsszenarien auf Grundlage von RSpec ermöglicht werden.

  • Eine grafische Ausgabe der Messergebnisse über einen längeren Zeitraum (Historie) ist zu entwickeln. Dabei erfolgt die Darstellung der Overall- und der Performance einzelner Komponenten (JavaScript, Datenbankzugriffe, Serverengpässe etc.)

Durchführung

Die Diplomarbeit wird durchgeführt durch Patrick-Thomas Chmielewski und betreut von Prof. Dr. Lutz Prechelt

Kommentare

 

-- chmielew@PCPOOL/MI/FU-BERLIN.DE - 12 Feb 2009