Alexander Steinhöfer Christian Grafe Kontrollflussorientierte Testverfahren Gliederung Was sind Kontrollflussorientierten Testverfahren? 2. Einsatzzweck 3. Arten von Verfahren / Beispiele 4.

Download Report

Transcript Alexander Steinhöfer Christian Grafe Kontrollflussorientierte Testverfahren Gliederung Was sind Kontrollflussorientierten Testverfahren? 2. Einsatzzweck 3. Arten von Verfahren / Beispiele 4.

Alexander Steinhöfer
Christian Grafe
Kontrollflussorientierte
Testverfahren
Gliederung
Was sind Kontrollflussorientierten
Testverfahren?
2. Einsatzzweck
3. Arten von Verfahren / Beispiele
4. Fazit / Abschluß
1.
Definition
Gehören zur Gruppe der Strukturorientierten
Testverfahren
 Geben Keine Regel zur Erzeugung von
Testfällen an
 Betrachten die Struktur und Implementierung
der Anweisungen des Quellcodes

Einsatzzweck
Bei sog. White-Box-Tests handelt es sich um verschiedene Methoden
von Software-Tests, bei der die Tests mit Kenntnissen über die
innere Funktionsweise des zu testenden Systems entwickelt
werden.
Im Gegensatz zum Black-Box-Test ist für diesen Test also ein Blick in
den Quellcode gestattet, d.h. es wird direkt am Code geprüft wo
mögliche Fehler liegen.
Bei allen gleich vorgestellten Testarten wird der Quellcode benötigt und
zu überprüfen ob die Spezifikation eingehalten wurde.
Arten von Testverfahren
Generell unterscheidet man zwischen vier
Testverfahren, welche allerdings noch verfeinert
werden.
1.
2.
3.
4.
Anweisungsüberdeckungstest (C0)
Zweigüberdeckungstest (C1)
Pfadüberdeckungstest (C2)
Bedingungsüberdeckungstest (C3)
Anweisungsüberdeckungstest (C0 Test)
Statement Coverage
 Ziel
 Mindestens einmalige Ausführung aller
Anweisungen (Knoten) des zu testenden
Programms
 Sicherstellung das kein „toter Code“ existiert.
 Metrik
Beispiel C0
/*z wird das doppelte des größeren Werts von
x oder y zugewiesen */
z = x;
if(y > x) {
z = y;
}
z *= 2;
Testfall: y = 2, x = 0
Ergebnis: z = 4, Anweisungsüberdeckung: 100%
Anweisungsüberdeckungstest (C0 Test)
Statement Coverage

Schwächen des C0-Verfahrens:
 Nur 18% Fehlererkennungsrate
 es müssen nicht alle Wege, die zu einer Anweisung
führen überprüft werden: einer genügt
 unzureichend für den Test von Schleifen

Bewertung
 Notwendiges, aber nicht hinreichendes Testkriterium.
 Nicht ausführbarer Code kann gefunden werden.
 Als eigenständiges Testverfahren nicht geeignet, ist
aber Bestandteil anderer Testverfahren, z.B. der
Zweigüberdeckung.
Zweigüberdeckungstest (C1-Test)
Branch Coverage bzw. Decision Coverage

Ziel:
 Ausführung aller Zweige (Kanten) des zu testenden
Programms

Eigenschaften
 Durch eine 100 prozentige Zweigüberdeckung
wird sichergestellt, daß im Prüfling keine
Zweige existieren, die niemals ausgeführt
wurden.
 Die Anweisungsüberdeckung ist in der
Zweigüberdeckung vollständig enthalten
Zweigüberdeckungstest (C1-Test)
Branch Coverage bzw. Decision Coverage
 Metrik
Beispiel C1
/*z wird das doppelte des größeren Werts von
x oder y zugewiesen */
z = x;
if(y > x) {
z = y;
}
z *= 2;
Testfall1: y = 2, x = 0
Testfall2: y = 0, x= 2
Ergebnis 1+2: z = 4, Zweigüberdeckung: 100%
Zweigüberdeckungstest (C1-Test)
Branch Coverage bzw. Decision Coverage
 Leistungsfähigkeit
des C1-Tests
 Die Fehleridentifikationsquote ist mit 34% um
16% besser als ein Anweisungsüberdeckungstest
 Es werden 79% der Kontrollflußfehler und 20%
der Berechnungsfehler gefunden
Zweigüberdeckungstest (C1-Test)
Branch Coverage bzw. Decision Coverage
 Schwächen
des C1-Tests
 Weder die Kombination von Zweigen noch
komplexe Bedingungen werden berücksichtigt
 Schleifen werden nicht ausreichend getestet, da
ein einzelner Durchlauf durch den
Schleifenkörper für die Zweigüberdeckung
hinreichend ist
 Fehlende Zweige können nicht direkt entdeckt
werden.
Problemroutine für C0 + C1 Test
Statement & Branch Coverage
if (a < b) {
x = b;
z = 1;
}
else {
x = a;
z = 0;
}
if (a + b < 10) {
y = x + b/z;
}
else {
y = x + a;
}
Beispiel einer fehlerhaften Routine
C0- Überdeckung bei
Testfällen
T1: (a < b und a + b < 10)
und
T2: (a >= b und a + b >= 10 )
Fehler im Pfad
0; 1; 2; 4; 6
wird dabei nicht
entdeckt
Pfadüberdeckungstest - Übersicht
Vollständig - C2a
 Alle möglichen Pfade werden durchlaufen
 unmöglich bei Schleifen
Boundary-Interior - C2b
 wie C2a, Schleifen werden jedoch nach speziellen Regeln
durchlaufen
 aufwändig
Strukturiert - C2c
 wie C2b, Schleifen werden jedoch genau n-mal durchlaufen
 aufwändig
Pfadüberdeckungstest C2a

Beim vollständige Pfadüberdeckungstest werden alle möglichen Pfade
durch den Kontrollflussgraphen mindestens einmal ausgeführt.

Anzahl der Pfade steigt mit der Länge des Graphen exponentiell an.

Nicht anwendbar auf Programme, die bei Laufzeit die Schleifendurchläufe
ermitteln, da die Test da die Testlaufzeit dann unendlich lang wird.

Somit wäre dieser Test sehr gut geeignet möglichst viele Fehler zu finden!
Aber in Praxis nicht umsetzbar!
Formel Pfadüberdeckungstest C2a
Die Formel zur Ermittlung des vollständigen Pfadüberdeckung lautet:
Pfadüberdeckungstest C2b
Der Boundary-Interior Pfadüberdeckungstest versucht die Nachteile von C2a
mit Schleifen zu vermeiden.
Hierfür werden Testfälle erstellt, die alle Pfade abdecken, welche aber die
Schleifen nicht betreten.
Im Anschluss werden die Pfade betrachtet, welche die Schleife genau einmal
ausführen. Für diese Fälle werden alle möglichen Pfade innerhalb der
Schleife durchgetestet (Boundary Test).
Als Letztes werden die Pfade, welche die Schleife mehr als einmal durchlaufen
getestet, indem sie zwei mal durchlaufen werden. Alle weiteren Durchläufe
werden ignoriert (Interior Test)
Formel Pfadüberdeckungstest C2b
Die Formel zur Ermittlung der Überdeckung lautet:
Pfadüberdeckungstest C2c
Beim Strukturierten Pfadüberdeckungstest handelt es sich um eine
allgemeinere Form des C2a Tests.
Hier wird bei den Pfaden, welche die Schleife mehr als einmal durchlaufen
nicht schon nach dem zweiten Durchlauf abgebrochen, sondern nach dem
k-ten Durchlauf, wobei k die Anzahl der Schleifeniterationen ist.
je größer k gewählt wird um so größer wird der Aufwand!
Pfadüberdeckungstest
Wiederholung
Vollständig - C2a
 Alle möglichen Pfade werden durchlaufen
 unmöglich bei Schleifen
Boundary-Interior - C2b
 wie C2a, Schleifen werden jedoch nach speziellen Regeln
durchlaufen
 aufwändig
Strukturiert - C2c
 wie C2b, Schleifen werden jedoch genau n-mal durchlaufen
 aufwändig
Bedingungsüberdeckungstest - Übersicht
Einfachbedingung - C3a
 jede atomare Bedingung wird einmal mit true und false getestet
Mehrfachbedingung - C3b
 jede true/false Kombination der atomaren Bedingungen wird
getestet
Minimale Mehrfachbedinung - C3c
 jede atomare Bedingung und die Gesamtbedingung wird auf beide
Bedingungen getestet
Bedingungsüberdeckungstest C3a

Einfachster aller C3 – Test
Er testet True / False Bedingungen auch bei Verzweigungen.
Vorteil: Man bekommt auch Fehler die im Zusammenhang entstehen aus
mehreren atomaren Bedingungen.


Jede atomare (a, b) Bedingung der Gesamtbedingung wird mindestens
einmal mit dem Wert true und false belegt.

Dadurch ist jedoch nicht sichergestellt, dass die Gesamtbedingung auch
einmal true und false wird ( a && b )
Deswegen ist der C3a ein sehr schlechter Test der nicht einmal den C0-Test
enthält.
Bedingungsüberdeckungstest C3a

Beispiel für die Anfälligkeit!
if (a && b)
{
cout << „FALL 1“;
}
else
{
cout << „FALL 2“;
}
Da a und b jeweils 1 mal auf true und false gesetzt werden, kann es sein das
Fall 2 nicht getroffen wird!
Bedingungsüberdeckungstest C3b

Beim Mehrfachbedingungsüberdeckungstest wird jede atomare Bedingung
nicht nur einmal auf alle möglichen Kombinationen getestet. Sondern alle
möglichen Kombinationen

Sehr hoher Aufwand, da expotenzieller Anstieg der Laufzeit!
Anzahl Kombinationen = 2^n wobei n = Anzahl der atomaren Bedingungen

In der Praxis oft nicht möglich wegen Laufzeit und Aufwand.
Bedingungsüberdeckungstest C3b

Beispiel für Unterschied
if (a && b)
{
cout << „FALL 1“;
} else {
cout << „FALL 2“;
}
Bei C3a gibt es 2 Gesamtfälle – hier gibt es 4
Bedingungsüberdeckungstest C3c

Der Minimale Mehrfachbedingungsüberdeckungstest ist ein Kompromiss
zwischen C3a (findet zu wenig) und C3b (dauert zu lang)

Auch der Minimale Mehrfachbedingungsüberdeckungstest enthält
ausserdem den C0-, C1- und Einfachbedingungsüberdeckungstest
vollständig.

Um dies zu erreichen wird zunächst wie beim C3a Test jede atomare
Bedingung true und false, anschließend allerdings auch noch die
Gesamtbedingung in beide Fälle gesetzt.
Bedingungsüberdeckungstest C3c

Vorteile des Kompromisses anhand Beispiel
if(a == 0 XOR b == 0)
{
cout << “Fall 1”;
} else {
Cout << „Fall 2“;
}
Bei C3a gibt es 2 Gesamtfälle
Bei C3b gibt es 4 Gesamtfälle
Bei C3c gibt es 3 Gesamtfälle in akzeptabler Durchschnittszeit
Fehlererkennungsraten
Fazit

Die Qualität eines Tests hängt entscheidend vom gewählten Test
ab: Wurde nur nach C0 mit Überdeckungsgrad 100% getestet so ist
dies trotzdem kein verlässlicher Indikator für eine fehlerfreie
Software.

Wurde hingegen mit C2a auf 100% getestet würde dies ein gutes
Kriterium für eine fehlerfreie bzw. -arme Software darstellen. Leider
ist dieser Test in der Praxis kaum durchzuführen.

Die zweite wichtige Größe ist natürlich der Überdeckungsgrad.
Dieser ist aber nur bei Verwendung des gleichen Tests
untereinander vergleichbar.

Bei einem hohen Überdeckungsgrad werden mehr Fehler gefunden
als bei einem niedrigen.
Danke für die
Aufmerksamkeit