Skip to main content

2016 | Buch

Agile objektorientierte Software-Entwicklung

Schritt für Schritt vom Geschäftsprozess zum Java-Programm

insite
SUCHEN

Ü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 Java 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 als User Stories gut verständlich beschrieben, deren Kontext durch die Anwendungsfälle des Geschäftsprozesses vorgegeben ist. Statische und dynamische UML-Modelle unterstützen die Kommunikation beim Entwurf der User Stories. Die identifizierten System-Operationen werden mit Hilfe von Mustern in systematischer Weise Klassen zugeordnet, 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 dem Leser 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
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
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
3. Iteration 1: Iterationsplanung und methodische Grundlagen für die Entwicklungsphase
Ü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
4. Iteration 1: Grundlagen und Anwendung des Entwurfs und der Implementierung von Fachklassen sowie der Datenhaltung in der Entwicklungsphase
Überblick
Im Rahmen der ersten Iteration wird nur die 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 getFreigegebeneBewerberpositionen testgetrieben entwickelt. Auf der Basis eines vorläufigen Klassenmodells werden im ersten Schritt die relevanten Fachklassen ohne funktionalen Inhalt codiert. 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 MySQL.
Karl-Heinz Rau
5. Iteration 1: Grundlagen und Anwendung von Entwurf und Implementierung der Präsentationsschicht in der Entwicklungsphase
Überblick
Um die fachliche Funktionalität, die im letzten Kapitel im Mittelpunkt stand, dem Benutzer verfügbar zu machen, wird in diesem Kapitel die Präsentationsschicht mit Hilfe des Komponenten-Frameworks Java Server Face (JSF) entworfen und implementiert. 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. Die Managed Bean als Bindeglied zwischen der View in Form der JSF und dem Anwendungsfall-Controller in Form der EJB wird als CDI-Bean (Contexts and Dependency Injection) implementiert. Im einfachen Anmeldedialog in der JSF 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 der JSF wird die elegante Möglichkeit der Bean Validation eingesetzt. Im letzten Abschnitt wird ein NetBeans Projekt für eine Web-Anwendung angelegt, in der die erste System-Operation in der Java EE Umgebung implementiert wird. 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
6. Iteration 1: Fortgeschrittene Anwendung von Entwurf und Implementierung in der Entwicklungsphase
Ü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
7. Iteration 1++: 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 GlassFish abgelöst.
Karl-Heinz Rau
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
Backmatter
Metadaten
Titel
Agile objektorientierte Software-Entwicklung
verfasst von
Karl-Heinz Rau
Copyright-Jahr
2016
Electronic ISBN
978-3-658-00776-8
Print ISBN
978-3-658-00775-1
DOI
https://doi.org/10.1007/978-3-658-00776-8

Premium Partner