Allgemeines
code coverage: gcov
et al. funktionieren
- mit 1 Prozess inkl. Multi-Threading: JA
- mit n Prozessen: ?!?
Implementierung flacher Statecharts
Wie implementiert man jetzt die Statechart-Bilder?
In Anlehnung an die Objektorientierung:
- Klassen finden: Zustand, Transition, etc.
- technisch: codieren in C
-->
- anstelle von Klassen werden Strukturen verwendet
- anstelle von Methoden werden Operationen auf der Datenstruktur
definiert
- Kapselung fehlt
-
Timer
- Annahme: separater, paralleler Timer-Service verwaltet die Timer
- pro Timer T gibt es:
- eine Aktion setT:
bei Aufruf "aus der Spezifikation" wird der Timer
T gestartet
- ein Ereignis elapsedT:
sobald der Timer T abgelaufen ist, tritt das
Ereignis "in der Spezifikation" auf
- die entsprechenden Datenstrukturen sind komplett vorgegeben
z.B. struct sctransition
s. sclib/sctransition.h (auch: sclib/scaction.h)
Anmerkungen:
- Strukturdefinition (aus pragmatischen Gründen) etwas anders als bei
todolib.h:
struct sctransition { ... };
anstatt typedef sctransition struct { ... };
praktischer Unterschied: man muß immer
struct
dazuschreiben
- Zeiger auf Feld vs. Feld von Zeigern:
- Feld von Zeigern auf
int
-Werte:
int *intPointerArray[];
- Zeiger auf ein Feld von
int
-Werten:
int (*pIntArray)[];
- Zeiger auf ein Feld von Zeigern auf
int
-Werte:
int *(*pIntPointerArray)[];
- Verwendung von Funktionszeigern (function pointer):
- Herkömmliche Funktion:
int myfunction (float p1, int p2) { ... }
- Deklaration eines Zeigers auf eine Funktion mit Parameterliste
(float,int)
und Rückgabewert
int
namens "pMyfunction":
int (*pMyfunction)(float,int);
- Zuweisung der Adresse von
myfunction
zu
pMyfunction
:
pMyfunction = &myfunction;
- Aufruf der Funktion, auf die
pMyfunction
zeigt:
int result = (*pMyfunction)(17.3, 99);
Zustandsbasiertes Testen
Idee
- pro paralleler Komponente (d.h. pro Statechart) eine abstrakte Maschine
(Checker)
- Simulation des jeweiligen Statecharts (sclib
verwenden)
- parallel läuft der Testling
- Outputs schreiben beide in separate Kopien
- Inputs (und Parameter) lesen beide parallel
- parallel dafür der Generator
Simulationsablauf
- Aufbau der Datenstruktur (inkl. der Funktionen für die Guards und
Actions)
- Beginn beim Startzustand
- Schleife über die Testlaufzeit ...
- Immer, wenn im derzeitigen Zustand eine Transition möglich ist,
wird diese simuliert.
- Sonst wird gewartet.
- Nach der Simulation einer Transition prüfen, ob der
Testling das gleiche gemacht hat.
- und weiter wie oben
Fragen
- Wie wartet man gescheit darauf, daß eine Transition freigeschaltet
wird?
@rttWaitCondition(...)
- Was ist, wenn mehrere Transitionen gleichzeitig freigeschaltet sind?
- Warum interessiert uns das für das PLS-Beispiel nicht?
Bis hierhin: Simulation liefert das Sollverhalten
Wie wird getestet?
Erwartete Ausgaben aus der Simulation mit den tatsächlichen Ausgaben
des Testlings vergleichen. ... @rttWaitCondition
+
@rttAssert
Hinweise
- die Timer
Tfsb
und Trts
sind in specs/timeservice.rts definiert
Last modified: Juni 28, 2004 17:39:09 (cest)
Stefan Bisanz stefan@bisanz-online.de