Was ist Softwarearchitektur? - Ein Beispiel und drei ... · Eine(plakative)Gegenüberstellung Das...

Preview:

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/

Recommended