Testing/Testmanagement

Testen nimmt in der Softwareentwicklung einen nicht zu unterschätzenden Stellenwert ein. Es stellt sicher, dass die Software den Anforderungen des Kunden entsprechend arbeitet, hilft Risiken zu minimieren und insgesamt die Qualität des Produktes zu steigern. Durch Testen frühzeitig Abweichungen zu identifizieren, verringert den Aufwand diese zu korrigieren.

Die Möglichkeiten zu testen sind vielfältig und begleiten ein Produkt als wichtige Phase in dessen Lebenszyklus durch den gesamten Entwicklungsprozess. Hierbei integriert sich der Testprozess in die jeweiligen Methoden der Softwareentwicklung, wie Wasserfallmodell, V-Modell und agile Prozesse (z.B. Scrum).

Im Allgemeinen wird unterschieden zwischen Komponententest, Integrationstest, Systemtest und Abnahmetest. Jede dieser Teststufe verfolgt unterschiedliche Ziele und kennt zwei Klassen von Anforderungen. Funktionale Anforderungen definieren das Verhalten der Software (Merkmale nach ISO/IEC 25010: Richtigkeit, Angemessenheit, Ordnungsmäßigkeit, Konformität, Interoperabilität, Sicherheit). Nicht funktionale Anforderungen beschreiben, wie das System die funktionalen Anforderungen erfüllt (Merkmale nach ISO/IEC 25010: Zuverlässigkeit, Benutzbarkeit, Effizienz, Änderbarkeit, Übertragbarkeit). Je nach Testziel kommen unterschiedliche Testverfahren zum Einsatz. Beispiele für funktionale Anforderungen sind das anwendungsfallbasierte oder geschäftsprozessbasierte Testen; Beispiele für nicht funktionale Anforderungen sind Lasttest, Performanztest und Stresstest.

Zu den Aufgaben des Testmanagers gehören die Planung, Überwachung und Steuerung der Testaktivitäten sowie deren Dokumentation in Testreports. In Testkonzept und Testplan legt er u.a. den geplanten Testumfang fest, beschreibt Teststrategie und Testverfahren, definiert Kriterien für Abnahme, Testabbruch und Testfortsetzung, plant Ressourcen und die zeitliche Durchführung, nennt einzusetzende Werkzeuge zur Testautomatisierung und zur Verwaltung von Testfällen und Abweichungen (vgl. ISO/IEC/IEEE 29119).

Während der Testdurchführung wird im Testprotokoll festgehalten, was wann mit welchem Ergebnis getestet wurde. Über eine Verknüpfung von Anforderungen zu Testfällen und Testergebnis dient dies als Nachweis für die Umsetzung der geplanten Teststrategie und sollte auch für unbeteiligte Personen nachvollziehbar sein. Kennzahlen wie die Anzahl der geplanten, gelaufenen und blockierten Tests verdeutlichen den Testfortschritt. Schwere, Priorität und Status erfasster Fehler (neu, offen, korrigiert) ermöglichen eine Beurteilung der Produktstabilität bzw. Freigabereife.

Die Tester bei Novobit sind ISTQB® zertifiziert und arbeiten nach diesem Standard.

Testautomatisierung

Ein Mensch als Tester ist bei Weitem flexibler als es automatisierte Testskripte sein können, weswegen insbesondere bei Neuentwicklungen von Funktionalitäten der manuelle Test in der Qualitätssicherung immer einen hohen Stellenwert einnimmt. Die große Stärke einer Testautomatisierung ist allerdings die immer exakt gleiche Ausführung von definierten Testfällen. Damit sind sie bestens geeignet, sich wiederholende Testfälle abzubilden. Dazu gehören z.B. Komponententests, mit denen die Entwickler sofort erkennen können, ob die geänderten oder neuen Komponenten korrekt funktionieren, Regressionstests, mit denen sichergestellt wird, dass unveränderte Funktionalitäten weiterhin richtig arbeiten und auch nicht funktionale Test, die die Performanz der Anwendung messen.

Die Komponententests werden normalerweise direkt von den Entwicklern erstellt. Im Wesentlichen handelt es sich dabei um wiederholte Aufrufe von Funktionen, Methoden, Klassen mit verschiedenen Parametern und der Überprüfung der Rückgabewerte. Die Regressionstest laufen meistens auf Systemtestebene und bilden Abläufe in der Anwendung ab, z.B. Anlage eines Datensatzes. Hier können verschiedene Frameworks für Entwicklungsumgebungen (relativ hoher Entwicklungsaufwand) und auch spezialisierte Tools (oft geringerer Entwicklungsaufwand) eingesetzt werden. Im Idealfall werden die automatisierten Tests in die kontinuierliche Integration eingebunden, sodass sie direkt nach einem Build laufen können. Anhand des Ergebnisses kann dann über ein Deployment entschieden werden.

Der Anteil der Testautomatisierung nimmt in der Regel mit der Höhe der Teststufe ab. Während es auf Komponentenebene das Ziel sein sollte, jede Komponente mit einem Test zu versehen, wird bei den Systemtests Wert auf die wesentlichen Funktionalitäten gelegt. Das liegt daran, dass mit jeder höheren Teststufe die Testskripte komplexer werden, womit der Aufwand (Erstellung und Pflege) und die Fehleranfällig steigt und dadurch der Mehrwert wieder sinkt. Dieses Gleichgewicht gilt es zu optimieren.

Gerade in agilen Prozessen kommt Testautomatisierung oft sehr früh zum Einsatz, in bestimmten Prozessen wie der testgetriebenen Softwareentwicklung sogar vor der eigentlichen Entwicklung. In dem Fall werden zuerst Testfälle erzeugt und dann entwickelt bis die Testfälle erfolgreich durchlaufen. Hierbei ist eine sehr enge Zusammenarbeit zwischen Tester und Entwickler erforderlich. Während eines Sprints müssen die Testskripte praktisch durchgehend lauffähig sein, damit Abweichungen sofort entdeckt werden. Entscheidend ist, dass hier die Testautomatisierung äußerst robust ist, wofür verschiedene Frameworks zur Verfügung stehen, z.B. für verhaltensgetriebene, schlüsselwortgetriebene und modellbasierte Softwareentwicklung.