Nebenläufige Systeme (ehem. Wissensverarbeitung) SS/WS 19/20 für IIOb17 - Georg Ringwelski

Die Seite wird erstellt Luca Groß
 
WEITER LESEN
Nebenläufige Systeme (ehem. Wissensverarbeitung) SS/WS 19/20 für IIOb17 - Georg Ringwelski
Nebenläufige Systeme
(ehem. Wissensverarbeitung)
   SS/WS 19/20 für IIOb17
            Georg Ringwelski

         "Nebenläufige Systeme" stand 10.4.2019   1
TODO WS 19/20
• Einführung SW Test nach ISTQB und Anwendungung in Embedded
• Probleme bei Synchronisierung: deadlock, livelock, starvation

                         "Nebenläufige Systeme" stand 10.4.2019   2
Ablauf
• 4 Sitzungen im SS19: 21.3 bis 11.4., dafür im WS nur bis Weihnachten
• Themen der 4 Sitzungen:
   •   Eingebettete Systeme, Architektur und Signalverarbeitung
   •   Wdh: Nebenläufige Programmierung und Synchronisierung in Java
   •   Nebenläufige, synchronisierte und fehlertolerante Erfassung von Sensorwerten
   •   Modellierung von Agenten mit Zustandsautomaten (=statecharts)
Eine Grundlage für die Erfassung und Verarbeitung der Sensormessungen
 im Modul „Mobile Roboter“ bei Prof. Böhm im SS19

• Weitere Themen im WS: Exceptions, Testen in nebenl. und Embedded Sys.,
  Build-Prozesse
• Im Wintersemester: Jeder macht die PL (4 Teilaufgaben) in Einzelleistung:
  Kollisionsfrei selbstfahrende Autos mit MiL, HiL für NXT (!) und EV3
                                  "Nebenläufige Systeme" stand 10.4.2019              3
Nebenläufige Systeme
1. Eingebettete Systeme, Architektur und Signalverarbeitung
2. Wdh: Nebenläufige Programmierung und Synchronisierung in Java
3. Nebenläufige, synchronisierte und fehlertolerante Erfassung von
   Sensorwerten
4. Modellierung von Agenten mit Zustandsautomaten (=statecharts)

                         "Nebenläufige Systeme" stand 10.4.2019      4
Komponenten eingebetteter Systeme
• Kontrolleinheit (regelbasiert oder
  reaktiv) steuert das Verhalten
• Aktoren (Output) verändern
  Zustand und Umwelt
• Sensoren (Input) verändern
  Zustand durch kontinuierliche
  Verarbeitung von Signalen
• Umgebung ist „Bestandteil“ des
  Systems, je nach Konfiguration

 Was ist das alles bei uns?
                           "Nebenläufige Systeme" stand 10.4.2019   5
Architektur bei uns
Wir haben:
• Kontrolleinheit: NXT oder EV3 Brick
• Aktoren: Motoren, Licht…
• Sensoren: Touch-, Ultraschall-, Farbsensor, Kamera
• Umgebung Tisch: beeinflusst die Messung der Sensoren: Berührt?
  Entfernung, Farbe, Video-Stream

Wir haben nicht:
• Automatisierte Beobachtung der Aktoren „von außen“ z.B. zu
  Testzwecken oder für Kalibrierung

                         "Nebenläufige Systeme" stand 10.4.2019    6
Was sind Sensoren?
• Überprüfen regelmäßig ihren Beobachtungsgegenstand z.B. nach
  physikalischen Veränderungen (Temperatur, Entfernung…)
• Die meisten Sensoren in eingebetteten Systemen sind „passiv“, d.h.
  sie haben eine Elektronik, die Energie einsetzt um jederzeit (auch
  statische) Messwerte liefern zu können
• Der gemessene Wert kann je nach verbauter Elektronrik abgerufen
  werden oder wird nach Änderungen kommuniziert (callback)
• Physikalische Messungen sind immer fehlerbehaftet

                          "Nebenläufige Systeme" stand 10.4.2019       7
Architekturtypen der Kontrolleinheit in
eingebetteten Systemen
Regelschleife                                    Reaktive Systeme
(Zeit-gesteuertes Design)                        (Ereignis-gesteuertes Design)

• Eingangssignale werden zyklisch                • Verarbeiten Ereignisse direkt
  abgefragt
                                                   (=Eingangssignale)
• Ausgangssignale werden auf der
  Basis von Regeln über Zustand                  • Aperiodisch, sofort nach
  zyklisch erzeugt                                 auftreten der Ereignisse
• Der Zustand wird idR durch
  Verarbeitung der Eingangssignale               • Callback-Methoden verändern
  verändert                                        den Zustand und erzeugen ggf.
Klassischer Ansatz der                             Ausgangssignale
Regelungstechnik
                            "Nebenläufige Systeme" stand 10.4.2019                 8
Übung in Kleingruppe
Skizzieren Sie einen typischen Ablauf der Kommunikation zwischen
Kontrolleinheit und Sensor
• mit Regelschleife
• als reaktives System
in je einem UML timeline Diagramm, um die Unterschiede zu
demonstrieren

Präsentieren Sie Ihre Lösung an der Tafel

                           "Nebenläufige Systeme" stand 10.4.2019   9
Übung in Murmelgruppe
Skizzieren Sie eine geeignete Systemarchitektur für die Kontrolleinheit
eines Fahrzeugs mit vier Ultraschallsensoren (an jeder Ecke eines) und
zwei Motoren (Antrieb und Lenkung) mit Regelschleife.
Wo sind sinnvolle Schnittstellen?

UML Klassendiagramm

Präsentieren Sie Ihre Lösung an der Tafel

                           "Nebenläufige Systeme" stand 10.4.2019         10
Testen eingebetteter Systeme
• In eingebetteten Systemen werden (in Komponententests) die
  Testobjekte gekapselt
• Als Testtreiber dienen SW-Simulationen der anderen
  Komponenten
    Software in the Loop (SiL)
    Model in the Loop (MiL)             Hardware in the Loop (HiL)

                     Testobjekt                                                           Mögliche
                                                                                          Testobjekte
                                                                            Testtreiber
                    Testtreiber
                             als
                 SW-Simulation

                                   "Nebenläufige Systeme" stand 10.4.2019                    11
Testen eingebetteter Systeme
Was ist was in unserem Projekt: Testobjekte und Testtreiber?
• Echte HiL-Tests sind nicht möglich, weil die Sensoren zur Messung der
  Ausgabe der Aktoren fehlen
• Wir können trotzdem HiL-Szenarien als Eingabe verwenden und die
  Ausgabe beobachten (GUI, Hardware), das ist kein Test!!!
   • Vorgehen: Trennung von Input und Output im Testtreiber
• Diese HiL-Szenarien können wir auch für MiL-Tests nutzen
• In MiL-Tests können wir die Ausgabe softwareseitig aufnehmen und
  überprüfen  ein echter Test

                             "Nebenläufige Systeme" stand 10.4.2019   12
Übung in Murmelgruppe
Skizzieren Sie eine geeignete Systemarchitektur für den MiL-Test der
Kontrolleinheit bei unserem Fahrzeug.
Hinweis: Tests werden gegen Schnittstellen geschrieben

Als UML Klassendiagramm

Präsentieren Sie Ihre Lösung an der Tafel

                           "Nebenläufige Systeme" stand 10.4.2019      13
Organisatorisches
• Themenbereich „Testen“ nach ISTQB im Wintresemester
   Nicht unbedingt erforderlich für „Mobile Roboter“
• Website aktualisiert

                             "Nebenläufige Systeme" stand 10.4.2019   14
Wiederholung
• Was ist die Grundarchitektur eingebetteter Systeme?
• Wo sind dabei explizite Schnittstellen angebracht und warum?
• Zwischen welchen dieser Komponenten wird entweder Zeit-gesteuert
  oder Ereignis-gesteuert kommuniziert?
• Wie kann die Ereignis-gesteuerte Kommunikation realisiert werden?

                         "Nebenläufige Systeme" stand 10.4.2019   15
Wiederholung
• Was ist die Grundarchitektur eingebetteter Systeme?
• Wo sind dabei explizite Schnittstellen angebracht und warum?
• Zwischen welchen dieser Komponenten wird entweder Zeit-gesteuert
  oder Ereignis-gesteuert kommuniziert?
• Wie kann die Ereignis-gesteuerte Kommunikation realisiert werden?

                         "Nebenläufige Systeme" stand 10.4.2019   16
Nebenläufige Systeme
1. Eingebettete Systeme, Architektur und Signalverarbeitung
2. Wdh: Nebenläufige Programmierung und Synchronisierung in Java
3. Nebenläufige, synchronisierte und fehlertolerante Erfassung von
   Sensorwerten
4. Modellierung von Agenten mit Zustandsautomaten (=statecharts)

                         "Nebenläufige Systeme" stand 10.4.2019      17
Nebenläufige Threads in Java
Einzelübung (15 min): Schreiben Sie ein ausführbares Java Programm, das
zwei nebenläufige Threads startet, die jeweils für 5 Sekunden in zufälligen
Zeitabständen eine Ausgabe an der Konsole machen. Wenn beide Threads
fertig sind wird das vom Haupt-Thread ausgegeben
Wählen Sie einen folgender Ansätze:
a) Ihre Thread-Klasse erweitert java.lang.Thread z.B. als anonyme innere
    Klasse
b) Ihre Klasse implementiert java.lang.Runnable und wird einem Thread-
    Objekt im Konstruktor mitgegeben
c) Ihre Klasse implementiert java.lang.Runnable und wird von einem
    java.util.concurrent.Executor-Objekt nebenläufig gestartet.

                             "Nebenläufige Systeme" stand 10.4.2019           18
Agenda
• Nebenläufige Threads in Java
• Leser-Schreiber Probleme
• Ansatz 1: Unveränderbare Objekte
• Ansatz 2: Synchronisierung
   • Schlossvariablen (Keyword „synchronized“)
   • Semaphore (Klasse java.util.concurrent.Semaphore)
   • Probleme: Deadlock, Livelock, Aushungern
• Best Practices

                             "Nebenläufige Systeme" stand 10.4.2019   19
Leser Schreiber Probleme
• Wenn nebenläufige Threads auf gemeinsame Variablen zugreifen
  entstehen Probleme
• Bsp: (c=c+1; | c=c-1; ) kann zu folgendem werden:
Thread A: Retrieve c.
Thread B: Retrieve c.
Thread A: Increment retrieved value; result is 1.
Thread B: Decrement retrieved value; result is -1.
Thread A: Store result in c; c is now 1.
Thread B: Store result in c; c is now -1.

• Demo: CounterApp.java

                                      "Nebenläufige Systeme" stand 10.4.2019   20
Agenda
• Nebenläufige Threads in Java
• Leser-Schreiber Probleme
• Ansatz 1: Unveränderbare Objekte
• Ansatz 2: Synchronisierung
   • Schlossvariablen (Keyword „synchronized“)
   • Semaphore (Klasse java.util.concurrent.Semaphore)
   • Probleme: Deadlock, Livelock, Aushungern
• Best Practices

                             "Nebenläufige Systeme" stand 10.4.2019   21
Ansatz 1: Unveränderbare (immutable)
Objekte
Der Zustand eines „Immutable Object“ kann nach der Erzeugung nicht mehr
verändert werden, dazu sollten folgende Regeln eingehalten werden
Alle Attribute „private final“
Keine setter
Überschreiben in Subklassen verbieten (Klasse „final“ deklarieren)
Wenn änderbare Objekte in Attributen referenziert werden, dann dürfen
  keine Methoden zur Verfügung gestellt werden, die diese Objekte
  verändern.
Wenn änderbare Objekte in Attributen referenziert werden, dann dürfen
  diese nicht als Parameter an andere weitergegeben werden (vorher
  clone()) wg. „Call-by-reference-Effekt“

      In immuatble objects gibt es keine Leser-Schreiber Probleme!
                           "Nebenläufige Systeme" stand 10.4.2019         22
Ansatz 1: Unveränderbare (immutable)
Objekte
Diskussion im Plenum:

1. Kann man Counter.java für immutable objects realisieren?

2. Welche Klassen kann man generell für immutable objects
   realisieren, welche nicht?

3. Kann man die Steuerungskomponente eines mobilen Roboters als
   immutable object realisieren?
                         "Nebenläufige Systeme" stand 10.4.2019   23
Agenda
• Leser-Schreiber Probleme
• Ansatz 1: Unveränderbare Objekte
• Ansatz 2: Synchronisierung
   • Schlossvariablen (Keyword „synchronized“)
   • Semaphore (Klasse java.util.concurrent.Semaphore)
   • Probleme: Deadlock, Livelock, Aushungern
• Best Practices

                             "Nebenläufige Systeme" stand 10.4.2019   24
Ansatz 2: Synchronisierung
 „Synchronisierung“ werden Techniken genannt, mit denen Leser-
 Schreiber-Probleme durch Verhindern von Thread-Wechseln in den
 kritischen Abschnitten verhindert wird:

                                                                         Thread A: Retrieve c.
Thread A: Retrieve c.
                                                                         Thread A: Increment retrieved value; result is 1.
Thread B: Retrieve c.
                                                                         Thread A: Store result in c; c is now 1.
Thread A: Increment retrieved value; result is 1.
Thread B: Decrement retrieved value; result is -1.
Thread A: Store result in c; c is now 1.                                 Thread B: Retrieve c.
Thread B: Store result in c; c is now -1                                 Thread B: Decrement retrieved value; result is -1.
                                                                         Thread B: Store result in c; c is now -1

                                            "Nebenläufige Systeme" stand 10.4.2019                                      25
Synchronisierung mit Schlossvariablen
Eine Schlossvariable ist eine gemeinsame Variable (mutex), die Thread-
Wechsel für einen bestimmten Bereich (kritischer Abschnitt) verbietet
        mutex.lock()
                 Thread A: Retrieve c.
                 Thread A: Increment retrieved value; result is 1.
                 Thread A: Store result in c; c is now 1.
        mutex.release()

• Wenn Thread A mutex.lock() aufgerufen hat wartet der nächste
  Thread (zB B), bis A mutex wieder frei gibt
• In Java: synchronized methods oder synchronized statements
                                     "Nebenläufige Systeme" stand 10.4.2019   26
Synchronized Methodes
Durch den Modifikator „synchronized“ können Methoden eines Objekts
miteinander synchronisiert werden
• Jedes Objekt enthält genau eine Schlossvariable
• Alle synchronized-Methoden der Klasse nutzen diese gemeinsam
• Fallstudie Counter.java
   • Ist das Leser-Schreiber-Problem gelöst?
   • Wie verhält sich die Laufzeit?
• Das funktioniert auch bei statischen Methoden (hier wird die
  Schlossvariable im Class-Objekt der Klasse gehalten

                              "Nebenläufige Systeme" stand 10.4.2019   27
Synchronized Statements
Synchronized Methodes sind nicht immer geeignet
• Es findet zu viel unnötige Synchronisierung statt, die das System
  verlangsamt
• Eigentlich müssen oft nicht alle Methoden miteinander synchronisiert
  werden, so dass man mehrere Schlossvariablen bräuchte (für jede
  separate Funktionalität eine)
Synchronized statements erlauben die explizite Definition des
synchronisierenden Objekts für Sequenzen von Statements
          Object lock_1 = new Object();
Bsp:      public void addName(String name) {
               synchronized(lock_1) { lastName = name; }
               nameList.add(name);
         }                    "Nebenläufige Systeme" stand 10.4.2019   28
Beispiel Synchronized Statements
Übung in Kleingruppen Realisieren Sie einen Counter mit 2
Zählvariablen, die jeweils in 2 Threads verändert werden und messen
Sie die Performanz
1. Synchronisieren Sie alle Methoden
2. Synchronisieren Sie die kritischen Abschnitte über das Counter-
    Objekt
3. Erstellen Sie zwei Objekte und synchronisieren jeweils zwei kritische
    Abschnitte, so dass sie für jeden einzelnen Counter eine eigene
    Schlossvariable einsetzen

                           "Nebenläufige Systeme" stand 10.4.2019      29
Agenda
• Leser-Schreiber Probleme
• Ansatz 1: Unveränderbare Objekte
• Ansatz 2: Synchronisierung
   • Schlossvariablen (Keyword „synchronized“)
   • Semaphore (Klasse java.util.concurrent.Semaphore)
   • Probleme: Deadlock, Livelock, Aushungern
• Best Practices

                             "Nebenläufige Systeme" stand 10.4.2019   30
Semaphore
Semaphore erlauben den gleichzeitigen Zugriff mehrerer Objekte bis zu
einer definiert Maximalzahl auf einen kritischen Abschnitt
• Schlossvariablen sind Semaphore mit dem Wert 1
• In Java als Klasse java.util.concurrent.Semaphore realisiert (vgl. Java
  API)
• Es bietet sich ein Ansatzpunkt für komplexere Synchronisierungen wie
   • Threads benötigen unterschiedlich viele „permits“
   • Fairness-Regeln bei der Vergabe des nächsten freien permit
   •…

                              "Nebenläufige Systeme" stand 10.4.2019    31
Wiederholung
• Wie werden in Java nebenläufige Threads gestartet?
• Wie kann man in Java einen Thread anhalten und warten lassen?
• Wie kann man einen Thread auf einen anderen warten lassen?

• Was sind immutable objects, warum sind sie beim Multithreading
  interessant?
• Was ist das Leser-Schreiber-Problem, wann kann es auftreten?
• Wie kann man es verhindern?

                         "Nebenläufige Systeme" stand 10.4.2019    32
Agenda
• Leser-Schreiber Probleme
• Ansatz 1: Unveränderbare Objekte
• Ansatz 2: Synchronisierung
   • Schlossvariablen (Keyword „synchronized“)
   • Semaphore (Klasse java.util.concurrent.Semaphore)
   • Probleme: Deadlock, Livelock, Aushungern
• Best Practices

                             "Nebenläufige Systeme" stand 10.4.2019   33
Probleme die durch Synchronisierung bzw.
Nebenläufigkeit entstehen
• Deadlock: z.B. A wartet auf B und B wartet auf A, oder mit mehr
  Beteiligten im Zyklus (Bsp: speisende Philosophen)
    Threads blockieren sich gegenseitig
• Livelock: z.B. A reagiert auf B und B reagiert auf die Reaktion von A
  und B reagiert auf die Reaktion von A …
    Threads sind nicht blockiert, aber zu beschäftigt um ihre Aufgaben wirklich
   abzuschließen
• Aushungern (Starvation): z.B. A muss immer warten, weil andere
  Threads aus der Warteschlange an der Semaphore/Schlossvariable
  immer Vorrang bekommen
   Threads kommen nie dazu ihre Arbeit zu machen
                              "Nebenläufige Systeme" stand 10.4.2019               34
Probleme die durch Synchronisierung
entstehen
                  Übung in drei Kleingruppen (15 min)
Konstruieren Sie ein Beispiel in Java in dem ein
deadlock/livelock/starvation so auftritt, dass man das an der
Konsolenausgabe erkennen kann.

Präsentieren Sie das Beispiel im Plenum und…
• erklären Sie, welcher Thread dabei seine Arbeit nicht machen kann.
• erklären Sie, wie man das Problem lösen könnte

                           "Nebenläufige Systeme" stand 10.4.2019      35
Probleme die durch Synchronisierung
entstehen
                        Diskussion im Plenum
Welche der folgenden Probleme können bei der Steuerung eines
mobilen Roboters auftreten und müssen in der Software adressiert
werden (wir gehen davon aus, dass Sensoren und Aktoren nebenläufig
gesteuert werden)
• Leser-Schreiber Problem
• Aushungern
• Verklemmungen
• Livelocks
                         "Nebenläufige Systeme" stand 10.4.2019      36
Agenda
• Leser-Schreiber Probleme
• Ansatz 1: Unveränderbare Objekte
• Ansatz 2: Synchronisierung
   • Schlossvariablen (Keyword „synchronized“)
   • Semaphore (Klasse java.util.concurrent.Semaphore)
   • Probleme: Deadlock, Livelock, Aushungern
• Best Practices

                             "Nebenläufige Systeme" stand 10.4.2019   37
Zusammenfassung,
Best Practices in der nebenläufigen Programmierung
1. Benutzen Sie, wenn möglich, immer immutable objects
2. Synchronisieren Sie alle Variablen, die von nebenläufigen Threads
   verändert werden könnten (auch wenn sie glauben, dass es keine
   Probleme geben kann)
3. Synchronisieren Sie möglichst wenig, also nur das Schreiben von
   Variablen, die laut Regel 2 synchronisiert werden müssen. Halten
   Sie die kritischen Abschnitte möglichst klein.
4. Überlegen Sie genau, ob es zu deadlocks, livelocks oder starvation
   kommen kann und verhindern Sie das durch geeignete
   Abhängigkeiten und Scheduling der wartenden Threads.
                          "Nebenläufige Systeme" stand 10.4.2019        38
Wiederholung
1. Warum muss die Steuerung eingebetteter Systeme oft nebenläufig
   realisiert werden?
2. Welches Problem kann bei nebenläufigem Zugriff auf Variablen
   auftreten?
3. Wie kann man dieses Problem als Programmierer vermeiden?

 Ausblick: Klassische Synchronisationsprobleme (deadlock, livelock,
starvation) im WS

                          "Nebenläufige Systeme" stand 10.4.2019       39
Nebenläufige Systeme
1.   Eingebettete Systeme, Architektur und Signalverarbeitung
2.   Wdh: Nebenläufige Programmierung und Synchronisierung in Java
3.   Fehlertolerante Erfassung von Sensorwerten
4.   Modellierung von Agenten mit Zustandsautomaten (=statecharts)

                          "Nebenläufige Systeme" stand 10.4.2019     40
Agenda
• Begriffsklärung und Anforderungsspezifikation
• Methoden zur Fehlertoleranz
• Best Practices

                          "Nebenläufige Systeme" stand 10.4.2019   41
Zuverlässigkeit eingebetteter Systeme
Diskussion im Plenum: Was ist Softwarezuverlässigkeit?

                          "Nebenläufige Systeme" stand 10.4.2019   42
Definition Softwarezuverlässigkeit
• Lt. ISO 25010 ist Softwarezuverlässigkeit ein Qualitätsmerkmal eines
  Softwareprodukts
• SW-Zuverlässigkeit := die Fähigkeit von SW, ihre Funktion und Leistung über
  einen festgelegten Zeitraum unter definierten Bedingungen aufrecht zu
  erhalten
• Dazu gehört (Zitat):
   • Fehlertoleranz: Fähigkeit, ein spezifiziertes Leistungsniveau bei Software-Fehlern
     oder Nicht-Einhaltung ihrer spezifizierten Schnittstelle zu bewahren.
   • Konformität: Grad, in dem die Software Normen oder Vereinbarungen zur
     Zuverlässigkeit erfüllt.
   • Reife: Geringe Versagenshäufigkeit durch Fehlerzustände.
   • Wiederherstellbarkeit: Fähigkeit, bei einem Versagen das Leistungsniveau
     wiederherzustellen und die direkt betroffenen Daten wiederzugewinnen. Zu
     berücksichtigen sind die dafür benötigte Zeit und der benötigte Aufwand.

                                 "Nebenläufige Systeme" stand 10.4.2019                   43
Verallgemeinerung: Zuverlässigkeit
eingebetteter Systeme
• Def: Die Zuverlässigkeit eines technischen Systems ist eine
  Eigenschaft, die angibt, wie verlässlich eine dem System zugewiesene
  Funktion in einem Zeitintervall erfüllt wird.
• In Eingebetteten Systemen ist die Zuverlässigkeit eine Produkt aus der
  Zuverlässigkeit der Software und der Zuverlässigkeit der Hardware

                           "Nebenläufige Systeme" stand 10.4.2019      44
Kurzreferat Zuverlässigkeit
Fallstudie in Kleingruppen
Wie sichert das Bundesamt für kerntechnische Entsorgungssicherheit die
Zuverlässigkeit von Kernkraftwerken?
Lesen Sie:
https://www.bfe.bund.de/DE/kt/sicherheit/gremien/normen/normen_node.
html

Dann erstellen Sie einen Kurzvortrag ( ~2 Folien, ~3 Minuten) zu
- DKE Gremium K132: DIN EN 62628 (Über Bibo erhältlich)
- VDI Fachausschuss 510: Richtlinie 4011 (im Internet erhältlich)

                             "Nebenläufige Systeme" stand 10.4.2019   45
Und was bedeutet das für uns?
• Die Zuverlässigkeit der Hardware können wir mit Lego nicht beeinflussen.
   •    Messfehler der Sensoren
   •    Ungenaue Mechanik bei Lenkung
   •    Ungenaue Realisierung von Steuersignalen der Aktoren (zB Motoren)
   •    ..
• Wir erhöhen deswegen die Zuverlässigkeit des Systems durch
  Fehlertoleranz der Software gegen Fehler/Ungenauigkeiten der Hardware
   1.    Fehlerquellen identifizieren
   2.    Fehlerwahrscheinlichkeit ermitteln
   3.    Auswirkungen von Fehlern ermitteln
   4.    Geeignete Fehlertoleranz implementieren

                                  "Nebenläufige Systeme" stand 10.4.2019     46
Agenda
• Begriffsklärung und Anforderungsspezifikation
• Methoden zur Fehlertoleranz
• Best Practices

                          "Nebenläufige Systeme" stand 10.4.2019   47
Aufgaben Fehlertoleranz
1.   Fehlerquellen identifizieren
2.   Fehlerwahrscheinlichkeit und -größe ermitteln
3.   Auswirkungen von Fehlern ermitteln
4.   Geeignete Fehlertoleranz implementieren

                            "Nebenläufige Systeme" stand 10.4.2019   48
Wiederholung
• Was versteht man unter Softwarezuverlässigkeit?
• Was unter Zuverlässigkeit technischer Systeme?
• Was sollte man ermitteln, bevor man Fehlertoleranz implementiert?

                          "Nebenläufige Systeme" stand 10.4.2019      49
Fehler der Legobauteile
             Miniprojekt in Kleingruppen (Jetzt Präsentationen)
• Messen Sie die Fehlerwahrscheinlichkeit und -größe folgender Bauteile
   • Ultraschallsensor
   • Motor
   • Farbsensor
• In einem Test sprechen Sie das Bauteil an und vergleichen seine
  Messung/Aktion mit der Realitiät/Ansteuerung durch SW
• Führen Sie ausreichend viele Tests durch und erstellen Sie Messreihen zur
  Eingabe zB in Excel
• Testen Sie unter verschiedenen, möglichst realistischen Bedingungen
• Interpretieren Sie Ihre Ergebnisse hinsichtlich des Einsatzes „Ihres“ Bauteils
  in einem autonomen Fahrzeug

                              "Nebenläufige Systeme" stand 10.4.2019           50
Implementierung von Fehlertoleranz
Implementierung von Fehlertoleranz ist notwendig,
  • wenn Fehler negative Auswirkungen auf die geforderte
    Zuverlässigkeit haben
  • wenn das Fehlerrisiko (Wahrscheinlichkeit * Kosten) den Aufwand
    der Implementierung rechtfertigt

An welchen Stellen ist also bei unseren mobilen Robotern
Fehlertoleranz empfehlenswert?

                         "Nebenläufige Systeme" stand 10.4.2019       51
Implementierung von Fehlertoleranz
Methoden der Implementierung nach DIN EN 62628
• Fehler „eindämmen oder einsperren“
• Fehlererkennung
• Erholung nach einem Fehler
• Entwurfsdiversität

                       "Nebenläufige Systeme" stand 10.4.2019   52
Implementierung von Fehlertoleranz:
  1. Fehler „eindämmen und einsperren“
„Die Software wird dergestalt geschrieben, dass beim Auftauchen eines
Fehlers dieser keine anderen Abschnitte der Software über die lokale
Domäne hinaus, in der er eingetreten ist, kontaminieren kann.“ [DIN]

                        Diskussion im Plenum
Welche Mechanismen des Software-Entwurfs können hier verwendet
werden?

Wie sieht das bei der Steuerung unserer mobilen Roboter aus?
• Fehler der Sensoren
• Fehler der Aktoren

                              "Nebenläufige Systeme" stand 10.4.2019    53
Implementierung von Fehlertoleranz:
 1. Fehler „eindämmen und einsperren“
• Strenge Kapselung zB mit Interfaces
• Interface-Methoden fangen alle Exceptions (auch unchecked) aus
  ihrer Komponente (Impl. zB mit Adapter pattern)
• Überprüfung der Parameter und Vorbedingungen in Interface-
  Methoden
• Synchronisierung
•…

                           "Nebenläufige Systeme" stand 10.4.2019   54
Implementierung von Fehlertoleranz:
 2. Fehlererkennung
„Die Software wird dergestalt geschrieben, dass sie selbst auf das
Vorhandensein von Fehlern prüft und bei deren Eintreten darauf
reagiert.“ [DIN]

                       Diskussion im Plenum
Wie kann man im Betrieb auf Fehler (oder vermutliche Fehler) prüfen?

Welche Prüfungen können wir für die Sensoren in unseren mobilen
Robotern realisieren?
                             "Nebenläufige Systeme" stand 10.4.2019    55
Implementierung von Fehlertoleranz:
 2. Fehlererkennung
• Einsatz von Analysewerkzeugen
• Plausibilitätsprüfungen mit temporaler Diversität (Messwerte mit
  vorherigen Werten abgleichen, redundante Messungen dazu
  durchführen)
• Plausibilitätsprüfung mit Datendiversität (Werte runden, redundanter
  Einsatz unterschiedlicher Datentypen)
•…

                            "Nebenläufige Systeme" stand 10.4.2019       56
Implementierung von Fehlertoleranz:
 3. Erholung nach einem Fehler
„Die Software wird dergestalt geschrieben, dass sie nach dem Erkennen
eines Fehlers selbst ausreichende Maßnahmen einleitet, die es der
Software erlaubt, weiterhin erfolgreich zu funktionieren.“ [DIN]

                     Diskussion im Plenum
Welche Mechanismen sollte man implementieren?

Was könnten bei unseren mobilen Robotern „ausreichende
Maßnahmen“ nach Messfehlern sein?
                           "Nebenläufige Systeme" stand 10.4.2019       57
Implementierung von Fehlertoleranz:
 3. Erholung nach einem Fehler
• Geeignete Exception-Handler, die für den Betrieb und nicht so sehr
  für den Programmierer relevant sind
• Rückfalllösungen für Messwerte (zB Werte aus vorherigen
  Messungen, Default-Werte)
• Rückfalllösungen für Aktionen (zB möglichst sichere Aktion
  durchführen, wenn Sensordaten fehlen)
•…

                            "Nebenläufige Systeme" stand 10.4.2019     58
Implementierung von Fehlertoleranz:
 4. Entwurfsdiversität
„ Software und ihre Daten werden so geschaffen und gestaltet, dass es
nötigenfalls Rückfalllösungen gibt.“ [DIN]

                     Diskussion im Plenum
Welche Mechanismen sollte man implementieren?

Was könnten bei unseren mobilen Robotern „ausreichende
Maßnahmen“ nach Messfehlern sein?

                            "Nebenläufige Systeme" stand 10.4.2019      59
Implementierung von Fehlertoleranz:
 4. Entwurfsdiversität
• Mehrere Verfahren nebenläufig ausführen (Master-Slave-Pattern
  [POSA1])
• Voting von Slaves oder gänzlich getrennten Systemen

                           "Nebenläufige Systeme" stand 10.4.2019   60
Master-Slave Pattern [POSA1]

                                                                    Quelle:[cs.sjsu.edu]
                           "Nebenläufige Systeme" stand 10.4.2019                          61
Agenda
• Begriffsklärung und Anforderungsspezifikation
• Methoden zur Fehlertoleranz
• Best Practices

                          "Nebenläufige Systeme" stand 10.4.2019   62
Best Practices
      Hardware und Software funktionieren nicht immer so wie sie
                              spezifiziert ist!
• Untersuchen Sie die Zuverlässigkeit der Komponenten.
• Identifizieren Sie Fehlerquellen und beseitigen sie, wenn möglich.
• Bei bleibenden Fehlerquellen beurteilen Sie Fehlerwahrscheinlichkeit,
  Risiko und Aufwand zur Implementierung von Fehlertoleranz
• Implementieren Sie ggf. Fehlertoleranz durch
   •   Kapselung
   •   Prüfung von Werten (Plausibilität oder Analysewerkzeuge)
   •   Wirkungsvolle Fehlerbehandlung (Exception-Handler)
   •   Diversität in Zeit, Daten, Verfahren
                                "Nebenläufige Systeme" stand 10.4.2019   63
Nebenläufige Systeme
1. Eingebettete Systeme, Architektur und Signalverarbeitung
2. Wdh: Nebenläufige Programmierung und Synchronisierung in Java
3. Nebenläufige, synchronisierte und fehlertolerante Erfassung von
   Sensorwerten
4. Modellierung von Agenten mit Zustandsautomaten (=statecharts)

                         "Nebenläufige Systeme" stand 10.4.2019      64
Wir sehen uns im WS wieder
Projekt: autonomes Fahrzeug
• Fehlertolerante, nebenläufige Erfassung und Verarbeitung von
  Sensorwerten

Weitere Themen:
• Testen nach ISTQB, Anwendung auf Embedded Systems
• Probleme durch Synchronisierung und deren Lösung
• Modellierung mit Zustandsdiagrammen
• Automatisierung von Build- und Deploymentprozessen

                          "Nebenläufige Systeme" stand 10.4.2019   65
Sie können auch lesen