Fehlervermeidung & Vertragsmodell Flashcards
Was ist ein Mistake?
Menschliche Fehlhandlung, die zu einem Fehler (Fault) führt
Was ist ein Fault?
Fehler im Quelltext der Software
Was ist ein Failure?
Versagen eines Systems aufgrund
eines oder mehrerer Faults
Was ist ein Error?
Die Realisierung entspricht nicht der Forderung
Was besagt das Vertragsmodell in der Softwareentwicklung?
Vertrag beschreibt:
* welche Vorleistung Klient erbringen muss,
* damit Dienstleister seine Leistung garantiert
Wie wird eine Benutzt-Beziehung hergestellt in Java?
- In Klasse A werden Variablen vom Typ B deklariert.
- In einer Methode der Klasse A werden Methoden an Exemplaren der Klasse B aufgerufen.
Worauf bezieht sich das Vertragsmodell?
- den Aufruf von Methoden,
- die Überprüfung von Aufrufparametern sowie des Zustands des gerufenen Exemplars.
Beschreibe den Vertrag des Vertragsmodells
- bezieht sich immer auf eine Operation einer Klasse.
- wird in der Dienstleister-Klasse festgelegt.
- Vertragsbedingungen werden als Zusicherungen spezifiziert.
Beschreibe die Zusicherungen des Vertragsmodells
- Vorbedingungen
– eingehalten vor der Ausführung der Operation - Nachbedingungen
– erfüllt nach der Ausführung der Operation Zusätzlich - Invarianten
– Bedingungen, die immer gelten sollen, als Klassen- Invarianten
Woraus besteht das Vertragsmodell?
- dem Vertrag und
- den Zusicherungen als boolesche Ausdrücke (Prädikate)
Wie läuft der Mechanismus des Vertragsmodells ab?
Vertrag wird bei Methodenaufruf geprüft:
* Klient muss sicherstellen, dass Vorbedingungen der Operation erfüllt sind.
* Beim Dienstleister muss geprüft werden, ob die Vorbedingung gilt.
* Wenn die Vorbedingung erfüllt ist, führt Dienstleister die Operation aus.
* Dienstleister garantiert durch Nachbedingungen, dass Leistung erbracht.
Was ist eine Klasseninvariante?
ist eine allgemeine Randbedingung des Vertrags, muss bei jedem Methodenaufruf gelten
Wann garantiert der Dienstleister die Nachbedingung?
Wenn der Klient die Vorbedingungen erfüllt
Welche Rechte und Pflichten hat der Klient?
- hat die Pflicht, die Methode nur aufzurufen,
wenn Zustand des Dienstleisters es erlaubt. - hat das Recht, die ordnungsgemäße Erfüllung
des Vertrags
Welche Rechte und Pflichten hat der Dienstleister?
- hat die Pflicht, die versprochene Leistung zu erbringen.
- hat das Recht bei Nichteinhaltung des Vertrags durch Klienten, die Operation nicht auszuführen.
Wann gilt eine Klasse K im Sinne des Vertragsmodells als korrekt?
Was ist die Spezifikation?
Die Anforderungsbeschreibung
Was ist die grundsätzliche Herangehensweise eines defensiven Programmierstils?
- Risiken vermeiden
- Anwesenheit von Fehlern immer erwarten
- Fehlerreaktion auf minimale Auswirkungen richten
- Auswirkungen von Fehlern verringern / vermeiden
Wie schreibt man die Vorbedingung in ein Schnittstellenkommentare mit JavaDoc?
@require
Wie schreibt man die Nachbedingung in ein Schnittstellenkommentare mit JavaDoc?
@ensure
Wie ist die assert Bedingung aufgebaut?
Was ist die statische Analyse?
- Experten analysieren Quelltext – Review
Ü Werkzeuge analysieren Quelltext – Metriken, Strukturanalyse, Korrektheitsbeweise
Was ist eine dynamische Aanalyse?
- Software wird ausgeführt, Verhalten beobachtet – Test
Wie lässt sich der Testaufwand verringern?
- Nur Zweigabfdeckung, nicht Pfadabdeckung
- Nur Abdeckung der Anforderungen
- Nur Abdeckung der Zustäne und Zustandsübergänge
- Abdeckung der Bedingungskombination
- Nur Abdeckung der Äquivalenzklassen
Was ist ein Positiv-Test?
- nur erwartete/gültige Eingabewerte getestet und Ausgabedaten erwartet
– erhöhen Vertrauen in Korrektheit
Was ist ein Negativ-Test?
- unerwartete/ungültige Eingabewerte getestet und Fehlerbehandlung erwartet
- erhöhen Vertrauen in Robustheit
Was ist ein Last-Test?
- fortwährend erhöhte Anzahl / Häufigkeit bis Funktionsausfall
– erhöhen Vertrauen in Performance und Skalierbarkeit
Was ist, wenn sich der Klient nicht an seinen Teil des Vertags hält?
Dann muss der Dienstleister auch nicht handeln
Aus was bestehen Zusicherungen
Vertragsmodell
Aus Vor- und Nachbedingungen
Wer deklariert in Java die Vor- und Nachbedingungen und wie?
Der Dienstleister deklariert seine Vor- und Nachbedingungen gegenu ̈ber dem Klienten, indem er sie im Javadoc- Kommentar einer Methode mit @require und @ensure angibt
Was und wie überprüft der Dienstleister?
Weiterhin überprüft der Dienstleister die Einhaltung der Vorbedingungen im Rumpf der implementierenden Methode mit sogenannten assert-Anweisungen. Die eigenen Nach- bedingungen werden nicht überprüft.