Was ist Software-Architektur? Stephan Schulze Martin Knobloch 28.04.2004 Seminar: Software-Architektur Humboldt Universität zu Berlin sschulze knobloch@informatik.hu-berlin.de
Gliederung Begriffsbestimmung Aufbau einer Software-Architektur Warum ist Software-Architektur wichtig? Strukturen und Views von Software- Architekturen Zusammenfassung Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 2
Begriffsbestimmung Was ist Software-Architektur? Kontrollprozess MODST MODBL MODUS Ist das eine Software-Architektur? Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 3
Was ist Software-Architektur? Welche Informationen liefert das Diagramm? Können wir das System jetzt implementieren? Welche Informationen liefert das Diagramm nicht? ergo: Diagramm ist nur ein Diagramm, aber zumindest ein Anfang Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 4
Definition (nach Bass, Clements, Kazman) Die Software-Architektur eines Programms oder Computersystems ist die Struktur oder die Strukturen des Systems, das alle Software-Elemente, die sichtbaren Eigenschaften sowie die Beziehungen der Elemente untereinander genau beschreibt. Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 5
Was heißt das also? (1) Software-Architektur (SA) definiert die Elemente des Software-Systems information-hiding-prinzip Nur Interfaces Keine Implementationsdetails SA ist also eine Abstraktion des Systems Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 6
Was heißt das also? (2) Eine SA kann mehr als nur eine Struktur enthalten Später mehr... Das Verhalten eines jeden Elements des Systems ist Teil der Architektur... das alle SW-Elemente (...) genau beschreibt Forderung von Vollständigkeit Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 7
Was heißt das also? (3) Jedes System hat implizit eine Architektur Muss nicht dokumentiert sein Muss niemand kennen => sollte aber! ZIEL: Eine solche Beschreibung des Systems zu erstellen, so dass möglichst keine Fragen offen bleiben. Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 8
Andere Definitionen SA ist eine Menge aus Elementen: Prozess- Elemente, Daten-Elemente und verbindende Elemente Perry/Wolf, 1992 SA ist die Gesamtstruktur eines Systems; high-level-design von Komponenten und deren Interaktion Drehen sich alle ums gleiche: Strukturen, deren Elemente und die Beziehungen der Elemente untereinander Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 9
Gliederung Begriffsbestimmung Aufbau einer Software-Architektur Warum ist Software-Architektur wichtig? Strukturen und Views von Software- Architekturen Zusammenfassung Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 10
Aufbau einer Software Architektur erfolgt in mehreren Schritten 1. Auswahl von "Architectural Patterns" 2. Erstellung Referenzmodell 3. Erstellung Referenzarchitektur 4. Ableitung der Software Architektur Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 11
Architectural Patterns Wörtlich: "Architektur Muster" "Komponenten mit bestimmten Eigenschaften und Relationen die gewissen Anforderungen genügen..." Beispiel: Client-Server ist typisches Pattern Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 12
Warum gerade dieses Pattern? sehr frühe Entscheidung, daher auch sehr wichtig Pattern erfüllen "Quality Attributes" Entscheidung für jenes, welches am besten zum System passt Wichtig: Pattern an sich sind keine Software-Architekturen Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 13
Reference Model "Schaubild einer Teilfunktionalität mit Darstellung des Datenflusses innerhalb dieser Funktionalität" Beispiel: Compiler Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 14
Reference Architecture Abbildung eines Reference Model auf die Software Elemente des Systems und Darstellung des Datenflusses zwischen diesen Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 15
Zusammenfassung "Architectural Pattern" und "Reference Models" werden benutzt um "Reference Architecture" zu erzeugen Keines der drei Teile ist schon eine Software Architektur, nur Teilschritte auf dem Weg dahin Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 16
Gliederung Begriffsbestimmung Aufbau einer Software-Architektur Warum ist Software-Architektur wichtig? Strukturen und Views von Software- Architekturen Zusammenfassung Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 17
Warum ist Software- Architektur wichtig? Einführungsvortrag: ABC (Architecture Business Cycle) Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 18
Warum ist Software- Architektur wichtig? SA ermöglicht zielgerichtete Kommunikation zwischen den Beteiligten SA fällt schon früh wichtige Design- Entscheidungen SA ermöglicht ihre Wiederverwendung in späteren Projekten Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 19
Kommunikation? Kunde, Nutzer, Projektleiter, Programmierer und Tester als Beteiligte Beteiligte können selbst herausfinden, ob das System ihren Ansprüchen genügt (und dies Kommunizieren) Gemeinsame Sprache reduziert Fehler und erhöht Effizienz Konzentration auf das eigentliche Problem Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 20
Design-Entscheidungen? Entscheidung über Pattern Qualitätseigenschaften des Systems SA gibt also Implementationsbedingungen an Design-Entscheidung diktiert Organisationsstruktur und Kommunikationsweg Bessere Kosten- und Zeitplan-Analyse Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 21
Wiederverwendbarkeit? Eines der Hauptanliegen Gute SA kann als Grundlage für Produktlinie dienen Kann als Vorlage für Modelle und Architekturen dienen Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 22
Gliederung Begriffsbestimmung Aufbau einer Software-Architektur Warum ist Software-Architektur wichtig? Strukturen und Views von Software- Architekturen Zusammenfassung Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 23
Strukturen in Software- Architekturen Beispiel Hausbau: Außenarchitekt Statiker Klempner Fassade tragende Teile Wasserversorgung jeder sieht Gebäude aus ganz bestimmter Sicht jeder interessiert sich nur für die Teile die ihn betreffen Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 24
Arten von Strukturen Module Structures Elemente als Module Component-Connector-Structure Laufzeitkomponenten und deren Verbindung Allocation Structure Beziehungen zwischen Software Elementen und äußerer Umgebung Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 25
Modul Structure Views Decomposition Zerlegung des Systems in kleine Sub-Module Uses Darstellung als Module und Interfaces von Modulen und deren Abhängigkeiten untereinander Layered Aufteilung der Module in Schichten Class Objekt-Orientierte Sicht Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 26
Component-Connector- Structure - Views Process Aufteilung in Prozesse und Threads Concurrency Aufteilung in Komponenten die durch"logische Threads" verbunden sind Shared Data Komponenten die langlebige Daten verwalten Client-Server Unterteilung in Clients und Server die durch Protokolle verbunden sind Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 27
Allocation Structure - Views Deployment Beziehungen zwischen Software und Hardwarekomponenten Implementation Zuordnung von Software Elementen auf eine Dateistruktur Work-Assignment Zuordnung von Software Elementen zu Entwicklerteams Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 28
Zwischenstand Strukturen bieten eine jeweils andere Sicht auf das Software System Strukturen sind nicht unabhängig voneinander nicht jede Struktur ist für jedes Projekt geeignet Welche werden denn nun genommen? Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 29
Ansätze zur Auswahl von Strukturen 1995 Veröffentlichung eines Paper von Philippe Kruchten zu diesem Thema Empfehlung: "Konzentration auf vier Strukturen" "Four Plus One" Ansatz wurde sehr populär Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 30
Kruchten's vier Sichten Logical View Objektorientierte Sicht Module View Process View Gleichzeitigkeit und Verteilung der Funktionalität Component-and-Connector View Development View Organisation der Module in der Entwicklungsumgebung Allocation View Physical View Zuordnung Elemente auf Prozesse Allocation View Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 31
"Plus One"? Benutzung eines kleines Satzes der wichtigsten Szenarios (aus Use-Cases abgeleitet) um zu zeigen, dass alle Elemente aus den vier vorhergehenden Views nahtlos zusammenarbeiten. Diese Sicht, die alle anderen zusammenfügt ist "Plus One" View Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 32
Zusammenfassung wir wissen: Software-Architekturen beschreiben Elemente und Strukturen eines Systems sowie die Zusammenhänge untereinander warum Software-Architekturen wichtig sind woraus man Software-Architekturen zusammensetzen kann Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 33
Quellen Bass, Clements, Kazman: Software Architecture in Practice http://www.bredemeyer.com http://www.sei.cmu.edu/publications/documents/00.reports/00sr004/00sr004chap01.html http://www.sei.cmu.edu/ata/ata_init.html http://www.wwisa.org/wwisamain/role.htm http://www2.umassd.edu/secenter/saresources.html http://www.isr.uci.edu/architecture/publications.html http://www.cgl.uwaterloo.ca/~rnkazman/sa-sites.html http://en.wikipedia.org/wiki/software_architecture http://www-2.cs.cmu.edu/afs/cs/project/able/www/paper_abstracts/intro_softarch.html http://www.cmcrossroads.com/bradapp/links/sw-arch-links.html http://www.santafe.edu/sfi/publications/wpabstract/200307044 http://www-rocq.inria.fr/arles/doc/ps00/mdw.pdf http://www.sei.cmu.edu/architecture/definitions.html http://www.iturls.com/english/softwareengineering/se_sa.asp http://www.nr.no/~jason/research/publications/apsec98.pdf http://www.dcs.shef.ac.uk/~dita/biblio/keyword/software-architecture.html Stephan Schulze & Martin Knobloch: Was ist Software-Architektur? 34