Dieser Schritt bildet die Grundlage für unseren Lernpfad zur Blockchain; er beschreibt, wie wir unsere Kommunikation in Bezug auf Technologien organisieren und standardisieren. Hier wird erklärt, wie Sie ein Softwaresystem analysieren können und warum es wichtig ist, es als Gebilde aus mehreren Schichten zu betrachten. Außerdem zeigt dieser Schritt, welchen Nutzen die verschiedenen Schichten in einem System bringen und wie uns dieser Ansatz beim Verständnis der Blockchain hilft. Und schließlich erhalten Sie auch eine kurze Einführung in das Konzept der Softwareintegrität sowie deren Bedeutung.
Haben Sie ein Mobiltelefon? Vermutlich schon, denn die meisten Menschen besitzen mittlerweile eins, wenn nicht gar mehrere. Wie viel wissen Sie über die unterschiedlichen drahtlosen Kommunikationsprotokolle, die zum Senden und Empfangen von Daten dienen? Wie viel wissen Sie über die elektromagnetischen Wellen, ohne die diese Form der mobilen Kommunikation nicht funktionieren würde? Mit derartigen Einzelheiten kennen sich wohl die wenigsten von uns aus, denn deren genaue Kenntnis ist für die Benutzung eines Mobiltelefons nicht erforderlich. Und die meisten von uns haben auch gar nicht die Zeit, sich eingehender mit diesen Dingen zu beschäftigen. Wir unterteilen das Mobiltelefon im Geiste in Teile, die wir kennen oder verstehen müssen, und Teile, die wir ignorieren oder als gegeben hinnehmen können.
Und diese Betrachtungsweise einer Technologie ist keineswegs auf Mobiltelefone beschränkt. Wir wenden sie immer wieder an, wenn wir die Bedienung eines neuen Geräts erlernen – sei es eines Fernsehers, eines Computers, einer Waschmaschine usw. Allerdings ist diese Form der gedanklichen Einteilung eine sehr individuelle Sache, denn was uns wichtig ist, richtet sich nach unseren persönlichen Vorlieben, der jeweiligen Technologie, unseren Zielen und unseren Erfahrungen. Ihre gedankliche Einteilung eines Mobiltelefons unterscheidet sich vermutlich von der meinen – obwohl es um dasselbe Gerät an sich geht. Das führt für gewöhnlich zu Kommunikationsproblemen, insbesondere wenn ich versuchen würde, Ihnen zu erklären, was Sie über ein bestimmtes Mobiltelefon wissen sollten. Daher ist es beim Lehren und Diskutieren von Technologie so wichtig, ein gemeinsames Unterteilungssystem zu schaffen. Dieser Schritt erläutert, wie ein System in Schichten oder andere Bereiche unterteilt wird – und bildet somit die Basis für unsere Kommunikation über die Blockchain.
In diesem Buch nutzen wir zwei Arten von Unterteilungen für Systeme:
Wenn die Bedürfnisse eines Anwenders von den technischen Interna eines Systems getrennt werden, ergibt sich eine Aufteilung in die Anwendungsschicht und die Implementierungsschicht. Zur Anwendungsschicht gehört alles, was die Bedürfnisse des Anwenders betrifft, zum Beispiel Musik hören, Fotos machen oder Hotelzimmer reservieren. In die Implementierungsschicht gehört alles, wodurch diese Dinge erreicht werden, zum Beispiel das Konvertieren von digitalen Daten in akustische Signale, das Erkennen der Farbe eines Bildpunktes in einer Digitalkamera oder das Übermitteln von Nachrichten über das Internet an ein Buchungssystem. Die Elemente der Implementierungsschicht sind technischer Natur und werden als Mittel zum Zweck betrachtet.
Die Unterscheidung zwischen dem »Was« (ein System macht) und dem »Wie« (es etwas macht) führt zu einer Aufteilung in die funktionalen und nichtfunktionalen Aspekte. Beispiele für funktionale Aspekte sind das Übertragen von Daten in einem Netzwerk, die Wiedergabe von Musik, das Aufnehmen von Fotos und das Bearbeiten einzelner Bildpunkte. Beispiele für nichtfunktionale Aspekte sind eine ansprechende grafische Bedienoberfläche, eine schnell laufende Software und die Fähigkeit, Anwenderdaten geschützt und sicher abzulegen. Andere wichtige nichtfunktionale Aspekte eines Systems sind Sicherheit und Integrität. Integrität bedeutet, dass sich ein System wie beabsichtigt verhält und umfasst verschiedene Teilaspekte z.B, Datensicherheit und Korrektheit.[1] Die Unterschiede zwischen den funktionalen und nichtfunktionalen Aspekten eines Systems kann man sich durch einen Rückgriff auf die Grammatik merken: Verben beschreiben Handlungen, also etwas, was getan wird; Adverbien dagegen beschreiben den Umstand, also wie etwas getan wird. So kann eine Person schnell oder langsam gehen. In beiden Fällen ist die Handlung – Gehen – identisch, aber die Art, wie diese Handlung ausgeführt wird, unterscheidet sich. Man kann also verallgemeinern, dass die funktionalen Aspekte den Verben ähneln, die nichtfunktionalen Aspekte dagegen den Adverbien.
Das Identifizieren der funktionalen und nichtfunktionalen Aspekte sowie das Aufteilen in Anwendungsschicht und Implementierungsschicht kann gleichzeitig erfolgen. Das Ergebnis lässt sich in einer zweidimensionalen Tabelle ähnlich der folgenden darstellen, die diese Verfahrensweise am Beispiel der gedanklichen Aufteilung eines Mobiltelefons demonstriert.
Schicht |
Funktionale Aspekte |
Nichtfunktionale Aspekte |
---|---|---|
Anwendung |
|
|
Implementierung |
|
|
Tabelle 1.1: Beispiel für die gedankliche Aufteilung eines Mobiltelefons
Diese Ergebnisaufstellung kann dabei helfen, die Sichtbarkeit (oder eben die Unsichtbarkeit) bestimmter Elemente eines Systems für die Anwender zu erläutern. Funktionale Aspekte der Anwendungsschicht sind die offensichtlichsten Elemente eines Systems, denn sie dienen den offensichtlichen Bedürfnissen der Anwender. Hierbei handelt es sich üblicherweise auch um diejenigen Elemente, über die Anwender etwas lernen. Auf der anderen Seite werden die nichtfunktionalen Aspekte der Implementierungsschicht selten als wichtige Elemente des Systems angesehen, sondern meist als selbstverständlich betrachtet.
Die Integrität ist ein wichtiger nichtfunktionaler Aspekt in jedem Softwaresystem. Sie umfasst drei Hauptkomponenten:[2]
Datenintegrität: Die im System verwendeten und gepflegten Daten sind vollständig, korrekt und frei von Widersprüchen.
Verhaltensintegrität: Das System verhält sich wie beabsichtigt und weist keine logischen Fehler auf.
Sicherheit: Das System ist in der Lage, den Zugriff auf Daten und Funktionen auf autorisierte Anwender zu beschränken.
Die meisten von uns betrachten die Integrität von Softwaresystemen möglicherweise als Selbstverständlichkeit, da wir in der Regel mit Systemen arbeiten, die sie glücklicherweise bewahren. Das liegt daran, dass die Programmierer und Softwareentwickler viel Zeit und Mühe aufgewendet haben, um ebendiese Integrität in ihren Systemen zu erreichen und zu erhalten. Dadurch sind wir diesbezüglich ein wenig verwöhnt und lassen nur wenig Wertschätzung für den Aufwand erkennen, den die Entwickler tatsächlich betrieben haben, um ein hohes Maß an Integrität zu gewährleisten. Wenn wir jedoch mit einem System arbeiten, bei dem dieser Aufwand nicht betrieben wurde, schlägt unsere Stimmung schnell um. In solchen Situationen haben Sie oftmals mit Datenverlust oder unlogischem Softwareverhalten zu kämpfen oder müssen sogar feststellen, dass Fremde auf Ihre persönlichen Daten zugreifen konnten. Und das sind dann die Momente, in denen Ihr Mobiltelefon, Ihr Computer, Ihr E-Mail-Programm, Ihre Textverarbeitung oder Ihre Tabellenkalkulation Sie wütend machen und Ihre gute Kinderstube vergessen lassen. Bei diesen Gelegenheiten wird sehr schnell deutlich erkennbar, wie wertvoll Softwareintegrität tatsächlich ist. Insofern dürfte es kaum überraschen, dass Softwareexperten viel Zeit auf diesen nur scheinbar unbedeutenden nichtfunktionalen Aspekt der Implementierungsschicht verwenden.
In diesem Schritt haben Sie einige der allgemeinen Prinzipien der Softwareentwicklung kennengelernt. Insbesondere wurden die Konzepte der Integrität und der funktionalen bzw. der nichtfunktionalen Aspekte vorgestellt sowie die Anwendung im Vergleich zur Implementierung eines Softwaresystems beschrieben. Das Verständnis dieser Konzepte hilft Ihnen dabei, das große Umfeld der Blockchain besser zu verstehen. Im nächsten Schritt betrachten wir das große Ganze unter Zugrundelegung der soeben gewonnenen Erkenntnisse.
Eine Analyse von Systemen ist möglich durch deren Aufteilung in:
Anwendungs- und Implementierungsschicht
Funktionale und nichtfunktionale Aspekte
Die Anwendungsschicht befasst sich mit den Bedürfnissen des Anwenders, die Implementierungsschicht damit, die Aufgabenstellungen technisch umzusetzen.
Funktionale Aspekte konzentrieren sich auf das »Was«, die nichtfunktionalen Aspekte auf das »Wie«.
Den meisten Anwendern sind die funktionalen Aspekte der Anwendungsschicht eines Systems wichtig, während die nichtfunktionalen Aspekte – insbesondere jene der Implementierungsschicht – für Anwender weniger sichtbar sind.
Die Integrität ist ein wichtiger nichtfunktionaler Aspekt in jedem Softwaresystem. Sie umfasst drei Hauptelemente:
Datenintegrität
Verhaltensintegrität
Sicherheit
Die meisten Softwarepannen wie Datenverlust, unlogisches Verhalten oder unbefugter Zugriff auf persönliche Daten sind das Ergebnis von Verstößen gegen die Systemintegrität.
[1] Chung, Lawrence, et al. Non-functional requirements in software engineering. Band 5. New York: Springer Science & Business Media, 2012.
[2] Boritz, J. Efrim. IS practitioners’ views on core concepts of information integrity. International Journal of Accounting Information Systems 6.4 (2005): 260–279