Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Was ist Softwarearchitektur?Ein Beispiel und drei Architekturen
Burkhardt Renz
Fachbereich MNITechnische Hochschule Mittelhessen
Wintersemester 2017/18
„Architektur ist die Kombination vonutilitas, firmitas und venustas.“
frei nach Vitruvius (Römischer Architekt 90-20 v. Chr.)
Softwarearchitektur will erreichen, dass das Anwendungssystem dieAnforderungen erfüllt (utilitas), robust ist gegenüber Änderungen
(firmitas) und eine gewisse Schönheit hat (venustas).–
Fragt sich nur: wie?!
Eine (plakative) Gegenüberstellung
Das gedachte Gebäude
Die Zeichnungdes Architekten
Das gebaute Gebäude
Das Gedankengebäude
Entwurfspläne und Programmcode
Die softwaregesteuerte Hardware
nach S. Wendt, HPI
Gegenständliche Systeme Softwarebestimmte Systeme
Ergebnis der Gegenüberstellung
Gegenständliches System
• Grobstruktur mühelossichtbar
• Feinstruktur nur mit großemAufwand sichtbar zu machen
Softwaresystem
• Grobstruktur nur mitbesonderer Anstrengungsichtbar zu machen
• Feinstruktur mühelossichtbar
Was folgt daraus?
+ Wir müssen die Struktur, den Aufbau von Software verständlichmachen.+ Softwarearchitektur
Übersicht
Ein Beispiel – drei ArchitekturenSpezifikationObjektorientierte OrganisationPipes & FiltersEreignisgesteuertes SystemArchitektur und Codestruktur
Evolution und Architektur
Was ist Softwarearchitektur?
Spezifikation von Keywords in Context (KWIC)
The KWIC (Key Word in Context) index system acceptsan ordered set of lines; each line is an ordered set ofwords, and each word is an ordered set of characters.Any line may be “circulary shifted” by repeatedlyremoving the first word and appending it at the end ofthe line. The KWIC index system outputs a listing of allcircular shifts of all lines in alphabetical order.
— David Parnas
Beispiel für KWIC
InputSoftware Architecture in PracticeBringing Design to SoftwareProblem Frames
OutputArchitecture in Practice SoftwareBringing Design to SoftwareDesign to Software BringingFrames Problemin Practice Software ArchitecturePractice Software Architecture inProblem FramesSoftware Architecture in PracticeSoftware Bringing Design toto Software Bringing Design
Diskussion
Wie kann man ein Programm strukturieren, das diese Spezifikationerfüllt?
Ad-hoc-Lösung
Demo
Struktur der Ad-hoc-Lösung
LineReader LineShifter LineSorter LinePrinter
MasterControl
kwic.dat stdoutR R
RR R
Objektorientierte Organisation
Kapselung von DatenMethoden zur Manipulation der Daten
Index
MasterControl
kwic.dat stdout
R
Struktur des Objektnetzes
LineReader LineShifter LineSorter LinePrinter
Index
kwic.dat stdout
R
RR R
Objektorientierte Organisation
Demo
CharakteristikKontrollfluss durch zentrale KoordinationProzedurale Abstraktion durch Kapselung derZugriffsmethodenDatenkapselungAlgorithmen und Datenrepräsentation der einzelnen Klassenkönnen geändert werden, ohne die anderen zu beeinflussen.„Dependency Injection“
Pipes & Filters
Demo 1 (Prozesse)
Demo 2 (Threads)
Demo 3 (Funktionaler Stil in Java 8)
Demo 4 (Reaktiver Stil in Java 8 mit RxJava)
Struktur
LineReader LineShifter LineSorter LinePrinterkwic.dat stdout
Charakteristik
Die Steuerung ist verteilt: jeder Filter arbeitet, sobald Datenan seiner Eingabe anliegen.Die Filter sind voneinander unabhängig, sie kommunizierennur über die Pipes zwischen ihnen.Datenfluss und Kontrollfluss fallen zusammen
Ereignisgesteuertes System mit indirektem Aufruf
Demo
Struktur
LineReader LineShifter LineSorter LinePrinter
EventManager
kwic.dat stdout
Laufzeitstruktur
LineReader LineShifter LineSorter LinePrinter
MasterControl
kwic.dat stdout
Charakteristik
Keine zentrale Steuerung.Events führen zu Aktionen, die ihrerseits Events erzeugen.Veränderung der Daten löst Events aus.Modell „aktiver Daten“
Aufbaustruktur von KWIC in Variante 3
LineReader LineShifter LineSorter LinePrinter
EventManager
kwic.dat stdout
Codestruktur von KWIC in Variante 3
kwicmain()usage()
AlphabeticalOrdercompare()
LinePrinterLinePrinter(evMgr: IEventManager)run()
LineSorterLineSorter(evMgr: IEventManager)run()
LineShifterLineShifter(evMgr: IEventManager)run()
LineReaderLineReader(evMgr: IEventManager)run()
«interface»IEventManager
registerAgent(a: Agent)unregisterAgent(a: Agent)putEvent(ev: Event)
EventManagerrun()
AgentAgent(evMgr: IEventManager)putEvent()
Übersicht
Ein Beispiel – drei Architekturen
Evolution und ArchitekturNeue AnforderungenVergleich der LösungenFazit
Was ist Softwarearchitektur?
Neue Anforderungen an KWIC
1 Nicht-Berücksichtigung bestimmter Wörter (wie „der, die,das“) für den Index.
2 Input nicht nur aus einer, sondern aus mehreren Quellen.3 Graphische Benutzeroberfläche für die Abfrage des Index.
Neue Anforderungen an KWIC
Diskussion
Objektorientierte Organisation
1 Implementierung einer neuen LineShifter-Implementierung, diedann dem Index-Objekt injiziert wird.
2 Paralleler Input nur möglich, indem die Struktur grundlegendgeändert wird.
3 Die Implementierung von Index zum Schreiben eines Indexverwenden, GUI objektorientiert entwickeln, IndexReaderschreiben und dort verwenden.
Pipes & Filters
1 Filter für „StopWords“ zwischenschalten.2 Paralleler Input leicht möglich, vorausgesetzt man verwendet
Pipes, die mehrere Eingaben mischen können.3 Die Implementierung von KWIC mit Pipes & Filters zum
Schreiben eines Index verwenden, GUI objektorientiertentwickeln, IndexReader schreiben und dort verwenden.
Ereignisgesteuertes System
1 Filter für „StopWords“ in das Protokoll einbeziehen –Änderung an anderen Filtern notwendig.Oder neuen LineShifter schreiben – ohne das Protokoll zuverändern.
2 Paralleler Input leicht möglich: die parallelen Readerverwenden alle dasselbe Protokoll. Aber: Ende derVerarbeitung erst, wenn sich der letzte Reader abgemeldet hat.
3 Die Implementierung von Index durch das ereignisgesteuerteSystem zum Schreiben eines Index verwenden, GUIobjektorientiert entwickeln, IndexReader schreiben und dortverwenden.
Fazit
1 Architektur ⊥ Funktionalität2 Architektur ⇒ Qualität3 Architektur 6= Codestruktur
Übersicht
Ein Beispiel – drei Architekturen
Evolution und Architektur
Was ist Softwarearchitektur?DefinitionWozu Softwarearchitektur?Literatur & Links
Was ist Softwarearchitektur? – Definition
The software architecture of a system is the set ofstructures needed to reason about the system, whichcomprise software elements, relations among them, andproperties of both.
— Len Bass et al.
Elemente der Definition
Elemente der SoftwarearchitekturElemente, Komponenten – definieren den Ort vonBerechnungen oder auch Speicher, z.B. Filter, Datenbanken,Objekte, Server, Klienten usw.Beziehungen, Konnektoren – definieren die Interaktion derKomponenten, z.B. Funktionsaufruf, Pipe, Event usw.Eigenschaften – definieren Vorgaben und Beschränkungen fürKomponenten, z.B. Schnittstellen, Qualitätsmerkmale usw.
Diskussion
Abstraktion: Wesentliche Elemente und ihre BeziehungenStruktur: Zerlegung und ZusammenbauStrukturen: Verschiedene Sichten auf das Wesentliche desSystemsBeziehungen: Organisierende Prinzipien des Zusammenwirkender ElementePlan: Bauplan im Unterschied zu Dokumentation undProjektplan
Was ist Softwarearchitektur? – Kritik der Definition
The architecture of a software system defines that systemin terms of components and of interactions among thosecomponents. In addition to specifying the structure andtopology of the system, the architecture shows theintended correspondence between the systemrequirements and elements of the constructed system.
— Mary Shaw et al.
What is surprising about the Shaw et al. model [indiesem Geiste ist auch die Definition von Len Bass] isthat, rather than defining the software’s architecture asexisting within the software, it is defining a description ofthe software’s architecture as if that were the architecture
— Roy Thomas Fielding
Welche Strukturen?
Software ist die Beschreibung des gewollten Verhaltens eineruniversellen, abstrakten Maschine (Computer).
Beschreibung – Beschriebenes – Umgebung
1 Struktur der Beschreibung: Codestruktur2 Struktur des Beschriebenen: konzeptionelle Struktur des
(laufenden) Systems3 Struktur der Umgebung: Infrastruktur
Architektonische Themen – Auswahl
Regeln für „Querschnittsthemen“z.B. Fehlerbehandlung, Verteilung. . .Richtlinien für BauplanFachliche Architekturz.B. Strukturen des AnwendungsgebietsQualitätsanforderungen und Strategien, sie zu erreichenz.B. Erweiterbarkeit, Anpassbarkeit des SystemsInfrastruktur, eingesetzte Technikz.B. Frameworks, Sprachen, Datenbanken. . .
Die Abgrenzung der architekturell relevanten Strukturenist die zentrale Aufgabe des Architekten und kann nichtnach formalen Kriterien vollzogen werden
— Peter Tabeling
Aufgaben und Ziele
Mittel der Kommunikation und Diskussion allerInteressengruppen (Stakeholder)Festlegung der ersten und grundlegenden Entscheidungen fürDesign und Implementierung (Constraints)Grundlage für das Erreichen der funktionalen und qualitativenMerkmale des zu konstruierenden SystemsArchitektur fungiert als „mentaler Prototyp“Architektur(-stile, -muster) sind wiederverwendbar, auf andereSysteme übertragbar
Erwartungen an eine Softwarearchitektur
Klare Entwurfsabsichten, damit die intendierte Architekturerhalten und verständlich bleibtDesignzentren festlegenBasis für Design, damit die wesentlichen Fragen gestelltwerdenVerbesserung der Änderbarkeit, indem die Designzentrenerkennbar bleiben und erhalten werden
Grundlegende Entscheidungen in der Architektur
Funktionalität Fähigkeit des Systems, die intendierte Aufgabe zuerfüllen (kann durch verschiedene Architekturenerreicht werden)
Qualitätsmerkmale Insbesondere nicht-funktionale Merkmale, diein hohem Maße von der Architektur beeinflusstwerden
Organisation Architektur bestimmt auch die Organisation desEntwicklungsprozesses
Eckpfeiler Architektur legt den Rahmen fest, in dem sich Designund Implementierung bewegen (z.B. Framework)
Zusammenfassung: Aufgaben von Softwarearchitektur
1 Verstehbare Darstellung der zentralen Entwurfsentscheidungen2 Wiederverwendbarkeit von Komponenten eines Systems3 Grundlegender Bauplan für die Konstruktion eines
Softwaresystems4 Basis für kontrolllierte Evolution eines Systems oder einer
Produktlinie5 Grundlage für die Analyse eines (evtl noch gar nicht gebauten)
Softwaresystems – z.B. in Bezug auf Qualitätsmerkmale6 Mittel des Managements der Entwicklung und
Weiterentwicklung
Fazit: Was ist Softwarearchitektur?
To be architectural is to be the most abstract depictionof the system that enables reasoning about criticalrequirements and constrains all subsequent refinements.
— Mark Klein
A mental prototype is a model of the system whichoutlines a potential system solution. It describesfunctionality, but leaves open most of the implementationdetails.
— Andreas Knöpfel, Bernhard Gröne, Peter Tabeling
Literatur
Mary Shaw, David GarlanSoftware Architecture: Perspectives on an Emerging DisciplineUpper Saddle River, NJ: Prentice-Hall, 1996.
Len Bass, Paul Clements, Rick KazmanSoftware Architecture in PracticeBoston: Addison-Wesley, Third Edition 2012.
Jan BoschDesign and Use of Software ArchitecturesHarlow, UK: Addison-Wesley, 2000.
Christine Hofmeister, Robert Nord, Dili SoniApplied Software ArchitectureReading, MA: Addison-Wesley, 2000.
Literatur
Ian GortonEssential Software ArchitectureBerlin: Springer, Second Edition 2011.
Peter TabelingSoftwaresysteme und ihre ModellierungBerlin: Springer, 2006.
Richard N. Taylor, Nenad Medvidović, Eric M. DashofySoftware Architecture: Foundations, Theory, and PracticeJohn Wiley & Sons, 2010.
George FairbanksJust Enough Software Architecture: A Risk-Driven ApproachBoulder CO: Marshall & Brainerd, 2010.
Links
I Software Engineering InstituteSoftware Architecturehttp://www.sei.cmu.edu/architecture/
I Michael Stal, Stefan Tilkov, Markus Völter, Christian WeyerSoftwareArchitekTOUR - Podcast für den professionellenSoftwarearchitektenhttp://www.heise.de/developer/podcast/