Mit Softwaretest der Realität im Live-Betrieb der Software standhalten
Wie sagte schon der gute alte Goethe "Grau, teurer Freund, ist alle Theorie und grün des Lebens gold'ner Baum." Damit nun auch die Software-Entwicklung für Ihr Unternehmen goldene Früchte trägt, muss die Planung, Konstruktion und Umsetzung einer Software letztendlich im laufenden Betrieb Ihres Business kontinuierlich erfolgreich sein. Und damit sie genau das auch ist, sind Software-Tests mit eine der wichtigsten Komponenten in dem Entstehungsprozess.
Softwaretests als Erfolgsgarantie
Testings sind ein entscheidender Teil des Zyklus der Softwareentwicklung. Es ist ein systematischer, iterativer Prozess, um die Qualität des Produkts zu überprüfen und sicherzustellen, dass es den Anforderungen entspricht. Wer die Bedeutung von Softwaretests unterschätzt oder gar Tests auf Grund falsch verstandener Einsparungspotenziale versäumt, läuft in Gefahr letzten Endes im Entwicklungsprozess Zeit zu verlieren und Geld zu verbrennen. Und nicht zuletzt ist eine stabile und fehlerfreie Codebasis der Garant für die Akzeptanz der Nutzer und des Erfolgs des Produkts.
Kurz gesagt:
»Viel hilft viel. Je mehr Sie Ihren Code testen, desto schneller können Sie erkennen, was behoben oder verbessert werden muss, damit der Code ordnungsgemäß funktioniert.«
Softwaretests können manuell oder mit Hilfe von Tools durchgeführt werden. Testings werden im Zuge von Continuous Integration & Continuous Delivery eingesetzt.
Manuelles Testen ist zeitaufwändig, teuer und birgt das Risiko menschlicher Fehler. Darüber hinaus ist es kaum skalierbar, da Menschen in einem bestimmten Zeitraum nur eine begrenzte Anzahl manueller Aufgaben erledigen können. Diese Art des Testens sollte möglichst nur dort eingesetzt werden, wo nicht nur Funktion, sondern auch Design und User-Experience eine tragende Rolle spielen. In diesen Fällen sind wir Menschen doch die besseren Tester!
Im Vergleich zum manuellen Testing ist das automatisierte Testen einfach zu skalieren, da Maschinen Tausende von Aufgaben in Sekundenschnelle erledigen. Es ist schnell und kostengünstig, da kein menschliches Eingreifen erforderlich ist - alles was es braucht, ist der Code, der den Test ausführt. Je nach Test-Typus werden die Test-Codes auf Basis von "Drehbüchern/Stories" erstellt. Hierfür ist eine enge Abstimmung zwischen Kunde, Projektleitern und Programmierern erforderlich.
Es gibt eine Vielzahl von Tests und Testmethoden. Die gängigsten sind
- Unit-Tests
- Integrations-Tests
- Funktionale Tests
- Akzeptanztests
Die Basis: Unit-Tests
Unit-Tests werden auf der niedrigsten Abstraktionsebene durchgeführt und testen einzelne Codeeinheiten. Eine Einheit kann eine Funktion, ein Modul, eine Komponente oder eine Klasse sein. Unit-Tests können als Blaupause für den Testprozess angesehen werden und helfen sicherzustellen, dass Änderungen sich fehlerfrei ins System einfügen. Diese kleinsten Test-Einheiten lassen sich schnell und kostengünstig umsetzen.
Funktionale Tests
Ein Funktionstest ist ein automatisierter Test, der verwendet wird, um das Verhalten einer Anwendung oder eines Systems zu validieren. Es ist eine Art Black-Box-Test. Die Idee besteht darin, die Aktionen eines Benutzers zu simulieren und dann zu überprüfen, ob sich die Anwendung wie erwartet verhält.
Akzeptanz-Tests
Akzeptanztests werden von Entwicklern, Projekt-Ownern/Projektmanagern und mit Input vom Kunden erstellt. Hierbei geht es darum, die Erfüllung aller Anforderung zu validieren. Auch die Akzeptanz-Tests können in verschiedenen Entwicklungsstadien angewendet werden. Oftmals werden diese Tests mit Tools wie z.B. Selenium oder Cucumber automatisiert.
Integrations-Tests
Integrations-Tests prüfen, ob alle Komponenten wie erwartet zusammenarbeiten. Sie sind also der nächst größere Schritt nach erfolgreich durchlaufenen Unit-Tests.
Nehmen wir uns ein Beispiel
Nicht immer sind die Softwaretests scharf voneinander abzutrennen. Zum besseren Verständnis ein kleines Beispiel.
Jemand entscheidet sich, ein Haus zu bauen. Der Bauherr, der Bauleiter und die beauftragten Gewerke würden nicht auf den Gedanken kommen, das Haus erst nach Fertigstellung zu überprüfen! Auch hier wird sukzessive, iterativ "getestet". Ein kleines Beispiel:
- Der Unit-Test: steht und trägt die Außenwand und gibt Aussparungen für Fenster und die Haustür?
- Der Integrations-Test: Passt die Haustür in die Öffnung, die der Maurer gelassen hat?
- Der Funktions-Test: Die Außenmauer hat ein Loch für die Haustür gelassen, die Haustür passt in die Aussparung. ABER: lässt sich die Haustür problemlos öffnen und schließen?
- Der Akzeptanz-Test: Die Begehung eines fertig gestellten Raumes wie z.B. der Eingangsbereich: Ist der Boden korrekt verlegt, gibt es eine Treppe hinauf in das OG, führen Türen in die anliegenden Räume etc.?
Aber ganz egal welchen Namen man dem Kinde gibt: Hauptsache es wird getestet - iterativ und kontinuierlich.
Da gibt es noch mehr!
Über die oben genannten Softwaretests hinaus gibt es noch eine Vielzahl anderer Tests, wie z.B. End-to-End-Tests oder Smoke-Tests. Auch Last- und Performance-Tests mit dem Zusammenspiel von Servern und Anwendungen müssen im Blick behalten werden.
Und natürlich sind die Tests neben der Überprüfung von Code und Funktionen auch ein "Proof of Concept", ob die Anforderungen richtig verstanden worden sind. Wir schließen mit einem weiteren "Beispiel"
Der Projektmanager zum Programmierer: „Wir haben kein Brot mehr in der Gemeinschaftsküche. Ich habe keine Zeit, es zu besorgen. Bist Du so nett und gehst in der Mittagspause am Kiosk an der Ecke vorbei und bringst eines mit? Ach, und wenn sie Eier haben, bring 6 Stück mit.“
Nach kurzer Zeit kommt der Programmierer wieder zurück und hat 6 Brote dabei.
Der Projektmanager staunt: „Warum hast du denn 6 Brote gekauft?“
Daraufhin der Programmierer: „Sie hatten Eier.“
Kurz gesagt:
»Softwaretests sind kein nice-to-have. Es ist das A und O der Softwarentwicklung.«