07.09.2014 Aufrufe

Testen von Software: Ziele, Begriffe und Methoden

Testen von Software: Ziele, Begriffe und Methoden

Testen von Software: Ziele, Begriffe und Methoden

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!