====== VEZS 2019-09-03 ====== **Fach:** Verlässliche Echtzeitsysteme **ECTS:** 7.5 **Prüfer:** Peter Ulbrich **Beisitzer:** Florian Schmaus ---- Was ist ein Fehler? * Die Nichterfüllung von festgelegten Forderungen (Spezifikation vs. Implementierung) Wie kommt es zu Fehlern? * Fehlerkette: * Defekt: auch gutartige mögliche * innerer Fehler: muss nicht zu Fehlverhalten führen * Sichtbares Fehlverhalten Wie kann es dann damit weitergehen? * Fehlerkette über verschiedene Ebenen * Fehlverhalten in einer Ebene kann zu Defekt in der nächsten führen * Erschwert ausfindig machen des Defekts Wie kann man Fehler kategorisieren? * Viele verschiedene Möglichkeiten z.B. nach Art: * permanente Fehler: Sind permanent; können erst durch eine korrigierende Maßnahme behoben werden, systemintern * sporadische Fehler: unregelmäßiges Auftreten, häufig gebündelt, oft Vorboten permanenter Fehler, z.B durch Verschleiß verursacht * transiente Fehler: unregelmäßiges Auftreten, durch äußere Einwirkung ausgelöst, münden aber meistens nicht in einen permanenten Fehler Wie ist das mit transienten Defekten? Wo treten diese auf und kann daraus ein permanenter Fehler werden? * Treten in physikalischer (erster) Ebene auf * Kann in einer anderen Ebene zum permanenten Fehler(Fehlverhalten) werden Wie kann man mögliche Fehler identifizieren? * Fehlerbaumanalyse Fehlerbaumanalyse? * Komponente/Pfade finden die zu Systemversagen führen * Wurzel = Fehlverhalten, ausgehend davon Ursachen identifizieren * Schnitt: atomare Ereignisse, die Schadensereignis verursachen * Minimalschnitt: kritische atomare Ereignisse, die zu Systemversagen führen * Minimalpfade: Gegenteil Schnitt --> atomare Ereignisse, die das Schadensereignis verhindern Wie kann man Fehlertoleranz implementieren? * Strukturelle Redundanz: Komponenten gleichartig auslegen mit Relativtests * Funktionelle Redundanz: Komponenten verschiedenartig auslegen (unterschiedliche Herleitung), mit Akzeptanztests * Informationsredundanz: Einbringen zusätzlicher Informationen * zeitliche Redundanz: Schlupfzeit Was sind die Vor- und Nachteile der verschiedenen Arten von Redundanz? * Strukturell: + Verlässlich, - teuer, - Gleichtaktfehler, -Single Points of Failure * Funktionell: + Gleichtaktfehler durch Diversität vermeiden, - sehr aufwändig, - Anwendungsspezifisch durch Akzeptanztest, -Single Points of Failure * Informations-: + Fehlererkennung, - Berechnungen teuer, - noch keine Fehlertoleranz Wenn wir strukturelle Redundanz haben, wo sind diese Single Points of Failure? * Bei Ein- und Ausgabe * Daher arbeiten mit Akzeptanztests und Akzeptanzmaskierer, sowie Mehrheitsentscheider für Ausgabe Wieso mache ich den Akzeptanzmaskierer am Eingang und filtere nicht erst bei der Ausgabe? * So wird der Replikatdeterminismus zerstört * Z.B. bei Floating Point Zahlen: Wenn ich bei drei Sensoren leicht unterschiedliche Werte reingebe können trotzdem stark unterschiedliche Ergebnisse rauskommen Welcher Bereich ist bei Replikation geschützt? * Nur Berechnung in den Replikaten Wie kann ich jetzt sicherstellen, dass darin das richtige berechnet wird? * Mit abstrakter Interpretation und formaler Verifikation, was aber beides sehr aufwändig ist Warum teste ich nicht einfach alles durch? * Vollständige Testüberdeckung eigentlich nicht möglich wegen der kombinatorischen Explosion Was ist bei abstrakter Semantik anders? * Durch Abstraktion und symbolische Ausführung weniger Komplexität Was ist ein Beispiel einer abstrakten Semantik? * Sammelsemantik und Intervallabstraktion Was sind die Eigenschaften? (mit Skizze) * Vollständig, Korrekt * Präzise * Geringe Komplexität Was macht Astree? * Intervallabstraktion: liefert keine Werte, nur Wertebereich für Variablen * Mit Zusicherungen und Known-Ranges Präzision hinzufügen und arbeiten