Testmethoden

      Testmethoden

          Testmethoden

              Testmethoden

                  Testmethoden

                      Testmethoden

                          Testmethoden

                              Bevor konkret auf den adaptiven webbasierten Fall eingegangen wird, sollen zunächst geeignete allgemeine Testmethoden und -techniken erläutert werden. Mit Bezug auf den Inhalt von Abb. 1 und dem angefügten Erläuterungstext lässt sich bereits vermuten, dass verschiedene Ansatzpunkte mit unterschiedlichen Technologien eingeführt werden müssen, um einen genauen Überblick zum Verhalten des Websystems zu erhalten. Um dies mit theoretischem Verständnis zu unterlegen, sollen dem Leser zu Beginn dieses Kapitels die nötigen Grundlagen aufgezeigt werden, auf dessen Verständnis aufbauend eine Übersicht geeigneter Testtools folgt.

                              Grundsätzlich unterscheidet man im Software-Bereich nach [Wiki04] zwischen statischen und dynamischen Testfällen. Erstere, aus den Schritten “Verifikation” und “Analyse” bestehend, sollen die semantische Korrektheit des Quellcodes nachweisen. Dynamische Tests, die den hauptsächlichen Teil der Performance- und Lasttest-Palette einnehmen, sind am Besten als “aktives und organisiertes Herumprobieren” zu bezeichnen.

                              Um den allgemeingültigen Überblick über Software-Test zu gewährleisten, wird zunächst eine Definition der oben erwähnten statischen Testmöglichkeiten folgen. Darauf aufbauend sollen dynamische Testmethoden ausführlich vorgestellt werden. Die erlangten Erkenntnisse bilden geeignetes Hintergrundwissen, um im nächsten Abschnitt die genannten Tools zu kategorisieren und eine auf das Websystem Amacont angepasste Auswahl zu treffen.


                              Die erste Stufe eines statischen Testes umfasst das Verifizieren des Quellcodes, bei welchem die Abarbeitung eines Codefragmentes als korrekt bewiesen wird. Die DIN EN ISO 8402 versteht dabei unter Verifizierung das Bestätigen aufgrund einer Untersuchung und durch Bereitstellung eines Nachweises, daß festgelegte Forderungen erfüllt worden sind. Diese Norm bezieht sich auf die Qualitätssicherung von organisatorischen und betrieblichen Abläufen. Sie kommt folglich nicht direkt aus dem Bereich der Datenverarbeitung, weshalb keine weiteren Spezifizierungen vorgenommen werden. Der Nachweis in der Softwaretechnik kann zum einen über Automatenmodelle (Kellerautomat, Turing-Maschine), als auch mit Hilfe von Methoden der formalen Semantik erfolgen. Es handelt sich dabei meist um automatische bzw. halbautomatische Verfahren, deren Kosten allerdings schwer einschätzbar sind.

                              Als zweite Stufe des statischen Tests wird die Analyse angesehen, bei der das untersuchte Objekt oder Subjekt zergliedert und in seine Bestandteile zerlegt wird. Diese werden anschließend geordnet und ausgewertet.

                              Zu diesem Zeitpunkt fehlen noch standardisierte bzw. leicht anwendbare Datenbasen und Maße zur automatischen bzw. halbautomatischen Formulierung von Qualitätsstufen und -zielen. Manuelle analysierende Verfahren wie Inspektion, Review, Walktrough, Durchsprache und Audits sind häufig Bestandteil formalisierter Qualitätsmanagementansätze im Projektalltag. Sie werden auf fast alle Phasen der Entwicklung angewendet. Teammitglieder, externe Spezialisten, echte Benutzer und als Moderator eingesetzte Personen überprüfen dabei anhand einer aufgestellten Checkliste die Korrektheit der erstellten Informationen.

                              Für das aktuelle Web-System sind diese Testmethoden ungeeignet, da ihre Spezialisierung eher auf den Beweis der Korrektheit als auf die Testung der Performance hinzielen. Bei Problemen, die durch Lasttests entstehen, sollten die als Bottleneck identifizierten Komponenten in einem Review erneut betrachtet werden.


                              Im Gegensatz zu statischen Testverfahren beziehen sich dynamische Tests auf die Ausführung der zu analysierenden Software unter kontrollierten Vorbedingungen. Es wird überprüft, ob die Software die definierten Inputdaten korrekt verarbeitet und somit das beobachtete Ergebnis mit dem erwarteten übereinstimmt. Die bekanntesten dynamischen Testverfahren sind “Black-Box-” sowie “White-Box-Test”, welche den Hauptbestandteil von Performance- und Lastentests darstellen.

                              Als White-Box oder auch Glass-Box wird die Methode des dynamischen Software-Tests bezeichnet, bei welcher Informationen über die innere Beschaffenheit des Testobjektes bekannt sind. Es wird direkt am Quellcode getestet. Ziel ist die Sicherstellung, dass die Testfälle gewisse Hinlänglichkeitskriterien erfüllen, welche zwischen kontrollflussabhängigen und datenflussabhängigen Testkriterien unterschieden werden. Datenflussabhängige Testkriterien beziehen sich dabei auf die Benutzung von Variablen, die Bestimmung von Grenzwerten und die Einhaltung von Grenzfeldern. Kontrollflussabhängige Testkriterien dagegen werden bei [Ger02] ausführlich wie folgt aufgeschlüsselt:

                              Anweisungsüberdeckend (C0)

                              Jede Anweisung wird hier mindestens einmal ausgeführt.

                              Zweigüberdeckend (C1)

                              Jede Bedingung in einer Verzweigung nimmt die Werte TRUE und FALSE an und jeder Programmzweig wird mindestens einmal ausgeführt.

                              Mehrfachbedingungsüberdeckung

                              In zusammengesetzten Bedingungen nimmt hier jede atomare Bedingung die Werte TRUE und FALSE an.

                              Pfadüberdeckung

                              Alle denkbaren Programmpfade (und Schleifen) werden durchlaufen.

                              Ein Kennzeichen des White-Box-Testes ist allerdings, dass auch ein Hinlänglichkeitskriterien erfüllendes Systeme, dennoch fehlerbehaftet sein kann,

                              1. die Testfälle nicht aus der Spezifikation des Programms hergeleitet werden, sondern aus dem Programm selbst. Getestet werden kann daher nur die Korrektheit eines Systems, nicht die geforderte Semantik.
                              2. Auch wenn alle Programmpfade getestet worden sind, bedeutet es nicht, dass ein Programm fehlerfrei arbeitet. Der Fall, dass im Graphen des Kontrollflusses Kanten fehlen, wird nicht erkannt.

                              Da reine White-Box-Tests als Testmethodik demzufolge nicht ausreichen, kombinieren sinnvolle Testreihen sowohl White-Box- als auch Black-Box-Tests.

                              WhiteBox-Tests helfen, Fehler in bestimmten Komponenten bzw. sogar die fehlerauslösenden Komponenten selbst zu identifizieren. Black-Box-Tests übernehmen die Fehlerfindung auf Seiten der Spezifikation und decken damit einen größeren Bereich ab.

                              Zwei Fehler in zwei Komponenten können sich scheinbar aufheben und den Eindruck eines korrekt funktionierenden Gesamtsystems erwecken. Dies kann durch WhiteBox-Tests leichter erkannt werden, wobei Black-Box-Test meist nur einen der beiden Fehler als vermeintliche Regression, also der Wiederkehr eines bereits früher beseitigten Fehlers, erkennen.

                              Der Black-Box-Test bezeichnet die Methode des dynamischen Software-Tests, bei dem keine Kenntnisse über die innere Funktionsweise des zu testenden Systems vorliegen. Er bestimmt die Güte des Codes und beschränkt sich auf das funktionsorientierte Testen. Man nennt ihn deshalb auch Funktionstest. Für die Ermittlung der Testfälle wird lediglich die Spezifikation, nicht aber die Implementierung des Testobjektes herangezogen. Die genaue Beschaffenheit des Codes wird nicht überprüft, er wird als Black-Box mit Eingang und Ausgang behandelt.

                              Der Grund für das bewusste Verzichten auf Quellcode-Informationen ist, dass Programmierer keine Tests "um ihre eigenen Fehler herum" entwickeln und somit Lücken in der Implementierung übersehen können. Ein Entwickler, der Kenntnisse über die innere Funktionsweise eines Systems besitzt, könnte unabsichtlich aufgrund seiner persönlichen Auffassung potentielle Fehlerquellen vernachlässigen oder anders als die Spezifikation interpretieren. Weiterhin eignen sich Black-Box-Tests ebenso als zusätzliche Stütze zur Überprüfung der Spezifikation auf Vollständigkeit, da sich die verwendeten Eingangsdaten aus den Funktionsbereichen des jeweiligen Softwaresystems ergeben. Sie bilden je nach den unterschiedlichen Merkmalen dieser Bereiche verschiedene Äquivalenzklassen von Testdaten. Die initiale Einteilungsform von Testdaten besteht aus Normalwerten, Extremwerten und Falschwerten.

                              Ein erfolgreicher Black-Box-Test stellt ebenfalls keine Garantie für die Fehlerfreiheit der Software dar, da in frühen Phasen des Softwareentwurfs erstellte Spezifikationen spätere Detail- und Implementationsentscheidungen nicht abdecken. Ein vollständiger Black-Box-Test ist somit, ebenso wie ein isolierter White-Box-Test, nicht sinnvoll. Black-Box-Tests sind ausserdem wesentlich aufwendiger in der Durchführung, da sie eine größere organisatorische Infrastruktur in Form eines eigenen Teams benötigen.

                              Eine Herausforderung bei den folgenden Performance- und Lasttests wird daher die Identifikation einer minimalen Menge von Testfällen sein, welche ein Maximum der spezifizierten Funktionalität prüft.

                              Ein Ansatz aus dem “Extreme Programming” stellen die Grey-Box-Tests dar. Diese versuchen mit Hilfe testgesteuerter Programmierung die gewünschten Vorteile von Black-Box- und White-Box-Tests weitgehend miteinander zu verbinden und gleichzeitig die unerwünschten Nachteile möglichst zu eliminieren. Ihre hnlichkeit mit White-Box-Test besteht darin, dass sie ebenfalls von den gleichen Entwicklern wie das zu testende System geschrieben werden. Mit dem Black-Box Test teilen sie sich anfänglich die Unkenntnis über die Interna des zu testenden Systems, weil der Grey-Box Test vor dem zu testenden System geschrieben wird.

                              Somit kann man Teilkomponenten und Gesamtsysteme mit dem geringen organisatorischen Aufwand der White Box Tests prüfen, ohne eventuell "um Fehler herum" zu testen. Grey-Box Tests als Bestandteil agiler Prozesse benötigen einen hohen Grad an Disziplin oder weitere Prozess-Methoden des Software-Engineerings wie z.B. Paarprogrammierung oder Akzeptanztests, um praktikabel und erfolgreich einsetzbar zu sein. Mögliche Ablaufvarianten dieser Test-Methode sind unter [Wes04] zu finden und sehr gut erläutert.

                          Bevor konkret auf den adaptiven webbasierten Fall eingegangen wird, sollen zunächst geeignete allgemeine Testmethoden und -techniken erläutert werden. Mit Bezug auf den Inhalt von Abb. 1 und dem angefügten Erläuterungstext lässt sich bereits vermuten, dass verschiedene Ansatzpunkte mit unterschiedlichen Technologien eingeführt werden müssen, um einen genauen Überblick zum Verhalten des Websystems zu erhalten. Um dies mit theoretischem Verständnis zu unterlegen, sollen dem Leser zu Beginn dieses Kapitels die nötigen Grundlagen aufgezeigt werden, auf dessen Verständnis aufbauend eine Übersicht geeigneter Testtools folgt.

                          Testmethoden

                          Grundsätzlich unterscheidet man im Software-Bereich nach [Wiki04] zwischen statischen und dynamischen Testfällen. Erstere, aus den Schritten “Verifikation” und “Analyse” bestehend, sollen die semantische Korrektheit des Quellcodes nachweisen. Dynamische Tests, die den hauptsächlichen Teil der Performance- und Lasttest-Palette einnehmen, sind am Besten als “aktives und organisiertes Herumprobieren” zu bezeichnen.

                          Um den allgemeingültigen Überblick über Software-Test zu gewährleisten, wird zunächst eine Definition der oben erwähnten statischen Testmöglichkeiten folgen. Darauf aufbauend sollen dynamische Testmethoden ausführlich vorgestellt werden. Die erlangten Erkenntnisse bilden geeignetes Hintergrundwissen, um im nächsten Abschnitt die genannten Tools zu kategorisieren und eine auf das Websystem Amacont angepasste Auswahl zu treffen.


                          Statische Tests

                          Die erste Stufe eines statischen Testes umfasst das Verifizieren des Quellcodes, bei welchem die Abarbeitung eines Codefragmentes als korrekt bewiesen wird. Die DIN EN ISO 8402 versteht dabei unter Verifizierung das Bestätigen aufgrund einer Untersuchung und durch Bereitstellung eines Nachweises, daß festgelegte Forderungen erfüllt worden sind. Diese Norm bezieht sich auf die Qualitätssicherung von organisatorischen und betrieblichen Abläufen. Sie kommt folglich nicht direkt aus dem Bereich der Datenverarbeitung, weshalb keine weiteren Spezifizierungen vorgenommen werden. Der Nachweis in der Softwaretechnik kann zum einen über Automatenmodelle (Kellerautomat, Turing-Maschine), als auch mit Hilfe von Methoden der formalen Semantik erfolgen. Es handelt sich dabei meist um automatische bzw. halbautomatische Verfahren, deren Kosten allerdings schwer einschätzbar sind.

                          Als zweite Stufe des statischen Tests wird die Analyse angesehen, bei der das untersuchte Objekt oder Subjekt zergliedert und in seine Bestandteile zerlegt wird. Diese werden anschließend geordnet und ausgewertet.

                          Zu diesem Zeitpunkt fehlen noch standardisierte bzw. leicht anwendbare Datenbasen und Maße zur automatischen bzw. halbautomatischen Formulierung von Qualitätsstufen und -zielen. Manuelle analysierende Verfahren wie Inspektion, Review, Walktrough, Durchsprache und Audits sind häufig Bestandteil formalisierter Qualitätsmanagementansätze im Projektalltag. Sie werden auf fast alle Phasen der Entwicklung angewendet. Teammitglieder, externe Spezialisten, echte Benutzer und als Moderator eingesetzte Personen überprüfen dabei anhand einer aufgestellten Checkliste die Korrektheit der erstellten Informationen.

                          Für das aktuelle Web-System sind diese Testmethoden ungeeignet, da ihre Spezialisierung eher auf den Beweis der Korrektheit als auf die Testung der Performance hinzielen. Bei Problemen, die durch Lasttests entstehen, sollten die als Bottleneck identifizierten Komponenten in einem Review erneut betrachtet werden.


                          Dynamische Tests

                          Im Gegensatz zu statischen Testverfahren beziehen sich dynamische Tests auf die Ausführung der zu analysierenden Software unter kontrollierten Vorbedingungen. Es wird überprüft, ob die Software die definierten Inputdaten korrekt verarbeitet und somit das beobachtete Ergebnis mit dem erwarteten übereinstimmt. Die bekanntesten dynamischen Testverfahren sind “Black-Box-” sowie “White-Box-Test”, welche den Hauptbestandteil von Performance- und Lastentests darstellen.

                          White-Box

                          Als White-Box oder auch Glass-Box wird die Methode des dynamischen Software-Tests bezeichnet, bei welcher Informationen über die innere Beschaffenheit des Testobjektes bekannt sind. Es wird direkt am Quellcode getestet. Ziel ist die Sicherstellung, dass die Testfälle gewisse Hinlänglichkeitskriterien erfüllen, welche zwischen kontrollflussabhängigen und datenflussabhängigen Testkriterien unterschieden werden. Datenflussabhängige Testkriterien beziehen sich dabei auf die Benutzung von Variablen, die Bestimmung von Grenzwerten und die Einhaltung von Grenzfeldern. Kontrollflussabhängige Testkriterien dagegen werden bei [Ger02] ausführlich wie folgt aufgeschlüsselt:

                          Anweisungsüberdeckend (C0)

                          Jede Anweisung wird hier mindestens einmal ausgeführt.

                          Zweigüberdeckend (C1)

                          Jede Bedingung in einer Verzweigung nimmt die Werte TRUE und FALSE an und jeder Programmzweig wird mindestens einmal ausgeführt.

                          Mehrfachbedingungsüberdeckung

                          In zusammengesetzten Bedingungen nimmt hier jede atomare Bedingung die Werte TRUE und FALSE an.

                          Pfadüberdeckung

                          Alle denkbaren Programmpfade (und Schleifen) werden durchlaufen.

                          Ein Kennzeichen des White-Box-Testes ist allerdings, dass auch ein Hinlänglichkeitskriterien erfüllendes Systeme, dennoch fehlerbehaftet sein kann,

                          1. die Testfälle nicht aus der Spezifikation des Programms hergeleitet werden, sondern aus dem Programm selbst. Getestet werden kann daher nur die Korrektheit eines Systems, nicht die geforderte Semantik.
                          2. Auch wenn alle Programmpfade getestet worden sind, bedeutet es nicht, dass ein Programm fehlerfrei arbeitet. Der Fall, dass im Graphen des Kontrollflusses Kanten fehlen, wird nicht erkannt.

                          Da reine White-Box-Tests als Testmethodik demzufolge nicht ausreichen, kombinieren sinnvolle Testreihen sowohl White-Box- als auch Black-Box-Tests.

                          WhiteBox-Tests helfen, Fehler in bestimmten Komponenten bzw. sogar die fehlerauslösenden Komponenten selbst zu identifizieren. Black-Box-Tests übernehmen die Fehlerfindung auf Seiten der Spezifikation und decken damit einen größeren Bereich ab.

                          Zwei Fehler in zwei Komponenten können sich scheinbar aufheben und den Eindruck eines korrekt funktionierenden Gesamtsystems erwecken. Dies kann durch WhiteBox-Tests leichter erkannt werden, wobei Black-Box-Test meist nur einen der beiden Fehler als vermeintliche Regression, also der Wiederkehr eines bereits früher beseitigten Fehlers, erkennen.

                          Black-Box

                          Der Black-Box-Test bezeichnet die Methode des dynamischen Software-Tests, bei dem keine Kenntnisse über die innere Funktionsweise des zu testenden Systems vorliegen. Er bestimmt die Güte des Codes und beschränkt sich auf das funktionsorientierte Testen. Man nennt ihn deshalb auch Funktionstest. Für die Ermittlung der Testfälle wird lediglich die Spezifikation, nicht aber die Implementierung des Testobjektes herangezogen. Die genaue Beschaffenheit des Codes wird nicht überprüft, er wird als Black-Box mit Eingang und Ausgang behandelt.

                          Der Grund für das bewusste Verzichten auf Quellcode-Informationen ist, dass Programmierer keine Tests "um ihre eigenen Fehler herum" entwickeln und somit Lücken in der Implementierung übersehen können. Ein Entwickler, der Kenntnisse über die innere Funktionsweise eines Systems besitzt, könnte unabsichtlich aufgrund seiner persönlichen Auffassung potentielle Fehlerquellen vernachlässigen oder anders als die Spezifikation interpretieren. Weiterhin eignen sich Black-Box-Tests ebenso als zusätzliche Stütze zur Überprüfung der Spezifikation auf Vollständigkeit, da sich die verwendeten Eingangsdaten aus den Funktionsbereichen des jeweiligen Softwaresystems ergeben. Sie bilden je nach den unterschiedlichen Merkmalen dieser Bereiche verschiedene Äquivalenzklassen von Testdaten. Die initiale Einteilungsform von Testdaten besteht aus Normalwerten, Extremwerten und Falschwerten.

                          Ein erfolgreicher Black-Box-Test stellt ebenfalls keine Garantie für die Fehlerfreiheit der Software dar, da in frühen Phasen des Softwareentwurfs erstellte Spezifikationen spätere Detail- und Implementationsentscheidungen nicht abdecken. Ein vollständiger Black-Box-Test ist somit, ebenso wie ein isolierter White-Box-Test, nicht sinnvoll. Black-Box-Tests sind ausserdem wesentlich aufwendiger in der Durchführung, da sie eine größere organisatorische Infrastruktur in Form eines eigenen Teams benötigen.

                          Eine Herausforderung bei den folgenden Performance- und Lasttests wird daher die Identifikation einer minimalen Menge von Testfällen sein, welche ein Maximum der spezifizierten Funktionalität prüft.

                          Greybox

                          Ein Ansatz aus dem “Extreme Programming” stellen die Grey-Box-Tests dar. Diese versuchen mit Hilfe testgesteuerter Programmierung die gewünschten Vorteile von Black-Box- und White-Box-Tests weitgehend miteinander zu verbinden und gleichzeitig die unerwünschten Nachteile möglichst zu eliminieren. Ihre hnlichkeit mit White-Box-Test besteht darin, dass sie ebenfalls von den gleichen Entwicklern wie das zu testende System geschrieben werden. Mit dem Black-Box Test teilen sie sich anfänglich die Unkenntnis über die Interna des zu testenden Systems, weil der Grey-Box Test vor dem zu testenden System geschrieben wird.

                          Somit kann man Teilkomponenten und Gesamtsysteme mit dem geringen organisatorischen Aufwand der White Box Tests prüfen, ohne eventuell "um Fehler herum" zu testen. Grey-Box Tests als Bestandteil agiler Prozesse benötigen einen hohen Grad an Disziplin oder weitere Prozess-Methoden des Software-Engineerings wie z.B. Paarprogrammierung oder Akzeptanztests, um praktikabel und erfolgreich einsetzbar zu sein. Mögliche Ablaufvarianten dieser Test-Methode sind unter [Wes04] zu finden und sehr gut erläutert.

                      Bevor konkret auf den adaptiven webbasierten Fall eingegangen wird, sollen zunächst geeignete allgemeine Testmethoden und -techniken erläutert werden. Mit Bezug auf den Inhalt von Abb. 1 und dem angefügten Erläuterungstext lässt sich bereits vermuten, dass verschiedene Ansatzpunkte mit unterschiedlichen Technologien eingeführt werden müssen, um einen genauen Überblick zum Verhalten des Websystems zu erhalten. Um dies mit theoretischem Verständnis zu unterlegen, sollen dem Leser zu Beginn dieses Kapitels die nötigen Grundlagen aufgezeigt werden, auf dessen Verständnis aufbauend eine Übersicht geeigneter Testtools folgt.

                      Testmethoden

                      Grundsätzlich unterscheidet man im Software-Bereich nach [Wiki04] zwischen statischen und dynamischen Testfällen. Erstere, aus den Schritten “Verifikation” und “Analyse” bestehend, sollen die semantische Korrektheit des Quellcodes nachweisen. Dynamische Tests, die den hauptsächlichen Teil der Performance- und Lasttest-Palette einnehmen, sind am Besten als “aktives und organisiertes Herumprobieren” zu bezeichnen.

                      Um den allgemeingültigen Überblick über Software-Test zu gewährleisten, wird zunächst eine Definition der oben erwähnten statischen Testmöglichkeiten folgen. Darauf aufbauend sollen dynamische Testmethoden ausführlich vorgestellt werden. Die erlangten Erkenntnisse bilden geeignetes Hintergrundwissen, um im nächsten Abschnitt die genannten Tools zu kategorisieren und eine auf das Websystem Amacont angepasste Auswahl zu treffen.


                      Statische Tests

                      Die erste Stufe eines statischen Testes umfasst das Verifizieren des Quellcodes, bei welchem die Abarbeitung eines Codefragmentes als korrekt bewiesen wird. Die DIN EN ISO 8402 versteht dabei unter Verifizierung das Bestätigen aufgrund einer Untersuchung und durch Bereitstellung eines Nachweises, daß festgelegte Forderungen erfüllt worden sind. Diese Norm bezieht sich auf die Qualitätssicherung von organisatorischen und betrieblichen Abläufen. Sie kommt folglich nicht direkt aus dem Bereich der Datenverarbeitung, weshalb keine weiteren Spezifizierungen vorgenommen werden. Der Nachweis in der Softwaretechnik kann zum einen über Automatenmodelle (Kellerautomat, Turing-Maschine), als auch mit Hilfe von Methoden der formalen Semantik erfolgen. Es handelt sich dabei meist um automatische bzw. halbautomatische Verfahren, deren Kosten allerdings schwer einschätzbar sind.

                      Als zweite Stufe des statischen Tests wird die Analyse angesehen, bei der das untersuchte Objekt oder Subjekt zergliedert und in seine Bestandteile zerlegt wird. Diese werden anschließend geordnet und ausgewertet.

                      Zu diesem Zeitpunkt fehlen noch standardisierte bzw. leicht anwendbare Datenbasen und Maße zur automatischen bzw. halbautomatischen Formulierung von Qualitätsstufen und -zielen. Manuelle analysierende Verfahren wie Inspektion, Review, Walktrough, Durchsprache und Audits sind häufig Bestandteil formalisierter Qualitätsmanagementansätze im Projektalltag. Sie werden auf fast alle Phasen der Entwicklung angewendet. Teammitglieder, externe Spezialisten, echte Benutzer und als Moderator eingesetzte Personen überprüfen dabei anhand einer aufgestellten Checkliste die Korrektheit der erstellten Informationen.

                      Für das aktuelle Web-System sind diese Testmethoden ungeeignet, da ihre Spezialisierung eher auf den Beweis der Korrektheit als auf die Testung der Performance hinzielen. Bei Problemen, die durch Lasttests entstehen, sollten die als Bottleneck identifizierten Komponenten in einem Review erneut betrachtet werden.


                      Dynamische Tests

                      Im Gegensatz zu statischen Testverfahren beziehen sich dynamische Tests auf die Ausführung der zu analysierenden Software unter kontrollierten Vorbedingungen. Es wird überprüft, ob die Software die definierten Inputdaten korrekt verarbeitet und somit das beobachtete Ergebnis mit dem erwarteten übereinstimmt. Die bekanntesten dynamischen Testverfahren sind “Black-Box-” sowie “White-Box-Test”, welche den Hauptbestandteil von Performance- und Lastentests darstellen.

                      White-Box

                      Als White-Box oder auch Glass-Box wird die Methode des dynamischen Software-Tests bezeichnet, bei welcher Informationen über die innere Beschaffenheit des Testobjektes bekannt sind. Es wird direkt am Quellcode getestet. Ziel ist die Sicherstellung, dass die Testfälle gewisse Hinlänglichkeitskriterien erfüllen, welche zwischen kontrollflussabhängigen und datenflussabhängigen Testkriterien unterschieden werden. Datenflussabhängige Testkriterien beziehen sich dabei auf die Benutzung von Variablen, die Bestimmung von Grenzwerten und die Einhaltung von Grenzfeldern. Kontrollflussabhängige Testkriterien dagegen werden bei [Ger02] ausführlich wie folgt aufgeschlüsselt:

                      Anweisungsüberdeckend (C0)

                      Jede Anweisung wird hier mindestens einmal ausgeführt.

                      Zweigüberdeckend (C1)

                      Jede Bedingung in einer Verzweigung nimmt die Werte TRUE und FALSE an und jeder Programmzweig wird mindestens einmal ausgeführt.

                      Mehrfachbedingungsüberdeckung

                      In zusammengesetzten Bedingungen nimmt hier jede atomare Bedingung die Werte TRUE und FALSE an.

                      Pfadüberdeckung

                      Alle denkbaren Programmpfade (und Schleifen) werden durchlaufen.

                      Ein Kennzeichen des White-Box-Testes ist allerdings, dass auch ein Hinlänglichkeitskriterien erfüllendes Systeme, dennoch fehlerbehaftet sein kann,

                      1. die Testfälle nicht aus der Spezifikation des Programms hergeleitet werden, sondern aus dem Programm selbst. Getestet werden kann daher nur die Korrektheit eines Systems, nicht die geforderte Semantik.
                      2. Auch wenn alle Programmpfade getestet worden sind, bedeutet es nicht, dass ein Programm fehlerfrei arbeitet. Der Fall, dass im Graphen des Kontrollflusses Kanten fehlen, wird nicht erkannt.

                      Da reine White-Box-Tests als Testmethodik demzufolge nicht ausreichen, kombinieren sinnvolle Testreihen sowohl White-Box- als auch Black-Box-Tests.

                      WhiteBox-Tests helfen, Fehler in bestimmten Komponenten bzw. sogar die fehlerauslösenden Komponenten selbst zu identifizieren. Black-Box-Tests übernehmen die Fehlerfindung auf Seiten der Spezifikation und decken damit einen größeren Bereich ab.

                      Zwei Fehler in zwei Komponenten können sich scheinbar aufheben und den Eindruck eines korrekt funktionierenden Gesamtsystems erwecken. Dies kann durch WhiteBox-Tests leichter erkannt werden, wobei Black-Box-Test meist nur einen der beiden Fehler als vermeintliche Regression, also der Wiederkehr eines bereits früher beseitigten Fehlers, erkennen.

                      Black-Box

                      Der Black-Box-Test bezeichnet die Methode des dynamischen Software-Tests, bei dem keine Kenntnisse über die innere Funktionsweise des zu testenden Systems vorliegen. Er bestimmt die Güte des Codes und beschränkt sich auf das funktionsorientierte Testen. Man nennt ihn deshalb auch Funktionstest. Für die Ermittlung der Testfälle wird lediglich die Spezifikation, nicht aber die Implementierung des Testobjektes herangezogen. Die genaue Beschaffenheit des Codes wird nicht überprüft, er wird als Black-Box mit Eingang und Ausgang behandelt.

                      Der Grund für das bewusste Verzichten auf Quellcode-Informationen ist, dass Programmierer keine Tests "um ihre eigenen Fehler herum" entwickeln und somit Lücken in der Implementierung übersehen können. Ein Entwickler, der Kenntnisse über die innere Funktionsweise eines Systems besitzt, könnte unabsichtlich aufgrund seiner persönlichen Auffassung potentielle Fehlerquellen vernachlässigen oder anders als die Spezifikation interpretieren. Weiterhin eignen sich Black-Box-Tests ebenso als zusätzliche Stütze zur Überprüfung der Spezifikation auf Vollständigkeit, da sich die verwendeten Eingangsdaten aus den Funktionsbereichen des jeweiligen Softwaresystems ergeben. Sie bilden je nach den unterschiedlichen Merkmalen dieser Bereiche verschiedene Äquivalenzklassen von Testdaten. Die initiale Einteilungsform von Testdaten besteht aus Normalwerten, Extremwerten und Falschwerten.

                      Ein erfolgreicher Black-Box-Test stellt ebenfalls keine Garantie für die Fehlerfreiheit der Software dar, da in frühen Phasen des Softwareentwurfs erstellte Spezifikationen spätere Detail- und Implementationsentscheidungen nicht abdecken. Ein vollständiger Black-Box-Test ist somit, ebenso wie ein isolierter White-Box-Test, nicht sinnvoll. Black-Box-Tests sind ausserdem wesentlich aufwendiger in der Durchführung, da sie eine größere organisatorische Infrastruktur in Form eines eigenen Teams benötigen.

                      Eine Herausforderung bei den folgenden Performance- und Lasttests wird daher die Identifikation einer minimalen Menge von Testfällen sein, welche ein Maximum der spezifizierten Funktionalität prüft.

                      Greybox

                      Ein Ansatz aus dem “Extreme Programming” stellen die Grey-Box-Tests dar. Diese versuchen mit Hilfe testgesteuerter Programmierung die gewünschten Vorteile von Black-Box- und White-Box-Tests weitgehend miteinander zu verbinden und gleichzeitig die unerwünschten Nachteile möglichst zu eliminieren. Ihre hnlichkeit mit White-Box-Test besteht darin, dass sie ebenfalls von den gleichen Entwicklern wie das zu testende System geschrieben werden. Mit dem Black-Box Test teilen sie sich anfänglich die Unkenntnis über die Interna des zu testenden Systems, weil der Grey-Box Test vor dem zu testenden System geschrieben wird.

                      Somit kann man Teilkomponenten und Gesamtsysteme mit dem geringen organisatorischen Aufwand der White Box Tests prüfen, ohne eventuell "um Fehler herum" zu testen. Grey-Box Tests als Bestandteil agiler Prozesse benötigen einen hohen Grad an Disziplin oder weitere Prozess-Methoden des Software-Engineerings wie z.B. Paarprogrammierung oder Akzeptanztests, um praktikabel und erfolgreich einsetzbar zu sein. Mögliche Ablaufvarianten dieser Test-Methode sind unter [Wes04] zu finden und sehr gut erläutert.

                  Bevor konkret auf den adaptiven webbasierten Fall eingegangen wird, sollen zunächst geeignete allgemeine Testmethoden und -techniken erläutert werden. Mit Bezug auf den Inhalt von Abb. 1 und dem angefügten Erläuterungstext lässt sich bereits vermuten, dass verschiedene Ansatzpunkte mit unterschiedlichen Technologien eingeführt werden müssen, um einen genauen Überblick zum Verhalten des Websystems zu erhalten. Um dies mit theoretischem Verständnis zu unterlegen, sollen dem Leser zu Beginn dieses Kapitels die nötigen Grundlagen aufgezeigt werden, auf dessen Verständnis aufbauend eine Übersicht geeigneter Testtools folgt.

                  Testmethoden

                  Grundsätzlich unterscheidet man im Software-Bereich nach [Wiki04] zwischen statischen und dynamischen Testfällen. Erstere, aus den Schritten “Verifikation” und “Analyse” bestehend, sollen die semantische Korrektheit des Quellcodes nachweisen. Dynamische Tests, die den hauptsächlichen Teil der Performance- und Lasttest-Palette einnehmen, sind am Besten als “aktives und organisiertes Herumprobieren” zu bezeichnen.

                  Um den allgemeingültigen Überblick über Software-Test zu gewährleisten, wird zunächst eine Definition der oben erwähnten statischen Testmöglichkeiten folgen. Darauf aufbauend sollen dynamische Testmethoden ausführlich vorgestellt werden. Die erlangten Erkenntnisse bilden geeignetes Hintergrundwissen, um im nächsten Abschnitt die genannten Tools zu kategorisieren und eine auf das Websystem Amacont angepasste Auswahl zu treffen.


                  Statische Tests

                  Die erste Stufe eines statischen Testes umfasst das Verifizieren des Quellcodes, bei welchem die Abarbeitung eines Codefragmentes als korrekt bewiesen wird. Die DIN EN ISO 8402 versteht dabei unter Verifizierung das Bestätigen aufgrund einer Untersuchung und durch Bereitstellung eines Nachweises, daß festgelegte Forderungen erfüllt worden sind. Diese Norm bezieht sich auf die Qualitätssicherung von organisatorischen und betrieblichen Abläufen. Sie kommt folglich nicht direkt aus dem Bereich der Datenverarbeitung, weshalb keine weiteren Spezifizierungen vorgenommen werden. Der Nachweis in der Softwaretechnik kann zum einen über Automatenmodelle (Kellerautomat, Turing-Maschine), als auch mit Hilfe von Methoden der formalen Semantik erfolgen. Es handelt sich dabei meist um automatische bzw. halbautomatische Verfahren, deren Kosten allerdings schwer einschätzbar sind.

                  Als zweite Stufe des statischen Tests wird die Analyse angesehen, bei der das untersuchte Objekt oder Subjekt zergliedert und in seine Bestandteile zerlegt wird. Diese werden anschließend geordnet und ausgewertet.

                  Zu diesem Zeitpunkt fehlen noch standardisierte bzw. leicht anwendbare Datenbasen und Maße zur automatischen bzw. halbautomatischen Formulierung von Qualitätsstufen und -zielen. Manuelle analysierende Verfahren wie Inspektion, Review, Walktrough, Durchsprache und Audits sind häufig Bestandteil formalisierter Qualitätsmanagementansätze im Projektalltag. Sie werden auf fast alle Phasen der Entwicklung angewendet. Teammitglieder, externe Spezialisten, echte Benutzer und als Moderator eingesetzte Personen überprüfen dabei anhand einer aufgestellten Checkliste die Korrektheit der erstellten Informationen.

                  Für das aktuelle Web-System sind diese Testmethoden ungeeignet, da ihre Spezialisierung eher auf den Beweis der Korrektheit als auf die Testung der Performance hinzielen. Bei Problemen, die durch Lasttests entstehen, sollten die als Bottleneck identifizierten Komponenten in einem Review erneut betrachtet werden.


                  Dynamische Tests

                  Im Gegensatz zu statischen Testverfahren beziehen sich dynamische Tests auf die Ausführung der zu analysierenden Software unter kontrollierten Vorbedingungen. Es wird überprüft, ob die Software die definierten Inputdaten korrekt verarbeitet und somit das beobachtete Ergebnis mit dem erwarteten übereinstimmt. Die bekanntesten dynamischen Testverfahren sind “Black-Box-” sowie “White-Box-Test”, welche den Hauptbestandteil von Performance- und Lastentests darstellen.

                  White-Box

                  Als White-Box oder auch Glass-Box wird die Methode des dynamischen Software-Tests bezeichnet, bei welcher Informationen über die innere Beschaffenheit des Testobjektes bekannt sind. Es wird direkt am Quellcode getestet. Ziel ist die Sicherstellung, dass die Testfälle gewisse Hinlänglichkeitskriterien erfüllen, welche zwischen kontrollflussabhängigen und datenflussabhängigen Testkriterien unterschieden werden. Datenflussabhängige Testkriterien beziehen sich dabei auf die Benutzung von Variablen, die Bestimmung von Grenzwerten und die Einhaltung von Grenzfeldern. Kontrollflussabhängige Testkriterien dagegen werden bei [Ger02] ausführlich wie folgt aufgeschlüsselt:

                  Anweisungsüberdeckend (C0)

                  Jede Anweisung wird hier mindestens einmal ausgeführt.

                  Zweigüberdeckend (C1)

                  Jede Bedingung in einer Verzweigung nimmt die Werte TRUE und FALSE an und jeder Programmzweig wird mindestens einmal ausgeführt.

                  Mehrfachbedingungsüberdeckung

                  In zusammengesetzten Bedingungen nimmt hier jede atomare Bedingung die Werte TRUE und FALSE an.

                  Pfadüberdeckung

                  Alle denkbaren Programmpfade (und Schleifen) werden durchlaufen.

                  Ein Kennzeichen des White-Box-Testes ist allerdings, dass auch ein Hinlänglichkeitskriterien erfüllendes Systeme, dennoch fehlerbehaftet sein kann,

                  1. die Testfälle nicht aus der Spezifikation des Programms hergeleitet werden, sondern aus dem Programm selbst. Getestet werden kann daher nur die Korrektheit eines Systems, nicht die geforderte Semantik.
                  2. Auch wenn alle Programmpfade getestet worden sind, bedeutet es nicht, dass ein Programm fehlerfrei arbeitet. Der Fall, dass im Graphen des Kontrollflusses Kanten fehlen, wird nicht erkannt.

                  Da reine White-Box-Tests als Testmethodik demzufolge nicht ausreichen, kombinieren sinnvolle Testreihen sowohl White-Box- als auch Black-Box-Tests.

                  WhiteBox-Tests helfen, Fehler in bestimmten Komponenten bzw. sogar die fehlerauslösenden Komponenten selbst zu identifizieren. Black-Box-Tests übernehmen die Fehlerfindung auf Seiten der Spezifikation und decken damit einen größeren Bereich ab.

                  Zwei Fehler in zwei Komponenten können sich scheinbar aufheben und den Eindruck eines korrekt funktionierenden Gesamtsystems erwecken. Dies kann durch WhiteBox-Tests leichter erkannt werden, wobei Black-Box-Test meist nur einen der beiden Fehler als vermeintliche Regression, also der Wiederkehr eines bereits früher beseitigten Fehlers, erkennen.

                  Black-Box

                  Der Black-Box-Test bezeichnet die Methode des dynamischen Software-Tests, bei dem keine Kenntnisse über die innere Funktionsweise des zu testenden Systems vorliegen. Er bestimmt die Güte des Codes und beschränkt sich auf das funktionsorientierte Testen. Man nennt ihn deshalb auch Funktionstest. Für die Ermittlung der Testfälle wird lediglich die Spezifikation, nicht aber die Implementierung des Testobjektes herangezogen. Die genaue Beschaffenheit des Codes wird nicht überprüft, er wird als Black-Box mit Eingang und Ausgang behandelt.

                  Der Grund für das bewusste Verzichten auf Quellcode-Informationen ist, dass Programmierer keine Tests "um ihre eigenen Fehler herum" entwickeln und somit Lücken in der Implementierung übersehen können. Ein Entwickler, der Kenntnisse über die innere Funktionsweise eines Systems besitzt, könnte unabsichtlich aufgrund seiner persönlichen Auffassung potentielle Fehlerquellen vernachlässigen oder anders als die Spezifikation interpretieren. Weiterhin eignen sich Black-Box-Tests ebenso als zusätzliche Stütze zur Überprüfung der Spezifikation auf Vollständigkeit, da sich die verwendeten Eingangsdaten aus den Funktionsbereichen des jeweiligen Softwaresystems ergeben. Sie bilden je nach den unterschiedlichen Merkmalen dieser Bereiche verschiedene Äquivalenzklassen von Testdaten. Die initiale Einteilungsform von Testdaten besteht aus Normalwerten, Extremwerten und Falschwerten.

                  Ein erfolgreicher Black-Box-Test stellt ebenfalls keine Garantie für die Fehlerfreiheit der Software dar, da in frühen Phasen des Softwareentwurfs erstellte Spezifikationen spätere Detail- und Implementationsentscheidungen nicht abdecken. Ein vollständiger Black-Box-Test ist somit, ebenso wie ein isolierter White-Box-Test, nicht sinnvoll. Black-Box-Tests sind ausserdem wesentlich aufwendiger in der Durchführung, da sie eine größere organisatorische Infrastruktur in Form eines eigenen Teams benötigen.

                  Eine Herausforderung bei den folgenden Performance- und Lasttests wird daher die Identifikation einer minimalen Menge von Testfällen sein, welche ein Maximum der spezifizierten Funktionalität prüft.

                  Greybox

                  Ein Ansatz aus dem “Extreme Programming” stellen die Grey-Box-Tests dar. Diese versuchen mit Hilfe testgesteuerter Programmierung die gewünschten Vorteile von Black-Box- und White-Box-Tests weitgehend miteinander zu verbinden und gleichzeitig die unerwünschten Nachteile möglichst zu eliminieren. Ihre hnlichkeit mit White-Box-Test besteht darin, dass sie ebenfalls von den gleichen Entwicklern wie das zu testende System geschrieben werden. Mit dem Black-Box Test teilen sie sich anfänglich die Unkenntnis über die Interna des zu testenden Systems, weil der Grey-Box Test vor dem zu testenden System geschrieben wird.

                  Somit kann man Teilkomponenten und Gesamtsysteme mit dem geringen organisatorischen Aufwand der White Box Tests prüfen, ohne eventuell "um Fehler herum" zu testen. Grey-Box Tests als Bestandteil agiler Prozesse benötigen einen hohen Grad an Disziplin oder weitere Prozess-Methoden des Software-Engineerings wie z.B. Paarprogrammierung oder Akzeptanztests, um praktikabel und erfolgreich einsetzbar zu sein. Mögliche Ablaufvarianten dieser Test-Methode sind unter [Wes04] zu finden und sehr gut erläutert.

              Bevor konkret auf den adaptiven webbasierten Fall eingegangen wird, sollen zunächst geeignete allgemeine Testmethoden und -techniken erläutert werden. Mit Bezug auf den Inhalt von Abb. 1 und dem angefügten Erläuterungstext lässt sich bereits vermuten, dass verschiedene Ansatzpunkte mit unterschiedlichen Technologien eingeführt werden müssen, um einen genauen Überblick zum Verhalten des Websystems zu erhalten. Um dies mit theoretischem Verständnis zu unterlegen, sollen dem Leser zu Beginn dieses Kapitels die nötigen Grundlagen aufgezeigt werden, auf dessen Verständnis aufbauend eine Übersicht geeigneter Testtools folgt.

              Testmethoden

              Grundsätzlich unterscheidet man im Software-Bereich nach [Wiki04] zwischen statischen und dynamischen Testfällen. Erstere, aus den Schritten “Verifikation” und “Analyse” bestehend, sollen die semantische Korrektheit des Quellcodes nachweisen. Dynamische Tests, die den hauptsächlichen Teil der Performance- und Lasttest-Palette einnehmen, sind am Besten als “aktives und organisiertes Herumprobieren” zu bezeichnen.

              Um den allgemeingültigen Überblick über Software-Test zu gewährleisten, wird zunächst eine Definition der oben erwähnten statischen Testmöglichkeiten folgen. Darauf aufbauend sollen dynamische Testmethoden ausführlich vorgestellt werden. Die erlangten Erkenntnisse bilden geeignetes Hintergrundwissen, um im nächsten Abschnitt die genannten Tools zu kategorisieren und eine auf das Websystem Amacont angepasste Auswahl zu treffen.


              Statische Tests

              Die erste Stufe eines statischen Testes umfasst das Verifizieren des Quellcodes, bei welchem die Abarbeitung eines Codefragmentes als korrekt bewiesen wird. Die DIN EN ISO 8402 versteht dabei unter Verifizierung das Bestätigen aufgrund einer Untersuchung und durch Bereitstellung eines Nachweises, daß festgelegte Forderungen erfüllt worden sind. Diese Norm bezieht sich auf die Qualitätssicherung von organisatorischen und betrieblichen Abläufen. Sie kommt folglich nicht direkt aus dem Bereich der Datenverarbeitung, weshalb keine weiteren Spezifizierungen vorgenommen werden. Der Nachweis in der Softwaretechnik kann zum einen über Automatenmodelle (Kellerautomat, Turing-Maschine), als auch mit Hilfe von Methoden der formalen Semantik erfolgen. Es handelt sich dabei meist um automatische bzw. halbautomatische Verfahren, deren Kosten allerdings schwer einschätzbar sind.

              Als zweite Stufe des statischen Tests wird die Analyse angesehen, bei der das untersuchte Objekt oder Subjekt zergliedert und in seine Bestandteile zerlegt wird. Diese werden anschließend geordnet und ausgewertet.

              Zu diesem Zeitpunkt fehlen noch standardisierte bzw. leicht anwendbare Datenbasen und Maße zur automatischen bzw. halbautomatischen Formulierung von Qualitätsstufen und -zielen. Manuelle analysierende Verfahren wie Inspektion, Review, Walktrough, Durchsprache und Audits sind häufig Bestandteil formalisierter Qualitätsmanagementansätze im Projektalltag. Sie werden auf fast alle Phasen der Entwicklung angewendet. Teammitglieder, externe Spezialisten, echte Benutzer und als Moderator eingesetzte Personen überprüfen dabei anhand einer aufgestellten Checkliste die Korrektheit der erstellten Informationen.

              Für das aktuelle Web-System sind diese Testmethoden ungeeignet, da ihre Spezialisierung eher auf den Beweis der Korrektheit als auf die Testung der Performance hinzielen. Bei Problemen, die durch Lasttests entstehen, sollten die als Bottleneck identifizierten Komponenten in einem Review erneut betrachtet werden.


              Dynamische Tests

              Im Gegensatz zu statischen Testverfahren beziehen sich dynamische Tests auf die Ausführung der zu analysierenden Software unter kontrollierten Vorbedingungen. Es wird überprüft, ob die Software die definierten Inputdaten korrekt verarbeitet und somit das beobachtete Ergebnis mit dem erwarteten übereinstimmt. Die bekanntesten dynamischen Testverfahren sind “Black-Box-” sowie “White-Box-Test”, welche den Hauptbestandteil von Performance- und Lastentests darstellen.

              White-Box

              Als White-Box oder auch Glass-Box wird die Methode des dynamischen Software-Tests bezeichnet, bei welcher Informationen über die innere Beschaffenheit des Testobjektes bekannt sind. Es wird direkt am Quellcode getestet. Ziel ist die Sicherstellung, dass die Testfälle gewisse Hinlänglichkeitskriterien erfüllen, welche zwischen kontrollflussabhängigen und datenflussabhängigen Testkriterien unterschieden werden. Datenflussabhängige Testkriterien beziehen sich dabei auf die Benutzung von Variablen, die Bestimmung von Grenzwerten und die Einhaltung von Grenzfeldern. Kontrollflussabhängige Testkriterien dagegen werden bei [Ger02] ausführlich wie folgt aufgeschlüsselt:

              Anweisungsüberdeckend (C0)

              Jede Anweisung wird hier mindestens einmal ausgeführt.

              Zweigüberdeckend (C1)

              Jede Bedingung in einer Verzweigung nimmt die Werte TRUE und FALSE an und jeder Programmzweig wird mindestens einmal ausgeführt.

              Mehrfachbedingungsüberdeckung

              In zusammengesetzten Bedingungen nimmt hier jede atomare Bedingung die Werte TRUE und FALSE an.

              Pfadüberdeckung

              Alle denkbaren Programmpfade (und Schleifen) werden durchlaufen.

              Ein Kennzeichen des White-Box-Testes ist allerdings, dass auch ein Hinlänglichkeitskriterien erfüllendes Systeme, dennoch fehlerbehaftet sein kann,

              1. die Testfälle nicht aus der Spezifikation des Programms hergeleitet werden, sondern aus dem Programm selbst. Getestet werden kann daher nur die Korrektheit eines Systems, nicht die geforderte Semantik.
              2. Auch wenn alle Programmpfade getestet worden sind, bedeutet es nicht, dass ein Programm fehlerfrei arbeitet. Der Fall, dass im Graphen des Kontrollflusses Kanten fehlen, wird nicht erkannt.

              Da reine White-Box-Tests als Testmethodik demzufolge nicht ausreichen, kombinieren sinnvolle Testreihen sowohl White-Box- als auch Black-Box-Tests.

              WhiteBox-Tests helfen, Fehler in bestimmten Komponenten bzw. sogar die fehlerauslösenden Komponenten selbst zu identifizieren. Black-Box-Tests übernehmen die Fehlerfindung auf Seiten der Spezifikation und decken damit einen größeren Bereich ab.

              Zwei Fehler in zwei Komponenten können sich scheinbar aufheben und den Eindruck eines korrekt funktionierenden Gesamtsystems erwecken. Dies kann durch WhiteBox-Tests leichter erkannt werden, wobei Black-Box-Test meist nur einen der beiden Fehler als vermeintliche Regression, also der Wiederkehr eines bereits früher beseitigten Fehlers, erkennen.

              Black-Box

              Der Black-Box-Test bezeichnet die Methode des dynamischen Software-Tests, bei dem keine Kenntnisse über die innere Funktionsweise des zu testenden Systems vorliegen. Er bestimmt die Güte des Codes und beschränkt sich auf das funktionsorientierte Testen. Man nennt ihn deshalb auch Funktionstest. Für die Ermittlung der Testfälle wird lediglich die Spezifikation, nicht aber die Implementierung des Testobjektes herangezogen. Die genaue Beschaffenheit des Codes wird nicht überprüft, er wird als Black-Box mit Eingang und Ausgang behandelt.

              Der Grund für das bewusste Verzichten auf Quellcode-Informationen ist, dass Programmierer keine Tests "um ihre eigenen Fehler herum" entwickeln und somit Lücken in der Implementierung übersehen können. Ein Entwickler, der Kenntnisse über die innere Funktionsweise eines Systems besitzt, könnte unabsichtlich aufgrund seiner persönlichen Auffassung potentielle Fehlerquellen vernachlässigen oder anders als die Spezifikation interpretieren. Weiterhin eignen sich Black-Box-Tests ebenso als zusätzliche Stütze zur Überprüfung der Spezifikation auf Vollständigkeit, da sich die verwendeten Eingangsdaten aus den Funktionsbereichen des jeweiligen Softwaresystems ergeben. Sie bilden je nach den unterschiedlichen Merkmalen dieser Bereiche verschiedene Äquivalenzklassen von Testdaten. Die initiale Einteilungsform von Testdaten besteht aus Normalwerten, Extremwerten und Falschwerten.

              Ein erfolgreicher Black-Box-Test stellt ebenfalls keine Garantie für die Fehlerfreiheit der Software dar, da in frühen Phasen des Softwareentwurfs erstellte Spezifikationen spätere Detail- und Implementationsentscheidungen nicht abdecken. Ein vollständiger Black-Box-Test ist somit, ebenso wie ein isolierter White-Box-Test, nicht sinnvoll. Black-Box-Tests sind ausserdem wesentlich aufwendiger in der Durchführung, da sie eine größere organisatorische Infrastruktur in Form eines eigenen Teams benötigen.

              Eine Herausforderung bei den folgenden Performance- und Lasttests wird daher die Identifikation einer minimalen Menge von Testfällen sein, welche ein Maximum der spezifizierten Funktionalität prüft.

              Greybox

              Ein Ansatz aus dem “Extreme Programming” stellen die Grey-Box-Tests dar. Diese versuchen mit Hilfe testgesteuerter Programmierung die gewünschten Vorteile von Black-Box- und White-Box-Tests weitgehend miteinander zu verbinden und gleichzeitig die unerwünschten Nachteile möglichst zu eliminieren. Ihre hnlichkeit mit White-Box-Test besteht darin, dass sie ebenfalls von den gleichen Entwicklern wie das zu testende System geschrieben werden. Mit dem Black-Box Test teilen sie sich anfänglich die Unkenntnis über die Interna des zu testenden Systems, weil der Grey-Box Test vor dem zu testenden System geschrieben wird.

              Somit kann man Teilkomponenten und Gesamtsysteme mit dem geringen organisatorischen Aufwand der White Box Tests prüfen, ohne eventuell "um Fehler herum" zu testen. Grey-Box Tests als Bestandteil agiler Prozesse benötigen einen hohen Grad an Disziplin oder weitere Prozess-Methoden des Software-Engineerings wie z.B. Paarprogrammierung oder Akzeptanztests, um praktikabel und erfolgreich einsetzbar zu sein. Mögliche Ablaufvarianten dieser Test-Methode sind unter [Wes04] zu finden und sehr gut erläutert.

          Bevor konkret auf den adaptiven webbasierten Fall eingegangen wird, sollen zunächst geeignete allgemeine Testmethoden und -techniken erläutert werden. Mit Bezug auf den Inhalt von Abb. 1 und dem angefügten Erläuterungstext lässt sich bereits vermuten, dass verschiedene Ansatzpunkte mit unterschiedlichen Technologien eingeführt werden müssen, um einen genauen Überblick zum Verhalten des Websystems zu erhalten. Um dies mit theoretischem Verständnis zu unterlegen, sollen dem Leser zu Beginn dieses Kapitels die nötigen Grundlagen aufgezeigt werden, auf dessen Verständnis aufbauend eine Übersicht geeigneter Testtools folgt.

          Testmethoden

          Grundsätzlich unterscheidet man im Software-Bereich nach [Wiki04] zwischen statischen und dynamischen Testfällen. Erstere, aus den Schritten “Verifikation” und “Analyse” bestehend, sollen die semantische Korrektheit des Quellcodes nachweisen. Dynamische Tests, die den hauptsächlichen Teil der Performance- und Lasttest-Palette einnehmen, sind am Besten als “aktives und organisiertes Herumprobieren” zu bezeichnen.

          Um den allgemeingültigen Überblick über Software-Test zu gewährleisten, wird zunächst eine Definition der oben erwähnten statischen Testmöglichkeiten folgen. Darauf aufbauend sollen dynamische Testmethoden ausführlich vorgestellt werden. Die erlangten Erkenntnisse bilden geeignetes Hintergrundwissen, um im nächsten Abschnitt die genannten Tools zu kategorisieren und eine auf das Websystem Amacont angepasste Auswahl zu treffen.


          Statische Tests

          Die erste Stufe eines statischen Testes umfasst das Verifizieren des Quellcodes, bei welchem die Abarbeitung eines Codefragmentes als korrekt bewiesen wird. Die DIN EN ISO 8402 versteht dabei unter Verifizierung das Bestätigen aufgrund einer Untersuchung und durch Bereitstellung eines Nachweises, daß festgelegte Forderungen erfüllt worden sind. Diese Norm bezieht sich auf die Qualitätssicherung von organisatorischen und betrieblichen Abläufen. Sie kommt folglich nicht direkt aus dem Bereich der Datenverarbeitung, weshalb keine weiteren Spezifizierungen vorgenommen werden. Der Nachweis in der Softwaretechnik kann zum einen über Automatenmodelle (Kellerautomat, Turing-Maschine), als auch mit Hilfe von Methoden der formalen Semantik erfolgen. Es handelt sich dabei meist um automatische bzw. halbautomatische Verfahren, deren Kosten allerdings schwer einschätzbar sind.

          Als zweite Stufe des statischen Tests wird die Analyse angesehen, bei der das untersuchte Objekt oder Subjekt zergliedert und in seine Bestandteile zerlegt wird. Diese werden anschließend geordnet und ausgewertet.

          Zu diesem Zeitpunkt fehlen noch standardisierte bzw. leicht anwendbare Datenbasen und Maße zur automatischen bzw. halbautomatischen Formulierung von Qualitätsstufen und -zielen. Manuelle analysierende Verfahren wie Inspektion, Review, Walktrough, Durchsprache und Audits sind häufig Bestandteil formalisierter Qualitätsmanagementansätze im Projektalltag. Sie werden auf fast alle Phasen der Entwicklung angewendet. Teammitglieder, externe Spezialisten, echte Benutzer und als Moderator eingesetzte Personen überprüfen dabei anhand einer aufgestellten Checkliste die Korrektheit der erstellten Informationen.

          Für das aktuelle Web-System sind diese Testmethoden ungeeignet, da ihre Spezialisierung eher auf den Beweis der Korrektheit als auf die Testung der Performance hinzielen. Bei Problemen, die durch Lasttests entstehen, sollten die als Bottleneck identifizierten Komponenten in einem Review erneut betrachtet werden.


          Dynamische Tests

          Im Gegensatz zu statischen Testverfahren beziehen sich dynamische Tests auf die Ausführung der zu analysierenden Software unter kontrollierten Vorbedingungen. Es wird überprüft, ob die Software die definierten Inputdaten korrekt verarbeitet und somit das beobachtete Ergebnis mit dem erwarteten übereinstimmt. Die bekanntesten dynamischen Testverfahren sind “Black-Box-” sowie “White-Box-Test”, welche den Hauptbestandteil von Performance- und Lastentests darstellen.

          White-Box

          Als White-Box oder auch Glass-Box wird die Methode des dynamischen Software-Tests bezeichnet, bei welcher Informationen über die innere Beschaffenheit des Testobjektes bekannt sind. Es wird direkt am Quellcode getestet. Ziel ist die Sicherstellung, dass die Testfälle gewisse Hinlänglichkeitskriterien erfüllen, welche zwischen kontrollflussabhängigen und datenflussabhängigen Testkriterien unterschieden werden. Datenflussabhängige Testkriterien beziehen sich dabei auf die Benutzung von Variablen, die Bestimmung von Grenzwerten und die Einhaltung von Grenzfeldern. Kontrollflussabhängige Testkriterien dagegen werden bei [Ger02] ausführlich wie folgt aufgeschlüsselt:

          Anweisungsüberdeckend (C0)

          Jede Anweisung wird hier mindestens einmal ausgeführt.

          Zweigüberdeckend (C1)

          Jede Bedingung in einer Verzweigung nimmt die Werte TRUE und FALSE an und jeder Programmzweig wird mindestens einmal ausgeführt.

          Mehrfachbedingungsüberdeckung

          In zusammengesetzten Bedingungen nimmt hier jede atomare Bedingung die Werte TRUE und FALSE an.

          Pfadüberdeckung

          Alle denkbaren Programmpfade (und Schleifen) werden durchlaufen.

          Ein Kennzeichen des White-Box-Testes ist allerdings, dass auch ein Hinlänglichkeitskriterien erfüllendes Systeme, dennoch fehlerbehaftet sein kann,

          1. die Testfälle nicht aus der Spezifikation des Programms hergeleitet werden, sondern aus dem Programm selbst. Getestet werden kann daher nur die Korrektheit eines Systems, nicht die geforderte Semantik.
          2. Auch wenn alle Programmpfade getestet worden sind, bedeutet es nicht, dass ein Programm fehlerfrei arbeitet. Der Fall, dass im Graphen des Kontrollflusses Kanten fehlen, wird nicht erkannt.

          Da reine White-Box-Tests als Testmethodik demzufolge nicht ausreichen, kombinieren sinnvolle Testreihen sowohl White-Box- als auch Black-Box-Tests.

          WhiteBox-Tests helfen, Fehler in bestimmten Komponenten bzw. sogar die fehlerauslösenden Komponenten selbst zu identifizieren. Black-Box-Tests übernehmen die Fehlerfindung auf Seiten der Spezifikation und decken damit einen größeren Bereich ab.

          Zwei Fehler in zwei Komponenten können sich scheinbar aufheben und den Eindruck eines korrekt funktionierenden Gesamtsystems erwecken. Dies kann durch WhiteBox-Tests leichter erkannt werden, wobei Black-Box-Test meist nur einen der beiden Fehler als vermeintliche Regression, also der Wiederkehr eines bereits früher beseitigten Fehlers, erkennen.

          Black-Box

          Der Black-Box-Test bezeichnet die Methode des dynamischen Software-Tests, bei dem keine Kenntnisse über die innere Funktionsweise des zu testenden Systems vorliegen. Er bestimmt die Güte des Codes und beschränkt sich auf das funktionsorientierte Testen. Man nennt ihn deshalb auch Funktionstest. Für die Ermittlung der Testfälle wird lediglich die Spezifikation, nicht aber die Implementierung des Testobjektes herangezogen. Die genaue Beschaffenheit des Codes wird nicht überprüft, er wird als Black-Box mit Eingang und Ausgang behandelt.

          Der Grund für das bewusste Verzichten auf Quellcode-Informationen ist, dass Programmierer keine Tests "um ihre eigenen Fehler herum" entwickeln und somit Lücken in der Implementierung übersehen können. Ein Entwickler, der Kenntnisse über die innere Funktionsweise eines Systems besitzt, könnte unabsichtlich aufgrund seiner persönlichen Auffassung potentielle Fehlerquellen vernachlässigen oder anders als die Spezifikation interpretieren. Weiterhin eignen sich Black-Box-Tests ebenso als zusätzliche Stütze zur Überprüfung der Spezifikation auf Vollständigkeit, da sich die verwendeten Eingangsdaten aus den Funktionsbereichen des jeweiligen Softwaresystems ergeben. Sie bilden je nach den unterschiedlichen Merkmalen dieser Bereiche verschiedene Äquivalenzklassen von Testdaten. Die initiale Einteilungsform von Testdaten besteht aus Normalwerten, Extremwerten und Falschwerten.

          Ein erfolgreicher Black-Box-Test stellt ebenfalls keine Garantie für die Fehlerfreiheit der Software dar, da in frühen Phasen des Softwareentwurfs erstellte Spezifikationen spätere Detail- und Implementationsentscheidungen nicht abdecken. Ein vollständiger Black-Box-Test ist somit, ebenso wie ein isolierter White-Box-Test, nicht sinnvoll. Black-Box-Tests sind ausserdem wesentlich aufwendiger in der Durchführung, da sie eine größere organisatorische Infrastruktur in Form eines eigenen Teams benötigen.

          Eine Herausforderung bei den folgenden Performance- und Lasttests wird daher die Identifikation einer minimalen Menge von Testfällen sein, welche ein Maximum der spezifizierten Funktionalität prüft.

          Greybox

          Ein Ansatz aus dem “Extreme Programming” stellen die Grey-Box-Tests dar. Diese versuchen mit Hilfe testgesteuerter Programmierung die gewünschten Vorteile von Black-Box- und White-Box-Tests weitgehend miteinander zu verbinden und gleichzeitig die unerwünschten Nachteile möglichst zu eliminieren. Ihre hnlichkeit mit White-Box-Test besteht darin, dass sie ebenfalls von den gleichen Entwicklern wie das zu testende System geschrieben werden. Mit dem Black-Box Test teilen sie sich anfänglich die Unkenntnis über die Interna des zu testenden Systems, weil der Grey-Box Test vor dem zu testenden System geschrieben wird.

          Somit kann man Teilkomponenten und Gesamtsysteme mit dem geringen organisatorischen Aufwand der White Box Tests prüfen, ohne eventuell "um Fehler herum" zu testen. Grey-Box Tests als Bestandteil agiler Prozesse benötigen einen hohen Grad an Disziplin oder weitere Prozess-Methoden des Software-Engineerings wie z.B. Paarprogrammierung oder Akzeptanztests, um praktikabel und erfolgreich einsetzbar zu sein. Mögliche Ablaufvarianten dieser Test-Methode sind unter [Wes04] zu finden und sehr gut erläutert.

      Bevor konkret auf den adaptiven webbasierten Fall eingegangen wird, sollen zunächst geeignete allgemeine Testmethoden und -techniken erläutert werden. Mit Bezug auf den Inhalt von Abb. 1 und dem angefügten Erläuterungstext lässt sich bereits vermuten, dass verschiedene Ansatzpunkte mit unterschiedlichen Technologien eingeführt werden müssen, um einen genauen Überblick zum Verhalten des Websystems zu erhalten. Um dies mit theoretischem Verständnis zu unterlegen, sollen dem Leser zu Beginn dieses Kapitels die nötigen Grundlagen aufgezeigt werden, auf dessen Verständnis aufbauend eine Übersicht geeigneter Testtools folgt.

      Testmethoden

      Grundsätzlich unterscheidet man im Software-Bereich nach [Wiki04] zwischen statischen und dynamischen Testfällen. Erstere, aus den Schritten “Verifikation” und “Analyse” bestehend, sollen die semantische Korrektheit des Quellcodes nachweisen. Dynamische Tests, die den hauptsächlichen Teil der Performance- und Lasttest-Palette einnehmen, sind am Besten als “aktives und organisiertes Herumprobieren” zu bezeichnen.

      Um den allgemeingültigen Überblick über Software-Test zu gewährleisten, wird zunächst eine Definition der oben erwähnten statischen Testmöglichkeiten folgen. Darauf aufbauend sollen dynamische Testmethoden ausführlich vorgestellt werden. Die erlangten Erkenntnisse bilden geeignetes Hintergrundwissen, um im nächsten Abschnitt die genannten Tools zu kategorisieren und eine auf das Websystem Amacont angepasste Auswahl zu treffen.


      Statische Tests

      Die erste Stufe eines statischen Testes umfasst das Verifizieren des Quellcodes, bei welchem die Abarbeitung eines Codefragmentes als korrekt bewiesen wird. Die DIN EN ISO 8402 versteht dabei unter Verifizierung das Bestätigen aufgrund einer Untersuchung und durch Bereitstellung eines Nachweises, daß festgelegte Forderungen erfüllt worden sind. Diese Norm bezieht sich auf die Qualitätssicherung von organisatorischen und betrieblichen Abläufen. Sie kommt folglich nicht direkt aus dem Bereich der Datenverarbeitung, weshalb keine weiteren Spezifizierungen vorgenommen werden. Der Nachweis in der Softwaretechnik kann zum einen über Automatenmodelle (Kellerautomat, Turing-Maschine), als auch mit Hilfe von Methoden der formalen Semantik erfolgen. Es handelt sich dabei meist um automatische bzw. halbautomatische Verfahren, deren Kosten allerdings schwer einschätzbar sind.

      Als zweite Stufe des statischen Tests wird die Analyse angesehen, bei der das untersuchte Objekt oder Subjekt zergliedert und in seine Bestandteile zerlegt wird. Diese werden anschließend geordnet und ausgewertet.

      Zu diesem Zeitpunkt fehlen noch standardisierte bzw. leicht anwendbare Datenbasen und Maße zur automatischen bzw. halbautomatischen Formulierung von Qualitätsstufen und -zielen. Manuelle analysierende Verfahren wie Inspektion, Review, Walktrough, Durchsprache und Audits sind häufig Bestandteil formalisierter Qualitätsmanagementansätze im Projektalltag. Sie werden auf fast alle Phasen der Entwicklung angewendet. Teammitglieder, externe Spezialisten, echte Benutzer und als Moderator eingesetzte Personen überprüfen dabei anhand einer aufgestellten Checkliste die Korrektheit der erstellten Informationen.

      Für das aktuelle Web-System sind diese Testmethoden ungeeignet, da ihre Spezialisierung eher auf den Beweis der Korrektheit als auf die Testung der Performance hinzielen. Bei Problemen, die durch Lasttests entstehen, sollten die als Bottleneck identifizierten Komponenten in einem Review erneut betrachtet werden.


      Dynamische Tests

      Im Gegensatz zu statischen Testverfahren beziehen sich dynamische Tests auf die Ausführung der zu analysierenden Software unter kontrollierten Vorbedingungen. Es wird überprüft, ob die Software die definierten Inputdaten korrekt verarbeitet und somit das beobachtete Ergebnis mit dem erwarteten übereinstimmt. Die bekanntesten dynamischen Testverfahren sind “Black-Box-” sowie “White-Box-Test”, welche den Hauptbestandteil von Performance- und Lastentests darstellen.

      White-Box

      Als White-Box oder auch Glass-Box wird die Methode des dynamischen Software-Tests bezeichnet, bei welcher Informationen über die innere Beschaffenheit des Testobjektes bekannt sind. Es wird direkt am Quellcode getestet. Ziel ist die Sicherstellung, dass die Testfälle gewisse Hinlänglichkeitskriterien erfüllen, welche zwischen kontrollflussabhängigen und datenflussabhängigen Testkriterien unterschieden werden. Datenflussabhängige Testkriterien beziehen sich dabei auf die Benutzung von Variablen, die Bestimmung von Grenzwerten und die Einhaltung von Grenzfeldern. Kontrollflussabhängige Testkriterien dagegen werden bei [Ger02] ausführlich wie folgt aufgeschlüsselt:

      Anweisungsüberdeckend (C0)

      Jede Anweisung wird hier mindestens einmal ausgeführt.

      Zweigüberdeckend (C1)

      Jede Bedingung in einer Verzweigung nimmt die Werte TRUE und FALSE an und jeder Programmzweig wird mindestens einmal ausgeführt.

      Mehrfachbedingungsüberdeckung

      In zusammengesetzten Bedingungen nimmt hier jede atomare Bedingung die Werte TRUE und FALSE an.

      Pfadüberdeckung

      Alle denkbaren Programmpfade (und Schleifen) werden durchlaufen.

      Ein Kennzeichen des White-Box-Testes ist allerdings, dass auch ein Hinlänglichkeitskriterien erfüllendes Systeme, dennoch fehlerbehaftet sein kann,

      1. die Testfälle nicht aus der Spezifikation des Programms hergeleitet werden, sondern aus dem Programm selbst. Getestet werden kann daher nur die Korrektheit eines Systems, nicht die geforderte Semantik.
      2. Auch wenn alle Programmpfade getestet worden sind, bedeutet es nicht, dass ein Programm fehlerfrei arbeitet. Der Fall, dass im Graphen des Kontrollflusses Kanten fehlen, wird nicht erkannt.

      Da reine White-Box-Tests als Testmethodik demzufolge nicht ausreichen, kombinieren sinnvolle Testreihen sowohl White-Box- als auch Black-Box-Tests.

      WhiteBox-Tests helfen, Fehler in bestimmten Komponenten bzw. sogar die fehlerauslösenden Komponenten selbst zu identifizieren. Black-Box-Tests übernehmen die Fehlerfindung auf Seiten der Spezifikation und decken damit einen größeren Bereich ab.

      Zwei Fehler in zwei Komponenten können sich scheinbar aufheben und den Eindruck eines korrekt funktionierenden Gesamtsystems erwecken. Dies kann durch WhiteBox-Tests leichter erkannt werden, wobei Black-Box-Test meist nur einen der beiden Fehler als vermeintliche Regression, also der Wiederkehr eines bereits früher beseitigten Fehlers, erkennen.

      Black-Box

      Der Black-Box-Test bezeichnet die Methode des dynamischen Software-Tests, bei dem keine Kenntnisse über die innere Funktionsweise des zu testenden Systems vorliegen. Er bestimmt die Güte des Codes und beschränkt sich auf das funktionsorientierte Testen. Man nennt ihn deshalb auch Funktionstest. Für die Ermittlung der Testfälle wird lediglich die Spezifikation, nicht aber die Implementierung des Testobjektes herangezogen. Die genaue Beschaffenheit des Codes wird nicht überprüft, er wird als Black-Box mit Eingang und Ausgang behandelt.

      Der Grund für das bewusste Verzichten auf Quellcode-Informationen ist, dass Programmierer keine Tests "um ihre eigenen Fehler herum" entwickeln und somit Lücken in der Implementierung übersehen können. Ein Entwickler, der Kenntnisse über die innere Funktionsweise eines Systems besitzt, könnte unabsichtlich aufgrund seiner persönlichen Auffassung potentielle Fehlerquellen vernachlässigen oder anders als die Spezifikation interpretieren. Weiterhin eignen sich Black-Box-Tests ebenso als zusätzliche Stütze zur Überprüfung der Spezifikation auf Vollständigkeit, da sich die verwendeten Eingangsdaten aus den Funktionsbereichen des jeweiligen Softwaresystems ergeben. Sie bilden je nach den unterschiedlichen Merkmalen dieser Bereiche verschiedene Äquivalenzklassen von Testdaten. Die initiale Einteilungsform von Testdaten besteht aus Normalwerten, Extremwerten und Falschwerten.

      Ein erfolgreicher Black-Box-Test stellt ebenfalls keine Garantie für die Fehlerfreiheit der Software dar, da in frühen Phasen des Softwareentwurfs erstellte Spezifikationen spätere Detail- und Implementationsentscheidungen nicht abdecken. Ein vollständiger Black-Box-Test ist somit, ebenso wie ein isolierter White-Box-Test, nicht sinnvoll. Black-Box-Tests sind ausserdem wesentlich aufwendiger in der Durchführung, da sie eine größere organisatorische Infrastruktur in Form eines eigenen Teams benötigen.

      Eine Herausforderung bei den folgenden Performance- und Lasttests wird daher die Identifikation einer minimalen Menge von Testfällen sein, welche ein Maximum der spezifizierten Funktionalität prüft.

      Greybox

      Ein Ansatz aus dem “Extreme Programming” stellen die Grey-Box-Tests dar. Diese versuchen mit Hilfe testgesteuerter Programmierung die gewünschten Vorteile von Black-Box- und White-Box-Tests weitgehend miteinander zu verbinden und gleichzeitig die unerwünschten Nachteile möglichst zu eliminieren. Ihre hnlichkeit mit White-Box-Test besteht darin, dass sie ebenfalls von den gleichen Entwicklern wie das zu testende System geschrieben werden. Mit dem Black-Box Test teilen sie sich anfänglich die Unkenntnis über die Interna des zu testenden Systems, weil der Grey-Box Test vor dem zu testenden System geschrieben wird.

      Somit kann man Teilkomponenten und Gesamtsysteme mit dem geringen organisatorischen Aufwand der White Box Tests prüfen, ohne eventuell "um Fehler herum" zu testen. Grey-Box Tests als Bestandteil agiler Prozesse benötigen einen hohen Grad an Disziplin oder weitere Prozess-Methoden des Software-Engineerings wie z.B. Paarprogrammierung oder Akzeptanztests, um praktikabel und erfolgreich einsetzbar zu sein. Mögliche Ablaufvarianten dieser Test-Methode sind unter [Wes04] zu finden und sehr gut erläutert.

Bevor konkret auf den adaptiven webbasierten Fall eingegangen wird, sollen zunächst geeignete allgemeine Testmethoden und -techniken erläutert werden. Mit Bezug auf den Inhalt von Abb. 1 und dem angefügten Erläuterungstext lässt sich bereits vermuten, dass verschiedene Ansatzpunkte mit unterschiedlichen Technologien eingeführt werden müssen, um einen genauen Überblick zum Verhalten des Websystems zu erhalten. Um dies mit theoretischem Verständnis zu unterlegen, sollen dem Leser zu Beginn dieses Kapitels die nötigen Grundlagen aufgezeigt werden, auf dessen Verständnis aufbauend eine Übersicht geeigneter Testtools folgt.

Testmethoden

Grundsätzlich unterscheidet man im Software-Bereich nach [Wiki04] zwischen statischen und dynamischen Testfällen. Erstere, aus den Schritten “Verifikation” und “Analyse” bestehend, sollen die semantische Korrektheit des Quellcodes nachweisen. Dynamische Tests, die den hauptsächlichen Teil der Performance- und Lasttest-Palette einnehmen, sind am Besten als “aktives und organisiertes Herumprobieren” zu bezeichnen.

Um den allgemeingültigen Überblick über Software-Test zu gewährleisten, wird zunächst eine Definition der oben erwähnten statischen Testmöglichkeiten folgen. Darauf aufbauend sollen dynamische Testmethoden ausführlich vorgestellt werden. Die erlangten Erkenntnisse bilden geeignetes Hintergrundwissen, um im nächsten Abschnitt die genannten Tools zu kategorisieren und eine auf das Websystem Amacont angepasste Auswahl zu treffen.


Statische Tests

Die erste Stufe eines statischen Testes umfasst das Verifizieren des Quellcodes, bei welchem die Abarbeitung eines Codefragmentes als korrekt bewiesen wird. Die DIN EN ISO 8402 versteht dabei unter Verifizierung das Bestätigen aufgrund einer Untersuchung und durch Bereitstellung eines Nachweises, daß festgelegte Forderungen erfüllt worden sind. Diese Norm bezieht sich auf die Qualitätssicherung von organisatorischen und betrieblichen Abläufen. Sie kommt folglich nicht direkt aus dem Bereich der Datenverarbeitung, weshalb keine weiteren Spezifizierungen vorgenommen werden. Der Nachweis in der Softwaretechnik kann zum einen über Automatenmodelle (Kellerautomat, Turing-Maschine), als auch mit Hilfe von Methoden der formalen Semantik erfolgen. Es handelt sich dabei meist um automatische bzw. halbautomatische Verfahren, deren Kosten allerdings schwer einschätzbar sind.

Als zweite Stufe des statischen Tests wird die Analyse angesehen, bei der das untersuchte Objekt oder Subjekt zergliedert und in seine Bestandteile zerlegt wird. Diese werden anschließend geordnet und ausgewertet.

Zu diesem Zeitpunkt fehlen noch standardisierte bzw. leicht anwendbare Datenbasen und Maße zur automatischen bzw. halbautomatischen Formulierung von Qualitätsstufen und -zielen. Manuelle analysierende Verfahren wie Inspektion, Review, Walktrough, Durchsprache und Audits sind häufig Bestandteil formalisierter Qualitätsmanagementansätze im Projektalltag. Sie werden auf fast alle Phasen der Entwicklung angewendet. Teammitglieder, externe Spezialisten, echte Benutzer und als Moderator eingesetzte Personen überprüfen dabei anhand einer aufgestellten Checkliste die Korrektheit der erstellten Informationen.

Für das aktuelle Web-System sind diese Testmethoden ungeeignet, da ihre Spezialisierung eher auf den Beweis der Korrektheit als auf die Testung der Performance hinzielen. Bei Problemen, die durch Lasttests entstehen, sollten die als Bottleneck identifizierten Komponenten in einem Review erneut betrachtet werden.


Dynamische Tests

Im Gegensatz zu statischen Testverfahren beziehen sich dynamische Tests auf die Ausführung der zu analysierenden Software unter kontrollierten Vorbedingungen. Es wird überprüft, ob die Software die definierten Inputdaten korrekt verarbeitet und somit das beobachtete Ergebnis mit dem erwarteten übereinstimmt. Die bekanntesten dynamischen Testverfahren sind “Black-Box-” sowie “White-Box-Test”, welche den Hauptbestandteil von Performance- und Lastentests darstellen.

White-Box

Als White-Box oder auch Glass-Box wird die Methode des dynamischen Software-Tests bezeichnet, bei welcher Informationen über die innere Beschaffenheit des Testobjektes bekannt sind. Es wird direkt am Quellcode getestet. Ziel ist die Sicherstellung, dass die Testfälle gewisse Hinlänglichkeitskriterien erfüllen, welche zwischen kontrollflussabhängigen und datenflussabhängigen Testkriterien unterschieden werden. Datenflussabhängige Testkriterien beziehen sich dabei auf die Benutzung von Variablen, die Bestimmung von Grenzwerten und die Einhaltung von Grenzfeldern. Kontrollflussabhängige Testkriterien dagegen werden bei [Ger02] ausführlich wie folgt aufgeschlüsselt:

Anweisungsüberdeckend (C0)

Jede Anweisung wird hier mindestens einmal ausgeführt.

Zweigüberdeckend (C1)

Jede Bedingung in einer Verzweigung nimmt die Werte TRUE und FALSE an und jeder Programmzweig wird mindestens einmal ausgeführt.

Mehrfachbedingungsüberdeckung

In zusammengesetzten Bedingungen nimmt hier jede atomare Bedingung die Werte TRUE und FALSE an.

Pfadüberdeckung

Alle denkbaren Programmpfade (und Schleifen) werden durchlaufen.

Ein Kennzeichen des White-Box-Testes ist allerdings, dass auch ein Hinlänglichkeitskriterien erfüllendes Systeme, dennoch fehlerbehaftet sein kann,

  1. die Testfälle nicht aus der Spezifikation des Programms hergeleitet werden, sondern aus dem Programm selbst. Getestet werden kann daher nur die Korrektheit eines Systems, nicht die geforderte Semantik.
  2. Auch wenn alle Programmpfade getestet worden sind, bedeutet es nicht, dass ein Programm fehlerfrei arbeitet. Der Fall, dass im Graphen des Kontrollflusses Kanten fehlen, wird nicht erkannt.

Da reine White-Box-Tests als Testmethodik demzufolge nicht ausreichen, kombinieren sinnvolle Testreihen sowohl White-Box- als auch Black-Box-Tests.

WhiteBox-Tests helfen, Fehler in bestimmten Komponenten bzw. sogar die fehlerauslösenden Komponenten selbst zu identifizieren. Black-Box-Tests übernehmen die Fehlerfindung auf Seiten der Spezifikation und decken damit einen größeren Bereich ab.

Zwei Fehler in zwei Komponenten können sich scheinbar aufheben und den Eindruck eines korrekt funktionierenden Gesamtsystems erwecken. Dies kann durch WhiteBox-Tests leichter erkannt werden, wobei Black-Box-Test meist nur einen der beiden Fehler als vermeintliche Regression, also der Wiederkehr eines bereits früher beseitigten Fehlers, erkennen.

Black-Box

Der Black-Box-Test bezeichnet die Methode des dynamischen Software-Tests, bei dem keine Kenntnisse über die innere Funktionsweise des zu testenden Systems vorliegen. Er bestimmt die Güte des Codes und beschränkt sich auf das funktionsorientierte Testen. Man nennt ihn deshalb auch Funktionstest. Für die Ermittlung der Testfälle wird lediglich die Spezifikation, nicht aber die Implementierung des Testobjektes herangezogen. Die genaue Beschaffenheit des Codes wird nicht überprüft, er wird als Black-Box mit Eingang und Ausgang behandelt.

Der Grund für das bewusste Verzichten auf Quellcode-Informationen ist, dass Programmierer keine Tests "um ihre eigenen Fehler herum" entwickeln und somit Lücken in der Implementierung übersehen können. Ein Entwickler, der Kenntnisse über die innere Funktionsweise eines Systems besitzt, könnte unabsichtlich aufgrund seiner persönlichen Auffassung potentielle Fehlerquellen vernachlässigen oder anders als die Spezifikation interpretieren. Weiterhin eignen sich Black-Box-Tests ebenso als zusätzliche Stütze zur Überprüfung der Spezifikation auf Vollständigkeit, da sich die verwendeten Eingangsdaten aus den Funktionsbereichen des jeweiligen Softwaresystems ergeben. Sie bilden je nach den unterschiedlichen Merkmalen dieser Bereiche verschiedene Äquivalenzklassen von Testdaten. Die initiale Einteilungsform von Testdaten besteht aus Normalwerten, Extremwerten und Falschwerten.

Ein erfolgreicher Black-Box-Test stellt ebenfalls keine Garantie für die Fehlerfreiheit der Software dar, da in frühen Phasen des Softwareentwurfs erstellte Spezifikationen spätere Detail- und Implementationsentscheidungen nicht abdecken. Ein vollständiger Black-Box-Test ist somit, ebenso wie ein isolierter White-Box-Test, nicht sinnvoll. Black-Box-Tests sind ausserdem wesentlich aufwendiger in der Durchführung, da sie eine größere organisatorische Infrastruktur in Form eines eigenen Teams benötigen.

Eine Herausforderung bei den folgenden Performance- und Lasttests wird daher die Identifikation einer minimalen Menge von Testfällen sein, welche ein Maximum der spezifizierten Funktionalität prüft.

Greybox

Ein Ansatz aus dem “Extreme Programming” stellen die Grey-Box-Tests dar. Diese versuchen mit Hilfe testgesteuerter Programmierung die gewünschten Vorteile von Black-Box- und White-Box-Tests weitgehend miteinander zu verbinden und gleichzeitig die unerwünschten Nachteile möglichst zu eliminieren. Ihre hnlichkeit mit White-Box-Test besteht darin, dass sie ebenfalls von den gleichen Entwicklern wie das zu testende System geschrieben werden. Mit dem Black-Box Test teilen sie sich anfänglich die Unkenntnis über die Interna des zu testenden Systems, weil der Grey-Box Test vor dem zu testenden System geschrieben wird.

Somit kann man Teilkomponenten und Gesamtsysteme mit dem geringen organisatorischen Aufwand der White Box Tests prüfen, ohne eventuell "um Fehler herum" zu testen. Grey-Box Tests als Bestandteil agiler Prozesse benötigen einen hohen Grad an Disziplin oder weitere Prozess-Methoden des Software-Engineerings wie z.B. Paarprogrammierung oder Akzeptanztests, um praktikabel und erfolgreich einsetzbar zu sein. Mögliche Ablaufvarianten dieser Test-Methode sind unter [Wes04] zu finden und sehr gut erläutert.

top