Skip to main content
main-content

Über dieses Buch

Dieses Lehrbuch zeigt anhand eines durchgängigen Fallbeispiels wie Anwendungssoftware zur Optimierung von Geschäftsprozessen agil entwickelt werden kann. Auf der Basis eines agilen Vorgehensmodells werden Geschäftsprozesse modelliert, Anwendungsfälle und User Stories abgeleitet sowie in iterativer Weise die Softwarelösung methodisch entworfen und auf der Jakarta EE Plattform beispielhaft implementiert. Dabei kommen Prinzipien und Praktiken agiler Vorgehensweisen zur Anwendung. Nach einer leichtgewichtigen Vorbereitungsphase steht die Entwicklungsphase mit zeitlich festgelegten Iterationen im Mittelpunkt. Die Anforderungen werden aus den Anwendungsfällen der Geschäftsprozesse abgeleitet und gut verständlich als User Stories beschrieben. Statische und dynamische UML-Modelle unterstützen die Kommunikation beim Entwurf der User Stories. Mit Hilfe von Entwurfsmustern werden identifizierte System-Operationen systematisch umgesetzt. Die Entwurfsmuster werden an Beispielen vorgestellt und praktisch eingesetzt, so dass ein Software-System mit geringer Kopplung und hoher Wartbartkeit entsteht.

Das durchgängige Beispiel zeigt anschaulich den Weg von der Problemstellung im Geschäftsprozess bis zur Java-Software-Lösung Schritt für Schritt auf. Zu jedem Kapitel werden Wiederholungsfragen und Aufgaben angeboten. Online stehen Quellcode und ergänzende Lernhilfen zur Verfügung.

Inhaltsverzeichnis

Frontmatter

Kapitel 1. Grundlagen agiler Software-Entwicklung

Überblick
Die Diskussion um Erfolg und Misserfolg von Software-Projekten zeigt einerseits, dass es kein einheitliches Verständnis gibt, wann ein Projekt erfolgreich ist. Andererseits machen unterschiedliche Untersuchungen immer wieder deutlich, dass es einen Verbesserungsbedarf gibt. Unbestritten scheint die Erkenntnis zu sein, dass eine fundierte und systematische Ausbildung im Bereich des Software-Engineerings ein Schlüssel zum Erfolg darstellt. Basis einer seriösen Beurteilung des Erfolgs bzw. der Effektivität der Software-Entwicklung sind explizit formulierte Ziele. Vor diesem Hintergrund werden sowohl Ziele des Geschäftsprozesses, des Systementwicklungsprozesses als auch Qualitätsziele der Software vorgestellt. Einen wichtigen Rahmen für die Zielerfüllung liefern Prozess- bzw. Vorgehensmodelle. Daher werden zum einen klassische Ansätze in ihrem historischen Entstehungskontext skizziert, zum anderen werden agile Ansätze vorgestellt. Dabei liegt der Schwerpunkt auf dem umfassenden Konzept des „Disciplined Agile Delivery (DAD)“, das versucht, in einem Rahmenwerk (framework) ausgewählte bewährte Konzepte unterschiedlicher Prozessmodelle zielgerichtet zu integrieren. Organisatorisch und methodisch versuchen agile Ansätze der Unsicherheit über den Inhalt innovativer Software-Projekte zu begegnen, allerdings ergeben sich daraus auch neue Anforderungen an Projektverträge. Daher wird auf die Vertragsgestaltung für agile Vorhaben anhand des Vorschlags zum agilen Festpreisvertrag eingegangen. Abschließend wird das Fallbeispiel, das den folgenden Kapiteln zugrunde gelegt ist, charakterisiert.
Karl-Heinz Rau, Thomas Schuster

Kapitel 2. Inhalt und Vorgehensweise in der Vorbereitungsphase

Überblick
Voraussetzung für einen erfolgreichen Projektverlauf ist, dass sowohl die relevanten Stakeholder als auch die Teammitglieder ein möglichst gutes gemeinsames Verständnis darüber haben, was mit der beabsichtigten Software-Lösung erreicht werden soll. Dabei geht es weniger um Details, als um eine umfassende Vision im Sinne eines Zukunftsbildes. In der Vorbereitungsphase konkretisiert sich dieses Zukunftsbild in einem ersten Modell des Projektgegenstandes, einem ersten Entwurf der System-Architektur und einem Release-Plan, der Auskunft über Nutzen, Aufwand, Risiken und den zeitlichen Ablauf gibt. Der Projektgegenstand wird primär durch funktionale und nicht-funktionale Anforderungen beschrieben. Ausgangspunkt bei den funktionalen Anforderungen ist der relevante Geschäftsprozess, den es zu verbessern gilt. Die Anwendungsfälle als die einzelnen funktionalen Komponenten eines Geschäftsprozesses werden im Sinne von Epics beschrieben und nach Bedarf in kleinere User Stories zerlegt. Zur Modellierung der funktionalen Anforderungen werden einerseits Texte und andererseits UML Diagramme verwendet. Die nicht-funktionalen Anforderungen drücken Eigenschaften aus, die u. a. bei der Realisierung der funktionalen Eigenschaften als Bedingungen erfüllt werden müssen. Neben den nicht-funktionalen Anforderungen hat die System-Architektur als technische Rahmenbedingung einen maßgeblichen Einfluss auf die Entwicklungsphase. Daher wird auf die Eigenschaften einer Mehr-Schichten-Architektur näher eingegangen. Als dritte wichtige Komponente in der Vorbereitungsphase werden Inhalt und Vorgehensweise bei der Erstellung des Release-Planes charakterisiert. Bei agilem Vorgehen steht die sogenannte Story Point Methode im Vordergrund, die neben klassischen Aufwandsschätzmethoden charakterisiert wird. Zur Bestimmung der Prioritäten werden der Nutzen für den Auftraggeber, mögliche Risikofaktoren und die Kosten berücksichtigt. Auf der Basis der Aufwandsschätzung und der erwarteten Produktivität kann abschließend eine Zeitschätzung erfolgen.
Karl-Heinz Rau, Thomas Schuster

Kapitel 3. Iteration 1: Iterationsplanung und methodische Grundlagen

Überblick
Zu Beginn der Entwicklungsphase liegt ein gemeinsames Verständnis aller Stakeholder hinsichtlich grundsätzlicher Anforderungen vor (vgl. Prozessmodell in Abb. 1.1). Der priorisierte Arbeitsvorrat wird in der Entwicklungsphase in zeitlich begrenzten Iterationen abgearbeitet. Den Entwurfs- und Implementierungsaktivitäten ist in jeder Iteration eine kurze Iterationsplanung vorgeschaltet. Insbesondere die funktionalen Anforderungen werden in sogenannten System-Operations-Spezifikationen konkretisiert und mittels Vor- und Nachbedingungen beschrieben. Das Ergebnis der Iterationsplanung ist eine konkrete Aufgabenliste mit geschätztem Zeitaufwand. Bevor im nächsten Kapitel der konkrete Entwurf und die programmtechnische Implementierung anhand des Fallbeispiels im Mittelpunkt stehen, werden neben der Methodik und Anwendung der Iterationsplanung methodische Grundlagen behandelt. Es werden Muster vorgestellt, welche dem Entwickler dabei helfen zu entscheiden, welche Klasse für welche Verarbeitungsschritte der System-Operation verantwortlich sein soll. Im Mittelpunkt stehen das Controller-, Erzeuger, Experten- und Polymorphismus-Muster. Neben diesen sogenannten General Responsibility Assignment Software Patterns (GRASP) werden ausgewählte Entwurfsmuster skizziert. Die Anwendung von Mustern dient generell dem Zweck, eine hohe Software-Qualität durch kluge Entwurfsentscheidungen zu erreichen.
Karl-Heinz Rau, Thomas Schuster

Kapitel 4. Iteration 1: Entwurf und Implementierung von Fach- und Datenklassen

Überblick
Im Rahmen der ersten Iteration wird nur eine User Story, die sich auf das Anlegen eines Learning-Agreements bezieht, entworfen und implementiert. Im dritten Kapitel wurde diese User Story in einzelne System-Operationen zerlegt. Den agilen Grundgedanken gemäß werden nicht alle Details der System-Operationen entworfen und darauf basierend in Java Code umgesetzt. Vielmehr werden Entwurfsdetails just-in-time im Rahmen der Entwicklungsphase erarbeitet. In diesem Kapitel wird die System-Operation getApprovedApplicationItems testgetrieben entwickelt. Auf der Basis eines vorläufigen Klassenmodells werden im ersten Schritt die relevanten Fachklassen ohne funktionalen Inhalt umgesetzt. Im zweiten Schritt wird die Testklasse mit den Testmethoden mittels JUnit erstellt und die Testausführung führt erwartungsgemäß nicht zum Erfolg. Iterativ werden Fachklassen und Testmethoden verfeinert. Im Sinne des Refactorings wird in exemplarischer Weise gezeigt, wie die Anwendung von GRASP-Mustern (General Responsibility Assignment Software Patterns) eine Verbesserung des Entwurfs und damit des Programmcodes erreicht werden kann. Der zweite Schwerpunkt in diesem Kapitel ist die Einführung und Nutzung der Java Persistence API (JPA) zur Umsetzung der Datenhaltung. Der Leser lernt die Grundlagen der JPA beispielhaft kennen und wendet diese Grundlagen für die implementierte System-Operation an. Dabei entsteht die zugehörige relationale Datenbank unter Verwendung des Datenbankmanagement-Systems PostgreSQL.
Karl-Heinz Rau, Thomas Schuster

Kapitel 5. Iteration 1: Entwurf und Implementierung der Präsentationsschicht

Überblick
Um die fachliche Funktionalität, die im letzten Kapitel im Mittelpunkt stand, für den Benutzer verfügbar zu machen, wird in diesem Kapitel die Präsentationsschicht entwickelt. Hierzu nutzen wir das Komponenten-Framework Jakarta Server Faces (JSF). Nach einem Überblick über die Architektur von JSF und der Positionierung in der Architektur einer Java EE Anwendung, erfolgt die beispielhafte Anwendung anhand eines einfachen Anmeldedialogs. Dabei wird die Abfragesprache JPQL (Java Persistence Query Language) als weiteres Element von JPA verwendet. Weiterhin werden CDI-Beans (Contexts and Dependency Injection) als Bindeglied zwischen der View (in Form der JSF) und dem Anwendungsfall-Controller (in Form der EJB) eingeführt. Im einfachen Anmeldedialog werden sowohl Standard-Validierer, als auch individuelle Validierer angewandt. Auch an diesem Beispiel wird gezeigt, dass eine grundsätzlich funktionsfähige Lösung durch Refactoring noch verbessert werden kann. Statt den Validierern in JSF wird die elegante Möglichkeit der Bean Validation eingesetzt. Im letzten Abschnitt wird die erste System-Operation in der Jakarta EE Umgebung implementiert. Um eine einheitliche Struktur der Benutzeroberfläche zu gewährleisten werden das Vorlagensystem (template) von JSF und CSS (Cascading Style Sheets) eingesetzt.
Karl-Heinz Rau, Thomas Schuster

Kapitel 6. Iteration 1: Entwurf und Implementierung weiterer Operationen

Überblick
Im vierten und fünften Kapitel stand die System-Operation getFreigegebeneBewerbungspositionen() im Zentrum. Sowohl für den Entwurf und die Implementierung der Präsentations-, Fachkonzept- und Datenhaltungsschicht wurden beispielhaft auch die methodischen und technischen Grundlagen gelegt. Demgegenüber stehen in diesem Kapitel der Entwurf und die Implementierung der weiteren System-Operationen der User Story 3.1 (Learning-Agreement anlegen, vgl. Tab. 2.​2) im Mittelpunkt. Die notwendigen Modelle und Entwurfsentscheidungen werden zeitnah zur Implementierung realisiert. Dabei werden einerseits GRASP-Muster beim Entwurf von Fachklassen verwendet und andererseits neue Möglichkeiten zur Gestaltung von JSF-Seiten angewandt. Mit der Implementierung dieser System-Operationen wird die Iteration 1 fertiggestellt. Daher wird das Kapitel mit einem exemplarischen Iterationsbericht (iteration review) sowie einer Retrospektive und Überprüfung des Arbeitsvorrats abgeschlossen. Im Rahmen des Iterationsberichts wird das System präsentiert, sodass einerseits der Auftraggeber den Entwicklungsstand beurteilen kann und andererseits dem Entwicklerteam ein frühzeitiges Feedback geben kann. Dieser Dialog kann auch zu einer Überarbeitung und Repriorisierung des Arbeitsvorrats führen. Die Retrospektive motiviert das Team, eine Reflexion ihrer Vorgehens- und Arbeitsweise durchzuführen.
Karl-Heinz Rau, Thomas Schuster

Kapitel 7. Iteration 2: Ausgewählte Entwurfs- und Implementierungslösungen für weitere User Stories

Überblick
Die vorangehenden Kapitel zur Entwicklungsphase bezogen sich alle auf die Iteration 1 des Fallbeispiels. Im Rahmen des Buches soll das Fallbeispiel bis zum ersten Release nach der Iteration 3 laut der Release-Planung (vgl. Abschn. 2.5) zumindest nachvollziehbar sein. Daher werden in diesem Kapitel die wesentlichen Aspekte der Iterationen 2 und 3 dargestellt. Aufgrund der Erkenntnisse aus dem Iterationsbericht der ersten Iteration wird eine Iterationsplanung für die Iteration 2 durchgeführt und damit die Grundlage für den Entwurf und die Implementierung der notwendigen Teilaufgaben gelegt. Die User Story Learning-Agreement editieren wird in die bereits entwickelte Lösung für Learning-Agreement anlegen integriert. Während diese Abschnitte für den Leser eher eine Vertiefung bereits vorhandenen Wissens darstellen, werden in den letzten beiden Abschnitten des Kapitels zwei neue Aspekte behandelt. Zum einen werden die Grundlagen der Open-Source Bibliothek iText zur Erzeugung von PDF-Dokumenten erarbeitet und im Fallbeispiel angewandt. Zum anderen wird die bisherige Lösung zur Authentifizierung durch die Standardlösung mit Hilfe der Funktionalität des Anwendungs-Servers Payara abgelöst.
Karl-Heinz Rau, Thomas Schuster

Kapitel 8. Ausgewählte Aspekte der Einführungsphase

Überblick
Das letzte Kapitel behandelt ausgewählte Fragen, die sich der Einführungsphase zuordnen lassen. Mit einem losen Bezug zum Fallbeispiel werden die Grundlagen der Einführungsphase diskutiert. Der Schwerpunkt der Ausführungen liegt bei Themen, die insbesondere neuere Aspekte aufgreifen. So wird der Ansatz von DevOps kurz skizziert und hinsichtlich seiner Herausforderungen charakterisiert. Abgeschlossen wird der erste Abschnitt mit einigen Anti-Pattern der Entwicklungsphase. Vor dem Hintergrund der Datenübernahme wird die Gelegenheit aufgegriffen, das Konzept von Web Services anhand eines Beispiels zu demonstrieren. Dabei liegt der Fokus auf sogenannten RESTful-Webservices. Im Beispiel werden sowohl ein Service als auch eine Lösung für den Service-Konsumenten entwickelt und getestet. Abgeschlossen wird das Kapitel mit einem Ausblick auf den Ansatz einer Microservice-Architektur. Dies bietet sich zum einen an, da RESTful-Webservices dafür eingesetzt werden können und zum anderen, da sich bei einer solchen Architektur das Deployment und damit die Einführung von Software-Lösungen in dynamischen Anwendungsbereichen massiv verändert.
Karl-Heinz Rau, Thomas Schuster

Backmatter

Weitere Informationen

Premium Partner