====== LU01a - Grundlagen des Testens ====== ===== Einleitung ===== Testen ist das Ausführen eines Programms mit dem Ziel, Fehler zu finden. Testen ist ein Teil der Qualitätssicherung in der Softwareentwicklung. Beim Testen suchen wir gezielt nach Fehlern in einem Programm. Beim Testen geht es nicht darum, zu beweisen, dass ein Programm fehlerfrei ist. Das ist zum einen fast unmöglich und zum anderen wenig motivierend. ==== Vorgehensweise ==== Manche Programmierer haben seltsame Vorstellungen vom Testen eines Programms. Sie geben irgendwelche Daten ein und schauen, was passiert. Ihr Motto ist: Schiess einen Pfeil ab und alles, was du triffst, nennst du ein Ziel. Beim Testen legen wir zunächst fest, was wir testen wollen. Man schreibt auf, welches Ergebnis man erwartet oder wie das Programm reagieren soll. Das nennen wir Testfall. >> Sie wollen zum Beispiel testen, wie das Programm reagiert, wenn Sie eine negative Menge eingeben. >> Im Testfall legen Sie fest, dass Sie im Feld "Menge" den Wert "-4" eingeben. >> Sie erwarten, dass das Programm die Fehlermeldung "Menge muss grösser als 0 sein" ausgibt. Nachdem Sie einige Testfälle beschrieben haben, führen Sie diese Testfälle aus. Dabei notieren Sie, wie das Programm tatsächlich reagiert hat. Indem Sie die erwartete Reaktion (SOLL) mit der tatsächlichen Reaktion (IST) vergleichen, können Sie beurteilen, ob das Programm korrekt funktioniert. ===== Psychologie des Testens ===== Beim Testen * Sei hart und unerbittlich zum Programm: Deine Aufgabe ist es, so viele Fehler wie möglich zu finden. * Sei nett zum Programmierer: Du findest die Fehler in seiner Arbeit und nicht beim Menschen. Viele Programmierer fühlen sich angegriffen, wenn ihre Arbeit kritisiert wird. Deshalb muss der Tester bei der Erstellung des Testprotokolls mit Fingerspitzengefühl vorgehen: * Abweichungen zwischen erwartetem und tatsächlichem Ergebnis aufzeigen. * Vorschläge zur Korrektur des Programms vermeiden. Hier ein gutes und ein schlechtes Beispiel, wie ein Fehler im Testprotokoll festgehalten werden kann: * Gut: Zahl = 0 führt zu einem Absturz. * Schlecht: Die Bedingung zur Überprüfung der Eingabe ist falsch. ===== Definitionen ===== === Testen ist ... === ... die gezielte Suche nach Fehlern in einem Programm. Keine Software der Welt ist völlig frei von Fehlern, es gibt nur Software, deren Fehler noch nicht gefunden oder behoben wurden.. Beim Testen geht es nicht darum, zu beweisen, dass ein Programm fehlerfrei ist. Das ist zum einen unmöglich und zum anderen wenig motivierend. > Testen ist das Ausführen eines Programms mit dem Ziel, Fehler zu finden. === Testfall === Ein Testfall beschreibt die Daten, mit denen ein Test durchgeführt wird. Um ein Programm zu testen, benötigt man mehrere Testfälle. === Testprotokoll === Jedes Mal, wenn sie eine Reihe von Testfällen ausführen, wird ein separates Protokoll erstellt. Dieses enthält Informationen über den Zeitpunkt, die ausgeführten Testfälle und das Ergebnis des Tests. === Blackbox-Test === Bei einem Blackbox-Test werden die Testfälle aus den Anforderungen generiert. Die Struktur des Quellcodes wird nicht berücksichtigt. Das Programm wird als Blackbox betrachtet, die bei einer bestimmten Eingabe eine erwartete Ausgabe liefern soll. Als Grundlage für die Testfälle dienen * Spezifikation der Anwendung * Zustandsdiagramme === Glassbox-Tests === Bei einem Glassbox-Test (auch Whitebox-Test genannt) werden die Testfälle aus dem Quellcode generiert. Ziel solcher Tests ist es, dass möglichst jeder Befehl und jede Bedingung einmal ausgeführt wird. Solche Testfälle sind ohne spezielle Software nur sehr aufwendig zu erstellen. ==== Ablauf ==== {{:modul:m450:learningunits:lu01:testablauf.png?600|}} - In der Analyse werden die Anforderungen an das Programm ermittelt. Diese Anforderungen dienen als Grundlage für die Erstellung der Testfälle und des Programms. - Nachdem der Programmierer den Quellcode erstellt hat, wird das Programm systematisch getestet. Bei kleineren Projekten kann es sein, dass Programmierer und Tester ein und dieselbe Person sind. Oft werden jedoch bessere Ergebnisse erzielt, wenn eine zweite Person die Testfälle durchführt. - Dazu benötigt der Tester die zuvor erstellten Testfälle. Beim Testen startet man das Programm und gibt dem Programm die festgelegten Testdaten ein. - Bei einem Testdurchlauf wird jeder Testfall einmal ausgeführt. Für jeden Testfall halten Sie das tatsächliche Ergebnis in einem Testprotokoll fest. - Wenn alle Testfälle ausgeführt wurden, entscheidet der Tester: * das Programm muss überarbeitet werden * das Programm ist in Ordnung - Wenn das Programm überarbeitet werden muss, wird es an den Programmierer zurückgeschickt. Dieser nimmt die Verbesserungen vor und übergibt die neue Programmversion wieder dem Tester. Der Tester führt nun **alle** Testfälle erneut durch und hält die Ergebnisse in einem **neuen** Testprotokoll fest. ===== IEEE 829 ===== {{https://upload.wikimedia.org/wikipedia/commons/2/2f/IEEE829_Uebersicht_Deutsch.png?600}} Die Grafik zeigt die Dokumente und Prozessschritte nach [[wpde>Software_Test_Documentation|IEEE 829]]. ---- {{tag>M450-LU01}} [[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] Marcel Suter