Notice: Undefined variable: home in /data/www/htdocs/infosun/st/include/config.php3 on line 3 Notice: Undefined variable: phone in /data/www/htdocs/infosun/st/include/config.php3 on line 7 Notice: Undefined variable: email in /data/www/htdocs/infosun/st/include/config.php3 on line 11 Notice: Undefined variable: icon in /data/www/htdocs/infosun/st/include/config.php3 on line 15 Notice: Undefined variable: fax in /data/www/htdocs/infosun/st/include/config.php3 on line 19 Notice: Undefined variable: lang in /data/www/htdocs/infosun/st/include/config.php3 on line 23 Notice: Use of undefined constant HTTP_ACCEPT_LANGUAGE - assumed 'HTTP_ACCEPT_LANGUAGE' in /data/www/htdocs/infosun/st/include/config.php3 on line 24 Notice: Use of undefined constant HTTP_ACCEPT_LANGUAGE - assumed 'HTTP_ACCEPT_LANGUAGE' in /data/www/htdocs/infosun/st/include/config.php3 on line 25 Notice: Undefined variable: realname in /data/www/htdocs/infosun/st/include/config.php3 on line 29 Notice: Undefined variable: userhome in /data/www/htdocs/infosun/st/include/config.php3 on line 48 Notice: Undefined variable: useremail in /data/www/htdocs/infosun/st/include/config.php3 on line 93 Notice: Use of undefined constant de - assumed 'de' in /data/www/htdocs/infosun/st/include/title.php3 on line 4
| Notice: Use of undefined constant de - assumed 'de' in /data/www/htdocs/infosun/st/include/start.php3 on line 13 University of Passau · FIM · Software Systems | Notice: Use of undefined constant de - assumed 'de' in /data/www/htdocs/infosun/st/include/start.php3 on line 26 Deutschsprachige Startseite |
|
Notice: Undefined variable: banner in /data/www/htdocs/infosun/st/include/header.php3 on line 12 Software Engineering - Aufgabenblatt 7Testverfahren II |
|
Das folgende Programm soll funktional getestet werden. Es berechnet den größten gemeinsamen Teiler zweier Zahlen, die größer als Null sind:
int berechneGGT (int ZahlA, int ZahlB);
Der Rückgabewert des Programmes ist der größte gemeinsame Teiler von ZahlA und ZahlB.
Folgende Testfälle werden angewandt:
| a | ZahlA = 2 | ZahlB = 4 |
| ZahlA = -2 | ZahlB = 4 | |
| ZahlA = 2 | ZahlB = -4 | |
| ZahlA = 2100 | ZahlB = 4 | |
| ZahlA = 2 | ZahlB = 2100 | |
| b | ZahlA = 0 | ZahlB = 0 |
| c | ZahlA = 1 | ZahlB = 1 |
| ZahlA = MAXINT | ZahlB = MAXINT | |
| ZahlA = 2 | ZahlB = 0 | |
| ZahlA = 0 | ZahlB = 4 | |
| ZahlA = MAXINT+1 | ZahlB = 2 | |
| ZahlA = 2 | ZahlB = MAXINT+1 | |
| d | ZahlA = 2 | ZahlB = 4 |
| ZahlA = 5 | ZahlB = 7 | |
| ZahlA = 12 | ZahlB = 32 | |
| ZahlA = 22 | ZahlB = 456 |
Welche funktionalen Testverfahren wurden in den Beispielen a bis d verwendet? Wie kam die Auswahl der Testdaten zustande?
Betrachten Sie das nachfolgende C-Programm.
void test()
{
int j;
int i = 0;
for (i = 0; i < 10; i++)
j++;
}
Erstellen Sie einen Kontrollflußgraphen für das Programm.
Stellen Sie die Datenflüsse tabellarisch zusammen. Welche Anomalien lassen sich auf diese Weise feststellen?
Gegeben sei der folgende Programmausschnitt. Er implementiert eine Funktion GetWord, die für eine Textposition c in einem Text t Beginn (begin) und Ende (end) des umgebenden Wortes zurückgeben soll. Ist c nicht Bestandteil eines Wortes, wird succ auf FALSE gesetzt, sonst auf TRUE.
Nehmen Sie an, daß keine Shortcut-Evaluation bei AND stattfindet!
1 MODULE Entities;
2 ...
3 TYPE Text = ARRAY [1..10000] OF CHAR;
4 TYPE Position = CARDINAL;
5 ...
6 PROCEDURE GetWord( t : Text; c : Position;
7 VAR succ : BOOLEAN;
8 VAR begin, end : Position );
9
10 CONST wordLetters = {"A".."Z", "a".."z", "0".."9"};
11
12 BEGIN
13 succ := FALSE;
14 begin := c;
15 end := c;
16 IF c > 0 AND c <= 10000 THEN
17 IF NOT t[c] IN wordLetters
18 THEN succ := FALSE
19 ELSE WHILE begin >= 1 AND
20 t[begin] IN wordLetters DO
21 begin := begin - 1;
22 END;
23 begin := begin + 1;
24 WHILE end < 10001 AND
25 t[end] IN wordLetters DO
26 end := end + 1;
27 END;
28 end := end - 1;
29 succ := TRUE;
30 END;
31 END;
32 END GetWord;
33 ...
34 END Entities.
Um begründbare Aussagen über die Fehlerwahrscheinlichkeit zu machen, benutzen Sie dieses Mal statistische Testverfahren.
Bestimmen Sie s=5 Testfallklassen D1,..., Ds.
Schätzen Sie das Lastprofil P ein; d.h. für jede
Testfallklasse i die Wahrscheinlichkeit
Pi ihres Auftretens,
so daß
Pi = 1.
Geben Sie n >= 10 Testdatensätze an, die Sie
zunächst anhand der Wahrscheinlichkeiten
Pi auf die einzelnen Klassen
Di verteilen, so daß
ni . Pi = n.
Testen Sie nun die Implementierung mit Ihren n
Testdatensätzen. Bestimmen Sie anhand der Ergebnisse die
Korrektheitswahrscheinlichkeit Ki = 1 -
fi/ni, wobei
fi die Anzahl der Fehler in der Klasse
Di ist. Wie ist die
Gesamtkorrektheitswahrscheinlichkeit R der
Implementierung? 
Um die Testgenauigkeit zu steigern, können Sie die Varianz
minimieren. Hierfür bestimmen Sie neue ni
anhand der in der Vorlesung vorgestellten Formel.

Nehmen wir an, Sie sollten 1000 Testfälle erzeugen. Wie sind die Testfälle nun verteilt?
Was passiert, wenn ein Ki den Wert 0 oder 1 annimmt?
Die Güte Ihrer Testdatensätze kann weiter gesteigert werden, indem Sie sie auf Mutationen des zu testenden Programms anwenden. Bestimmen Sie wenigstens fünf Mutanten des umseitigen Programms und schätzen Sie die Restfehlerzahl anhand der im Skript angegebenen Formel ab.
Wenn Sie von einem Programm nur wissen, daß es außer Zuweisungen nur
enthält - wieviele Testfälle braucht man für die folgenden Abdeckungskriterien im schlechtesten Falle?
Es soll dabei jeweils eine 100% Überdeckung erforderlich sein.
In der folgenden Abbildung sind drei Kontrollflußgraphen dargestellt. Berechnen Sie für alle Graphen die zyklomatische Zahl ZZ(P). Vergleichen Sie das Ergebnis mit Ihrem intuitiven Eindruck von der Komplexität der Graphen.
