Suchen

Anforderungsmanagement und Qualitätssicherung Testbarkeit und Testautomatisierung

Autor / Redakteur: Giorgio Roselli, Thomas Sorg * / Franz Graser

Vieles spricht dafür, die Testbarkeit und -automatisierung als Teil der Anforderungsmodellierung zu betrachten. Denn stetige Tests beheben nicht nur Fehler, sondern sichern auch den Entwicklungsprozess ab.

Firmen zum Thema

Testen im Verbund: Der große Würfel repräsentiert ein Subsystem, das sich wiederum aus Modulen (den kleineren Würfeln) zusammensetzt. Die Module werden im Verbund getestet.
Testen im Verbund: Der große Würfel repräsentiert ein Subsystem, das sich wiederum aus Modulen (den kleineren Würfeln) zusammensetzt. Die Module werden im Verbund getestet.
(Bild: iStockphoto/Henvry)

Jeder weiß, wie wichtig Tests für die Qualitätssicherung in der Entwicklung von Softwaresystemen sind. Ebenfalls eine bekannte Tatsache: Je später ein Fehler aufgedeckt wird, desto aufwendiger ist er zu beheben. Dennoch unterlaufen vielen Projekten die gleichen Fehler: Es wird zu spät mit dem Testen begonnen, und wenn Entwicklungsaufwände und -zeiten bereits überzogen wurden, wird am Test gespart. Man verlässt sich auf manuelle Tests oder schreibt triviale Modul-Tests, während komplexe Zusammenhänge ungetestet bleiben.

Solche Fehler lassen sich vermeiden, wenn der Testprozess stärker in den Vordergrund der Entwicklung rückt. Ein zentrales Kriterium ist dabei die Testbarkeit, also das Maß, zu welchem Grad sich ein Softwareartefakt testen lässt. Testbarkeit lässt sich zwar nicht direkt messen, aber sie lässt sich vom Testaufwand ableiten: je geringer die Testbarkeit, desto größer der Testaufwand. Dabei stellt sich die Frage: Wie erhöht man die Testbarkeit und erreicht zugleich einen hohen Grad an Testautomatisierung?

Die Verbesserung der Testbarkeit beginnt bereits mit der Festlegung der Anforderungen. Oft ist es erforderlich, diese präziser zu formulieren, um so Vollständigkeit, Verifizierbarkeit und damit Testbarkeit zu erhöhen. Dieser Ansatz schafft Anforderungen, die als Grundlage für Testmodelle verwendet werden können. Die Zuordnung von Anforderungen auf Modellelemente erhöht das Verständnis dafür, was getestet wird. Testanforderungen lassen sich so visuell darstellen und verfolgbar machen. Diesen Ansatz nennt man modellbasiertes Testen.

Bereits am Modell lässt sich dann abschätzen, welcher Teil automatisch und welcher manuell getestet werden wird. Wo die Grenzlinie zwischen manuellen und automatischen Tests gezogen wird, entscheidet der mit der Automatisierung verbundene Aufwand. Wo ein Automatisierungsschritt den Entwicklungsaufwand zu sehr steigert, wird die Testautomatisierung enden.

Die Rolle des Softwaredesigns

Ganz wesentlich für Testbarkeit und Testautomatisierung ist das Softwaredesign. Ein Beispiel wäre die Aufteilung von Benutzeroberfläche und Applikationslogik nach dem allgemein bekannten Model-View-Prinzip. Dieses erhöht die Testbarkeit beider Komponenten, weil sie unabhängig voneinander ausgeführt werden können. Merkmale eines aus Testperspektive guten Softwaredesigns sind unter anderem minimale Komplexität, geringe Vernetzung und ausgewogene Aufgabenverteilung. Einfachheit und Schlichtheit sind schwer zu erlangen, sind jedoch die Hauptzutaten für eine hohe Testbarkeit. Design-Patterns sind in der Regel ein guter Ratgeber für simples Design.

Am Anfang werden die kleinsten Softwareeinheiten mit Hilfe von Unit-Tests geprüft. Bei Unit-Tests handelt es sich um Programmcode, der explizit dazu dient, anderen Programmcode zu prüfen. Weit verbreitet haben Unit-Tests den Vorteil, dass sie mit Hilfe von Werkzeugen für kontinuierliche Integration einfach automatisierbar sind.

Die nächste Ebene bilden die Subsystemtests. Bei diesen werden mehrere Module im Verbund getestet. Auch diese Tests sollten automatisiert erfolgen. Subsystemtests sind komplexer als Tests für einzelne Klassen, weil auch die getesteten Modulverbunde bereits eine hohe Komplexität aufweisen. Dennoch gilt: Subsystemtests lassen sich ebenfalls mit der Technik der Unit-Tests erstellen und vornehmen.

Schließlich muss die gesamte Applikation getestet werden. Solche Tests werden oft Integrationstests genannt. Eine Herausforderung dieser Tests sind die externen Schnittstellen – die Benutzerschnittstelle, oder benachbarte Systeme – deren Verhalten schwer nachzubauen ist. Daher werden diese Tests meist per Hand durchgeführt. Das ist zwar oft nicht ganz zu vermeiden, doch lässt sich die Technik der Unit-Tests prinzipiell auch auf dieser Ebene anwenden.

(ID:43017070)