Geleitworte | 6 |
Vorwort | 8 |
Danksagung | 10 |
Hinweise fu?r den Leser | 12 |
Inhaltsverzeichnis | 14 |
1 Grundlagen | 22 |
1.1 Warum Softwarearchitektur? | 23 |
1.2 Was ist Softwarearchitektur? | 25 |
1.2.1 Definition von Softwarearchitektur | 25 |
1.2.2 Ziele und Aufgaben von Softwarearchitektur | 32 |
1.2.3 Wodurch wird Softwarearchitektur beeinflusst? | 37 |
1.3 Bedeutung von Softwarearchitektur | 39 |
1.3.1 Symptome bei fehlender Softwarearchitektur | 41 |
1.4 Zusammenfassung | 42 |
2 Softwarearchitektur in der Organisationsstruktur | 44 |
2.1 Wechselwirkungen zwischen Architektur und Unternehmen | 44 |
2.2 Die Rolle des Softwarearchitekten | 46 |
2.2.1 Allgemeine Eigenschaften und Aufgaben | 48 |
2.2.2 Aufgaben im Entwicklungsprojekt | 50 |
2.2.3 Das Architekturteam | 58 |
2.3 Zusammenspiel von Softwarearchitektur und Projektmanagement | 62 |
2.3.1 Bedeutung von Softwarearchitektur für das Projektmanagement | 62 |
2.3.2 Das Führungsteam aus Projektleiter und Softwarearchitekt | 69 |
2.4 Zusammenfassung | 72 |
3 Vorgehen | 76 |
3.1 Überblick | 77 |
3.2 Vorbereitungen für den Entwurf | 79 |
3.2.1 Anforderungsanalyse | 80 |
3.2.2 Einflussfaktoren | 83 |
3.3 Iterativ, inkrementeller Entwurf, Dokumentation und Bewertung | 84 |
3.3.1 Der erste Architekturentwurf | 85 |
3.3.2 Iterativ, inkrementelles Ausbauen des Entwurfs | 87 |
3.4 Die Umsetzung der Architektur | 88 |
3.5 Zusammenfassung | 89 |
4 Einflussfaktoren | 90 |
4.1 Bedeutung von Einflussfaktoren | 90 |
4.2 Arten von Einflussfaktoren | 93 |
4.2.1 Organisatorische Faktoren | 93 |
4.2.2 Technologische Faktoren | 94 |
4.2.3 Produktfaktoren | 95 |
4.2.4 Flexibilität, Veränderbarkeit und Einfluss | 98 |
4.3 Spezifikation von Einflussfaktoren | 98 |
4.3.1 Identifizieren und Präzisieren der Faktoren | 99 |
4.3.2 Analyse der Faktoren | 103 |
4.3.3 Identifizieren von Architekturthemen und Entwickeln von Strategien | 105 |
4.4 Zusammenfassung | 108 |
5 Entwurf von Softwarearchitekturen | 110 |
5.1 Entwurfsumfeld und wichtige Begriffe | 111 |
5.1.1 Entwurfsziele | 111 |
5.1.2 Entwurf und Komplexität | 113 |
5.1.3 Vorleistungen | 114 |
5.1.4 Allgemeine Aktivitäten beim Entwurf | 116 |
5.1.5 Fünf Kriterien für einen korrekten Entwurf | 118 |
5.2 Fundamentale Entwurfsprinzipien | 121 |
5.2.1 Abstraktion | 122 |
5.2.2 Kapselung | 123 |
5.2.3 Modularität | 124 |
5.2.4 Hierarchie | 125 |
5.2.5 Konzeptuelle Integrität | 126 |
5.3 Komponenten und Schnittstellen | 127 |
5.3.1 Komponenten - Grundbausteine der Architektur | 127 |
5.3.2 Schnittstellen - Vertragswerk der Softwarearchitektur | 131 |
5.3.3 Techniken zur Adaption von Komponenten | 132 |
5.4 Entwurfsschritte und Heuristiken | 133 |
5.4.1 Konkrete Entwurfsschritte | 134 |
5.4.2 Heuristiken | 139 |
5.5 Zusammenfassung | 144 |
6 Dokumentation | 146 |
6.1 Bedeutung der Dokumentation | 147 |
6.2 Anforderungen an eine Dokumentation | 148 |
6.2.1 Allgemeine Anforderungen an eine Projektdokumentation | 149 |
6.2.2 Anforderungen an Architekturbeschreibungen | 151 |
6.3 Bestandteile einer Architekturdokumentation | 153 |
6.3.1 Sichten eines Systems | 153 |
6.3.2 Zusammenspiel der Sichten | 155 |
6.3.3 Beschreibung des Aufbaus und Hilfestellungen | 155 |
6.3.4 Zusammenfassung | 156 |
6.4 Architektursichten | 156 |
6.4.1 Kontextsicht | 158 |
6.4.2 Struktursicht | 159 |
6.4.3 Verhaltenssicht | 160 |
6.4.4 Abbildungssicht | 160 |
6.4.5 Sichten in der Literatur | 161 |
6.5 UML 2 als Notation für Architektursichten | 164 |
6.5.1 UML-Überblick | 164 |
6.5.2 Darstellungsmöglichkeiten für die Kontextsicht | 167 |
6.5.3 Darstellungsmöglichkeiten für die Struktursicht | 172 |
6.5.4 Darstellungsmöglichkeiten für die Verhaltenssicht | 175 |
6.5.5 Darstellungsmöglichkeiten für die Abbildungssicht | 185 |
6.5.6 Beschreibungsmöglichkeiten für weitere Architekturaspekte | 187 |
6.5.7 UML Erweiterungsmechanismen zur Konsistenzsicherung | 191 |
6.6 Zusammenfassung | 193 |
7 Bewertung | 194 |
7.1 Grundlagen der Architekturbewertung | 194 |
7.1.1 Allgemeines Vorgehen und Ergebnis | 196 |
7.1.2 Arten von Bewertungen und Zeitpunkt | 197 |
7.1.3 Der Faktor Erfahrung | 199 |
7.2 Bewertungsmethoden | 200 |
7.2.1 Fragetechniken | 201 |
7.2.2 Messtechniken | 202 |
7.2.3 Auf Erfahrung basierende Argumentation | 203 |
7.2.4 Kategorisierung der Bewertungsmethoden | 203 |
7.3 Szenariobasierte Bewertung | 205 |
7.3.1 ATAM | 205 |
7.3.2 ATAM-Phasen | 206 |
7.3.3 ATAM-Schritte | 211 |
7.4 Kosten und Nutzen | 216 |
7.4.1 Kosten | 217 |
7.4.2 Nutzen | 218 |
7.5 Zusammenfassung | 220 |
8 Die Toolbox des Softwarearchitekten | 222 |
8.1 Einführung | 222 |
8.1.1 Historie und derzeitiger Stand | 223 |
8.1.2 Vorteile und Aufbau unserer Toolbox | 224 |
8.1.3 Wie erwirbt der Architekt sein Wissen? | 226 |
8.2 Lösungsvorlagen und Methoden | 226 |
8.2.1 Anwendung von Architekturstilen | 227 |
8.2.2 Anwendung von Architekturmustern | 232 |
8.2.3 Anwendung von Entwurfsmustern | 238 |
8.3 Technologien und Werkzeuge | 246 |
8.3.1 Betriebssysteme und Programmiersprachen | 247 |
8.3.2 Bibliotheken, Komponenten und Frameworks | 248 |
8.3.3 Modellierung und Generierung | 251 |
8.3.4 Analyse und Rekonstruktion | 253 |
8.4 Zusammenfassung | 255 |
9 Fallbeispiel | 258 |
9.1 Projektbeschreibung | 258 |
9.2 Schrittweises Vorgehen zur Erstellung der Architektur | 259 |
9.3 Ausgangssituation | 261 |
9.4 Anforderungen und Use Cases | 262 |
9.5 Analysemodell | 264 |
9.6 Aufbau der Architekturdokumentation | 265 |
9.7 Architekturerstellung | 266 |
9.7.1 Spezifikation der Einflussfaktoren | 266 |
9.7.2 Entwurf und Dokumentation | 272 |
9.7.3 Umfangreiches Assessment | 279 |
9.8 Umsetzung der Architektur | 281 |
9.9 Zusammenfassung | 282 |
10 Softwarearchitektur im industriellen Maßstab | 286 |
10.1 Chronische Probleme der heutigen Softwareentwicklung | 287 |
10.1.1 Unnötige Freiheitsgrade bei Sprachen und Tools | 287 |
10.1.2 Schwerpunkt auf Einzelprojekten | 289 |
10.1.3 Ungenügendes Zusammenspiel von Komponenten | 289 |
10.2 Bahnbrechende Innovationen | 292 |
10.2.1 Innovationsfeld 1: Systematische Wiederverwendung | 292 |
10.2.2 Innovationsfeld 2: Modellgetriebene Entwicklung | 293 |
10.3 Komplexität und die Abstraktionslücke | 295 |
10.3.1 Arten von Komplexität in der Softwareentwicklung | 295 |
10.3.2 Die Abstraktionslücke | 296 |
10.3.3 Verkleinern der Abstraktionslücke | 297 |
10.4 Zusammenfassung | 298 |
11 Produktlinien für Software | 300 |
11.1 Was sind Produktlinien? | 300 |
11.1.1 Vom Softwaresystem zur Standardplattform | 301 |
11.1.2 Grundlegende Begriffe | 303 |
11.1.3 Wann sind Softwareproduktlinien sinnvoll? | 306 |
11.1.4 Softwareproduktlinien in drei Dimensionen | 312 |
11.1.5 Wiederverwendung als treibende Kraft | 313 |
11.2 Aktivitäten und Vorgehen | 316 |
11.2.1 Wesentliche Aktivitäten zum Betrieb einer Produktlinie | 316 |
11.2.2 Tätigkeiten des Softwarearchitekten | 318 |
11.2.3 Allgemeine Schritte zum Produktlinienentwurf | 320 |
11.2.4 Softwarebezogene Schritte zur Einführung | 321 |
11.3 Architektur und Software Engineering | 322 |
11.3.1 Aufgaben für Architekt und Softwareingenieur | 322 |
11.3.2 Komponenten - Grundbausteine der Produktlinie | 326 |
11.3.3 Objektorientierte Frameworks | 328 |
11.4 Technische und organisatorische Aufgaben | 331 |
11.4.1 Technische Aufgaben | 331 |
11.4.2 Organisatorische Aufgaben | 333 |
11.5 Zusammenfassung | 333 |
12 Modellbasierte Entwicklung mit MDA und DSLs | 336 |
12.1 Grundidee von MDA | 337 |
12.2 Konzepte | 339 |
12.2.1 Modelle | 339 |
12.2.2 Transformationen | 342 |
12.3 Metamodellierung | 344 |
12.3.1 Vier-Schichten-Modell der Metamodellierung | 345 |
12.4 Fallstudie | 347 |
12.4.1 Plattformunabhängiges Modell (PIM) | 347 |
12.4.2 Technische Lösung und Markierungen | 348 |
12.4.3 Transformation PIM zu PSM | 349 |
12.4.4 Plattformabhängiges Modell (PSM) | 350 |
12.4.5 Transformation PSM zu Code | 351 |
12.5 Alternative: Domänenspezifische Sprachen | 353 |
12.5.1 Grundidee der domänenspezifischen Sprachen | 353 |
12.5.2 Werkzeugunterstützung für DSLs | 355 |
12.5.3 Anwendungsfelder | 357 |
12.6 Zusammenfassung | 358 |
Literatur | 362 |
Index | 368 |