Projekt bei einem Telekommunikationsunternehmen
November 2005 – März 2006
Aufgabenbeschreibung meiner durchgeführten Tätigkeiten
Zur Erhöhung der Geschäftsflexibilität und der IT-Effizienz nimmt der Auftraggeber seit 2005 eine Umgestaltung der IT-Architektur vor. Durch den Einsatz einer serviceorientierten Architektur (SOA) will das Unternehmen die Schnittstellenqualität durch einheitliche systemtechnische Standards erhöhen, um damit längerfristig Kosten im Betrieb und in der Weiterentwicklung der IT-Architektur zu reduzieren.
Eine der in diesem Rahmen zu entwickelnden Service-Schnittstellen beschreibt konkret den gesamten Anteil an Vertriebslogik, der für einzelne Vertriebskanäle bzw. Kundensegmente und an sie vertriebene Produkte spezifisch ist. Sie bieten z.B. Services für die Kundenautorisierung, die Produktvalidierung, die Vertragsvalidierung, die Validierung von Geschäftsregeln, die Vollständigkeit von Bestellungen sowie das Auftragstracking. Die dabei entwickelte Software wird in Form von Web Service Schnittstellen zur Verfügung gestellt.
Meine Aufgaben innerhalb des Projekts definierten sich nun wie folgt:
1.) Konzeption und Entwicklung einer Datenbank-gestützten Testsoftware
Unter Verwendung des Wasserfallmodells zur ingenieurmässigen Softwareentwicklung habe ich mich an die strengen Vorgaben der durch die Produktentwicklung des Auftraggebers vorgegebenen Software-Entwicklungsprozess gehalten. Hierbei wird optimaler Weise in allen Analyse- und Designphasen die Anforderungen auf Benutzbarkeit und Konformität mit den firmeninternen Produkt- und Entwicklungsinstanzen überprüft. In diesem Vorgehensmodell werden nach einer partiellen Analyse zunächst die Aufgabenfelder identifiziert, die dringend oder einfach zu lösen sind. Diese werden dann analysiert, Lösungswege definiert, spezifiziert, realisiert, getestet und in Produktion gebracht. Danach wird der Zyklus optimalerweise zirkulär wiederholt, um die im vorrausgehenden Durchgang eingeschränkte Sichtweise, sowie die Nutzbarkeit und Konformität zu erweitern.
Zu meinen Aufgaben gehörte zunächst das Design eines logischen Datenbankmodells auf der Basis des mathematischen Relationsansatzes. Das Schema des Datenbanksystems wurde unter Einsatz der Relationentheorie logisch in die 3. Normalform überführt. Darauf aufbauend wurde ein physikalisches Datenbanksystem unter Oracle erstellt. Unter dem Aspekt des Einsatzes in einer vernetzten Client-Server-Umgebung erfolgten weitere Tuningmassnahmen (u.a. Indizierung der Datensätze), um eine hohe Stabilität und Leistungsfähigkeit zu erreichen.
Basierend auf den neuesten Java 2 Enterprise Edition (J2EE) Standards und Technologien entwarf ich eine für verteilte Systeme gängige, auf drei Schichten basierende Software-Architektur gemäß dem Model-View-Controller-Architekturmuster:
| a.) | Die Präsentationsschicht, auch Front-End bezeichnet, ist für die Datenrepräsentation, die Benutzereingaben sowie für die eigentliche Benutzerschnittstelle verantwortlich. | b.) | Die Geschäftslogikschicht vereint die eigentliche Anwendungslogik und kapselt die Geschäftsvorfälle mit ihren Geschäftsregeln. Sie enthält auch die Datenzugriffs-Schnittstellen, | c.) | Die Datenhaltungsschicht, auch als Back-End bezeichnet, enthält das Datenbanksystem und ist verantwortlich für das Speichern und Laden von Daten. |
Basierend auf dieser Drei-Schichten-Architektur fing ich zunächst an, einige Anwendungsfälle (Konfiguration von Testfällen, Testfall-Schritten, Testreports) zu designen und zu implementieren. Die Qualität der Implementierungen wurde mit Hilfe standardisierter JUnit-Komponententests überprüft und sichergestellt. Um den iterativen Zyklus aus Analyse, Entwurf, Entwicklung und Test zu unterstützen, bediente ich mich dabei nachfolgender Hilfs- und Dienstprogramme: des CASE-Tool IBM-WebSphere, des Datenbank-Management-Tools TOAD for Oracle sowie das Unified Modelling Langauge (UML) Software-Design Tools Poseidon UML von Gentleware. Nach Fertigstellung der Geschäftslogikschicht (unter Verwendung des de facto Standards hibernate als Persistenz Rahmenwerks) entwickelte ich eine grafische Benutzeroberfläche, die auf gängigen J2EE-Standards wie jsp, jstl, struts und tiles basiert.
Zur weiteren Information über die im Projekt angewandten ingenieurmässigen Methoden, Verfahren und Standards habe ich im Auftrag des Kunden ein Softwarearchitektur-Handbuch erstellt. Desweiteren wurde von mir ein Benutzerhandbuch angefertigt, welches dem Anwender einen detaillierten Leitfaden zur Benutzung des Testframeworks zur Verfügung stellt.
2.) Entwicklung einer automatisierten Performance-Testumgebung
Zur Klärung der Frage, ob die Web Service Schnittstellen plausiblen Extrembelastungen standhalten, wie durch die vom Auftraggeber definierten Service Level Agreements vorgebenen ist, entwickelte ich eine auf dem CASE-Tool JMeter basierende Stresstest-Umgebung. Lasttests, die mit variierenden Nutzerzahlen ausgeführt werden, repräsentieren das Verhalten eines Systems unter steigender Last. Durch Verwendung definierter Sollantwortzeiten wird für jede der Web Service Schnittstellen die maximale Nutzerzahl erkennbar. Als repräsentativer Wert dienst standardmässig der 90%-Durchschnittswert, bei dem die 5% der geringsten und 5% der höchsten Antwortzeiten ignoriert werden. Für sämtliche Web Service Schnittstellen wurden nun gebrauchsfertige Lasttest-Konfigurationen erstellt. Die automatische Ausführung dieser vorkonfigurierten Stressteste zu einer bestimmten Zeit erfolgte dabei mit Hilfe eines von mir entwickelten, auf dem Betriebssystem UNIX-basierten crontab Hilfs- und Dienstprogramms. Die automatische Erstellung eines finalen Stresstest-Reports erfolgte auf Basis eines von mir entwickelten, ANT-getriebenen Hilfs- und Dienstprogramms, welches nebenei auch die Möglichkeit des Stresstest-Report Versands per email bewerkstelligte.
3.) Etablierung eines Testlabors für Integrationstests
Diese in 1. und 2. beschriebenen, von mir entwickelten Software-Komponenten wurden anschliessend für Komponenten- und Integrationstests der Web Service Schnittstellen eingesetzt. Die Testkonzeption für die Komponententests basierte dabei auf dem White-Box-Testverfahren: Hierbei sind detaillierte Informationen über das Innenleben der jeweiligen Komponente in Form des Quellcodes vorhanden. diese werden an geeigneter Stelle benutzt, um den Test neben Standardfällen an der entsprechenden kritischen Stelle genauer anzupassen.
Die Testkonzeption für die Integrationstests basierte dagegen auf dem Black-Box-Testverfahren: Hierbei orientieren sich die Testszenarien primär an dem Verhalten, das im normalen
Betrieb von einem Benutzer der Software erwartet wird und decken die spezifizierten Geschäftsvorfälle der Software ab. Zu diesem Zweck wurden von mir Testfälle definiert und mittels des Testframework-Benutzeroberfläche in dem Datenbanksystem persistiert. Neben den zu durchlaufenden Testschritten wurde ausserdem ein zu erwartendes Testergebnis spezifiziert. Das erwartete Testergebnis wurde im Zuge der automatisierten Testläufe mit dem eigentlichen Testergebnis verglichen, das Ergebnis sämtlicher Testfall-Läufe wurde in Form eines Testlauf-Reports von der web-basierten Benutzeroberfläche angezeigt. Die Problemmeldungen, die aus nicht durchführbaren Testfällen entstehen, werden priorisiert und kategorisiert und in einem Hilfs- und Dienstprogramm für Problem-Melde-Wesen (Bugzilla) erfasst. Nach erfolgter Korrektur werden Nach-Tests durchgeführt. Sind keine Fehler der Kategorie „Abnahmeverhindernd“ mehr vorhanden, wird der Gesamttest mit einem finalen Testbericht beendet und meine Ingenieurstätigkeit damit abgeschlossen.