Nebenläufige Systeme (ehem. Wissensverarbeitung) SS/WS 19/20 für IIOb17 - Georg Ringwelski
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
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