Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Übung 8 Test Aufgabe 8.1 Testprozess Aus welchen Schritten sollte der Testprozess mindestens bestehen? Welche Dokumente werden hierfür erstellt und was beinhalten sie? Aufgabe 8.2 Testobjekt, Testtreiber und Testfälle Ein Programm zur Ermittlung des ASCII-Zahlenwertes wurde geschrieben. Um es zu testen, werden in einem Hauptprogramm Werte eingelesen und das Ergebnis ausgegeben. Das Programm sieht vereinfacht folgendermaßen aus: int ermittleasciicode (char zeichen) void main () // Hauptprogramm scanf(%c, eingabezeichen); printf("der ASCII-Zahlenwert von %s, eingabezeichen); printf("beträgt %d, ermittleasciicode (eingabezeichen)); Identifizieren Sie in diesem Beispiel das Testobjekt, den Testtreiber und die Testfälle. Erklären Sie kurz die jeweilige Aufgabe dieser Testbestandteile. Aufgabe 8.3: Ursachen-Wirkungs-Diagramm Der Kopiergerätehersteller Copyking stellt gerade das Handbuch für sein neuestes Kopiergerät fertig. Das letzte Kapitel soll mögliche Funktionsstörungen des Geräts behandeln. Um diese möglichen Funktionsstörungen oder Bedienungsfehler herauszufinden, setzen sich die Produktmanager zu einem Brainstorming zusammen. Ziel ist es, die potenziellen Ursachen für Fehler oder schlechte Kopien zu sammeln. Folgende Aussagen der Produktmanager werden in einem Sitzungsprotokoll festgehalten: Das Netzkabel steckt nicht im Gerät. Das Netzkabel steckt nicht in der Steckdose. Das Papierfach ist leer. Es ist nur noch wenig oder kein Toner mehr vorhanden. Das Original ist falsch positioniert. Das Papier ist nicht zum Kopieren geeignet. Das Netzteil im Gerät ist defekt.
Softwaretechnik I Übung 8: Test 2 Das falsche Papierformat wurde eingestellt. Die Anzahl der Kopien stimmt nicht. Das Netzkabel ist gebrochen. Die Steckdose ist nicht am Stromnetz. Der Deckel des Kopiertisches ist nicht zugeklappt. Die Zoom-Einstellung ist falsch. Kopierwalze ist verschmutzt. Papiereinzug ist defekt. Original ist ungeeignet (zu wenig Kontraste). Die Helligkeit ist zu hoch oder zu niedrig eingestellt. Belichtungseinheit/Lampe ist defekt. Kopierwalze ist defekt. Erstellen Sie ein Ursachen-Wirkungs-Diagramm für diese Problemstellung. Aufgabe 8.4 Äquivalenzklassen und Grenzwertanalyse Ein Programm zur Berechnung von Preisen soll getestet werden. Das Programm erfasst die Artikelnummer, die Stückzahl und einen Rabatt. Die Artikelnummer ist eine 5-stellige Zahl. Die Stückzahl ist auf 10.000 begrenzt und muss mindestens gleich 1 sein. Der Rabatt liegt zwischen 0 und 100%. Stellen Sie alle Äquivalenzklassen auf. Bilden Sie Testfälle für die Grenzwertanalyse. Aufgabe 8.5: Zweigüberdeckungstest Gegeben ist das folgende Programm, welches den größten gemeinsamen Teiler zweier Zahlen berechnet: int berechneggt (int zahla, int zahlb) if (zahla > 0 && zahlb > 0) while (zahla!= zahlb) while (zahla > zahlb) zahla = zahla - zahlb; while (zahlb > zahla) zahlb = zahlb - zahla; else zahla = 0; return zahla; Instrumentieren Sie dieses Programm mit Zählern für einen Zweigüberdeckungstest. Wie viele Testfälle werden für eine 100%-ige Zweigüberdeckung benötigt?
Softwaretechnik I Übung 8: Test 3 Aufgabe 8.6: C0- und C1-Überdeckungstest Gegeben ist das folgende Programm. Es wandelt eine Binärzahl in eine Dezimalzahl. Die Stellen der Binärzahl werden invers eingelesen, d. h. die letzte Ziffer zuerst, danach die vorletzte usw. #define INT_MAX 200 int wandledezimalzahl() int zahl = 0; int potenzwert = 0; char zeichen; scanf(%c,zeichen); while (((zeichen == "0") (zeichen == "1")) && (zahl < INT_MAX)) if (zeichen == "1") zahl = zahl + pow(2,potenzwert); potenzwert++; scanf(%c,zeichen); return zahl; Wandeln Sie das Programm in einen Kontrollflussgraphen um. Erstellen Sie Testfälle für den Anweisungsüberdeckungstest (C0), den Zweigüberdeckungstest (C1)
Softwaretechnik I Übung 8: Test 4 Lösungsblatt zu Aufgabe 8.3:
Softwaretechnik I Übung 8: Test 5 Lösungsblatt zu Aufgabe 8.5: int berechneggt (int zahla, int zahlb) if (zahla > 0 && zahlb > 0) while (zahla!= zahlb) while (zahla > zahlb) zahla -= zahlb; while (zahlb > zahla) else zahla = 0; zahlb -= zahla; return zahla;