Testen ist die Grundlage, um qualitativ hochwertige Software zu erstellen. Obwohl das Testen im Softwareentwicklungsprozess einen hohen Stellenwert einnehmen sollte, wird es dennoch oft vernachlässigt. Vermutlich ein Grund dafür, dass Testen mit hohem Arbeitsaufwand verbunden ist und hauptsächlich per Hand durchgeführt werden muss.
In dieser Arbeit wird eine systematische Methode zur automatischen Testfallgenerierung für den Black-Box-Test vorgestellt. Das für die Umsetzung der Methode implementierte Werkzeug verknüpft Unit-Tests mit Äquivalenzklassen- und Grenzwertanalyse. Durch den Gebrauch von Quelltext-Vorlagen ist das Programm völlig unabhängig vom eingesetzten Unit-Testing-Framework und der verwendeten Programmiersprache. Darüber hinaus können die Testfälle auch als textuelle Beschreibung viel abstrakter formuliert werden.
Zur Einführung in die Thematik des Testens wird zuerst der Begriff Qualität definiert. Darauf aufbauend werden Prozessmodelle zur Softwareentwicklung vorgestellt und gezeigt wie sie Einfluss auf die Softwarequalität nehmen. Ein Überblick über Testen im Allgemeinen und Testverfahren im Besonderen ermöglichen die Einordnung der vorgestellten Testmethoden in einem breiteren Kontext. Im Anschluss daran werden die im Werkzeug umgesetzten Testmethoden ausführlich beschrieben. Das Benutzerhandbuch und ausgewählte Problemstellungen der Implementierung ermöglichen einen tieferen Einblick in das Werkzeug selbst. Ein Ausblick auf mögliche Verbesserungen und Weiterentwicklungen runden diese Arbeit ab.
Inhaltsverzeichnis
1 Einleitung
2 Grundlagen
2.1 Qualität
2.1.1 Produktqualität
2.1.2 Prozessqualität
2.2 Prozessmodelle
2.3 Testen
2.4 Testverfahren
2.4.1 Statische Verfahren
2.4.2 Dynamische Verfahren
3 Im Werkzeug umgesetzte Testverfahren
3.1 Äquivalenzklassenanalyse
3.1.1 Bestimmen der Äquivalenzklassen
3.1.2 Definition der Testfälle
3.1.3 Beispiel
3.2 Category-Partition Methode
3.2.1 Unabhängige Partitionen
3.2.2 Abhängige Partitionen
3.2.3 Beispiel
3.3 Grenzwertanalyse
3.4 Unit-Tests
4 Benutzerhandbuch
4.1 Einführung in TestIt
4.1.1 Systemvoraussetzungen
4.1.2 Installation
4.2 Funktionsweise
4.2.1 Erzeugen der Testdaten
4.2.2 Erzeugen des Testablaufs
4.3 Benutzeroberfläche
4.3.1 Menü- und Symbolleiste
4.3.2 Statusleiste
4.3.3 Standardschaltflächen für Dialoge
4.3.4 Datei-Dialog
4.3.5 Klassenansicht
4.3.6 Mitteilungen-Fenster
4.3.7 Ausgabe-Fenster
4.3.8 Eigenschaften-Fenster
4.3.9 Auflistungs-Editor
4.3.10 Bedingungen-Editor
4.3.11 Quelltext-Editor
4.3.12 Navigator
4.3.13 Programm-Einstellungen
4.4 Verwenden von TestIt
4.4.1 Erstellen der Metainformationen
4.4.2 Quelltext-Vorlagen erstellen
4.4.3 Testfälle vervollständigen
4.4.4 Ausführen der Tests
4.4.5 Beispiele
4.4.6 Tipps und Tricks
4.5 Erweitern von TestIt
4.5.1 Erstellen von Plugins
4.6 Referenz
4.6.1 Fehlermeldungen
4.6.2 Quelltext-Marken
4.6.3 Tastenkürzel
5 Implementierung von TestIt
5.1 Model-View-Controller
5.2 Datenmodell
5.2.1 PropertyGrid
5.2.2 Kulturinformationen
5.2.3 Laufzeit-Typinformationen
5.2.4 Persistenz
5.2.5 Testspezifikation
5.3 Testfallerzeugung
5.4 Plattformunabhängigkeit
5.5 Projekte
5.5.1 AssemblyParser
5.5.2 ComponentModel
5.5.3 Controls
5.5.4 MetaInfo
5.5.5 SharpParser
5.5.6 TestIt
5.5.7 TestSpecParser
5.5.8 Util
5.6 Laufzeitstatistik
6 Ähnliche Projekte
6.1 Condition-Table-Methode
6.2 Cause-Effect-Graphing
6.3 Revealing Subdomains
6.4 Partition Analysis
7 Ausblick
7.1 Verbesserung der Bedienung
7.2 Weiterentwicklung
7.2.1 Testing by Contract
7.2.2 Object Constraint Language
8 Zusammenfassung
Zielsetzung & Themen
Das Hauptziel dieser Arbeit ist die Entwicklung einer systematischen Methode sowie eines zugehörigen Werkzeugs, um den Prozess der Black-Box-Testfallgenerierung zu automatisieren, die Anzahl notwendiger Testfälle zu reduzieren und diese direkt in testbare Code-Strukturen zu überführen.
- Systematische Testfallgenerierung mittels Äquivalenzklassenanalyse und Grenzwertanalyse.
- Reduktion der Testfallanzahl durch den Einsatz der Category-Partition Methode und die Definition von Spezialfällen.
- Implementierung eines Werkzeugs (TestIt), das die Spezifikation testbarer Funktionen und die automatische Generierung von Unit-Tests ermöglicht.
- Unabhängigkeit von konkreten Programmiersprachen und Unit-Testing-Frameworks durch den Einsatz konfigurierbarer Quelltext-Vorlagen.
- Unterstützung für fortgeschrittene Testanforderungen wie Abhängigkeiten zwischen Parametern (Constraints) und Exception-Testing.
Auszug aus dem Buch
3.2 Category-Partition Methode
Eine systematischere Vorgehensweise bei der Erstellung von Äquivalenzklassen verfolgt die Category-Partition Methode. [16] Dabei wird die in einer natürlichen Sprache verfasste Spezifikation, welche unmittelbar als Basis für Black-Box-Tests ungeeignet ist, in eine formale Sprache übersetzt. Während der Transformation der Spezifikation fallen häufig unvollständige, mehrdeutige oder widersprüchliche Formulierungen auf. Dieser Übersetzungsprozess hilft daher auch die Qualität der Spezifikation zu verbessern, indem die vorher genannten Probleme aufgedeckt werden. Weiters werden nicht nur die Eingabedaten, sondern auch die Ausgabedaten bei den Tests berücksichtigt.
Die Category-Partition Methode beginnt mit der Zerlegung der Spezifikation in funktionale Einheiten, die unabhängig getestet werden können. Im Fall einer Klasse (im Sinne der objektorientierten Programmierung) wäre eine solche funktionale Einheit eine Methode. Der nächste Zerlegungsschritt ermittelt die Parameter und Umgebungseinflüsse, welche das Verhalten der funktionalen Einheit beeinflussen. Parameter sind explizite Eingaben, während Umgebungseinflüsse beispielsweise globale Variablen oder den Systemzustand beschreiben. Parameter und eventuell vorhandene Umgebungseinflüsse werden unter dem Begriff Faktor zusammengefasst. Für diese Faktoren müssen konkrete Werte gefunden werden, um Testfälle erstellen zu können. Auf der Suche nach diesen Werten werden im nächsten Schritt des Zerlegungsprozesses Arten von Informationen gesucht, die jeden Faktor kennzeichnen. Der Tester markiert in der Spezifikation für jeden Faktor jene Textstellen, die das Verhalten der funktionalen Einheit beeinflussen. Jedes erkannte Merkmal wird als Category bezeichnet. Im nächsten Schritt werden die gefundenen Merkmale in Äquivalenzklassen (Choices) unterteilt. Die Begriffe Äquivalenzklasse, Partition sowie Choice haben dieselbe Bedeutung.
Nachdem Faktoren und Äquivalenzklassen feststehen, wird für jede funktionale Einheit eine formale Testspezifikation verfasst. Die Testspezifikation besteht aus einer Liste von Faktoren, die eine Liste von Partitionen enthält. Aus der Testspezifikation werden im nächsten Schritt Testframes für die Testfälle erstellt. Vorerst wird bei der Erstellung der Testframes so vorgegangen, dass jede Äquivalenzklasse mit jeder anderen Partition, die nicht zum selben Faktor gehört, kombiniert wird. Im Abschnitt 3.1.2 wird diese Vorgehensweise noch erweitert.
Zusammenfassung der Kapitel
1 Einleitung: Diese Einleitung thematisiert die Notwendigkeit des systematischen Testens anhand von Softwarefehlern und definiert zentrale Fehlerbegriffe.
2 Grundlagen: Das Kapitel führt grundlegende Begriffe wie Qualität, Prozessmodelle und diverse Testverfahren ein, um den Kontext für die Arbeit zu schaffen.
3 Im Werkzeug umgesetzte Testverfahren: Hier werden die mathematischen und methodischen Konzepte der Äquivalenzklassenanalyse und der Category-Partition Methode für die automatisierte Testfallgenerierung detailliert erläutert.
4 Benutzerhandbuch: Dieser Abschnitt dient als praktische Anleitung zur Bedienung des Werkzeugs TestIt, von der Installation bis zur Erstellung eigener Test-Plugins.
5 Implementierung von TestIt: Es wird die technische Architektur des Programms erläutert, insbesondere das Model-View-Controller Entwurfsmuster und die Datenmodellierung.
6 Ähnliche Projekte: Dieses Kapitel vergleicht die vorgestellte Methode mit existierenden Ansätzen wie Condition-Table-Methode oder Cause-Effect-Graphing.
7 Ausblick: Der Ausblick zeigt zukünftige Erweiterungsmöglichkeiten des Werkzeugs auf, beispielsweise durch die Integration von Design by Contract.
8 Zusammenfassung: Die Arbeit wird abschließend reflektiert, wobei die Wichtigkeit ganzheitlicher Testprozesse und die Vermeidung des Pestizidparadoxons hervorgehoben werden.
Schlüsselwörter
Black-Box-Test, Testfallgenerierung, Äquivalenzklassenanalyse, Category-Partition Methode, Unit-Tests, TestIt, Softwarequalität, Testspezifikation, Testautomatisierung, Grenzwertanalyse, Testabdeckung, Model-View-Controller, Testframework, Softwareentwicklung, Debugging
Häufig gestellte Fragen
Worum geht es in dieser Arbeit grundsätzlich?
Die Arbeit beschäftigt sich mit der systematischen und automatisierten Generierung von Testfällen für den Black-Box-Test von Software, um manuelle Aufwände zu reduzieren.
Was sind die zentralen Themenfelder der Arbeit?
Die zentralen Felder umfassen Software-Qualitätssicherung, die Methodik der Äquivalenzklassenanalyse, die Category-Partition Methode und die praktische Tool-Implementierung.
Was ist das primäre Ziel oder die Forschungsfrage?
Das primäre Ziel ist die Entwicklung eines Werkzeugs, das Testspezifikationen verwaltet und daraus automatisch eine minimale, aber vollständige Menge relevanter Testfälle generiert.
Welche wissenschaftlichen Methoden werden verwendet?
Es wird primär die Äquivalenzklassenanalyse sowie die Category-Partition Methode eingesetzt, ergänzt durch Grenzwertanalyse zur Auswahl repräsentativer Testwerte.
Was wird im Hauptteil der Arbeit behandelt?
Der Hauptteil gliedert sich in die methodischen Grundlagen der Testverfahren, ein detailliertes Benutzerhandbuch für das entwickelte Tool und die Erläuterung der softwaretechnischen Implementierung.
Welche Schlüsselwörter charakterisieren die Arbeit?
Charakterisierende Begriffe sind Testautomatisierung, Black-Box-Test, Äquivalenzklassen, Testspezifikation und softwaretechnische Qualitätssicherung.
Wie ist die Benutzeroberfläche von TestIt strukturiert?
Das Tool verwendet ein dreigeteiltes Layout mit einer Klassenansicht für Metainformationen, einem Eigenschaften-Fenster für Daten und Editoren für Testabläufe sowie Quelltext.
Was sind Spezialfälle in Bezug auf die Testfallgenerierung?
Spezialfälle sind Äquivalenzklassen, die aufgrund ihrer Fehleranfälligkeit oder Besonderheit nicht mit allen anderen Faktoren kombiniert werden, um die Anzahl der Testfälle zu minimieren.
- Quote paper
- Thomas Wetzlmaier (Author), 2005, Systematische Testfallgenerierung für den Black-Box-Test, Munich, GRIN Verlag, https://www.grin.com/document/42067