Theme 8 - TU Dresden

Werbung
State Machines
Teil 2
1.
2.
3.
4.
5.
6.
7.
8.
States
State Invarianten
Bereiche und Granularität
Transitions/Übergänge
Alpha/Omega-States
Klassen-Flattening
Unerlaubte Zustände
Die Response-Matrix
StateMachines, Thomas Legler, ProSeminar Softwaretechnologie
States
• ein State ist ein Art
Kurzbeschreibung für erlaubte
Vorgänge in einem Programm
• das State-Modell muss beim
Entwickeln ständig eine exakte
Abfrage des aktuellen Status
erlauben
• im Prinzip wird der Status gebildet
aus dem sämtlichen Inhalt einer
Klasse
Beispiel
o 2 Booleans in einer Klasse  4 Zustände
o 1 int  2^32 Zustände
o 3 int  2^96 Zustände
o bsp: Konto (Betrag, Name, Kontonummer)
o für den Zustand nur Betrag wichtig
o überzogen gesperrt
o Betrag ok  frei
»nur 2 relevante Zustände aus vielen Milliarden
State Invariants
•gültiger Status ausgedrückt durch StatusInvariante
bool state1(){
return ((x==1) &&(y==2));
}
•wird gebildet aus den Werten der Klasse
•die vorher definierten Statie und die Invarianten
müssen alle möglichen Statie abdecken
• Bereiche (Ebene der Abstraktion)
o Umrandet (Statie gebildet aus den Werten der Klasse, nicht
aus beerbten Klassen)
o Rekursiv (alle Ebenen der Klasse werden ausgebreitet, und
aus allen Werten wird dann der Status gebildet)
• Granularität (Vereinigung der Definitionen für einen
Status)
o Aggregate (Status bestehen aus einer willkürlichen Menge
von Werten der Klasse)
o Primitive (Status repräsentiert durch die gesamte Menge von
Werten, repräsentiert durch niederen Datentyp)
• Konkrete und primitive Status-Modelle können sehr
schnell an Komplexität zunehmen (siehe beispiel
States)
Bereiche und Granulatität
•die Bedeutung eines Status hängt von seiner
Sichtbarkeit, seinem Bereich und seiner
Granularität ab
•instance variable domain = Menge der diskreten
Statie repräsentiert durch Instanzvariablen
•combinational value set = Menge aller möglichen
Kombinationen von Instanzariablen
•Sichtbarkeit (Hauptmerkmal eines State-Modells)
oAbstrakt (nur das Interface nach aussen)
oKonkret (implementiert)
• Bereiche (Ebene der Abstraktion)
o Umrandet (Statie gebildet aus den Werten der Klasse, nicht aus
beerbten Klassen)
o Rekursiv (alle Ebenen der Klasse werden ausgebreitet, und aus
allen Werten wird dann der Status gebildet)
• Granularität (Vereinigung der Definitionen für einen
Status)
o Aggregate (Status bestehen aus einer willkürlichen Menge von
Werten der Klasse)
o Primitive (Status repräsentiert durch die gesamte Menge von
Werten, repräsentiert durch niederen Datentyp)
• Konkrete und primitive Status-Modelle können sehr
schnell an Komplexität zunehmen (siehe beispiel States)
Transitions/Übergänge
o Ist eine Kombination eines Ausgangsstatus
und eines Endstatus, einem Ereigniss und
eventuellen Schutzmechanismen
o Eine Transition wird durch ein Ereigniss
ausgelöst und kann mehrere Aktionen
ausführen
o Sie hat immer nur einen Endstatus
o Event
o
o
o
Nachricht an die zu testende Klasse
Die Antwort einer anderen Klasse
Ein Interrupt oder eine ähnliche Unterbrechung
von aussen
o Schutzmechanismen
o
Ein mit dem Ereigniss verknüpfter Ausdruck
o Aktion
–
Ein Nachricht/Antwort an ein anderes Objekt
Alpha/Omega-States
o Alpha
o Objekt vor der Konstruktion
o In dem Zustand werden nur Konstruktoren wie z.B.
new akzeptiert (alpha transition)
o Omega
o Objekt nach der Destruktion, Löschung oder beim
Verlassen des gültigen Bereiches
o Erreicht durch Destruktoren (omega transitions)
o Sie müssen nicht explizit implementiert werden,
aber sollten beim Testen nicht unbeachtet
bleiben
Klassen-Flattening
Merkmale einer gut entwickelten Klassenhierarchie
• Eine Unterklasse hat mehrere Teilstatie eines
Statuses der Superklasse
• Eine Unterklasse kann neue Statie einführen,diese
müssen aber mit den Statie der Oberklasse im
Einklang verlaufen
• Private Statusvariablen der Oberklasse müssen in
der Unterklasse private bleiben
Arten
1. Orthogonal Komposition
2. Aneinanderfügen
3. Status-Aufteilung und Unterstatus
hinzufügen
4. Transitionumleitung
5. Transitionaufteilung
Expansion des Zustandsgraphen
bei Orthogonaler Komposition
• Möglichst das komplette Modell sollte
getestet werden
• In der Realität nur schwer möglich, da oft
Informationen über die Oberklasse fehlen,
das ganze enorm Zeitaufwendig wäre u.s.w
o Es muss ein expilziter Exception-Handler
eingebaut werden, der unerlaubte Zustände
bearbeitet
o Diese illegalen Ereignisse müssen genau
ausgetestet werden
o Z.b. werden illegale Zustände erreicht, wenn
mehrere Instanzen eines Programm’s
nebeneinander laufen und sich ungewollt
gegenseitig beeinflussen
o Beachte Antworten auf illegale Ereignisse und
blockende Guards
Unerlaubte Zustände
• Normalerweise werden viel Zustand/EreignissPaare vernachlässigt  Problem, wenn in einem
Zustand ein nicht geplantes Ereigniss eintritt
• Einfaches Ignorieren kann problematisch werden
• Wenn ein illegales Ereigniss akzeptiert wird, hat
das eine illegale Transition zur Folge. Das
bewirkt dann einen nicht gewollten
Zustandswechsel
• Schleichpfade = Programmbugs, die illegale
Transitions erlauben und Guards umgehen
Herunterladen