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 - Beispiellösung 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…
Welche funktionalen Testverfahren wurden in den Beispielen a bis d verwendet? Wie kam die Auswahl der Testdaten zustande?
Die Testfälle lassen auf folgende Verfahren schließen:
Betrachten Sie das nachfolgende C-Programm…
Erstellen Sie einen Kontrollflußgraphen für das Programm.

Stellen Sie die Datenflüsse tabellarisch zusammen. Welche Anomalien lassen sich auf diese Weise feststellen?
Die Datenflüsse sind in der nachfolgenden Tabelle aufgelistet. Für die Variable j läßt sich die Anomalie ur finden, die auf den nicht initalisierten Wert von j in dem Konstrukt j++ zugegriffen wird. Für i findet man die Anomalie dd, da i zweimal initialisiert wird (bei der Definition und zu Beginn der Schleife):
| Variable | nstart | n1 | n2 | n3 | n4 | n5 | n6 | nfinal |
|---|---|---|---|---|---|---|---|---|
| j | e | u | e | e | e | rd | e | u |
| i | e | e | d | d | r | e | rd | u |
Legende: u - undefine r - reference d - define e - empty
Gegeben sei der folgende Programmausschnitt. Er implementiert eine Funktion GetWord…
Bestimmen Sie s=5 Testfallklassen D1,..., Ds.
Etwa so:
| D1: | 1 < begin < c < end < 10000 |
| D2: | 1 < begin = c oder end = c < 10000 |
| D3: | begin = 1 und c < end < 10000 |
| D4: | 1 < begin < c und end = 10000 |
| D5: | begin = 1 und end = 10000 |
Schätzen Sie das Lastprofil P ein; d.h. für jede
Testfallklasse i die Wahrscheinlichkeit
Pi ihres Auftretens,
so daß
Pi = 1.
Beispielsweise:
| D1: | D2: | D3: | D4: | D5: |
| 50% | 20% | 10% | 10% | 10% |
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.
| D1: | D2: | D3: | D4: | D5: |
_abcdefg_ |
_abc_ |
abc_ |
…_abc |
abcc…ccc |
_abcdefg_ |
_abc_ |
|||
_abcdefg_ |
||||
_abcdefg_ |
||||
_abcdefg_ |
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? 
Da laut Aufgabenstellung bei AND keine Shortcut-Evaluation durchgeführt wird, führen die Testfälle, bei denen das Wort direkt auf den Feldgrenzen beginnt oder endet zu Abstürzen.
Die Ki lassen sich nicht bestimmen! Daher ist Ki = 1 - fi/ni nur eine Näherung!
| K1: | K2: | K3: | K4: | K5: |
| 100% | 100% | 0% | 0% | 0% |
R=1 - (0/5 * 50% + 0/3 * 30% + 1/1 * 10% + 1/1 * 10% + 1/1 * 10%) = 70% Gesamtkorrektheitswahrscheinlichkeit
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?
Dies ergibt bei der geringen Menge an Testfällen keinen Sinn, da Ki keine anderen Werte als 0 oder 1 annimmt.
Sobal ein Ki den Wert 0 oder 1 annimmt, wird das neue ni = 0, d.h. es wird die ganze Klasse von Testfällen entfernt.
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 4 Verzweigungen bzw. 4 Schleifen enthält - wieviele Testfälle braucht man für die folgenden Abdeckungskriterien im schlechtesten Falle?
Da es Bedingungen geben kann, die sich gegenseitig beeinflussen kann es Anweisungen geben, die niemals ausgeführt werden (sogenannnter Toter Code). Dadurch ist es in einem solchen Fall nicht möglich, überhaupt 100% Abdeckung zu erreichen.
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.
Für alle drei Graphen ergibt sich das Ergebnis ZZ(P) = 4, alle drei Graphen sind also gleich komplex. Der subjektive Eindruck ist jedoch, daß die Komplexität von C am höchsten ist. B wirkt durch sein homogenes Aussehen sehr einfach und auch A läßt sich optisch gut überblicken und wirkt daher einfach.