Best Practice Software-Engineering

In dieser Reihe sind bisher erschienen: Martin Backschat / Bernd Rücker Enterprise JavaBeans 3.0 Grundlagen – Konzepte – Praxis Peter Liggesmeyer Software-Qualität, 2. Auflage Testen, Analysieren und Verifizieren von Software Michael Englbrecht Entwicklung sicherer Software Modellierung und Implementierung mit Java Klaus Zeppenfeld Objektorientierte Programmiersprachen Einführung und Vergleich von Java, C++, C#, Ruby Martin Backschat / Stefan Edlich J2EE-Entwicklung mit Open-Source-Tools Coding – Automatisierung – Projektverwaltung – Testen Marco Kuhrmann / Jens Calamé / Erika Horn Verteilte Systeme mit .NET Remoting Grundlagen – Konzepte – Praxis Peter Liggesmeyer / Dieter Rombach (Hrsg.) Software Engineering eingebetteter Systeme Grundlagen – Methodik – Anwendungen Stefan Conrad / Wilhelm Hasselbring / Arne Koschel / Roland Tritsch Enterprise Application Integration Grundlagen – Konzepte – Entwurfsmuster – Praxisbeispiele Ingo Melzer et al. Service-orientierte Architekturen mit Web Services, 3. Auflage Konzepte – Standards – Praxis Oliver Vogel / Ingo Arnold / Arif Chughtai / Edmund Ihler / Timo Kehrer / Uwe Mehlig / Uwe Zdun Software-Architektur, 2. Auflage Grundlagen – Konzepte – Praxis Marco Kuhrmann / Gerd Beneken Windows® Communication Foundation Konzepte – Programmierung – Konzeption Andreas Korff Modellierung von eingebetteten Systemen mit UML und SysML Alexander Schatten et al. Best Practice Software-Engineering Eine praxiserprobte Zusammenstellung von komponentenorientierten Konzepten, Methoden und Werkzeugen

Alexander Schatten / Markus Demolsky / Dietmar Winkler / Stefan Biffl / Erik Gostischa-Franta / Thomas Östreicher

Best Practice SoftwareEngineering Eine praxiserprobte Zusammenstellung von komponentenorientierten Konzepten, Methoden und Werkzeugen

Autoren Alexander Schatten Markus Demolsky Dietmar Winkler Stefan Biffl Erik Gostischa-Franta Thomas Östreicher Weitere Informationen zum Buch unter: http://bpse.ifs.tuwien.ac.at

Wichtiger Hinweis für den Benutzer Der Verlag und die Autoren haben alle Sorgfalt walten lassen, um vollständige und akkurate Informationen in diesem Buch zu publizieren. Der Verlag übernimmt weder Garantie noch die juristische Verantwortung oder irgendeine Haftung für die Nutzung dieser Informationen, für deren Wirtschaftlichkeit oder fehlerfreie Funktion für einen bestimmten Zweck. Der Verlag übernimmt keine Gewähr dafür, dass die beschriebenen Verfahren, Programme usw. frei von Schutzrechten Dritter sind. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Buch berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften. Der Verlag hat sich bemüht, sämtliche Rechteinhaber von Abbildungen zu ermitteln. Sollte dem Verlag gegenüber dennoch der Nachweis der Rechtsinhaberschaft geführt werden, wird das branchenübliche Honorar gezahlt. Bibliografische Information der Deutschen Nationalbibliothek Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar. Springer ist ein Unternehmen von Springer Science+Business Media springer.de © Spektrum Akademischer Verlag Heidelberg 2010 Spektrum Akademischer Verlag ist ein Imprint von Springer 10 11 12 13 14

5 4 3 2 1

Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlages unzulässig und strafbar. Das gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. Planung und Lektorat: Dr. Andreas Rüdinger, Bianca Alton Redaktion: Bernhard Gerl Herstellung und Satz: Crest Premedia Solutions (P) Ltd, Pune, Maharashtra, India Umschlaggestaltung: SpieszDesign, Neu–Ulm ISBN 978-3-8274-2486-0

Inhaltsverzeichnis 1 1.1 1.2 1.3 1.4 1.5 1.6

Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Projektarten und -aspekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Überblick zu Kapiteln und Themen . . . . . . . . . . . . . . . . . . . . . . 5 Empfohlene Vorkenntnisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Weitere Ressourcen im Web . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Die Autoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Danksagung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9

Lebenszyklus eines Software-Produkts . . . . . . . . . . . . . . . Grundlegende Phasen eines Lebenszyklusses . . . . . . . . . . . Übergreifende Aktivitäten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Anforderungen und Spezifikation . . . . . . . . . . . . . . . . . . . . . . . Projektplanung und -steuerung . . . . . . . . . . . . . . . . . . . . . . . . . Entwurf und Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Implementierung und Integration . . . . . . . . . . . . . . . . . . . . . . . Betrieb und Wartung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vom Software-Lebenszyklus zum Vorgehensmodell . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11 12 13 17 25 27 32 39 43 44

3 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10

Vorgehensmodelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Strategie für die Projektdurchführung . . . . . . . . . . . . . . . . . . . . Wasserfallmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Das V-Modell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . V-Modell XT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inkrementelles Vorgehen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Spiralmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rational Unified Process . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Agile Software-Entwicklung . . . . . . . . . . . . . . . . . . . . . . . . . . . . Anpassung von Vorgehensmodellen . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

47 48 48 49 52 56 57 58 62 65 68

4 4.1 4.2 4.3 4.4 4.5 4.6

Software-Projektmanagement . . . . . . . . . . . . . . . . . . . . . . . . Einführung ins Projektmanagement . . . . . . . . . . . . . . . . . . . . . Projektdefinition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Projektplanung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Projektverfolgung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Projektabschluss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

71 72 77 85 104 110 111

5 5.1 5.2 5.3 5.4

Qualitätssicherung und Test-Driven Development . . . . . Der Qualitätsbegriff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Verifikation und Validierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . Software-Reviews . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Software-Inspektionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

113 114 115 117 123

v

vi

5.5 5.6 5.7 5.8 5.9

Architekturevaluierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Software-Testen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Test-Driven Development . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Automatische Codeprüfung . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

129 133 150 154 160

6 6.1 6.2 6.3 6.4

Notationen, Methoden der Modellierung . . . . . . . . . . . . . . . UML-Diagrammfamilie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Modellierung von Daten und Systemschichten . . . . . . . . . . . . Projektmanagement-Artefakte . . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

163 165 186 191 197

7 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8

Software-Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Was ist eine Software-Architektur . . . . . . . . . . . . . . . . . . . . . . . Wie entstehen Architekturen . . . . . . . . . . . . . . . . . . . . . . . . . . . Sichten auf eine Software-Architektur . . . . . . . . . . . . . . . . . . . Separation of Concerns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Schichtenarchitektur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Serviceorientierte Architekturen . . . . . . . . . . . . . . . . . . . . . . . . Ereignisgetriebene Architektur . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

199 200 202 206 209 211 215 221 226

8 8.1 8.2 8.3 8.4 8.5 8.6 8.7

Entwurfs-, Architektur- und Integrationsmuster . . . . . . . . Was ist ein Muster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Grundlegende Muster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Erzeugung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Verhalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Integration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

229 230 233 247 253 269 281 299

9 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9

Komponentenorientierte Software-Entwicklung . . . . . . . . Vom Objekt zum Service: Schritte der Entkopplung . . . . . . . Frameworks als Basis für Komponentenbildung . . . . . . . . . . . Dependency-Injection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Persistente Datenhaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Querschnittsfunktionen in Aspekte auslagern . . . . . . . . . . . . Benutzerschnittstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lose Koppelung von Systemen . . . . . . . . . . . . . . . . . . . . . . . . . Logging: Protokollieren von Systemzuständen . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

301 302 311 315 322 351 360 365 371 374

10 10.1 10.2 10.3 10.4 10.5

Techniken und Werkzeuge . . . . . . . . . . . . . . . . . . . . . . . . . . . Konvention oder Konfiguration? . . . . . . . . . . . . . . . . . . . . . . . . Sourcecode-Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Build-Management und Automatisierung . . . . . . . . . . . . . . . . . Die integrierte Entwicklungsumgebung . . . . . . . . . . . . . . . . . . Virtualisierung von Hard- und Software . . . . . . . . . . . . . . . . . .

377 378 381 392 402 403

Inhaltsverzeichnis

10.6 10.7 10.8 10.9

Projektplanung und Steuerung . . . . . . . . . . . . . . . . . . . . . . . . . Dokumentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Kommunikation im (global verteilten) Team . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

405 406 413 422

11

Epilog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433

Inhaltsverzeichnis

vii