Kontrollflussorientierter Test

aus www.iwiki.de, der freien Wissensdatenbank

Der kontrollflussorientierte Test bezieht sich auf logische Ausdrücke innerhalb der Implementierung des Testobjektes. Zu den kontrollflussorientierten Testmethoden gehören die Überdeckungstests, die sich in ihren Testzielen, und somit auch in ihrer Komplexität, unterscheiden.

Übersicht der Überdeckungstests
vergrößern
Übersicht der Überdeckungstests

Um dies zu veranschaulichen wird für die unterschiedlichen Tests jeweils das folgende Programmbeispiel herangezogen.

Programmbeispiel
vergrößern
Programmbeispiel
Darstellung des Programmbeispiels als Kontrollflussgraph
vergrößern
Darstellung des Programmbeispiels als Kontrollflussgraph

Inhaltsverzeichnis

Anweisungsüberdeckungstest (C0-Test)

Der C0-Test stellt die geringste Form der Überdeckungstests dar. Für den C0-Test werden Testfälle hergeleitet die sicherstellen, dass jede Anweisung des Programms mindestens einmal durchlaufen wird. C0 := (Anzahl der durch Testfälle ausgeführten Anweisungen *100) / Anzahl aller Anweisungen 100% C0-Überdeckung liegt also vor, wenn jede Anweisung mindestens einmal durchlaufen wird. Für eine 100% C0-Überdeckung für das Testprogramm benötigt man einen Testfall, da durch den Testfall

X = 3, Y = 0, Z = 2 

jede Anweisung einmal ausgeführt wird. Leere Anweisungen müssen beim C0-Überdeckungstest nicht durchlaufen werden.

Zweigüberdeckungstest (C1-Test)

Für den C1-Test werden Testfälle hergeleitet die sicherstellen, dass jeder Zweig eines Programms mindestens einmal durchlaufen wird. Ein Zweig ist in diesem Fall eine gerichtete Kante (Verbindung zwischen zwei Knoten mit vorgegebener Richtung) des Kontrollflussgraphen des Programms. C1 := (Anzahl der durch Testfälle ausgeführten Zweige *100) / Anzahl aller Zweige 100% C1-Überdeckung liegt also vor, wenn jeder Zweig mindestens einmal durchlaufen wird. Für eine 100% C1-Überdeckung für das oben stehende Testprogramm benötigt man zwei Testfälle, z.B.

Testfall 1: X = 3, Y = 0, Z = 2
Testfall 2: X = 0, Y = 0, Z = 0

um alle Zweige des Kontrollflussgraphen zu durchlaufen. Beim C1-Überdeckungstest müssen im Unterschied zum C0-Überdeckungstest auch Zweige durchlaufen werden die leere Anweisungen enthalten. Für eine 100 % C1-Überdeckung sind auch Testfälle erforderlich, die eventuell vorhandene WHILE-Schleifen eines Programms nicht ausführen. Liegt eine 100% C1-Überdeckung vor beinhaltet dies auch gleichzeitig eine 100% C0-Überdeckung. Bei White-Box Tests sollte immer mindestens 100% C1-Überdeckung angestrebt werden.

Bedingungsüberdeckungstest

Da die Komplexität von Bedingungen für Schleifen und Verzweigungen bei C0- und C1-Überdeckungstests nicht berücksichtigt wird, werden diese Bedingungen beim Bedingungsüberdeckungstest näher analysiert. Deshalb wird im folgenden zwischen elementaren (einfachen) Bedingungen wie (a > 1) und komplexen (zusammengesetzten) Bedingungen wie (a > 1 AND b > 2) unterschieden.

Einfacher Bedingungsüberdeckungstest

Beim einfachen Bedingungsüberdeckungstest werden Testfälle erzeugt, durch die alle elementaren Bedingungen eines Programms mindestens einmal die Wahrheitswerte TRUE und FALSE annehmen. Um eine 100% Bedingungsüberdeckung zu erhalten muss jede elementare Bedingung mindestens einmal mit den Wahrheitswerten TRUE und FALSE ausgeführt werden. Für das oben stehende Testprogramm sind 2 Testfälle nötig.

Testfall 1: X = 3, Y =  2, Z = 2 
Testfall 2: X = 0, Y = 0, Z = 0 

Die Einfache Bedingungsüberdeckung umfasst nicht die C0-Überdeckung und ist daher problematisch. Hierdurch kann es geschehen dass es trotz 100% einfache Bedingungsüberdeckung noch ungetesteten Code gibt. In unserem Testprogramm beispielsweise wurde die Anweisung (A := A/2) nicht ausgeführt.

Bedingungs- /Entscheidungsüberdeckungstest

Beim Bedingungs- /Entscheidungsüberdeckungstest werden Testfälle hergeleitet, die alle elementaren Bedingungen eines Programms bei der Programmausführung die Wahrheitswerte TRUE und FALSE annehmen lassen, und zusätzlich jeden Zweig des Kontrollflussgraphen mindestens einmal durchlaufen lassen. Der Bedingungs- /Entscheidungsüberdeckungstest beinhaltet also sowohl die einfache Bedingungsüberdeckung, als auch den C1-Überdeckungstest. Für das obige Testprogramm werden 2 Testfälle benötigt.

Testfall 1: X = 3, Y = 0, Z = 3 (alle elementaren Bedingungen TRUE und die linken Zweige)
Testfall 2: X = 0, Y = 1, Z = 0 (alle elementaren Bedingungen FALSE und die rechten Zweige)

minimal mehrfacher Bedingungsüberdeckungstest

Beim minimal mehrfachen Bedingungsüberdeckungstest werden Testfälle entwickelt, so dass bei einer 100% Überdeckung alle einfachen und alle komplexen Bedingungen mindestens einmal mit den Wahrheitswerten TRUE und FALSE durchlaufen werden. Für oben stehendes Testprogramm werden bei 100% minimal mehrfachem Überdeckungstest mindestens 2 Testfälle benötigt.

Testfall 1: X = 3, Y = 0, Z = 4
Testfall 2: X = 0, Y = 3, Z = 0

Die minimal mehrfache Bedingungsüberdeckung umschließt die C0- die C1-Überdeckung und die Bedingungs- /Entscheidungsüberdeckung, und stellt ein sinnvolles Überdeckungsmaß(erklärungsbedürftig?) dar.

Modifizierter Bedingungs- /Entscheidungsüberdeckungstest

Der modifizierte Bedingungs- /Entscheidungsüberdeckungstest verlangt von jeder elementaren Bedingung dass sie unabhängig von den anderen Bedingungen den Wahrheitswert der dazugehörigen komplexen Bedingung beeinflussen kann.

Mehrfacher Bedingungsüberdeckungstest

Beim mehrfachen Bedingungsüberdeckungstest werden Testfälle zusammengestellt, die alle Kombinationen von einfachen Bedingungsausprägungen ausführen Setzt sich eine komplexe Bedingung aus n elementaren Bedingungen zusammen ergeben sich 2n Testfälle. Für eine 100% mehrfache Bedingungsüberdeckung der Bedingung IF a > 1 AND b = 2 THEN x := 1 ELSE x := 3 sind also mindestens vier Testfälle nötig

Testfall 1: a = 5, b = 2
Testfall 2: a = 4, b = 7
Testfall 3: a = 0, b = 0
Testfall 4: a = 0, b = 1

Die Realisierung der mehrfachen Bedingungsüberdeckung ist problematisch, da sich oft nicht alle Bedingungsausprägungen austesten lassen oder bestimmte Bedingungskombinationen nicht konstruieren lassen. Bei der Bedingung (a = 1 OR a = 2) beispielsweise kann die Kombination (TRUE OR TRUE) nicht konstruiert werden. Das selbe gilt für die Kombination (X > 1) = FALSE, (X = 3) = TRUE aus oben stehendem Programmbeispiel.

Modifizierter Boundery Interior Pfadtest

LCSAJ Tests

Pfadüberdeckungstest (C2-Test)

Beim C2-Test werden Testfälle hergeleitet, so dass das Program auf jedem möglichen Pfad durchlaufen wird. Die C2-Überdeckung ist in der Praxis nicht einsetzbar, da die Anzahl an Testfällen schnell unüberschaubar wird, und das Durchführen jedes Testfalls einen Aufwand erfordern würde der (für die meisten Programme) nicht angemessen ist. Bei einer Sequenz aus 10 IF-Anweisungen würden sich bereits 1024 (210) Testfälle ergeben, wobei Schleifen das größere Problem darstellen, da es nicht praktikabel ist alle möglichen Kombinationen für Schleifendurchgänge zu testen.

Boundary Interior Pfadtest

Der Boundary-Interior Test beseitigt das Schleifenproblem des C2-Tests, da das Ausführen der Schleife eingeschränkt wird. Für den Boundary-Interior Test werden Testfälle erzeugt, so dass die Schleifen 0-mal, 1-mal und 2-mal durchlaufen werden. Für ein Programm mit zwei ineinander geschachtelten Schleifen werden so 13 Testfälle benötigt.

Verschachtelte Schleifen
vergrößern
Verschachtelte Schleifen
Testfall 1: äußere Schleife nicht ausführen
Testfall 2 – 4: äußere WHILE-Schleife genau 1-mal
 Testfall 2: innere Schleife 0-mal 
 Testfall 3: innere Schleife 1-mal 
 Testfall 4: innere Schleife 2-mal
Testfall 5 – 13: äußere WHILE-Schleife genau 2-mal

Die Anzahl der Testfälle lässt sich folgendermaßen berechnen:

m = Möglichkeiten innerhalb der Schleife
Anzahl der Testfälle = m0 + m1 + m2

Für das Beispiel also

innere Schleife: mi = 10 + 11 + 12 = 3
äußere Schleife: m_i^0 + m_i^1 + m_i^2  = 3^0 + 3^1 + 3^2 = 13

Strukturierter Pfadtest Beim strukturierten Pfadtest werden Testfälle erzeugt, sodass Schleifen maximal k-mal wiederholt werden. Er stellt also die allgemeine Form des Boundary-Interior Pfadtests dar, bei dem k den Wert 2 hat. Die Anzahl der Testfälle berechnet sich wie folgt:

m = Möglichkeiten innerhalb der Schleife
Anzahl der Testfälle = m0 + m1 + m2 , für k = 2 (= Boundary-Interior Pfadtest)
Anzahl der Testfälle = m0 + m1 + m2 + m3 , für k = 3
usw.