Modellbasierte Softwareentwicklung für eingebettete Systeme verstehen und anwenden

Book description

Software ist der Rohstoff des Digitalen Zeitalters. Nur wer den Umgang mit diesem Rohstoff beherrscht, wird auch in Zukunft marktfähige Systeme entwickeln können. Themen wie IoT und Industrie 4.0 beschleunigen diesen Trend. Die modellgetriebene Entwicklung (MDSE) bietet einen entscheidenden Beitrag, dieser Herausforderung erfolgreich zu begegnen.Das Buch beschreibt den effektiven Einsatz der MDSE von den Anforderungen über die Architektur bis zum Design, der Codegenerierung und dem Testen. Für jede Phase werden Paradigmen, Methoden, Techniken und Werkzeuge beschrieben, wobei die praktische Anwendung im Vordergrund steht.Der Leser lernt, wie ein modellbasiertes Vorgehen nutzbringend in der Praxis für die Entwicklung eines eingebetteten Systems eingesetzt wird. Das Vorgehen wird unabhängig von Modellierungswerkzeugen dargestellt und derart, dass der Leser es leicht in seinem Umfeld einsetzen kann. Darüber hinaus werden Beispiele exemplarisch auch auf Basis konkreter Werkzeuge aufgezeigt.Im Anhang befinden sich das MDSE-Reifegradmodell, eine UML-Kurzreferenz, ein Glossar sowie ein Überblick zu Modellierungswerkzeugen.

Table of contents

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

Product information

  • Title: Modellbasierte Softwareentwicklung für eingebettete Systeme verstehen und anwenden
  • Author(s): Tim Weilkiens, Alexander Huwaldt, Jürgen Mottok, Stephan Roth, Andreas Willert
  • Release date: July 2018
  • Publisher(s): dpunkt
  • ISBN: 9783864905247