Vorwort | 5 |
Inhaltsübersicht | 7 |
Inhaltsverzeichnis | 9 |
1 Einleitung | 17 |
1.1 Warum gerade jetzt dieses Buch? | 17 |
1.2 Wie sollte man dieses Buch lesen? | 19 |
1.3 Was ist an eingebetteten Systemen so besonders? | 20 |
1.4 Wie sieht das typische Zielsystem aus? | 21 |
1.5 Fallbeispiele | 23 |
1.5.1 Die Anlagensteuerung | 23 |
1.5.2 Die Baumaschine | 24 |
1.5.3 Das Energie-Monitoring-System | 25 |
1.5.4 Das Beispielsystem SimLine | 25 |
1.6 Das Manifest | 26 |
2 Basiswissen | 29 |
2.1 Was sind eingebettete Systeme? | 29 |
2.2 Software Engineering für eingebettete Systeme | 32 |
2.3 Der Qualitätsbegriff | 35 |
2.3.1 Externe Qualität | 35 |
2.3.2 Interne Qualität | 35 |
2.3.3 Qualitätskriterien nach ISO/IEC 25010 | 36 |
2.4 Einführung in Model-Driven Software Engineering | 39 |
2.5 Komplexität | 40 |
2.6 Unser Gehirn als Engpass | 42 |
2.7 Vorgehensweisen und Techniken, um einer steigenden Komplexität zu begegnen | 43 |
2.8 Komplexen Systemen lässt sich nicht mit simplen Methoden begegnen | 44 |
2.9 Verstehbarkeit und Redundanz | 45 |
2.10 Was ist ein Modell? | 49 |
2.11 Modelle helfen, die Zukunft vorwegzunehmen? | 52 |
2.12 Modelle helfen zu abstrahieren? | 54 |
2.13 Resümee: Nutzen von MDSE? | 56 |
3 Modellbasierte Softwareprozesse und Toollandschaften | 59 |
3.1 Klassifikation von Modellierungswerkzeugen | 59 |
3.1.1 Modellierungswerkzeuge der Kategorie A (universelle Malwerkzeuge) | 63 |
3.1.2 Modellierungswerkzeuge der Kategorie B (spezialisierte Malwerkzeuge) | 63 |
3.1.3 Modellierungswerkzeuge der Kategorie C (einfache Modellierungswerkzeuge mit Modelldatenbank) | 63 |
3.1.4 Modellierungswerkzeuge der Kategorie D (vollständiger Zyklus einer Embedded-Software-Engineering-Werkzeugkette) | 64 |
3.2 Vorgehensmodelle | 64 |
3.2.1 SYSMOD Zickzack trifft auf IBM Rational Harmony | 65 |
3.2.2 Spezifikation oder Lösung? | 66 |
3.2.3 Wiederverwendung | 68 |
3.3 Best Practice für kleine Teams | 69 |
4 Modellbasiertes Requirements Engineering | 77 |
4.1 Requirements Engineering | 77 |
4.2 Anforderungen in der Modellierung | 78 |
4.3 Anforderungen und Architektur im Zickzack | 80 |
4.4 Szenario: Modellbasierte Spezifikation mit UML erstellen | 82 |
4.4.1 Überblick über Methode | 82 |
4.4.2 Problemanalyse | 82 |
4.4.3 Basisarchitektur | 84 |
4.4.4 Systemidee und Systemziele | 85 |
4.4.5 Stakeholder und Anforderungen | 86 |
4.4.6 Systemkontext | 87 |
4.4.7 Anwendungsfälle und Aktivitäten | 88 |
4.4.8 Fachwissen | 91 |
4.4.9 Szenarien | 92 |
4.5 Mehr Modellierung: Ausführbare Spezifikation | 93 |
4.6 Weniger Modellierung: Diagramme für Anforderungsdokumente | 96 |
4.7 Neuentwicklung versus Weiterentwicklung | 96 |
4.7.1 Basisarchitektur | 97 |
4.7.2 Anwendungsfälle | 97 |
4.7.3 Szenarien | 97 |
5 Modellbasierte Architekturbeschreibung | 99 |
5.1 Architektur – Was ist das eigentlich? | 99 |
5.2 Die technische Softwarearchitektur | 101 |
5.3 Architekturmuster und deren Bedeutung | 104 |
5.4 Das Laufzeitsystem als Basismuster in eingebetteten Applikationen | 106 |
5.5 Referenzmuster für eine Laufzeitarchitektur | 110 |
5.5.1 Sensorik, Einlesen, Filtern, Bewerten | 112 |
5.5.2 Transformation der Sensorik in Aktivitäten (Verarbeitung) | 113 |
5.5.3 Ausgabe der Daten und Ansteuerung der Aktoren | 113 |
5.6 Fachliche Architektur | 113 |
5.7 Architektur-Assessment | 114 |
6 Modellbasiertes Softwaredesign | 119 |
6.1 Gesichtspunkte der fachlichen Architektur und des Designs | 119 |
6.2 Hierarchische Dekomposition | 121 |
6.3 Diskretisierungs- und Laufzeiteffekte im Design | 131 |
6.4 Softwaredesignprinzipien | 134 |
6.4.1 Was ist ein Prinzip? | 134 |
6.4.2 Grundlegende Designprinzipien | 135 |
6.4.3 Designprinzipien in der Modellierung | 139 |
6.5 Hardwareabstraktion | 139 |
6.5.1 Ausgangssituation | 140 |
6.5.2 Evolution der Mikrocontrollerprogrammierung in C | 140 |
6.5.3 Die klassische Vorgehensweise mit der UML | 143 |
6.5.4 Die graue Theorie | 146 |
6.5.5 Lösungsansätze für die Modellierung | 149 |
6.5.6 Lösungsansätze für die Codegenerierung | 152 |
7 Modellbasiertes Testen | 161 |
7.1 Warum eigentlich testen? | 161 |
7.2 Nicht nur sicherstellen, dass es funktioniert | 162 |
7.2.1 Ein angstfreies Refactoring ermöglichen | 162 |
7.2.2 Besseres Softwaredesign | 162 |
7.2.3 Ausführbare Dokumentation | 163 |
7.2.4 Tests helfen, Entwicklungskosten zu sparen | 163 |
7.3 Die Testpyramide | 164 |
7.4 Test-Driven Development (TDD) | 167 |
7.4.1 Viel älter als vermutet: Test First! | 167 |
7.4.2 TDD: Red – Green – Refactor | 169 |
7.5 Model-Based Testing (MBT) | 170 |
7.6 UML Testing Profile (UTP) | 171 |
7.7 Ein praktisches Beispiel | 172 |
7.8 Werkzeuge, die dieses Vorgehen unterstützen | 179 |
8 Integration von Werkzeugen | 187 |
8.1 Anforderungen an Schnittstellen zu Werkzeugen unterschiedlicher Disziplinen | 188 |
8.1.1 Digital Twin | 188 |
8.1.2 Traceability aus Safety-Gesichtspunkten | 189 |
8.1.3 Projekt- und Workload-Management | 189 |
8.2 Synchronisation der Daten zwischen Repositories | 191 |
8.3 Zentrales Repository | 192 |
8.4 Ein Werkzeug für alles | 194 |
8.5 OSLC – Open Services for Lifecycle Collaboration | 195 |
8.6 XMI – Austausch von Daten innerhalb der Fachdomäne MDSE | 197 |
8.7 ReqIF zum Austausch von Anforderungen | 197 |
8.8 FMI (Functional Mock-up Interface) | 198 |
8.9 SysML Extension for Physical Interaction and Signal Flow Simulation (SysPhS) | 199 |
8.10 AUTOSAR | 200 |
8.11 Stand der Praxis | 200 |
9 Modellbasierte funktionale Sicherheit | 203 |
9.1 Funktionale Sicherheit | 203 |
9.2 Entwurfsmuster der funktionalen Sicherheit | 206 |
9.2.1 Zufällige und systematische Fehler | 207 |
9.2.2 Symmetrische und diversitäre Redundanz | 209 |
9.2.3 Architekturmuster | 211 |
9.2.4 Monitor-Actuator Pattern (MAP) | 214 |
9.2.5 Homogenous Redundancy Pattern (HRP) | 216 |
9.2.6 Triple Modular Redundancy Pattern (TMR) | 218 |
9.2.7 SIL-Empfehlung für die Safety and Reliability Design Patterns | 222 |
9.3 Vom Modell zum sicheren Quellcode: Coding-Standards für die sichere Programmierung | 223 |
9.3.1 Normativer Hintergrund | 223 |
9.3.2 MISRA-C und MISRA-C++ | 224 |
9.3.3 Prüfwerkzeuge | 225 |
9.3.4 Codegenerierung | 225 |
9.4 Das Safety and Reliability Profile der UML | 226 |
9.5 Praktische Anwendung der Modellierung im Kontext sicherheitskritischer Systeme | 227 |
9.5.1 Beweis der Korrektheit der Transformation | 228 |
9.5.2 Verifikation der Qualität des Werkzeugs | 229 |
9.5.3 Zertifiziertes Framework | 229 |
9.6 Vorteile der modellgetriebenen Entwicklung im Safety- Kontext | 230 |
9.6.1 Traceability | 230 |
9.6.2 Semiformale Spezifikation | 231 |
9.6.3 Normen empfehlen den Einsatz von formalen und/oder semiformalen Methoden und Notationen | 232 |
9.6.4 Automatisierte Transformationen | 232 |
9.6.5 Modellierungsrichtlinien (Guidelines) | 233 |
9.6.6 Dokumentation | 234 |
9.7 Modellgetriebene Entwicklung mit der UML | 234 |
10 Metamodellierung | 237 |
10.1 Modell und Metamodell | 237 |
10.2 UML-Metamodelle | 239 |
10.3 EAST-ADL | 241 |
10.4 AADL | 246 |
10.5 Vergleich EAST-ADL und AADL | 248 |
11 Einführung eines modellbasierten Ansatzes in einer Organisation | 251 |
11.1 Ausgangslage | 252 |
11.2 Vorgehen | 253 |
11.2.1 Problem analysieren | 253 |
11.2.2 Idee und Ziele des Vorgehens | 254 |
11.2.3 Stakeholder und Anforderungen | 255 |
11.2.4 Methodikkontext | 256 |
11.2.5 Anwendungsfälle | 256 |
11.2.6 Fachwissenmodell | 258 |
11.2.7 Verifikation und Validierung | 258 |
11.3 Auswahl der Modellierungssprachen | 259 |
11.4 Auswahl der Modellierungswerkzeuge | 260 |
11.5 Typische Fehler | 261 |
11.5.1 Schnellstart | 261 |
11.5.2 Übergewicht | 261 |
11.5.3 Einsame Insel | 262 |
11.5.4 Elfenbeinturm | 262 |
11.5.5 Aus der Lernkurve fliegen | 262 |
12 Lebenslanges Lernen | 265 |
12.1 Lernen – die Sicht des Konstruktivismus | 265 |
12.2 Kompetenzen – der Blick auf die modellbasierte Softwareentwicklung | 267 |
12.3 Agilität – Lernen mit Methoden und Praktiken | 270 |
12.4 Psychologische Grundlagen von Fehlern | 277 |
12.4.1 Denkfallen als Fehlerursache | 277 |
12.5 Software Craftsmanship – ein Beispiel | 280 |
12.6 Modellierungskultur – ein Kodex | 282 |
12.6.1 Manifest – Modeling of Embedded Systems | 282 |
12.6.2 Big Picture – der Blick auf den Kodex einer Modellierungskultur | 282 |
12.6.3 Moderation – die konstruktive Kommunikation | 283 |
12.6.4 Reflexion – Lernen durch Reflektieren | 284 |
12.6.5 Selbstverpflichtung – selbstgesteuertes Lernen als Entwickler und als Team | 285 |
12.6.6 Teamradar – ein Feedbackbarometer | 286 |
12.6.7 Experten als Teamcoach – Agenten der Veränderung | 288 |
12.6.8 Funktionale Sicherheit – ein Beitrag der normativen Sicherheitskultur | 288 |
13 Fazit | 293 |
Anhang | 295 |
A Ausblick: Skizze eines Reifegradmodells für MDSE | 297 |
A.1 Hintergrund und Motivation | 297 |
A.2 Die Skizze als ein Start – Diskussionsforum | 299 |
A.3 Ausgangslage Manifest – Ziele kompakt | 300 |
A.4 Die Reifegrade – der Weg in die Modellierungskultur | 301 |
A.5 Evaluation und Fragenkatalog | 308 |
B Kurzreferenz UML und SysML | 311 |
B.1 Eine kurze Geschichte der UML | 312 |
B.2 Aufbau und Architektur der UML | 313 |
B.3 Anwendungsfalldiagramm | 315 |
B.3.1 Akteur | 315 |
B.3.2 Anwendungsfall | 316 |
B.3.3 Anwendungsfallbeziehungen | 316 |
B.4 Aktivitätsdiagramm | 316 |
B.4.1 Aktivität und Aktivitätsparameter | 317 |
B.4.2 Aktion und Pin | 318 |
B.4.3 Kontroll- und Objektfluss | 319 |
B.4.4 Start- und Endknoten | 320 |
B.4.5 Entscheidung und Zusammenführung | 320 |
B.4.6 Splitting und Synchronisation | 320 |
B.5 Klassendiagramm | 321 |
B.5.1 Klasse und Objekt | 321 |
B.5.2 Attribut | 322 |
B.5.3 Operation | 322 |
B.5.4 Assoziation | 323 |
B.5.5 Komposition | 324 |
B.5.6 Generalisierung | 324 |
B.5.7 Signal | 324 |
B.5.8 Datentyp | 325 |
B.5.9 Templates | 325 |
B.6 Kompositionsstrukturdiagramm | 326 |
B.6.1 Konnektor | 327 |
B.6.2 Port | 328 |
B.7 Sequenzdiagramm | 330 |
B.7.1 Interaktion | 330 |
B.7.2 Lebenslinie | 331 |
B.7.3 Nachricht | 332 |
B.7.4 Kombiniertes Fragment | 332 |
B.7.5 Zeitliche Zusicherungen | 333 |
B.8 Zustandsdiagramm | 333 |
B.8.1 Zustandsautomat | 334 |
B.8.2 Zustand | 335 |
B.8.3 Transition | 335 |
B.8.4 Start- und Endzustand | 336 |
B.8.5 Pseudozustand | 337 |
B.9 Paketdiagramm | 338 |
B.9.1 Paket und Modell | 338 |
B.9.2 Pakete importieren | 339 |
B.9.3 Modellbibliothek | 339 |
B.10 Querschnittselemente | 339 |
B.10.1 Kommentar | 339 |
B.10.2 Zusicherung | 340 |
B.10.3 Trace-Beziehung | 340 |
B.11 Profil | 340 |
B.11.1 SysML | 342 |
B.11.2 MARTE | 345 |
B.11.3 UML Testing Profile (UTP) | 347 |
B.11.4 MDESE-Profil (basierend auf SYSMOD-Profil) | 348 |
C Glossar | 351 |
D Literaturverzeichnis | 371 |
Stichwortverzeichnis | 379 |