Sie befinden sich hier: Termine » Prüfungsfragen und Altklausuren » Hauptstudiumsprüfungen » Lehrstuhl 4 » Gedächtnisprotokoll VEZS SS18 (7,5 ECTS)   (Übersicht)

Gedächtnisprotokoll VEZS SS18 (7,5 ECTS)

Was ist ein Fehler?

  • Die Nichterfüllung von festgelegten Forderungen, festgelegt in der Spezifikation, nichterfüllt in der Implementierung

Wie kann man diese kategorisieren? Und Beispiele für jede Art? Welche Fehlertypen haben wir kennengelernt?

  • Permanente Fehler: Sind permanent; können erst durch eine korrigierende Maßnahme behoben werden (z.B. RAM, oder SW-Fehler typischerweise auch permanent)
  • Sporadische Fehler: Treten sporadisch verhäuft auf, sind aber oft Vorboten von permanenten Fehlern (z.B. Grafikkarte)
  • Transiente Fehler: Treten unregelmäßig auf und werden durch äußere Einwirkung ausgelöst, münden aber meistens nicht in einen permanenten Fehler

Fehlerkette und Fortpflanzung. Jetzt kann man ja damit erstmal nichts anfangen, wann ist denn ein Fehler auch tatsächlich ein Fehler?

  • Die allgemeine Fehlerkette ist: fault – error – failure
  • Beispielsweise: Ein Bit wird in einer Speicherzelle durch einen Transienten Fehler durch Strahlung gekippt. Diese Speicheradresse wird von einer Funktion ausgelesen und mit dem Wert gerechnet, sobald dieser Wert dann nach außen vermittelt wird (Fehlpositionierung Aktor) ist der Fehler sichtbar

Wie mache ich aus einem Sporadischen Fehler einen Permanenten Fehler? Welchen Zweig vertiefen? Fehlertoleranz oder Softwaredefekte? (Permanente Fehler oder Transiente)

  • Fehlertoleranz

Wie kann man denn Defekte überhaupt erstmal bewerten? Welche Pfade hat mein Fehlerbaum? Was steht wo?

  • Fehlerbaumanalyse
  • Welche Minimalschnitte atomarer Ereignisse führen zu ungewünschtem Systemverhalten (z.B. Ausfall)?
  • Oder: Welche Komponenten muss ich am Leben erhalten, um Fehlverhalten zu vermeiden?

Was kann ich mit diesen Informationen anfangen?

  • Evaluieren, welche Komponenten redundant ausgelegt werden müssen

Also Redundanz?! Kann man diese einteilen? Wenn ja, wie (mit Beispiel)?

  • Strukturell
  • Funktional
  • Information
  • Zeit

Was sind Vor- und Nachteile der jeweiligen Punkte? Wie entscheide ich welchen Teil ich jetzt replikativ auslege (Hardware, Software)? Wie kann ich mein System nun redundant gestalten?

  • Strukturelle Redundanz der Berechnungen (Skizze TMR)
  • Angeben welche Teile nicht redundant

Wie kann ich nun die Single Points of Failure absichern?

  • Codierung (Replikator, Ausgangsvoter, auch möglich: Sensoren und Aktoren)

Wie genau kann das aussehen?

  • CoRed Ansatz

Wie muss der Replikator aussehen?

  • Akzeptanzmaskierer

Wie kann ich den jetzt testen ob meine Replikation überhaupt irgendwas gebracht hat? Wie kann ich nun die Effektivität der Fehlertoleranzmaßnahme testen? Welches Tool haben wir kennengelernt?

  • FAIL*. Fehlerinjektion

Wie geht dieses Tool vor?

  • Künstliche Injektion von Fehlern (da diese sonst so gut wie nie auftreten und somit schwer testbar sind)
  • Systematische Injektion auf emulierter Hardware

Vorteile von FAIL*?

  • Parallelisierung
  • Flexibilität
  • Systematische Eingrenzung der Experimente

Wie geht das Werkzeug bei der Eingrenzung vor?

  • Unwirksame & indempotente Injektion (Skizze anfertigen)

Was bringt mir denn jetzt die Fehlerinjektion im Hinblick auf mein System? Was genau kommt denn aus FAIL* heraus? Wenn ich meine Fehlerinjektion jetzt beendet habe, was kann ich jetzt machen um auf Funktionalität zu testen? Welche Testmethoden gibt es und welche Vor- und Nachteile haben diese?

  • Black-Box-Tests (Testen gegen Spezifikation → kombinatorische Explosion erklären)
  • White-Box-Tests (Implementierung sichtbar → Testfälle müssen bei Änderung der Software immer wieder angepasst werden!)

Was sind Gray-Box-Tests und Vorteile dieser? Wie kann ich die Effektivität meiner Tests messen?

  • Anzahl Testfälle
  • Testüberdeckungskriterien

Welche Testüberdeckungskriterien gibt es und diese kurz bewerten?

  • Anweisungs-
  • Zweig-
  • Pfad-
  • Bedingungsüberdeckung

Was ist das Problem beim Testen?

  • Nur Anwesenheit und nicht Abwesenheit von Fehlern nachweisbar

Also?

  • Statische Analysemethoden

Wie ist die Vorgehensweise der abstrakten Interpretation?

  • Mögliche Pfadanzahl aufgrund Kombinationsmöglichkeiten zu groß
  • Daher Abstraktion
  • Skizze zeichnen und Anforderungen an Abstraktion definieren (Soundness, präzise, geringe Komplexität)

Was ist nun der Vorteil von abstrakter Interpretation?

  • Zustände werden zusammengefasst und nur kritische Zustände werden überprüft
  • Statischer Analysecode wird nicht ausgeführt, sondern nur interpretiert