Semesterrückblick

Überblick

Klassifizierung von Tests

Kombinatorische Systeme

Testdatengenerierung 1 (Kombinationsüberdeckung): Testdatengenerierung 2 (Übergangsüberdeckung): Testdatengenerierung 3 (Heuristische Auswahl von "relevanten" Testfällen): Implementierung der Heuristischen Auswahl, Verbesserungsvorschlag:

Zustandsbasierte Systeme

W-Methode (m=0)

Motivation (sehr kurze Wdh.): Idee (Wdh.):
  1. Alle Zustände der Spezifikation werden aufgesucht:
    Man braucht Startsequenzen, welche vom Startzustand zu jedem Zustand führen.
  2. Von jedem so aufgesuchten Zustand werden alle ausgehenden Transitionen einmal gefeuert.
  3. Anschließend wird sichergestellt, daß der richtige Folgezustand) eingenommen wurde.
    Weil gemäß obiger Annahme das Folgeverhalten ausschließlich durch die ausgehenden Transitionen definiert wird und sichergestellt ist, daß alle Zustände aufgesucht werden, sind alle möglichen Verhalten somit getestet.
    Insbesondere braucht man keine Pfadüberdeckung.
    Beachte: Wegen der Annahme über die identische Anzahl der Zustände sind somit alle Zustände des Testlings auch abgedeckt, und somit kann der Testling keine weiteren (abweichenden) Verhalten verbergen.
Deswegen erzeugt man:
  1. die "Transitionsüberdeckung"/"transition cover":
    Beinhaltet die Startsequenzen und alle ausgehenden Transitionen
  2. die "Charakterisierungsmenge":
    Beinhaltet alle Sequenzen, die eindeutig zeigen, aus welchem Zustand man sie startet. Somit kann man den richtigen Folgezustand erkennen.

Erzeugung der Baumstruktur für das "transition cover"

Überarbeiteter Algorithmus aus den vergangenen Vorlesungen (nicht ausdrücklich im Tutorium behandelt):

  1. Level 1: Sei Knoten K die Wurzel des Baumes TC mit zugehörigem Zustand Z: Z ist der Startzustand des Zustandsdiagramms.
  2. Level (n+1): Annahme: TC ist bis zum Level n konstruiert.
    Traversiere alle TC-Knoten Ki vom Level n. Ki ist Blatt, wenn Ki schon auf einem Level 0,...,n (als Blatt) auftaucht. Sei Zi der zu Ki gehörige Zustand. Für jede ausgehende Transition tj mit Zielzustand Yj erzeuge einen Kindknoten Kj von Ki. Bezeichne den neuen Verbinder mit dem Input der Transition tj.
Beispiel (ähnlich wie in der Vorlesung):

         1/a              1/a
        /--              /--
        | /              | /
      /---\    0/a     /---\
  --->| P |----------->| Q |
      \---/            \---/
      ^   ^           ^  |
      |    \     1/b /   |
      |  0/a\       /    | 0/b
      |      \ /---\     /
      \--------| R |<----
        2/b    \---/

(ein) resultierender Baum:

                     (P)
                     / \
                  1 /   \ 0
                   /     \
                 (P)     (Q)
                         / \
                      1 /   \ 0
                       /     \
                     (Q)     (R)
                            / | \
                         1 /  |0 \ 2
                          /   |   \
                        (Q)  (P)  (P)

"transition cover"
Das ist die Menge T der Eingabefolgen, die durch alle Pfadpräfixe aus der Baumstruktur (d.h. alle Teilpfade, die bei der Wurzel beginnen) festgelegt sind:
T = {<>, <1>, <0>, <0,1>, <0,0>, <0,0,1>, <0,0,0>, <0,0,2>}

Characterization Set

(sehr kurze) Wdh: Menge W von Eingabesequenzen, die die Zustände charakterisieren, d.h.: Die Reaktionen des Zustandsautomaten unterscheiden sich, wenn man alle diese Sequenzen von jeweils zwei verschiedenen Zuständen ausgehend testet.

Hier: W = {<1,0>}

Resultierende Testsequenzen

Alle Eingabefolgen aus T müssen nun konkateniert mit denen aus W für den Test verwendet werden:
T ◦ W = {<1,0>, <1,1,0>, <0,1,0>, <0,1,1,0>, <0,0,1,0>, <0,0,1,1,0>, >0,0,0,1,0>, <0,0,2,1,0>}

W-Methode (m>0)

Motivation, 2. Teil - Annahmen wie gehabt, aber: Idee (Fortsetzung):
  1. Es reicht nicht mehr, nach dem "transition cover" direkt zu prüfen, ob schon der richtige Zustand eingenommen wurde;
    nun müssen vorher noch bis zu m weitere Zustände besucht werden.
  2. Dieses wird erreicht, indem nun alle möglichen Eingabefolgen mit Länge =< m getestet werden.
  3. Sind nun alle Zustände besucht worden, reicht es schließlich, mittels des "characterization sets" zu prüfen, daß schließlich wieder ein Zustand eingenommen wurde, welcher dem der Spezifikation entspricht.
    (Das darauffolgende Verhalten ist dann wg. der angenommenen Obergrenze von Zuständen im Testling wieder korrekt.)

Auffalten aller möglichen Eingabefolgen mit Länge =< m

Alle Permutationen von Eingaben aus dem Alphabet Σ mit maximaler Länge m werden erzeugt: Σ0∪Σ1∪...∪Σm
Für m=2 also hier: Σ0∪Σ1∪Σ2 = {<>, <0>, <1>, <2>, <0,0>, <0,1>, <0,2>, <1,0>, <1,1>, <1,2>, <2,0>, <2,1>, <2,2>}

Resultierende Testsequenzen

Obige Permutationen werden nun nach jeder Eingabesequenz aus T durchgeführt, um somit sicherzustellen, daß insbesondere die angenommenen zusätzlichen m Zustände aufgesucht werden:
T ◦ Z = T ◦ ( Σ0◦W ∪ Σ1◦W ∪ ... ∪ Σm◦W )

Somit für das Beispiel mit m=2:
T ◦ Z
= T ◦ ( Σ0◦W ∪ Σ1◦W ∪ Σ2◦W )
= T ◦ {<1,0>, <0,1,0>, <1,1,0>, <2,1,0>, <0,0,1,0>, <0,1,1,0>, <0,2,1,0>, <1,0,1,0>, <1,1,1,0>, <1,2,1,0>, <2,0,1,0>, <2,1,1,0>, <2,2,1,0>}

=

{<1,0>, <0,1,0>, <1,1,0>, <2,1,0>, <0,0,1,0>, <0,1,1,0>, <0,2,1,0>, <1,0,1,0>, <1,1,1,0>, <1,2,1,0>, <2,0,1,0>, <2,1,1,0>, <2,2,1,0>}

{<1,1,0>, <1,0,1,0>, <1,1,1,0>, <1,2,1,0>, <1,0,0,1,0>, <1,0,1,1,0>, <1,0,2,1,0>, <1,1,0,1,0>, <1,1,1,1,0>, <1,1,2,1,0>, <1,2,0,1,0>, <1,2,1,1,0>, <1,2,2,1,0>}

{<0,1,0>, <0,0,1,0>, <0,1,1,0>, <0,2,1,0>, <0,0,0,1,0>, <0,0,1,1,0>, <0,0,2,1,0>, <0,1,0,1,0>, <0,1,1,1,0>, <0,1,2,1,0>, <0,2,0,1,0>, <0,2,1,1,0>, <0,2,2,1,0>}

{<0,1,1,0>, <0,1,0,1,0>, <0,1,1,1,0>, <0,1,2,1,0>, <0,1,0,0,1,0>, <0,1,0,1,1,0>, <0,1,0,2,1,0>, <0,1,1,0,1,0>, <0,1,1,1,1,0>, <0,1,1,2,1,0>, <0,1,2,0,1,0>, <0,1,2,1,1,0>, <0,1,2,2,1,0>}

{<0,0,1,0>, <0,0,0,1,0>, <0,0,1,1,0>, <0,0,2,1,0>, <0,0,0,0,1,0>, <0,0,0,1,1,0>, <0,0,0,2,1,0>, <0,0,1,0,1,0>, <0,0,1,1,1,0>, <0,0,1,2,1,0>, <0,0,2,0,1,0>, <0,0,2,1,1,0>, <0,0,2,2,1,0>}

{<0,0,1,1,0>, <0,0,1,0,1,0>, <0,0,1,1,1,0>, <0,0,1,2,1,0>, <0,0,1,0,0,1,0>, <0,0,1,0,1,1,0>, <0,0,1,0,2,1,0>, <0,0,1,1,0,1,0>, <0,0,1,1,1,1,0>, <0,0,1,1,2,1,0>, <0,0,1,2,0,1,0>, <0,0,1,2,1,1,0>, <0,0,1,2,2,1,0>}

{<0,0,0,1,0>, <0,0,0,0,1,0>, <0,0,0,1,1,0>, <0,0,0,2,1,0>, <0,0,0,0,0,1,0>, <0,0,0,0,1,1,0>, <0,0,0,0,2,1,0>, <0,0,0,1,0,1,0>, <0,0,0,1,1,1,0>, <0,0,0,1,2,1,0>, <0,0,0,2,0,1,0>, <0,0,0,2,1,1,0>, <0,0,0,2,2,1,0>}

{<0,0,2,1,0>, <0,0,2,0,1,0>, <0,0,2,1,1,0>, <0,0,2,2,1,0>, <0,0,2,0,0,1,0>, <0,0,2,0,1,1,0>, <0,0,2,0,2,1,0>, <0,0,2,1,0,1,0>, <0,0,2,1,1,1,0>, <0,0,2,1,2,1,0>, <0,0,2,2,0,1,0>, <0,0,2,2,1,1,0>, <0,0,2,2,2,1,0>}


Last modified: July 12, 2004 18:13:31 (GMT+2)
Stefan Bisanz stefan@bisanz-online.de