Einleitung
«System-Design», «System-Architektur», «Software-Architektur», was steckt genau hinter diesen Begriffen? Was ist damit gemeint? Was sind die Definitionen? Warum ist es wichtig diese Begriffe zu unterscheiden?
Mit Antworten auf diese Fragen beschäftigt sich dieser Artikel.
Das System
Wir beschäftigen uns hier mit technischen Systemen. Noch etwas spezifischer mit Embedded Systemen. Ein Embedded System, auf Deutsch ein «eingebettetes System» ist wie folgt definiert:
«Ein eingebettetes System ist ein elektronischer Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Dabei übernimmt der Rechner entweder Überwachungs-, Steuerungs- oder Regelfunktionen oder ist für eine Form der Daten- bzw. Signalverarbeitung zuständig, beispielsweise beim Ver- bzw. Entschlüsseln, Codieren bzw. Decodieren oder Filtern.»
Quelle: Wikipedia
Ganz ähnlich diese Definition (Quelle https://www.embedded-software-engineering.de):
«Ein eingebettetes System ist ein binärwertiges digitales System (auch Computersystem genannt), das in ein umgebendes technisches System eingebettet ist und mit diesem in Wechselwirkung steht. Dabei übernimmt der Rechner meist Überwachungs-, Steuerungs- oder Regelungsfunktionen, ist oft aber auch für eine Form der Daten- bzw. Signalverarbeitung zuständig.»
Diese Definitionen können mit dem folgenden Diagramm verdeutlicht werden:
Abbildung 1: Allgemeines Embedded System mit der gewünschten Funktion / Verantwortung umgeben von externen Systemen und einem oder mehrere Benutzer.
Der Einfachheitshalber wird meist einfach von dem „System“ gesprochen mit welchem man sich befasst. Auch im Rest dieses Artikels wird häufig nur noch von „System“ gesprochen und meint damit das entsprechende technische oder eben das Embedded System.
Architektur & Design
Um die Begriffe zu erklären, muss aufgezeigt werden, wie ein solches System gebaut wird. Abbildung 1 stellt das Embedded System als Blackbox dar. Der Aufbau des Systems ist noch nicht definiert. Es muss definiert werden aus welchen Bestandteilen das System aufgebaut werden soll. Diese Tätigkeit nennt man «Design». Bei einem «System-Design» geht es also um die Definition und Festlegung des Systemaufbaus. Das Resultat einer solchen Design-Tätigkeit könnte dann basierend auf dem Diagramm (Abbildung 2) wie folgt aussehen:
Abbildung 2: Resultat (Architektur) der ersten Design Iteration zur Definition der Bestandteile (Architekturelemente).
Meist läuft eine solche Design-Tätigkeit iterativ ab. Das heisst die Bestandteile – man spricht hier von Architekturelementen – werden soweit zerlegt (engl. «decompose»), bis diese genügend definiert sind. Erst dann kann die Erstellung (Entwicklung) des Systems beginnen.
Das Resultat dieser Design-Aktivität nenn man «Architektur». Die Abbildung 2 ist also eine erste «System-Architektur» (genau genommen ist die Abbildung 2 eine Referenzarchitektur eines allgemeinen Embedded System). Wobei der Begriff Architektur in diesem Zusammenhang noch genauer definiert werden muss. Es gibt nicht eine einzige etablierte Definition des Architektur-Begriffes. Eine Sammlung von Definitionen findet man hier: https://resources.sei.cmu.edu/library/asset-view.cfm?assetid=513807. Dies sind zwar Definitionen für Software-Architektur, gelten jedoch auch für den System-Architektur Begriff. Die Unterscheidung liegt im Anwendungsbereich (engl. Scope) – dazu aber weiter unten noch mehr.
Wir verwenden die folgende Definition des Architektur-Begriffes (aus «Software Architecture in Practice – Third Edition»):
Definition (Software-) Architektur
“The (software) architecture of a system is the set of structures needed to reason about the system, which comprise (software) elements, relations among them, and properties of both.”
Übersetzt sind darin die folgenden 3 Sätze enthalten:
- Die Architektur eines Systems ist aus einer Menge von Strukturen aufgebaut.
- Es sind die Strukturen, welche benötig werden, um auf das System schliessen zu können.
- Die Strukturen umfassen die Elemente, deren Beziehungen und deren Eigenschaften.
Was bedeutet das nun?
Die Strukturen bestehen aus Elementen, deren Beziehungen und deren Eigenschaften. Architektur besteht aus den Strukturen, welche benötigt werden, um sicherzustellen, dass sich das System wie gefordert verhält. Wobei hier nicht nur die Erfüllung der funktionalen Anforderungen gemeint ist, sondern auch der ganze Bereich der nicht-funktionalen Anforderungen. Beispielsweise haben Forderungen bezüglich Weiterentwickelbarkeit meist Einfluss auf die Struktur des Systems. Es gehören jedoch nicht alle Strukturen eines Systems zur Architektur. Nicht alle Strukturen sind Architektur-relevant. Man spricht bei diesen Strukturen dann nicht mehr von Architektur, sondern von Design.
«Design» ist einerseits die Tätigkeit, welche zu einer Architektur führt (siehe weiter oben), als auch der Begriff für sämtliche nicht Architektur-relevanten Resultate aus der Design Tätigkeit.
Viele Definitionen machen sich das einfacher, indem sie ausführen, die Grobstruktur oder die früh im Design Prozess definierten Strukturen sind Architektur. Alle späteren oder detaillierteren Strukturen sind Design. Diese Definitionen sind allerdings unzureichend, da durchaus detailliertere Strukturen notwendig sein können, um die geforderten Anforderungen zu erfüllen. Auch wird in einer agilen Entwicklung nicht alles Relevante schon früh im Design Prozess definiert.
System versus Software
Zuletzt noch die Unterscheidung zwischen «System-Architektur» und «Software-Architektur»: Wie bereits weiter oben aufgeführt unterscheiden sich diese im Anwendungsbereich (Scope). Die System-Architektur umfasst die Strukturen von verschiedenen System-Elementen, wie Hardware, Software, Mechanik. Die Software-Architektur hingegen umfasst die Strukturen, welche den Aufbau eines Software-Elementes (ein Element aus der System-Architektur) definieren. Dies ist in den nachfolgenden Diagrammen ersichtlich:
Abbildung 3: System Architektur Diagramm mit Hardware und Software Elementen.
Bei der weiterführenden Zerlegung eines Software Elementes landen wir schlussendlich bei der Software Architektur:
Abbildung 4: Software Architektur Diagramm des Software Elementes «Control Software».
Zusammenfassung
In der nachfolgenden Tabelle sind die wichtigsten Begriffe und deren Bedeutung resp. Definitionen nochmals zusammenfassend aufgeführt:
Begriff |
Bedeutung, Definition |
---|---|
Embedded System |
Ein Embedded System (deutsch: eingebettetes System) ist ein elektronischer Rechner oder Computer, der eine definierte Funktion ausführt und eingebunden in einer physikalischen Umgebung ist. Optional von anderen Umsystemen umgeben ist sowie optional eine Benutzerschnittstelle aufweist. |
Design (Tätigkeit) |
Ist die Tätigkeit, welche definiert wie ein System aus mehreren Bestandteilen (Architekturelementen) aufgebaut ist. |
System-Design (Tätigkeit) |
Siehe «Design» – mit der Präzisierung, dass es sich um das Design eines Systems d.h. um verschieden Elemente wir Hardware, Software, Mechanik handelt. |
Software-Design (Tätigkeit) |
Siehe «Design» – mit der Präzisierung, dass es sich um das Design einer Software (eines Software-Elementes) handelt. |
Die Architektur |
Die Architektur eines Systems ist die Menge von Strukturen, welche benötig werden, um auf das System schliessen zu können, resp., um sicherzustellen, dass das System die geforderten Eigenschaften erfüllt. Die Strukturen umfassen die Elemente, deren Beziehungen und deren Eigenschaften. |
Das Design |
Die Strukturen, welche neben den architekturrelevanten Strukturen (siehe «Architektur») zwar auch den Aufbau des Systems definieren, für die geforderten Systemeigenschaften allerdings nicht relevant sind. |
Die System-Architektur |
Siehe «Architektur» – mit der Präzisierung, dass es sich um das Design eines Systems d.h. um verschieden Elemente wir Hardware, Software, Mechanik handelt. |
Die Software-Architektur |
Siehe «Architektur» – mit der Präzisierung, dass es sich um das Design einer Software (eines Software-Elementes) handelt. |
Tab. 1: Begriffe und deren Bedeutung resp. Definition