Testen von Software: Ziele, Begriffe und Methoden
Testen von Software: Ziele, Begriffe und Methoden
Testen von Software: Ziele, Begriffe und Methoden
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 1<br />
Seminar WS 2000/2001<br />
Ausgewählte Gebiete des <strong>Software</strong> Engineering<br />
durchgeführt am<br />
Institut für Wirtschaftsinformatik<br />
der Johannes Kepler Universität Linz<br />
Arbeitsgruppe <strong>Software</strong> Engineering<br />
Altenberger Str. 69, A-4040 Linz, Austria<br />
Tel: +43-70-2468-9432<br />
Fax: +43-70-2468-9430<br />
Email: office@swe.uni-linz.ac.at<br />
Leitung: Prof. Dr. Gustav Pomberger<br />
Mitwirkend: Josef Pichler<br />
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong><br />
T3<br />
Jürgen Friesenecker<br />
Gerhard Strack<br />
06.12.2000
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 2<br />
Inhaltsverzeichnis<br />
Inhaltsverzeichnis .....................................................................................................2<br />
Kurzfassung..............................................................................................................4<br />
1 Einleitung........................................................................................................5<br />
1.1 Was ist <strong>Software</strong>-<strong>Testen</strong>? ..........................................................................5<br />
1.2 Warum soll man testen? ............................................................................5<br />
1.3 Wer soll testen?.........................................................................................6<br />
1.4 Was sollen wir testen?...............................................................................6<br />
1.5 Wann sollen wir testen?.............................................................................6<br />
2 <strong>Begriffe</strong> <strong>und</strong> <strong>Ziele</strong> des <strong>Testen</strong>s.........................................................................7<br />
2.1 Psychologie des <strong>Testen</strong>s [Myers 1989 S 3ff]..............................................7<br />
2.2 <strong>Ziele</strong> beim <strong>Testen</strong>......................................................................................7<br />
2.3 Debugging vs. Testing...............................................................................8<br />
2.4 Fehler in <strong>Software</strong>-Produkten....................................................................9<br />
2.4.1 Einteilung <strong>von</strong> Fehlern.......................................................................9<br />
2.4.2 Fehlerterminologie.............................................................................9<br />
2.4.3 Fehlerarten ......................................................................................10<br />
2.5 Gesetze für das <strong>Testen</strong> <strong>von</strong> <strong>Software</strong> [Beizer 1990 S. 9]..........................12<br />
2.5.1 1. Gesetz: Das Pestizid-Paradoxon...................................................12<br />
2.5.2 2. Gesetz: Die Komplexitätsschranke...............................................13<br />
2.6 Testprinzipien [Myers 1989 S. 10ff] ........................................................13<br />
3 Testphasen.....................................................................................................15<br />
3.1 Testphasen im <strong>Software</strong>-Lebenszyklus ....................................................16<br />
3.1.1 Entwicklungstest .............................................................................16<br />
3.1.2 Abnahmetest....................................................................................16<br />
3.1.3 Betriebstest......................................................................................17<br />
3.1.4 Wartungstest....................................................................................18<br />
3.2 Testphasen im <strong>Software</strong>-Entwicklungsprozeß .........................................18<br />
3.2.1 Bausteintest .....................................................................................18<br />
3.2.2 Verfahrenstest .................................................................................19<br />
3.2.3 Installationstest................................................................................20<br />
3.2.4 Systemtest .......................................................................................20<br />
3.3 Festlegung <strong>von</strong> Testobjekten innerhalb der Testphasen............................20<br />
4 Vorgehensweise bei der Testausführung ........................................................22<br />
4.1 Testarten .................................................................................................22<br />
4.1.1 Black-Box-<strong>Testen</strong> <strong>und</strong> White-Box-<strong>Testen</strong> .......................................23
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 3<br />
4.1.2 Statisches <strong>und</strong> Dynamisches <strong>Testen</strong>.................................................24<br />
4.1.3 Repräsentatives, Schadensausmaßorientiertes <strong>und</strong><br />
Schwachstellenorientiertes <strong>Testen</strong>..................................................................27<br />
4.2 Testaktivitäten der Testdurchführung ......................................................27<br />
4.2.1 Testvorbereitung..............................................................................30<br />
4.2.2 Testausführung ................................................................................34<br />
4.2.3 Testauswertung................................................................................35<br />
Abbildungsverzeichnis............................................................................................37<br />
Literaturverzeichnis ................................................................................................38
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 4<br />
Kurzfassung<br />
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong> beinhaltet eine Menge an Informationen, welche sich zwar im<br />
ersten Moment nur wenig unterscheiden, man aber später in den Detailinformationen<br />
merkt, daß dieses Thema in den Feinheiten seine Wirkung zeigt.<br />
Zu Beginn der Arbeit wird über die herkömmlichen W-Fragen informiert. Beinhaltet<br />
darin ist die Definition des <strong>Begriffe</strong>s <strong>Software</strong>-<strong>Testen</strong> <strong>und</strong> die Lösung zu den Fragen:<br />
Warum, wer, was <strong>und</strong> wann soll getestet werden.<br />
Danach beginnt ein Einblick in die <strong>Begriffe</strong> des <strong>Testen</strong>s <strong>und</strong> dessen folgende <strong>Ziele</strong>.<br />
Da solche <strong>Ziele</strong> Verfahren beinhalten, wurde eine zusätzliche Aufspaltung in die<br />
Bereiche: „Testphasen“ <strong>und</strong> „Vorgehensweise bei der Testausführung“ erzeugt.<br />
Die Testarten selbst werden wiederum unterteilt in den <strong>Software</strong>-Lebenszyklus <strong>und</strong><br />
den <strong>Software</strong>-Entwicklungsprozeß. Darin angeführt sind genaue Beschreibungen zu<br />
einzelnen Testphasen.<br />
Bei der Vorgehensweise während der Testausführung unterteilt man wiederum<br />
zwischen den Testarten <strong>und</strong> den Testaktivitäten. Black-Box-<strong>Testen</strong> <strong>und</strong> White-Box-<br />
<strong>Testen</strong> sowie der Unterschied zwischen statischem <strong>und</strong> dynamischen <strong>Testen</strong> sind<br />
hier nur einige der relevanten Arten.<br />
Die Testaktivitäten schließen folglich jene Testarten in den verschiedenen Bereichen<br />
wie der Testvorbereitung, der Testausführung, der Testauswertung ein. Hierbei wird<br />
beispielsweise auf dynamische bzw. statische Testweisen innerhalb der<br />
Testvorbereitung zurückgegriffen.<br />
Letztlich soll man in der Lage sein einen <strong>Software</strong>test dem Ablauf nach<br />
durchzuspielen, wobei auf genaue technische <strong>und</strong> mathematische Voraussetzungen<br />
nicht näher eingegangen wird.
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 5<br />
1 Einleitung<br />
1.1 Was ist <strong>Software</strong>-<strong>Testen</strong>?<br />
Dies ist eine Frage, die nicht leicht zu beantworten ist. Wenn <strong>Software</strong> <strong>Testen</strong> im<br />
kommerziellen Bereich eingesetzt wird, verbessert es die Qualität der ausgelieferten<br />
<strong>Software</strong>-Produkte, steigert die Zufriedenheit der Anwender <strong>und</strong> senkt die<br />
Wartungskosten. Im Bereich der Wissenschaft resultiert gutes <strong>Testen</strong> in genaueren<br />
<strong>und</strong> zuverlässigeren Ergebnissen. Fehlendes oder ineffektives <strong>Testen</strong> führt<br />
logischerweise zu den entgegengesetzten Ergebnissen – schlechtere Qualität der<br />
Produkte, Unzufriedenheit der Anwender, höhere Wartungskosten, unzuverlässige<br />
<strong>und</strong> ungenaue Ergebnisse.<br />
Damit uns klar wird, wie Fehler zustande kommen, wie wir unsere eigenen Fehler<br />
entdecken können <strong>und</strong> wer am besten dazu eingesetzt wird, <strong>Software</strong> Fehler zu<br />
entdecken, müssen wir Erkenntnisse einsetzen, die aus der Psychologie stammen.<br />
Die Mathematik bietet uns einen Einblick in die Möglichkeiten, die Korrektheit <strong>von</strong><br />
<strong>Software</strong> zu „beweisen“. Mit Hilfe der Wirtschaftswissenschaften müssen wir<br />
entscheiden können, wann die Testergebnisse bedeuten, daß die Testphase beendet<br />
werden sollte. Nur wenn wir alle diese Disziplinen berücksichtigen, werden wir<br />
effektive Tests durchführen können.<br />
Myers hat schon 1979 das <strong>Testen</strong> <strong>von</strong> Programmen so definiert:<br />
„<strong>Testen</strong> ist der Prozeß, ein Programm mit der Absicht auszuführen, Fehler zu<br />
finden.“ [Myers 1989 S. 4]<br />
1.2 Warum soll man testen?<br />
Obwohl das <strong>Testen</strong> <strong>von</strong> <strong>Software</strong> eine teure Angelegenheit ist, können die Kosten,<br />
die das Unterlassen <strong>von</strong> Tests entstehen, höher sein. Bei Systemen, die mit der<br />
Sicherheit <strong>von</strong> Menschen zu tun haben, ist dies selbstverständlich.<br />
Bei den meisten Systemen sind wirtschaftliche Erwägungen jedoch sowohl die<br />
treibende Kraft als auch der begrenzende Faktor beim <strong>Testen</strong>. Je früher im Verlauf<br />
des Lebenszyklus Fehler entdeckt <strong>und</strong> beseitigt werden, desto niedriger sind die<br />
Kosten ihrer Beseitigung. Die schlimmsten Fehler sind die, die beim <strong>Testen</strong> nicht
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 6<br />
entdeckt werden <strong>und</strong> deshalb noch vorhanden sind, wenn das System „ins Leben<br />
hinaustritt“.<br />
1.3 Wer soll testen?<br />
Effektives <strong>Testen</strong> erfordert vom Tester, die zu prüfende <strong>Software</strong> streng objektiv zu<br />
betrachten. <strong>Software</strong>-Entwickler, die ihre eigene <strong>Software</strong> testen sollen, befinden<br />
sich deshalb in einer prekären Lage.<br />
In vielen Firmen hat man eingesehen, daß es sehr schwierig ist, gegen das Phänomen<br />
anzugehen, daß fast jeder dazu neigt, eigene Fehler zu verdrängen <strong>und</strong> so objektives<br />
<strong>Testen</strong> nicht zu gewährleisten, <strong>und</strong> deshalb eine Lösung gewählt, die auf der Hand<br />
liegt: die Trennung <strong>von</strong> Entwicklungs- <strong>und</strong> Testphasen, indem die Verantwortung<br />
für jede dieser Phasen unter verschiedenen Mitarbeitern aufgeteilt wird. Wenn wir<br />
vor der Aufgabe stehen, <strong>Software</strong> zu testen, die jemand anderer entwickelt hat, wird<br />
unser beruflicher Ehrgeiz fordern, daß wir erfolgreich sind. Erfolg beim <strong>Testen</strong><br />
besteht im Entdecken <strong>von</strong> Fehlern.<br />
1.4 Was sollen wir testen?<br />
Im Mittelpunkt des traditionellen <strong>Software</strong>-<strong>Testen</strong>s stand das <strong>Testen</strong> des<br />
Programmcodes. Fehler werden jedoch nicht nur beim abschließenden Codieren des<br />
Programms gemacht, sondern können im gesamten Lebenszyklus der<br />
Systementwicklung auftreten. Wenn nur getestet wird, nachdem die Codierphase<br />
beendet ist, können Fehler, die bereits in der Phase der Anforderungsanalyse<br />
unterlaufen sind, bereits tief in der <strong>Software</strong> verwurzelt sein. Wenn Tests lediglich in<br />
diesem späten Stadium durchgeführt werden, wird die Fehlerbeseitigung um so<br />
teurer sein, je früher im Lebenszyklus der ursprüngliche Fehler gemacht wurde. In<br />
den letzten Jahren hat sich deshalb der Schwerpunkt darauf verlagert, Fehler<br />
möglichst nahe an ihrer Quelle zu finden.<br />
1.5 Wann sollen wir testen?<br />
Aus den oben dargelegten Gründen sollte wirtschaftliches <strong>Testen</strong> danach streben,<br />
Fehler möglichst nahe an ihren Ursprüngen zu beseitigen. Daraus folgt, daß <strong>Testen</strong><br />
ein kontinuierlicher Prozeß im gesamten Lebenszyklus sein muß. Methodisches<br />
<strong>Testen</strong> kann jedesmal dann ausgeführt werden, wenn ein Produkt ein neues Stadium<br />
der Verfeinerung erreicht.
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 7<br />
2 <strong>Begriffe</strong> <strong>und</strong> <strong>Ziele</strong> des <strong>Testen</strong>s<br />
2.1 Psychologie des <strong>Testen</strong>s [Myers 1989 S 3ff]<br />
Die meisten Leute verwenden eine völlig falsche Definition des <strong>Begriffe</strong>s, wie diese:<br />
• „<strong>Testen</strong> ist der Prozeß, der zeigen soll, daß keine Fehler vorhanden sind.“<br />
• „Der Zweck des <strong>Testen</strong>s ist es, zu zeigen, daß ein Programm die geforderten<br />
Funktionen korrekt ausführt“.<br />
• „<strong>Testen</strong> ist der Prozeß, der das Vertrauen erzeugt, daß ein Programm das tut,<br />
was es soll“.<br />
Denn diese beschreiben fast das Entgegengesetzte dessen, als was das <strong>Testen</strong><br />
angesehen werden soll. Der Tester versucht den Wert des Programms durch das<br />
<strong>Testen</strong> anzuheben. Werterhebung bedeutet, Anhebung der Qualität oder<br />
Zuverlässigkeit des Programms. Anhebung der Zuverlässigkeit des Programms<br />
bedeutet, Fehler zu finden <strong>und</strong> zu beheben. Daher sollte man ein Programm nicht<br />
testen, um zu zeigen, daß es funktioniert, sondern man sollte mit der Annahme<br />
beginnen, daß das Programm Fehler enthält <strong>und</strong> dann testen, um möglichst viele<br />
Fehler zu finden.<br />
Daher ist wie schon oben definiert <strong>Testen</strong> der Prozeß, ein Programm mit der Absicht<br />
auszuführen, Fehler zu finden.<br />
Diese Definition impliziert, daß <strong>Testen</strong> ein destruktiver, sadistischer Prozeß ist, es ist<br />
erst erfolgreich, wenn Fehler gef<strong>und</strong>en werden <strong>und</strong> nicht, wenn keine Fehler<br />
gef<strong>und</strong>en werden.<br />
2.2 <strong>Ziele</strong> beim <strong>Testen</strong><br />
Hinsichtlich bestimmter Qualitätsmerkmale, wie z.B. Richtigkeit, Robustheit,<br />
Sicherheit usw. ist <strong>Testen</strong> primär darauf ausgerichtet, das Vorhandensein <strong>von</strong><br />
Fehlern nachzuweisen. Unter Fehler wird dabei jede Abweichung des Verhaltens <strong>von</strong><br />
dem in der Anforderungsdefinition festgelegten Verhalten verstanden. Die Ursache<br />
eines Fehlers kann in der Spezifikation, im Entwurf oder in der Implementierung<br />
verborgen sein, sie kann nicht – wenn das Qualitätsmerkmal Robustheit erfüllt sein<br />
soll – in der fehlerhaften Auswahl der Eingabewerte eines Programmsystems liegen.<br />
Nach Beizer [Beizer 1995 S 7ff] testen wir <strong>Software</strong> um:
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 8<br />
• Programme ohne „Bugs“ zu erhalten, Programmierern Information zu geben,<br />
wie sie „Bugs“ vermeiden können.<br />
• Dem Management Information zu geben, damit es rationell das Risiko einer<br />
Verwendung eines Testobjekts evaluieren kann.<br />
• Ein testbares Programm zu schaffen, ein Programm das leicht validiert,<br />
falsifiziert <strong>und</strong> gewartet werden kann.<br />
• Explizite <strong>und</strong> implizite Anforderungen (Requirements) zu schaffen, die<br />
implementierbar, vollständig, konsistent, korrekt sind.<br />
• Explizite Anforderungen zu validieren.<br />
• Implizite Anforderungen zu falsifizieren.<br />
Explizite Anforderungen werden durch sog. „clean tests“(konstruktive/positive<br />
Tätigkeit) validiert. Ein “clean test” ist ein Test dessen primärer Zweck Validation<br />
ist, das heißt Tests werden entworfen um zu zeigen, daß die <strong>Software</strong> korrekt<br />
arbeitet.<br />
Implizite Anforderungen werden durch sog. „dirty tests“ (subversive/negative<br />
Tätigkeit) falsifiziert. Ein „dirty test“ ist ein Test dessen primärer Zweck<br />
Falsifikation ist, das heißt Tests werden entworfen um die <strong>Software</strong> zu brechen.<br />
Wenn man etwas nicht testet, heißt das, daß man die Fehlerfreiheit garantiert, oder<br />
daß man sich sicher ist, daß die Funktionalität unnötig ist. Deshalb muß (soll) man<br />
nicht getestete Funktionalität entfernen.<br />
2.3 Debugging vs. Testing<br />
In enger Beziehung zum <strong>Testen</strong> steht das Debugging (Entwanzen), dessen Zweck<br />
das Erkennen <strong>und</strong> Beheben <strong>von</strong> Fehlerursachen <strong>und</strong> das Beseitigen <strong>von</strong> Fehlern<br />
einschließlich der Überprüfung der Fehlerkorrektur ist. Diese Überprüfung erfordert<br />
die Wiederholung des <strong>Testen</strong>s, um feststellen zu können, ob der Fehler tatsächlich<br />
korrigiert wurde <strong>und</strong> ob durch die Korrektur keine neuen Fehler „eingeführt“ wurden<br />
(Retesting). [Heinrich 2000 S. 409]<br />
Die Unterschiede zwischen <strong>Testen</strong> <strong>und</strong> Debugging lassen sich nach [Steindl 2000 S.<br />
29 ff] wie folgt aufgliedern:<br />
• <strong>Testen</strong> beginnt unter bekannten Voraussetzungen, verwendet vordefinierte<br />
Prozeduren <strong>und</strong> hat vorhersagbare Ergebnisse.<br />
<strong>Testen</strong> kann geplant werden, Testpläne können entworfen werden <strong>und</strong><br />
zeitlich angesetzt werden.<br />
Es ist nur nicht vorhersagbar, ob das Programm den Test besteht oder nicht.
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 9<br />
<strong>Testen</strong> beweist Fehler des Programmierers.<br />
<strong>Testen</strong> kann ohne großes Wissen über das Design erledigt werden <strong>und</strong> oft<br />
<strong>von</strong> Außenstehenden durchgeführt werden.<br />
Vieles läßt sich automatisieren wie der Entwurf <strong>von</strong> Testfällen <strong>und</strong> die<br />
Durchführung der Tests.<br />
• Beim Debuggen können die Vorgehensweise <strong>und</strong> die dafür benötigte Zeit<br />
nicht so <strong>von</strong> vornherein festgelegt werden (intuitive Sprünge, Vermutungen,<br />
Experimentieren).<br />
Debuggen ist die Rechtfertigung des Programmierers <strong>und</strong> ist ohne detaillierte<br />
Design-Kenntnisse unmöglich, muß daher <strong>von</strong> einem „Insider“ durchgeführt<br />
werden.<br />
Automatisiertes Debuggen ist noch immer eine Traumvorstellung.<br />
2.4 Fehler in <strong>Software</strong>-Produkten<br />
2.4.1 Einteilung <strong>von</strong> Fehlern<br />
Zur Unterscheidung <strong>von</strong> Fehlern sind eine Vielzahl unterschiedlicher Möglichkeiten<br />
der Klassifizierung gegeben, so können Fehler klassifiziert werden nach der<br />
Entwicklungsphase, wo der bestimmte Fehler auftritt, nach den Konsequenzen, die<br />
dieser Fehler verursacht, nach der Schwierigkeit, diesen Fehler zu beheben, usw.<br />
Beizer [Beizer 1990 S. 28f] charakterisiert im folgenden diese Möglichkeit der<br />
Klassifizierung näher. Er teilt Fehler nach der Schwere ihrer Konsequenzen ein:<br />
• Kosmetisch<br />
• Anders wäre es angenehmer/schöner<br />
• Mittelschwer<br />
• Performance-Einbußen<br />
• Schadend<br />
• Schwer<br />
• Katastrophal<br />
Fehler können aber auch nach ihrer Terminologie <strong>und</strong> Art eingeteilt werden.<br />
2.4.2 Fehlerterminologie<br />
Für Fehler gibt es vier verschiedene <strong>Begriffe</strong>, nämlich „Bug“, „Error“, „Fault“ <strong>und</strong><br />
„Failure“, die in dieser Abbildung definiert werden:
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 10<br />
Abbildung 1 - Fehlerterminologie [Steindl 2000 S. 36]<br />
2.4.3 Fehlerarten<br />
Beizer [Beizer 1990 S. 34ff] unterscheidet folgende Fehlerarten:<br />
Abbildung 2 - Fehlerarten [Steindl 2000 S. 37]
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 11<br />
2.4.3.1 Strukturelle Fehler<br />
Kontrollflußfehler <strong>und</strong> Sequenzfehler enthalten fehlende Pfade, nicht-erreichbarer<br />
Programmcode, falsche Schleifenbedingungen, fehlende, duplizierte, unnötige<br />
Verarbeitungsschritte <strong>und</strong> falsch verstandene Abfragen.<br />
Kontrollflußfehler <strong>und</strong> Sequenzfehler werden normalerweise beim Unit <strong>Testen</strong><br />
gef<strong>und</strong>en. Diese Fehler können durch die Wahl der Programmiersprache (z.B. ohne<br />
GOTOs) <strong>und</strong> des Programmierstils bzw. Programmierrichtlinien vermieden werden.<br />
Logische Fehler entstehen durch falsches Verständnis <strong>von</strong> logischen Operatoren,<br />
fehlende oder falsch angelegte Zweige, doch mögliche unmögliche Zweige,<br />
fehlerhafte Negation boolescher Ausdrücke (z.B. Negation <strong>von</strong> >= wird
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 12<br />
sind nicht deklarierte Daten, Aufruf nicht existenter Prozeduren, oder<br />
Dokumentationsfehler führen oft zu fehlerhaftem Code oder falschen<br />
Wartungsarbeiten, wie Tippfehler, irreführende, fehlerhafte oder veraltete<br />
Kommentare.<br />
2.4.3.4 Testfehler <strong>und</strong> Fehler im Testdesign<br />
Fehler können auch in den Testfällen auftreten, denn es gibt keine engelhaften<br />
Tester. Abhilfen gegen Testfehler sind Debuggen der Testfälle, Qualitätskontrolle<br />
beim <strong>Testen</strong>, automatisierte Testausführung <strong>und</strong> automatisierter <strong>Testen</strong>twurf.<br />
2.5 Gesetze für das <strong>Testen</strong> <strong>von</strong> <strong>Software</strong> [Beizer 1990 S. 9]<br />
2.5.1 1. Gesetz: Das Pestizid-Paradoxon<br />
Jede Methode, die man anwendet, um Fehler zu vermeiden oder zu finden, hinterläßt<br />
einen gewissen Rest <strong>von</strong> raffinierteren Fehlern, gegen welche die eingesetzte<br />
Methode nichts ausrichten kann.<br />
Das Pestizid-Paradoxon wird durch folgende Abbildung einfach erläutert:
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 13<br />
Abbildung 3 - Das Pestizid Paradoxon [Steindl 2000 S. 9]<br />
2.5.2 2. Gesetz: Die Komplexitätsschranke<br />
Die Komplexität der <strong>Software</strong> (<strong>und</strong> damit auch die Komplexität der Fehler) wächst<br />
über unsere Fähigkeiten hinaus, die Komplexität zu meistern.<br />
2.6 Testprinzipien [Myers 1989 S. 10ff]<br />
• Ein notwendiger Bestandteil eines Testfalls ist die Definition der erwarteten<br />
Werte oder des Resultats.<br />
Würde das erwartete Resultat eines Testfalls nicht vorher definiert, so besteht die<br />
Möglichkeit, ein plausibles, aber fehlerhaftes Ergebnis wegen des Phänomens „das<br />
Auge sieht das, was es sehen will“ als korrekt zu betrachten. Daher muß eine genaue<br />
Untersuchung des ganzen Outputs <strong>und</strong> ein exakter Vergleich mit dem erwarteten<br />
Output des Programms vorgenommen werden.<br />
• Überprüfen Sie die Ergebnisse eines jeden Tests gründlich.<br />
Dies ist wahrscheinlich das wichtigste Prinzip, weil Fehler übersehen werden, die<br />
aber in Testfällen erkennbar sind, weil eine sorgfältige Überprüfung der Ergebnisse<br />
unterbleibt.
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 14<br />
• Testfälle müssen für ungültige <strong>und</strong> unerwartete ebenso wie für gültige <strong>und</strong><br />
erwartete Eingabedaten definiert werden.<br />
Beim <strong>Testen</strong> neigt man dazu, sich auf zulässige <strong>und</strong> erwartete Eingabedaten zu<br />
konzentrieren <strong>und</strong> ungültige <strong>und</strong> unerwartete Daten zu vernachlässigen. Fehler<br />
werden sonst erst entdeckt, wen das Programm auf neue, unerwartete Weise<br />
eingesetzt wird.<br />
• Schauen Sie, ob das Programm etwas tut, was es nicht tun soll.<br />
Das ist eine einfache Ergänzung der vorigen Regel. Programme müssen auf<br />
unerwünschte Nebeneffekte hin untersucht werden.<br />
• Vermeiden Sie Wegwerftestfälle, es sei denn das Programm ist wirklich ein<br />
Wegwerfprogramm.<br />
Testfälle sind wiederholbar <strong>und</strong> können in der Zukunft goldeswert sein, daher sollen<br />
Testfälle nicht weggeworfen werden.<br />
• Planen Sie kein Testverfahren unter der stillschweigenden Annahme, daß<br />
keine Fehler gef<strong>und</strong>en werden.<br />
Die Wahrscheinlichkeit für die Existenz weiterer Fehler in einem Abschnitt eines<br />
Programms ist proportional zu der Zahl der bereits entdeckten Fehler in diesem<br />
Abschnitt. Auf den ersten Blick ergibt das keinen Sinn, aber diese Erscheinung<br />
wurde in vielen Programmen beobachtet.<br />
• <strong>Testen</strong> ist eine extrem kreative <strong>und</strong> intellektuell herausfordernde Aufgabe.<br />
• <strong>Testen</strong> ist der Prozeß, ein Programm mit der Absicht auszuführen, Fehler zu<br />
finden.<br />
• Ein guter Testfall ist dadurch gekennzeichnet, daß er mit hoher<br />
Wahrscheinlichkeit einen bisher unbekannten Fehler zu entdecken imstande<br />
ist.<br />
• Ein erfolgreicher Testfall ist dadurch gekennzeichnet, daß er einen bisher<br />
unbekannten Fehler entdeckt.
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 15<br />
3 Testphasen<br />
„Testphasen sind sachlich <strong>und</strong> zeitlich in sich geschlossene Abschnitte des <strong>Testen</strong>s,<br />
in denen für bestimmte <strong>Software</strong>-Produkte definierte Testaufgaben durchgeführt<br />
werden.“ [Schmitz 1982 S. 70]<br />
Unterschieden werden jene nach folgenden Größen:<br />
• analysierende Testobjekte <strong>und</strong> deren Zuordnung zu Projektphasen<br />
• Überschaubarkeit <strong>und</strong> Beherrschbarkeit der Testobjekte<br />
• Durchzuführende Testaufgaben<br />
• Verantwortlichkeiten für die Durchführung des <strong>Testen</strong>s bzw. die Freigabe<br />
<strong>von</strong> Objekten<br />
• Vorgegebene Umgebung, in der das Testobjekt getestet wird<br />
(Entwicklungsumgebung, Anwendungsumgebung)<br />
Für jeden dieser einzelnen Unterschiede ist eine Testphase zu realisieren, sofern alle<br />
Objekte der unterschiedlichen Typen getestet werden sollen. Auch wenn ein Objekt<br />
für die Testdurchführung zu komplex bzw. nicht vollständig durchschaubar ist, sind<br />
Elemente des Testobjekts in eigenen Testphasen zu testen.<br />
Weiters sind Testphasen für Objekte zu unterscheiden, wenn sie verschiedene<br />
Verantwortlichkeiten besitzen.
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 16<br />
3.1 Testphasen im <strong>Software</strong>-Lebenszyklus<br />
Abbildung 4 – <strong>Software</strong> Lebenszyklus [Steindl 2000 S. 6]<br />
Anhand der angeführten Kriterien unterscheidet man:<br />
• Entwicklungstest<br />
• Abnahmetest<br />
• Betriebstest<br />
• Wartungstest<br />
3.1.1 Entwicklungstest<br />
Dieser Test beinhaltet alle Maßnahmen des <strong>Testen</strong>s innerhalb des <strong>Software</strong>-<br />
Produktionsprozesses <strong>und</strong> testet hinsichtlich der Anforderungen an die<br />
Projektergebnisse in Bezug auf die relevanten Qualitätsmerkmale.<br />
Betreuer dieses Tests sind die jeweilig verantwortlichen Entwickler <strong>und</strong> endet somit<br />
mit der Freigabe des Produktes für den Betrieb. (siehe auch 4.2 Testphasen im<br />
<strong>Software</strong> Entwicklungszyklus)<br />
3.1.2 Abnahmetest<br />
Das Produkt wird hier hinsichtlich der Anwendung des Benutzers getestet. Dieser<br />
Zustand ist jedoch erst bei der Freigabe des Systems aus der Hand der
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 17<br />
Entwicklungsgruppe möglich (z.B. beim Ankauf des Systems). Getestet wird<br />
letztlich nach der Installation <strong>und</strong> Einführung des Systems.<br />
Es werden beim Abnahmetest normalerweise drei Formen <strong>von</strong> Tests unterschieden:<br />
• Benchmarktest: entsprechend der Problemanalyse Testfälle/Testdaten<br />
konstruiert oder aus Beständen an Originaldaten selektiert. Der dynamische<br />
Test erfolgt mit den so ermittelten Testdaten in einer weggehend sicheren<br />
Testumgebung oder in der Produktionsumgebung.<br />
• Pilottest: es wird ein potentieller zukünftiger Arbeiter ausgesucht, welcher<br />
die <strong>Software</strong> für eine gewisse Zeit das System testet.<br />
• Paralleltest: Die <strong>Software</strong> wird mit einem oder mehreren zukünftigen<br />
Anwendern für eine begrenzte Zeit parallel zum alten Verfahren eingesetzt.<br />
3.1.3 Betriebstest<br />
Der Betriebstest dient zur Erkennung <strong>von</strong> Fehlern während des Einsatzes im Betrieb.<br />
Hierzu wird das <strong>Software</strong>-Produkt durch sporadische oder permanente Ausführung<br />
<strong>von</strong> Testaktivitäten mit Testfällen aus realen Verarbeitungsdaten, geprüft.<br />
Vorgehensweisen:<br />
• Überprüfung der Ergebnisse der Produktionsläufe [Schmitz 1982 S. 81]<br />
o Teilweise Überprüfung: die Tests bzw. Ergebnisse werden nur in<br />
gewissen Zeitabständen durchgeführt<br />
o Permanente Überprüfung<br />
• Während des Ablaufes werden Zwischenschritte der<br />
Programmverarbeitung auf Plausibilität geprüft<br />
• Nach dem Ablauf werden verdichtete Daten automatisiert oder<br />
nicht-automatisiert geprüft<br />
• Nach dem Ablauf werden Ergebnisse mit alten verglichen <strong>und</strong><br />
die Unterschiede „interpretiert“<br />
• Wiederholung <strong>von</strong> Produktionsläufen in einer isolierten Umgebung<br />
Vorerst müssen Verarbeitungsfälle, welche im normalen Betrieb nicht<br />
anfallen, ausgewählt werden. Diese werden schlußendlich in einer<br />
Betriebstestdatei gespeichert.<br />
Danach wird hier eine sogenannte Testfirma mit diesen Daten simuliert. Dies<br />
heißt jedoch keinesfalls, daß <strong>von</strong> der Betriebsdatei nicht abgewichen wird, im<br />
Gegenteil, die Testfirma ist so angelegt um eine ständiges updaten<br />
durchführen zu können.<br />
Durch das <strong>Testen</strong> unmittelbar vor dem Einsatz kann sichergestellt werden,
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 18<br />
daß zwischenzeitlich keine Änderungen in die Programme eingebracht<br />
worden sind <strong>und</strong> darüber hinaus auch durch Änderungen in der<br />
Hardware/<strong>Software</strong>-Umgebung kein fehlerhaftes Verhalten hervorgerufen<br />
wird.<br />
Wird ein Fehler erkannt wird sofort die Wartung des <strong>Software</strong>-Systems<br />
begonnen.<br />
3.1.4 Wartungstest<br />
Dient der Analyse hinsichtlich der Auswirkungen <strong>von</strong> Änderungen oder<br />
Erweiterungen des Programmsystems.<br />
Aufgabe des Wartungstests ist es, die geänderten sowie neuen Programmfunktionen<br />
zu testen. Vorerst getrennt <strong>und</strong> schließlich in Zusammenhang mit dem restlichen<br />
<strong>Software</strong>-System.<br />
Wesentlich hierbei ist, daß auf vorhandene Testfälle <strong>und</strong> Testdaten wiederverwendet<br />
werden <strong>und</strong> somit für neue Funktionen aktualisiert bzw. erweitert werden müssen um<br />
bei anderen Tests optimale Testaktivitäten zu garantieren.<br />
3.2 Testphasen im <strong>Software</strong>-Entwicklungsprozeß<br />
Alle Phasen einer <strong>Software</strong>entwicklung werden mindestens durch einen Test<br />
überprüft. Dies gilt besonders für Module die Zwischenergebnisse liefern.<br />
Es werden folgende Tests unterschieden:<br />
• Bausteintest<br />
• Verfahrenstest<br />
• Installationstest<br />
• Systemtest<br />
3.2.1 Bausteintest<br />
Programmbausteine sind Module, welche durch Eingaben über die Schnittstelle<br />
unabhängig vom Gesamtsystem getestet werden.<br />
Der Bausteintest wird in einer kontrollierbaren, sicheren Umgebung durchgeführt.<br />
Externe Schnittstellen zu anderen Programmen, Daten, Datenbanken oder auch<br />
Benutzern werden in dieser Testumgebung simuliert.<br />
„Es ist wichtig, die Testfälle für ein Testobjekt so auszuwählen, daß
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 19<br />
• für alle Funktionseinheiten <strong>und</strong> deren Schnittstellenverhalten geprüft wird, ob<br />
sie ihre Spezifikation erfüllen,<br />
• alle Zweige der Funktionseinheiten durchlaufen werden<br />
• der kleinste <strong>und</strong> größte Wert jedes Eingabedatums berücksichtigt wird<br />
(Grenzwerttest)<br />
• jede Schleife mit minimaler <strong>und</strong> maximaler Durchlaufzahl geprüft wird<br />
• alle Fehlerausgänge des Testobjekts geprüft werden<br />
• die Reaktion des Testobjekts auf willkürliche Eingabedaten überprüft wird<br />
(Streß-Test, Zufallstest)<br />
3.2.2 Verfahrenstest<br />
Enthält die Analyse einzelner Programme oder mehrerer Programme in ihrem<br />
Zusammenwirken. Ferner werden die Module hinsichtlich der externen<br />
Schnittstellen insbesondere auch mit dem Benutzer schrittweise analysiert.<br />
Um eine Übersicht über das Zusammenwirken zu erlangen ist es empfehlenswert den<br />
Zusammenhang zwischen den Testfällen <strong>und</strong> den damit verb<strong>und</strong>en Funktionen in<br />
einer Tabelle darzustellen.<br />
Abbildung 5 - Testfallmatrix [Heinrich 2000 S. 414]<br />
Der Verfahrenstest wird noch in einer Entwicklungsumgebung durchgeführt, dabei<br />
ist es aber nicht mehr nötig Entwickler zu belasten sondern spezialisierte Gruppen<br />
oder Personen des Aufgabenbereichs.
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 20<br />
3.2.3 Installationstest<br />
Beinhaltet die Analyse des Installationsprozesses hinsichtlich möglicher Fehler bei<br />
der Installation.<br />
Untersucht wird die Verfügbarkeit <strong>von</strong> Umgebung (Dateien, Datenbank,...) <strong>und</strong><br />
Programmbausteinen. Weiters wird die formale Zusammenarbeit dieser getestet.<br />
Notwendig ist solch ein Test, wenn man <strong>von</strong> einem System auf ein anderes wechselt<br />
(z.B. <strong>von</strong> der Entwicklungsumbebung hin zur Benutzerumgebung).<br />
3.2.4 Systemtest<br />
Analysiert das Gesamtsystem in der Zielumgebung. Im Normalfall wird hier das<br />
Pflichtenheft überprüft.<br />
Aus diesem Gr<strong>und</strong> wird der Systemtest in der realen Benutzerumgebung unter<br />
Einbeziehung realer Schnittstellen durchgeführt (unter Umständen wird der<br />
zukünftige Benutzer eingesetzt).<br />
Zu untersuchende <strong>Ziele</strong>:<br />
• <strong>Testen</strong> des Gesamtsystems in Hinblick auf Effizienzanforderungen<br />
• <strong>Testen</strong> des Zusammenwirkens des Gesamtsystems mit vorhandenen<br />
<strong>Software</strong>produkten<br />
• <strong>Testen</strong> des funktionalen Zusammenwirkens der Programme des realisierten<br />
Produktes in der Zielumgebung<br />
Analysiert wird (wie oben angegeben) dieses System <strong>von</strong> eigenständigen<br />
Testgruppen um vorhergehende fehlende Fälle aufzudecken. Weiter soll eine<br />
Struktur zur Analyse beibehalten werden, welche folgendermaßen aussieht:<br />
• formale Gesichtspunkte<br />
• sachlich inhaltlicher Gesichtspunkt<br />
• Zusammenwirken mit Elementen in der Umgebung<br />
• qualitativer Gesichtspunkt<br />
3.3 Festlegung <strong>von</strong> Testobjekten innerhalb der Testphasen<br />
Die Komplexität <strong>von</strong> Testphasen, Testaufgaben <strong>und</strong> Testobjekten sollte so gewählt<br />
werden, daß das <strong>Testen</strong> beschränkt ist. Hierzu gibt es zwei Möglichkeiten:<br />
• gezielte Steuerung der Umgebung, in welcher der Test eines Objekts abläuft<br />
• schrittweise Analyse <strong>von</strong> Teilen eines <strong>Software</strong>-Produkts
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 21<br />
Strategien zum <strong>Testen</strong> <strong>von</strong> Programmen:<br />
• Testobjekte werden geteilt, um den Umfang zu verkleinern (z.B. einzelne<br />
Programmbausteine -> einzelne Programme -> gesamtes Programmsystem)<br />
Hierzu sollte die Wahl der Testobjekte nach technischen, funktionalen oder<br />
aufgabenbezogenen Gesichtspunkten gewählt werden.<br />
• <strong>Testen</strong> der Programme in einer konstruierten Umgebung, welche später<br />
immer realer wird, wobei die Umgebungen auf Fehlerfreiheit geprüft<br />
wurden/werden sollten.<br />
Strategien zum <strong>Testen</strong> <strong>von</strong> Dokumenten:<br />
• Begrenzung der Testobjekte auf einen Maximalwert.<br />
• Im Normalfall sind Dokumente nicht automatisiert testbar was dazu führt,<br />
daß bei der Aufteilung der Dokumente auf eine strickte Trennung <strong>von</strong><br />
Teildokumenten geachtet werden soll.<br />
• Einsetzen <strong>von</strong> gleichen Testern innerhalb eines Dokuments oder<br />
ausreichende Beschreibung des Kontexts zwischen den Teildokumenten,<br />
wobei die erste Lösung, trotz größerer Fehlergefahr, vorgezogen werden<br />
sollte.
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 22<br />
4 Vorgehensweise bei der Testausführung<br />
4.1 Testarten<br />
Nach [Heinrich 2000 S. 415ff] kann eine Systematik der Testmethoden nach<br />
folgenden Testarten gebildet werden: nach der Art der Testfallermittlung,<br />
Testausführung <strong>und</strong> dem Umfang der Testausführung.<br />
Die Testfallermittlung kann aufgabenorientiert (funktionsorientiert) oder<br />
produktorientiert (strukturorientiert) erfolgen. Danach wird zwischen Black-Box-Test<br />
<strong>und</strong> White-Box-Test unterschieden.<br />
Bezüglich der Art der Testausführung wird zwischen statischem <strong>Testen</strong> <strong>und</strong><br />
dynamischem <strong>Testen</strong> unterschieden.<br />
Der Umfang der Testausführung wird durch die Art <strong>und</strong> die Anzahl der verwendeten<br />
Testfälle festgelegt. Danach wird zwischen repräsentativem Test, schwachstellenorientiertem<br />
Test <strong>und</strong> schadensausmaß-orientiertem Test unterschieden.<br />
Folgende Abbildung zeigt den Zusammenhang zwischen den Testarten. Weitgehend<br />
identisch mit der Testart statisches <strong>Testen</strong> ist die Testart logisches <strong>Testen</strong>, <strong>und</strong><br />
weitgehend identisch mit der Testart dynamisches <strong>Testen</strong> ist die Testart empirisches<br />
<strong>Testen</strong>. Beim logischen <strong>Testen</strong> (auch als Schreitischtest bezeichnet) wird das<br />
Testobjekt durch gedankliches Nachvollziehen seiner Funktionsweise getestet; beim<br />
empirischen <strong>Testen</strong> wird das Testobjekt auf einem Testsystem implementiert.<br />
Abbildung 6 - Zusammenhang zwischen den Testarten [Heinrich 2000 S. 416]
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 23<br />
4.1.1 Black-Box-<strong>Testen</strong> <strong>und</strong> White-Box-<strong>Testen</strong><br />
Das Black-Box-<strong>Testen</strong> wird auch als „funktionaler Test“ oder „exterior test“<br />
bezeichnet. Wesentliches Merkmal des Black-Box-<strong>Testen</strong>s ist, daß hier das<br />
Ein/Ausgabeverhalten ohne Berücksichtigung der inneren Struktur des Testobjektes<br />
(Schnittstellentest) geprüft wird. Das heißt der Tester ist nicht an dem internen<br />
Verhalten <strong>und</strong> an der Struktur des Programms interessiert, sondern daran, Umstände<br />
zu entdecken, bei denen sich das Programm nicht gemäß der Spezifikation verhält, er<br />
betrachtet das Programm eben als Blackbox. Die Testdaten werden nur aus der<br />
Spezifikation abgeleitet (d.h. ohne Kenntnisse <strong>von</strong> der internen Struktur des<br />
Programms zu verwenden). Wichtig ist, das Verhalten des Testobjekts bei<br />
fehlerhaften Eingabedaten zu überprüfen.<br />
Black-Box-<strong>Testen</strong> ist im wesentlichen für das dynamische <strong>Testen</strong>, d.h. die<br />
Ausführung mit Testdaten, <strong>von</strong> Bedeutung. Insofern ist Black-Box-<strong>Testen</strong> im<br />
wesentlichen auf das <strong>Testen</strong> <strong>von</strong> Programmen ausgerichtet; darüber hinaus ist diese<br />
Testart bei Verfügbarkeit entsprechender Hilfsmittel z.B. zum Prototyping auch für<br />
Dokumente <strong>von</strong> Bedeutung.<br />
Durch Black-Box-<strong>Testen</strong> kann das Fehlen <strong>von</strong> Aufgaben/Funktionen bzw.<br />
Eigenschaften des Testobjekts erkannt werden. Dagegen kann durch Black-Box-<br />
<strong>Testen</strong> keine Informationen darüber geliefert werden, ob alle Funktionen des<br />
Testobjekts auch tatsächlich benötigt werden oder ob Datenobjekte manipuliert<br />
werden, die keinen Einfluß auf das Ein/Ausgabeverhalten des Testobjekts haben.<br />
Solche Hinweise auf Design- <strong>und</strong> Implementierungsfehler liefert nur der White-Box-<br />
Test.<br />
Das White-Box-<strong>Testen</strong> wird auch als „Strukturtest“ oder „interior test“ bezeichnet.<br />
Wesentliches Merkmal des White-Box-<strong>Testen</strong> ist, daß hier das<br />
Ein/Ausgabeverhalten unter Betrachtung der inneren Strukturen (Schnittstellen- <strong>und</strong><br />
Strukturtest) geprüft wird. Das heißt der Tester definiert die Testdaten mit Kenntnis<br />
der Programmlogik. Das Ziel dabei ist, für jeden möglichen Pfad durch das<br />
Testobjekt das Verhalten des Testobjekts in Abhängigkeit <strong>von</strong> den Eingabedaten<br />
festzustellen. Bei der Wahl der Eingabedaten ist laut [Pomberger 1996 S. 152] zu<br />
berücksichtigen, daß<br />
• jedes Modul <strong>und</strong> jede Funktion des Testobjektes mindestens einmal<br />
aufgerufen wird,<br />
• jeder Zweig mindestens einmal durchlaufen wird,<br />
• möglichst viele Pfade durchlaufen werden.
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 24<br />
Für gut strukturierte Programme ist es praktisch unmöglich alle Pfade (alle<br />
möglichen Anweisungsfolgen) auszutesten. Auch bei einer automatischen<br />
Testdatengenerierung ist es unmöglich, alle Pfade zu testen, weil die Anzahl der<br />
dazu benötigten Testläufe viel zu hoch ist.<br />
Trotzdem ist der White-Box-Test eine der wichtigsten Testmethoden, weil man<br />
damit für eine begrenzte Anzahl <strong>von</strong> Programmpfaden die richtige Manipulation der<br />
Datenstrukturen <strong>und</strong> das Ein/Ausgabeverhalten <strong>von</strong> Testobjekten überprüfen kann.<br />
White-Box-<strong>Testen</strong> ist sowohl für das statische als auch dynamische <strong>Testen</strong> <strong>von</strong><br />
Bedeutung.<br />
Vorteil des White-Box-<strong>Testen</strong>s ist, daß das Vorhandensein nicht geforderter/<br />
gewünschter Aufgaben/Funktionen bzw. Eigenschaften des Testobjekts erkannt<br />
werden kann. Demgegenüber wird als Nachteil angeführt, daß das Fehlen<br />
erforderlicher Aufgaben/Funktionen nicht festgestellt wird; diese Aussage ist nicht<br />
generell gültig, da durch Bereitstellung der Soll-Ergebnisse <strong>und</strong> entsprechende<br />
Ergebnisprüfung auch derartige Fehler gef<strong>und</strong>en werden können.<br />
Insgesamt ist festzustellen, daß weder allein durch Black-Box-<strong>Testen</strong> noch durch<br />
ausschließliches White-Box-<strong>Testen</strong> eine vollständige Abdeckung der Testaufgaben<br />
gegeben ist; vielmehr sind beide Testarten in Kombination miteinander anzuwenden.<br />
4.1.2 Statisches <strong>und</strong> Dynamisches <strong>Testen</strong><br />
Statisches <strong>Testen</strong> dient zur Analyse <strong>von</strong> <strong>Software</strong>-Produkten, wobei ausschließlich<br />
das Testobjekt selbst als Datenbestand analysiert <strong>und</strong> ausgewertet wird. Es erfolgt<br />
keine Ausführung des Testobjekts mit Testdaten.<br />
Statisches <strong>Testen</strong> bezieht sich sowohl auf Dokumente als auch auf Programme. So<br />
ist z.B. das <strong>Testen</strong> <strong>von</strong> Dokumenten zum großen Teil durch statisches <strong>Testen</strong> zu<br />
realisieren; teilweise wird auch beim <strong>Testen</strong> <strong>von</strong> Dokumenten dynamisch getestet.<br />
Bei Programmen ist das statische <strong>Testen</strong> der erste Schritt nach der Codierung <strong>und</strong><br />
kann unterschiedlichen Umfang hinsichtlich der durchzuführenden Analysen haben.<br />
Die Aktivitäten beim statischen Test beziehen sich auf syntaktische, strukturelle oder<br />
semantische Analysen des Testobjekts. Das Ziel dabei besteht darin, zu einem<br />
möglichst frühen Zeitpunkt fehlerverdächtige Stellen des Testobjekts zu lokalisieren.<br />
Die wichtigsten Tätigkeiten der statischen Analyse sind [Pomberger 1996 S.150f]:<br />
• Code-Inspektion
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 25<br />
• Komplexitätsanalyse<br />
• Strukturanalyse<br />
• Datenflußanalyse<br />
Bei der Code-Inspektion versucht ein Team <strong>von</strong> <strong>Software</strong>technikern beim<br />
gemeinsamen Lesen des Codes Entwurfs- <strong>und</strong> Implementierungsfehler zu finden,<br />
diese aber nicht selbst auszubessern. Ein Inspektionsteam besteht gewöhnlich aus<br />
vier Leuten. Einer <strong>von</strong> ihnen ist der Moderator, der ein kompetenter, aber nicht am<br />
Projekt beteiligter <strong>Software</strong>techniker sein sollte. Die Pflichten des Moderators<br />
beinhalten die Protokollierung aller gef<strong>und</strong>enen Fehler <strong>und</strong> die Zeitplanung für die<br />
Inspektionssitzungen. Die weiteren Mitarbeiter sind der Designer des Testobjekts,<br />
der für die Implementierung zuständige Programmierer <strong>und</strong> der für den Test<br />
zuständige Mitarbeiter. Erst wenn die Inspektion vollständig abgeschlossen ist,<br />
werden der Designer <strong>und</strong> der Implementierer vom Moderator mit der Korrektur<br />
beauftragt.<br />
Abbildung 7 – Codeinspektion [Steindl 2000 S. 61]<br />
Das Ziel der Komplexitätsanalyse ist die Ermittlung <strong>von</strong> Meßzahlen für die<br />
Komplexität eines Programms. Darunter werden Komplexitätsmaße <strong>von</strong> Modulen,<br />
Schachtelungstiefen <strong>von</strong> Schleifen, Längen <strong>von</strong> Prozeduren <strong>und</strong> <strong>Methoden</strong><br />
verstanden. Die Ergebnisse der Komplexitätsanalyse gestatten es, in gewissen
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 26<br />
Grenzen Aussagen über die Qualität eines <strong>Software</strong>produktes zu machen <strong>und</strong><br />
fehlerträchtige Stellen im Programmsystem zu lokalisieren.<br />
Das Ziel der Strukturanalyse ist es, Strukturanomalien eines Testobjektes<br />
aufzudecken. Sie soll z.B. Auskunft darüber geben, ob alle Anweisungen eines<br />
Programms vom Programmanfang aus erreicht werden können, ob das<br />
Programmende <strong>von</strong> allen Anweisungen aus erreichbar ist, ob in einem Programm<br />
Schleifen mit Einsprüngen enthalten sind oder ob der Kontrollfluß unerlaubte<br />
Strukturen enthält.<br />
Bei der Datenflußanalyse sollen Datenflußanomalien aufgedeckt werden. Sie liefert<br />
Informationen darüber, ob ein Datenobjekt vor seiner Benutzung einen Wert erhalten<br />
hat <strong>und</strong> ob ein Datenobjekt nach einer Wertzuweisung auch benutzt wird. Die<br />
Datenflußanalyse soll sowohl für den Rumpf eines Testobjekts als auch für die<br />
Schnittstellen zwischen Testobjekten durchgeführt werden.<br />
Dynamisches <strong>Testen</strong> dient der Analyse <strong>von</strong> <strong>Software</strong>-Produkten durch Ausführung<br />
mit Testdaten. Ziel des dynamischen <strong>Testen</strong>s ist es, Ablauffehler zu erkennen, indem<br />
durch gezieltes Erzeugen <strong>und</strong> Auswertung einer Datenbasis diese mit Soll-<br />
Ergebnissen verglichen wird.<br />
Dynamisches <strong>Testen</strong> bezieht sich nicht nur auf Programmen sondern auch auf<br />
Dokumente, weil das gedankliche Durchrechnen eines Programms oder Verfolgen<br />
eines Ablaufplans mit Testdaten ebenso dazu dient Ergebnisse zu erzielen <strong>und</strong> diese<br />
einem Soll-/Ist-Vergleich zu unterziehen.<br />
Die Aktivitäten beim Dynamischen Test umfassen: [Pomberger 1996 S. 151]<br />
• Die Vorbereitung des Testobjekts zur Fehlerlokalisierung,<br />
• Die Bereitstellung einer Testumgebung,<br />
• Die Auswahl geeigneter Testfälle <strong>und</strong> -daten,<br />
• Die Testausführung <strong>und</strong> -auswertung.<br />
Im <strong>Software</strong>-Lebenszyklus darf <strong>und</strong> kann dynamisches <strong>Testen</strong> nicht fehlen. Jede<br />
Prozedur, jedes Modul <strong>und</strong> jede Klasse, jedes Subsystem <strong>und</strong> das Gesamtsystem<br />
müssen dynamisch getestet werden, auch wenn statische Tests oder<br />
Programmverifikationen durchgeführt wurden.<br />
Generell ist festzustellen, daß weder allein das statische noch das dynamische <strong>Testen</strong><br />
ausreichend ist, um alle möglichen Fehler zu erkennen. Vielmehr sind beide<br />
Testarten in unterschiedlichen Maße geeignet, bestimmte Fehler bzw. Fehlerklassen<br />
zu erkennen.
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 27<br />
4.1.3 Repräsentatives, Schadensausmaßorientiertes <strong>und</strong><br />
Schwachstellenorientiertes <strong>Testen</strong><br />
Welche Vorgehensweise beim <strong>Testen</strong> nach dem Umfang der Testausführung<br />
verwendet wird, hängt sowohl <strong>von</strong> der Auswahl der einzubeziehenden Daten ab als<br />
auch <strong>von</strong> den zu analysierenden Komponenten des Testobjekts. So wird der Umfang<br />
der Testausführung dieser Testarten entweder direkt durch Selektion entsprechender<br />
physischer Komponenten oder indirekt durch Auswahl entsprechender Testdaten<br />
festgelegt.<br />
Ein Test wird als repräsentativer Test bezeichnet, wenn Art <strong>und</strong> Umfang der<br />
Testfälle so ausgewählt werden, daß die Komponenten des Testobjekts entsprechend<br />
der Häufigkeit ihrer Verwendung getestet werden. Das heißt, daß für die<br />
Testausführung genau festgelegte Teile des Testobjekts (im wesentlichen beim<br />
<strong>Testen</strong> <strong>von</strong> Dokumenten) einbezogen werden <strong>und</strong> so bestimmte<br />
Aufgaben/Funktionen repräsentiert werden. Wichtig ist beim repräsentativen <strong>Testen</strong>,<br />
daß detaillierte Erwartungen hinsichtlich der Ergebnisse der Testausführung<br />
bestehen.<br />
Ein Test wird als schadensausmaßorientierter Test bezeichnet, wenn die<br />
Komponenten des Testobjekts, bei denen durch das Auftreten <strong>von</strong> Fehlern ein<br />
besonders hoher Schaden verursacht werden kann, intensiver getestet werden als die<br />
anderen Komponenten. Zur Einstufung der Testobjekt-Komponenten in<br />
Schadensklassen muß eine Risikoanalyse durchgeführt werden.<br />
Schwachstellenorientiertes <strong>Testen</strong> beschreibt die Vorgehensweise, bei der Art <strong>und</strong><br />
Umfang der Testfälle so ausgewählt werden, daß die Komponenten des Testobjekts<br />
entsprechend der auf Gr<strong>und</strong> <strong>von</strong> Erfahrung <strong>und</strong> Intuition vermuteten<br />
Fehlerhäufigkeit in den Komponenten dynamisch getestet werden, um die<br />
Annahmen zu verifizieren oder falsifizieren. Diese Vorgehensweise wird auch als<br />
„error guessing“ bezeichnet.<br />
Repräsentatives, statistisches <strong>und</strong> schwachstellenorientiertes <strong>Testen</strong> sind sowohl<br />
beim Black-Box- bzw. White-Box-<strong>Testen</strong> als auch beim statischen <strong>und</strong> dynamischen<br />
<strong>Testen</strong> anwendbar. Darüber hinaus sind sie für alle Testaufgaben anwendbar.<br />
4.2 Testaktivitäten der Testdurchführung<br />
Jede Testaktivität muß ein genau definiertes Ergebnis erfüllen, was beispielsweise<br />
Testfälle oder Testdaten für ein bestimmtes Testobjekt sind.
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 28<br />
Unterschieden werden hierzu verschiedenste Klassen:<br />
Abbildung 8 – Zusammenwirken der Klassen <strong>von</strong> Testaktivitäten [Schmitz 1982 S. 90]<br />
Testplanung:<br />
Legt die Aufgaben, <strong>Ziele</strong> <strong>und</strong> Vorgehensweisen fest, wobei eine strategische <strong>und</strong><br />
operative Testplanung erfolgt.<br />
Testdurchführung:<br />
Enthält alle Testdaten <strong>und</strong> realisiert den zuvor in der Testplanung erstellten Testplan.<br />
Testkontrolle:<br />
Überwacht <strong>und</strong> steuert den Testprozeß.<br />
Testdokumentationserstellung:<br />
Erfaßt jegliche Beschreibung der Vorgehensweisen beim <strong>Testen</strong>, der hierbei<br />
verwendeten Daten <strong>und</strong> die Ergebnisse selbst. Diese Aktivität läuft ständig, somit<br />
parallel zur Testplanung, Testdurchführung <strong>und</strong> Testkontrolle.<br />
Die Testdurchführung selbst wird schlußendlich wieder untergliedert in die<br />
Bereiche:<br />
• Testvorbereitung<br />
• Testausführung<br />
• Testauswertung<br />
Testvorbereitung:
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 29<br />
Die Testvorbereitung enthält alle nötigen Informationen zur Vorbereitung der<br />
Testausführung.<br />
Testausführung:<br />
Beinhaltet jegliche Testaktivitäten bzw. Daten, die zur Ausführung notwendig sind.<br />
Testauswertung:<br />
Die Ergebnisse hierzu werden auf verschiedenste weise bearbeitet.<br />
Gr<strong>und</strong>legend ist jedoch zu erwähnen, daß hier sämtliche Ergebnisse protokolliert<br />
werden, um eine Teststatistik zu erstellen.<br />
Die beiden unten angeführten Graphiken sollen hierzu einen Einblick über den<br />
Ablauf des Testes ermöglichen.<br />
Abbildung 9 – Zusammenwirken der Testaktivitäten für das <strong>Testen</strong> ohne Ablauf mit<br />
Testdaten [Schmitz 1982 S. 93]
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 30<br />
Abbildung 10 – Zusammenwirken der Testaktivitäten zur Ausführung eines Testobjekts mit<br />
Testdaten beim dynamischen <strong>Testen</strong> [Schmitz 1982 S. 94]<br />
4.2.1 Testvorbereitung<br />
4.2.1.1 Checklisten<br />
Checklisten dienen zur Erstellung <strong>von</strong> Analysepunkten beim nicht-automatisierten<br />
<strong>Testen</strong>. Somit können die Gr<strong>und</strong>lagen für Testaktivitäten aufgezeichnet werden <strong>und</strong><br />
erhalten zusätzlich Bedeutung für gewisse Testziele.<br />
Zur Erstellung <strong>von</strong> Checklisten können folgende <strong>Methoden</strong> verwendet werden:<br />
• Übernahme vorgegebener Standard-Checklisten<br />
• Modifikation vorgegebener Standard-Checklisten<br />
• Erstellung individueller Checklisten.
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 31<br />
Abbildung 11 – Checkliste mit Umgebungsstruktur [Steindl 2000 S. 60]<br />
4.2.1.2 Verwendungsnachweise <strong>von</strong> Elementen<br />
Verwendungsnachweise sind Sammlungen <strong>von</strong> Informationen, welche<br />
Informationen über die Elemente eines Testobjekts <strong>und</strong> dessen Verwendung<br />
beinhalten.<br />
Jene Nachweise können für jedes beliebige Testobjekt formuliert werden was sowohl<br />
Dokumente als auch Programme beinhaltet.<br />
4.2.1.3 Testfallermittlung<br />
Ein Testfall besteht aus allen Eingabedaten, die für die Testausführung eines<br />
Testobjektes zur Verfügung stehen. Die Testfallermittlung ist somit das bestimmen<br />
jener Menge <strong>von</strong> Daten um einen komplexen <strong>Software</strong>test durchzuführen.<br />
Vollständiges <strong>Testen</strong> ist mit Testdaten in der Regel (auch bei kleinen Testobjekten)<br />
gr<strong>und</strong>sätzlich nicht möglich, was dazu führt, daß im wesentlichen nicht alle Fehler<br />
korrigiert bzw. vermieden werden können.<br />
Ein wichtiger Punkt hierzu ist die gegebenen Ressourcen (Zeit, Kosten) optimal<br />
auszunützen um möglichst gute Fehlerergebnisse zu erzielen.
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 32<br />
4.2.1.4 Testdatenerstellung<br />
Signifikant hierzu ist die Bereitstellung <strong>von</strong> Testdaten. Testdaten selbst werden in<br />
die Kategorien Normal-, Falsch- <strong>und</strong> Grenzwerte eingeordnet.<br />
Abbildung 12 – Normal-, Falsch- <strong>und</strong> Grenzwerte [Steindl 2000 S. 72]<br />
<strong>Methoden</strong> zur Erstellung passender Daten sehen wie folgt aus:<br />
• Konstruktion <strong>von</strong> Testdaten: hierbei ergeben sich Daten aus der<br />
vorausgegangenen Testfallermittlung<br />
• Selektion <strong>von</strong> Originaldaten: ist dann zutreffend, wenn reale Testfälle<br />
(qualitativ oder auch quantitative Daten) aus der Arbeitsumgebung in die<br />
Erstellung der Testdaten einfließen.<br />
Abbildung 13 – Verwendung der <strong>Methoden</strong> zur Testdatenerstellung in den Testphasen des<br />
Programmtestens [Schmitz 1982 S. 120]
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 33<br />
4.2.1.5 Soll-Ergebnis-Ermittlung<br />
Ziel der Soll-Ergebnis-Ermittlung ist es erwartete Ergebnisse im vorhinein zu<br />
errechnen um später Vergleiche zu den Ist-Ergebnissen zu erstellen.<br />
Soll-Ergebnisse können auf zwei verschiedene Arten ermittelt werden.<br />
• datenorientiert: Bestimmung der Werte <strong>von</strong> Datenelementen<br />
• produktorientiert: Bestimmung <strong>von</strong> Strukturelementen eines Testobjekts<br />
4.2.1.6 Testumgebung<br />
Die Testumbebung beinhaltet das bereitstellen <strong>von</strong> externen Schnittstellen des<br />
jeweiligen Testobjekts <strong>und</strong> muß das Verhalten desselben im Testlauf auch<br />
nachbilden bzw. aufzeichnen können. Diese Aufzeichnungen bestehen aus der<br />
Übernahme der Steuerung <strong>und</strong> dessen Daten plus der Rückgabe dieser.<br />
Gr<strong>und</strong>sätzlich gibt es drei Arten <strong>von</strong> Schnittstellen:<br />
• Treiber (wird dem Testobjekt vorgeschaltet <strong>und</strong> versorgen somit das<br />
Testobjekt mit Testdaten)<br />
• Platzhalter (ist ein Modul, welches einen nicht vorhandenen Baustein<br />
ersetzen soll.<br />
• Inversion (beinhaltet die Änderung des Testobjekts, falls es sich um ein<br />
Unterprogramm handelt)<br />
Abbildung 14 – Testumgebung für das <strong>Testen</strong> des Programmbausteins ‚B2’Schematische<br />
Darstellung [Schmitz 1982 S. 126]
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 34<br />
4.2.1.7 Testprozedur<br />
Beinhaltet jegliche Aktivitäten zur Erstellung der Prozeduren für die Testausführung.<br />
Wesentlicher Bestandteil ist das Erstellen aller Steueranweisungen in der Job-<br />
Control-Language um die statische Testausführung des Testobjekts automatisiert<br />
durchführen zu können bzw. die Testausführung durch Ablauf des Testobjekts auf<br />
einer Anlage zu ermöglichen.<br />
4.2.2 Testausführung<br />
4.2.2.1 Statische Testausführung<br />
Die statische Testausführung umfaßt die Testaktivitäten, die beim <strong>Testen</strong> ohne<br />
Ablauf mit Testdaten zur Fehlererkennung erforderlich sind, deshalb wird jene<br />
Ausführung meist zum <strong>Testen</strong> <strong>von</strong> Programmen verwendet. Dokumente werden<br />
hiermit zwar auch getestet, jedoch in einem wesentlich geringeren Ausmaß.<br />
Die Bedeutung der statischen Testausführung ergibt sich neben wirtschaftlichen<br />
Aspekten daraus, daß teilweise Testaufgaben nur statisch realisiert werden können.<br />
Beim Verwenden der statischen Testausführung sollen nachfolgende Testaktivitäten<br />
unterschieden werden:<br />
• Analyse der Einhaltung <strong>von</strong> Darstellungskonventionen<br />
• Analyse der Dokumentationseigenschaften<br />
• Analyse der Komplexität<br />
• Analyse der Kontrollstruktur<br />
• Analyse des Datenflusses<br />
• Analyse des Detaillierungsgrades<br />
4.2.2.2 Dynamische Testausführung<br />
Es werden jegliche Testfälle erprobt, welche Daten zur Ausführung erfordern.<br />
Testaktivitäten hierzu sind: [Schmitz 1982 S. 128]<br />
• Ausführung des Testobjekts: ist der reale Ablauf auf einer ADV-Anlage<br />
• Simulation einer Testumgebung: Es werden reale Umgebungen simuliert,<br />
wobei die Testumgebung Elemente eines ADV-Systems repräsentiert, die für<br />
die dynamische Testausführung eines Testobjekts notwendig, aber nicht<br />
vorhanden sind.
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 35<br />
• Ablaufprotokollierung: Es wird der chronologische Ablauf aufgezeichnet um<br />
später einzelne Schritte nachvollziehen zu können.<br />
Objekte hierzu sind:<br />
o Kontrollfluß (Durchlauf durch Programmpunkte in Form eines<br />
Protokolls)<br />
o Datenfluß (protokolliert werden Zustandsänderungen <strong>von</strong> Variablen)<br />
• Erstellen einer Ablaufstatistik: ermittelt Daten des Ablaufprotokolls<br />
(beispielsweise: Durchlaufhäufigkeiten an definierten stellen im Testobjekt,<br />
Nutzugshäufigkeiten <strong>von</strong> Datenelementen oder angenommene Wertebereiche<br />
<strong>von</strong> Datenelementen)<br />
4.2.3 Testauswertung<br />
In der Testauswertung werden alle Testaktivitäten beinhaltet. Im einzelnen sind dies<br />
• die Ergebnisprüfung<br />
• die Testergebnisprotokollierung <strong>und</strong><br />
• das Erstellen der Teststatistik<br />
4.2.3.1 Ergebnisprüfung<br />
Die Ergebnisprüfung vergleicht die Soll-Daten mit den Ist-Daten, womit eine<br />
Charakterisierung der Fehler möglich ist.<br />
Man unterscheidet hier zwei Arten <strong>von</strong> Ergebnissen:<br />
• datenorientierte Ergebnisse (beziehen sich auf den Inhalt <strong>von</strong><br />
Datenelementen während der Testausführung oder am Ende der<br />
Testausführung, d.h. auf Zwischen- <strong>und</strong> Endergebnisse)<br />
• produktorientierte Ergebnisse (beziehen sich auf Strukturelemente des<br />
Testobjekts <strong>und</strong> deren Ausführung im Testablauf – beinhaltet eine<br />
wesentliche Bedeutung beim <strong>Testen</strong> <strong>von</strong> Programmen)<br />
Die Formen selbst lassen sich in zwei Gruppen einteilen<br />
• Ergebnisprüfung nach dem Ablauf (Ist-Soll-Ergebnisse werden bei<br />
Endergebnissen verglichen)<br />
• Ergebnisprüfung während des Ablaufs (Ist-Soll-Ergebnisse werden mittels<br />
Zwischen- <strong>und</strong> Ergebnissen verglichen
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 36<br />
4.2.3.2 Testergebnisprotokollierung<br />
Die Ergebnisse werden hier in Protokollform gespeichert um eine spätere<br />
unabhängige Weiterverarbeitung zu garantieren.<br />
Protokolliert werden (meist) folgende Daten:<br />
• Durchgeführte Testaktivitäten<br />
• beteiligte Personen bei der Testausführung<br />
• bearbeitete Analysepunkte einer Checkliste<br />
• Erfassung der Ist-Ergebnisse der Testausführung<br />
• Erfassung <strong>und</strong> Charakterisierung eines erkannten Fehlers<br />
4.2.3.3 Erstellen der Teststatistik<br />
Hierzu werden meist die Ergebnisse kumuliert (über mehrere Testläufe) um<br />
Ablaufstatistiken zu erstellen.<br />
Häufige Größen der Teststatistiken:<br />
• Testmaßzahlen<br />
• Nicht-durchlaufene bzw. nicht fehlerfrei durchlaufene Strukturelemente<br />
• Gesamtzahl der Erkannten Fehler<br />
• (Testaufwand)<br />
Zweck <strong>von</strong> Teststatistiken:<br />
• Bereitstellung <strong>von</strong> Informationen für Testdatenerstellungen<br />
• Bereitstellung <strong>von</strong> verdichteten Daten für weitere Vorgehensweise beim<br />
<strong>Testen</strong><br />
• Breitstellung <strong>von</strong> Statistiken über Fehlerfindung <strong>und</strong> Fehlerbehebung<br />
• Bereitstellung <strong>von</strong> Daten zur Entscheidung über die Freigabe oder Abnahme<br />
<strong>von</strong> Produkten im Rahmen der Testkontrolle <strong>und</strong> Qualitätskontrolle
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 37<br />
Abbildungsverzeichnis<br />
Abbildung 1 - Fehlerterminologie [Steindl 2000 S. 36]...........................................10<br />
Abbildung 2 - Fehlerarten [Steindl 2000 S. 37].......................................................10<br />
Abbildung 3 - Das Pestizid Paradoxon [Steindl 2000 S. 9]......................................13<br />
Abbildung 4 – <strong>Software</strong> Lebenszyklus [Steindl 2000 S. 6]......................................16<br />
Abbildung 5 - Testfallmatrix [Heinrich 2000 S. 414] ..............................................19<br />
Abbildung 6 - Zusammenhang zwischen den Testarten [Heinrich 2000 S. 416] ......22<br />
Abbildung 7 – Codeinspektion [Steindl 2000 S. 61]................................................25<br />
Abbildung 8 – Zusammenwirken der Klassen <strong>von</strong> Testaktivitäten [Schmitz 1982 S.<br />
90] ..................................................................................................................28<br />
Abbildung 9 – Zusammenwirken der Testaktivitäten für das <strong>Testen</strong> ohne Ablauf mit<br />
Testdaten [Schmitz 1982 S. 93].......................................................................29<br />
Abbildung 10 – Zusammenwirken der Testaktivitäten zur Ausführung eines<br />
Testobjekts mit Testdaten beim dynamischen <strong>Testen</strong> [Schmitz 1982 S. 94].....30<br />
Abbildung 11 – Checkliste mit Umgebungsstruktur [Steindl 2000 S. 60] ................31<br />
Abbildung 12 – Normal-, Falsch- <strong>und</strong> Grenzwerte [Steindl 2000 S. 72]..................32<br />
Abbildung 13 – Verwendung der <strong>Methoden</strong> zur Testdatenerstellung in den<br />
Testphasen des Programmtestens [Schmitz 1982 S. 120].................................32<br />
Abbildung 14 – Testumgebung für das <strong>Testen</strong> des Programmbausteins<br />
‚B2’Schematische Darstellung [Schmitz 1982 S. 126].....................................33
<strong>Testen</strong> <strong>von</strong> <strong>Software</strong>: <strong>Ziele</strong>, <strong>Begriffe</strong> <strong>und</strong> <strong>Methoden</strong> 38<br />
Literaturverzeichnis<br />
[Beizer 1990]<br />
[Beizer 1995]<br />
[Heinrich 2000]<br />
[Jorgensen 1995]<br />
[Kowalk 1993]<br />
[Müllerburg 1996]<br />
[Myers 1989]<br />
[Parrington 1990]<br />
[Pomberger 1996]<br />
[Schmitz 1982]<br />
[Steindl 2000]<br />
Boris Beizer: <strong>Software</strong> Testing Techniques, Second Edition,<br />
Van Nostrand Reinhold, 1990<br />
Boris Beizer: Black-Box Testing: Techniques for Functional<br />
Testing of <strong>Software</strong> and Systems, Wiley, 1995<br />
Lutz J. Heinrich: Management <strong>von</strong> Informatik-Projekten,<br />
Teil B, 6., korrigierte Aufl., Skriptum, 2000, S. 408-418<br />
Paul C. Jorgensen: <strong>Software</strong> Testing: A Craftsman’s<br />
Approach, CRC Press, 1995<br />
Wolfgang P. Kowalk: Korrekte <strong>Software</strong>: Semantik,<br />
Spezifikation, Verifikation <strong>und</strong> <strong>Testen</strong> <strong>von</strong> Programmen, BI-<br />
Wiss.-Verl., 1993<br />
Monika Müllerburg: Gesellschaft für Informatik/Fachgruppe<br />
Test, Analyse <strong>und</strong> Verifikation <strong>von</strong> <strong>Software</strong>: Test, Analyse<br />
<strong>und</strong> Verifikation <strong>von</strong> <strong>Software</strong>, aus der Arbeit der<br />
Fachgruppe 2.1.7 Test, Analyse <strong>und</strong> Verifikation <strong>von</strong><br />
<strong>Software</strong> (TAV) der Gesellschaft für Informatik (GI),<br />
Oldenburg, 1996<br />
Glenford J Myers: The Art of <strong>Software</strong> Testing <br />
Methodisches <strong>Testen</strong> <strong>von</strong> Programmen, 3. Aufl.,<br />
Oldenbourg, 1989<br />
Norman Parrington, Marc Roper: Understanding <strong>Software</strong><br />
Testing <strong>Software</strong>-Test: <strong>Ziele</strong>, Anwendungen,<br />
<strong>Methoden</strong>, McGraw-Hill, 1990<br />
Gustav Pomberger, Günther Blaschek: <strong>Software</strong> Engineering,<br />
Prototyping <strong>und</strong> objektorientierte <strong>Software</strong>-Entwicklung, 2.<br />
Aufl., Carl Hanser, 1996, S. 146-160<br />
Paul Schmitz, Heinz Bons, Rudolf van Megen: <strong>Testen</strong> im<br />
<strong>Software</strong>-Lebenszyklus, Braunschweig, 1982<br />
Christoph Steindl: <strong>Testen</strong> <strong>von</strong> <strong>Software</strong>systemen, Unterlagen<br />
zur kombinierten Lehrveranstaltung, Skriptum, 2000