Inhaltsverzeichnis | 6 |
1 Einleitung | 9 |
1.1 Projektarten und -aspekte | 10 |
1.2 Überblick zu Kapiteln und Themen | 13 |
1.3 Empfohlene Vorkenntnisse | 15 |
1.4 Weitere Ressourcen im Web | 16 |
1.5 Die Autoren | 17 |
1.6 Danksagung | 18 |
2 Lebenszyklus eines Software-Produkts | 19 |
2.1 Grundlegende Phasen des SoftwareLebenszyklusses | 20 |
2.2 Übergreifende Aktivitäten | 21 |
2.2.1 Projektmanagement | 21 |
2.2.2 Qualitätsmanagement | 22 |
2.2.3 Reviews und Inspektionen | 25 |
2.2.4 Software-Tests | 25 |
2.3 Anforderungen und Spezifikation | 25 |
2.3.1 Arten von Anforderungen | 28 |
2.3.2 Anforderungsprozess | 30 |
2.3.3 Wesentliche Artefakte der Anforderungsphase | 32 |
2.4 Projektplanung und -steuerung | 33 |
2.4.1 Projektplanung | 33 |
2.4.2 Projektmonitoring und -controlling | 34 |
2.4.3 Wesentliche Artefakte der Planungsphase | 34 |
2.5 Entwurf und Design | 35 |
2.5.1 Designprinzipien | 37 |
2.5.2 Wesentliche Artefakte der Entwurfsund Designphase | 39 |
2.6 Implementierung und Integration | 40 |
2.6.1 Standardisierung | 41 |
2.6.2 Dokumentation | 42 |
2.6.3 Integration von Software-Komponenten | 44 |
2.6.4 Artefakte der Implementierungsund Integrationsphase | 47 |
2.7 Betrieb und Wartung | 47 |
2.7.1 Abnahmeund Einführungsphase | 48 |
2.7.2 Wartungskategorien | 48 |
2.7.3 Vorgehensweise bei Wartungsprojekten | 50 |
2.7.4 Außerbetriebnahme und Stilllegung | 50 |
2.7.5 Wesentliche Artefakte der Betriebsund Wartungsphase | 51 |
2.8 Vom Software-Lebenszyklus zum Vorgehensmodell | 51 |
2.9 Zusammenfassung | 52 |
3 Vorgehensmodelle | 54 |
Übersicht | 54 |
3.1 Strategie für die Projektdurchführung | 55 |
3.2 Wasserfallmodell | 55 |
3.3 Das V-Modell | 56 |
3.4 V-Modell XT | 59 |
3.5 Inkrementelles Vorgehen | 63 |
3.6 Spiralmodell | 64 |
3.7 Rational Unified Process | 65 |
3.8 Agile Software-Entwicklung | 69 |
3.9 Anpassung von Vorgehensmodellen | 72 |
3.10 Zusammenfassung | 75 |
4 Software-Projektmanagement | 77 |
Übersicht | 77 |
4.1 Einführung ins Projektmanagement | 78 |
4.1.1 Rollen im Projekt | 79 |
4.1.2 Projektorganisation | 81 |
4.1.3 Phasen im Projektmanagement | 82 |
4.2 Projektdefinition | 83 |
4.2.1 Projektvorschlag | 83 |
4.2.2 Projektentscheidung (Kick-off) | 86 |
4.2.3 Projektauftrag | 87 |
4.3 Projektplanung | 91 |
4.3.1 Strukturierung eines Projekts | 93 |
4.3.2 Aufwandsschätzung | 96 |
4.3.3 Technische und wirtschaftliche Planung | 99 |
4.3.4 Netzplan (PERT-Diagramm) | 104 |
4.3.5 Balkenoder GANTT-Diagramm | 107 |
4.3.6 Burn-down-Charts | 108 |
4.4 Projektverfolgung | 110 |
4.4.1 Aufwandserfassung mit dem PSP | 112 |
4.4.2 Meilenstein-Trendanalyse | 113 |
4.4.3 Aufwandserfassung mit Burn-down-Charts | 115 |
4.5 Projektabschluss | 116 |
4.6 Zusammenfassung | 117 |
5 Qualitätssicherung und Test-Driven Development | 119 |
Übersicht | 119 |
5.1 Der Qualitätsbegriff | 120 |
5.2 Verifikation und Validierung | 121 |
5.3 Software-Reviews | 123 |
5.3.1 Reviewtypen | 123 |
5.3.2 Rollen in einem Review | 126 |
5.3.3 Ablauf eines Reviews | 127 |
5.4 Software-Inspektionen | 129 |
5.4.1 Inspektionstypen und Ablauf | 129 |
5.4.2 Lesetechniken | 131 |
5.5 Architekturevaluierung | 135 |
5.6 Software-Testen | 139 |
5.6.1 Rollen im Software-Testen | 140 |
5.6.2 Der traditionelle Testprozess | 141 |
5.6.3 Testebenen | 144 |
5.6.4 Testmethoden | 146 |
5.6.5 Testfalldokumentation | 150 |
5.6.6 Testintensität und Überdeckungsgrade | 152 |
5.7 Test-Driven Development | 156 |
5.7.1 Test-Driven Development im V-Modell Umfeld | 157 |
5.7.2 Ablauf von Test-Driven Development | 159 |
5.8 Automatische Codeprüfung | 160 |
5.8.1 Testautomatisierung | 161 |
5.8.2 Code Coverage Analyse | 164 |
5.8.3 Code Quality Checks | 165 |
5.9 Zusammenfassung | 166 |
6 Notationen, Methoden der Modellierung | 169 |
Übersicht | 169 |
6.1 UML-Diagrammfamilie | 171 |
6.1.1 UML-Paketdiagramm | 173 |
6.1.2 UML-Anwendungsfälle | 175 |
6.1.3 UML-Klassendiagramme | 178 |
6.1.4 UML-Komponentendiagramm | 183 |
6.1.5 UML-Aktivitätsdiagramme | 185 |
6.1.6 UML-Sequenzdiagramme und Kommunikationsdiagramme | 187 |
6.1.7 UML-Verteilungsdiagramm | 189 |
6.1.8 UML-Zustandsdiagramme | 190 |
6.2 Modellierung von Daten und System-schichten | 192 |
6.2.1 Entity-Relationship-Modell | 192 |
6.2.2 Schichtendiagramme | 196 |
6.3 Projektmanagement-Artefakte | 197 |
6.3.1 Projektstrukturplan | 197 |
6.3.2 Netzplan, PERT | 199 |
6.3.3 Balkendiagramm (GANTT-Diagramm) | 200 |
6.3.4 Burn-Charts | 201 |
6.4 Zusammenfassung | 203 |
7 Software-Architektur | 205 |
Übersicht | 205 |
7.1 Was ist eine Software-Architektur | 206 |
7.2 Wie entstehen Architekturen | 208 |
7.3 Sichten auf eine Software-Architektur | 212 |
7.4 Separation of Concerns | 215 |
7.5 Schichtenarchitektur | 217 |
7.5.1 2-Schichtenarchitektur | 219 |
7.5.2 3-Schichtenarchitektur | 220 |
7.5.3 5-Schichtenarchitektur | 220 |
7.6 Serviceorientierte Architekturen | 221 |
7.6.1 Ein neues Architekturparadigma | 221 |
7.6.2 SOA und Schichten | 224 |
7.6.3 SOA und Geschäftsprozesse | 226 |
7.7 Ereignisgetriebene Architektur | 227 |
7.8 Zusammenfassung | 232 |
8 Entwurfs-, Architekturund Integrationsmuster | 234 |
Übersicht | 234 |
8.1 Was ist ein Muster | 235 |
8.2 Grundlegende Muster | 238 |
8.2.1 Interface (Schnittstelle) | 238 |
8.2.2 Delegation | 241 |
8.2.3 Strategy (Strategie) | 244 |
8.2.4 Immutable (Nicht veränderbares Object) | 248 |
8.2.5 Marker (Markieren eines Objekts) | 248 |
8.2.6 Annotations (Metadaten für Objekte) | 249 |
8.3 Erzeugung | 252 |
8.3.1 Singleton | 252 |
8.3.2 Factory (Fabrik) | 255 |
8.3.3 Objekt-Pool | 257 |
8.4 Struktur | 258 |
8.4.1 Fassade (Facade) | 258 |
8.4.2 Iterator | 259 |
8.4.3 Adapter | 260 |
8.4.4 Proxy (Stellvertreter) | 261 |
8.4.5 Data Access Object | 268 |
8.4.6 Generisches DAO | 272 |
8.5 Verhalten | 274 |
8.5.1 Observer | 274 |
8.5.2 Decorator | 279 |
8.5.3 Interceptor | 283 |
8.6 Integration | 286 |
8.6.1 Integrations-Stile | 289 |
8.6.2 Messaging | 294 |
8.6.3 Pipes and Filters | 298 |
8.6.4 Routing | 299 |
8.6.5 Transformation | 301 |
8.6.6 System-Management und Testen | 302 |
8.7 Zusammenfassung | 304 |
9 Komponentenorientierte Software-Entwicklung | 306 |
Übersicht | 306 |
9.1 Vom Objekt zum Service: Schritte der Entkopplung | 307 |
9.1.1 Objekte und Schnittstellen (Interfaces) | 307 |
9.1.2 Erste Schritte der Entkopplung | 309 |
9.1.3 Software-Komponenten | 310 |
9.1.4 Software-Services | 312 |
9.1.5 Vorund Nachteile verschiedener Stufen der Entkopplung | 314 |
9.2 Software-Frameworks als Basis für die Komponentenbildung | 316 |
9.3 Dependency-Injection | 320 |
9.4 Persistente Datenhaltung in komponen-tenbasierten Systemen | 327 |
9.4.1 Anforderungen an eine Persistenzschicht | 327 |
9.4.2 Transaktionen | 330 |
9.4.3 Architektur und Modellierung | 332 |
9.4.4 Abhängigkeiten zwischen Domänenmodell und Persistenzschicht | 333 |
9.4.5 Proprietäre binäre Datenformate | 340 |
9.4.6 Objektorientierte Datenbanken | 340 |
9.4.7 Relationale Datenbanken und objektorientierte Programmierung | 342 |
9.4.8 Objektrelationales Mapping | 345 |
9.4.9 XML-Persistenz | 351 |
9.4.10 Dateisysteme mit Indexing-Mechanismen | 355 |
9.4.11 Abstraktion über Services | 355 |
9.5 Querschnittsfunktionen in Aspekte aus-lagern | 356 |
9.5.1 Cross Cutting Concerns | 356 |
9.5.2 Grundlagen der aspektorientierten Program-mierung | 357 |
9.5.3 Sicherheit mit AOP | 360 |
9.5.4 Deklaratives Transaktionsmanagement mit AOP | 363 |
9.6 Benutzerschnittstellen in komponenten-basierten Systemen | 365 |
9.6.1 Überblick | 365 |
9.6.2 Model View Controller | 367 |
9.6.3 Kommunikation mit dem Backend | 368 |
9.7 Lose Koppelung von Systemen | 370 |
9.7.1 Serviceorientierte Architekturen und deren Be-standteile | 370 |
9.7.2 Middleware als Lösung für die lose Koppelung | 373 |
9.8 Logging: Protokollieren von Systemzu-ständen | 376 |
9.9 Zusammenfassung | 379 |
10 Techniken und Werkzeuge | 381 |
Übersicht | 381 |
10.1 Konvention oder Konfiguration? | 382 |
10.2 Sourcecode-Management | 385 |
10.2.1 Die Entwicklung von Sourcecode-Manage-mentSystemen | 385 |
10.2.2 Versionierung | 386 |
10.2.3 Parallele Entwicklungspfade | 387 |
10.2.4 Unterstützung kollaborativer Arbeit | 388 |
10.2.5 Refactoring und Sourcecode-Management | 390 |
10.2.6 Integration in den Arbeitsalltag | 390 |
10.2.7 Die Zukunft? Verteilte und zentralisierte Systeme | 391 |
10.2.8 Patches und Diffs | 392 |
10.3 Build-Management und Automatisie-rung | 396 |
10.3.1 Warum Automatisierung? | 396 |
10.3.2 Der Build-Lifecycle: Best-Practices | 397 |
10.3.3 Scaffolding und Archetypen | 400 |
10.3.4 Dependency-Management | 400 |
10.3.5 Reporting und Dokumentation | 403 |
10.3.6 Continuous Integration | 404 |
10.4 Die integrierte Entwicklungsumgebung | 406 |
10.5 Virtualisierung von Hardund Software | 407 |
10.6 Projektplanung und Steuerung | 409 |
10.7 Dokumentation | 410 |
10.8 Kommunikation im (global verteilten) Team | 417 |
10.9 Zusammenfassung | 426 |
11 Epilog | 428 |
Literaturverzeichnis | 431 |
Index | 435 |