Software-Testing: Methoden, Fallstricke und Tipps
Software-Testing ist im Rahmen der Herstellung und Programmierung von Softwareprodukten ein unverzichtbarer Prozessschritt geworden, um die Qualität, Zuverlässigkeit und Sicherheit von Softwareprodukten zu gewährleisten. Als essenzieller Bestandteil des Software-Entwicklungslebenszyklus spielen Softwaretests eine entscheidende Rolle in der Identifizierung und Behebung von Fehlern, bevor Software an den Endnutzer ausgeliefert wird. In diesem Artikel werfen wir einen genaueren Blick auf das Thema Software-Testing und teilen unsere Erfahrungen mit Euch, die wir in über 15 Jahren Software-Testing inhouse und im IT-Outsourcing gewinnen haben.
Was ist Software-Testing?
Software-Testing ist die Evaluation einer Software-Anwendung, die dazu dient, sicherzustellen, dass die Anwendung die (vom Kunden) spezifizierten Anforderungen erfüllt und frei von Fehlern ist. Dieser Prozess beinhaltet in der Regel die Ausführung der Software in einer kontrollierten Umgebung, um Bugs oder Defekte zu identifizieren und zu beheben und Defizite bei der Usability zu entlarven.
Welche Formen von Software-Testing werden unterschieden?
Im Bereich des Software-Testings gibt es eine Vielzahl von Ansätzen, die sich nach verschiedenen Kriterien wie dem Grad der Automatisierung, dem Fokus des Tests oder dem Zeitpunkt der Durchführung im Entwicklungszyklus unterscheiden. Zwei der grundlegendsten Kategorien sind manuelle Tests und automatisierte Tests, die beide essentielle Rollen im Testprozess spielen. Doch darüber hinaus existieren noch weitere, spezifischere Testarten, die je nach Projektanforderungen angewendet werden können.
- Manuelle Tests
Manuelle Tests sind die traditionellste Form des Software-Testings, bei der Testfälle von einem menschlichen Tester durchgeführt werden, ohne dass dabei automatisierte Tools zum Einsatz kommen. Diese Methode eignet sich besonders für explorative Tests, Usability-Tests oder andere Szenarien, in denen menschliches Urteilsvermögen und Flexibilität gefragt sind. Der Vorteil von manuellen Tests liegt in der Fähigkeit des Testers, unerwartete Verhaltensweisen oder Aussehen der Software intuitiv zu erkennen, die durch automatisierte Tests möglicherweise übersehen würden. Manuelle Tests sind prädestiniert für das IT-Outsourcing, das Abarbeiten nach vorher definierten Regeln, welches trotzdem zusätzliche Anforderungen gegenüber der Automatisierung erfordert ist damit eines unserer klassischen Betätigungsfelder.
- Automatisierte Tests
Automatisierte Tests nutzen spezielle Softwaretools, um Testfälle selbstständig auszuführen und zu überprüfen. Diese Art des Testings ist besonders effektiv bei der Durchführung wiederkehrender Testfälle oder bei der Überprüfung großer Mengen von Daten. Automatisierte Tests ermöglichen eine hohe Effizienz und Konsistenz, da sie schneller als manuelle Tests durchgeführt werden können und weniger anfällig für menschliche Fehler sind. Zu den gängigen Anwendungen zählen Regressionstests, Lasttests und Leistungstests. Auch automatisierte Tests erfordern hinsichtlich Implementierung und Auswertung auf der letzten Meile natürlich eine gewisse (Wo-)menpower, die wir ebenfalls mit unserem Outsourcing-Angebot abdecken.
Experten-Tipp: Besonders verbreitet für das automatisierte Testen von webbasierter Software ist das open source-Tool Selenium. Vgl. hierzu unseren weiteren Blogartikel.
- Weitere Testarten
Neben den oben genannten Grundformen des Testings gibt es eine Reihe weiterer spezifischer Begriffe für bestimmte Testarten, die wir hier nur überblicksartig nennen wollen:
- Funktionale Tests: Überprüfen die Funktionalität der Software gegen die funktionalen Anforderungen, um sicherzustellen, dass die Software tut, was sie soll. Eine Unterform ist das „Smoke Testing“, oft auch als „Build Verification Testing“ bezeichnet: Hierbei wird eine rudimentäre Prüfung der Funktionsfähigkeit einer Anwendung durchgeführt, um sicherzustellen, dass die wichtigsten Funktionen ohne Fehler arbeiten. Ziel ist es, die stabilen Teile der Software schnell zu identifizieren, bevor sie einer tiefergehenden und detaillierteren Prüfung der Funktionalität als Ganzes (sog. „Systemtest“) unterzogen werden.
- Nicht-funktionale Tests: Bewerten die Performance, Usability, Zuverlässigkeit und Sicherheit der Software.
- Integrationstests: Konzentrieren sich darauf, Fehler in den Schnittstellen und Interaktionen zwischen mehreren Softwaremodulen oder Systemen zu finden.
- Akzeptanztests: Werden durchgeführt, um zu bestätigen, dass die Software bereit für die Auslieferung ist und die Bedürfnisse des Endnutzers vollumfänglich erfüllt.
Wie führt man Software-Testing richtig durch?
Für die Praxis ist entscheidend, dass das Software-Testing systematisch, fachgerecht und vollständig durchgeführt wird, damit letztlich eine fehlerlose und funktionale Software ausgeliefert werden kann. Insbesondere prozessbezogene oder strukturelle Fehler sind hier tückisch und können dem Gelingen ganzen Projekte entgegenstehen.
- Planung und Vorbereitung
Erfolgreiches Software-Testing beginnt mit einer soliden Testplanung. Diese beinhaltet die Definition der Testziele, die Auswahl der Testmethoden und die Zuweisung von Ressourcen. Dabei ist es vor allem wichtig, klare und messbare Ziele zu setzen, um den Erfolg des Testprozesses bewerten zu können.
- Testfallentwicklung
Der nächste Schritt ist es, Testfälle zu entwickeln, die alle Aspekte der Anwendung abdecken. Dies schließt funktionale, nicht-funktionale, Leistungs- und Sicherheitsaspekte mit ein. Gute Testfälle sind spezifisch, messbar, realisierbar, relevant und zeitgebunden.
- Testdurchführung und Dokumentation
Die zuvor klar definierten Testfälle sind gemäß eines strukturierten Testplans durchzuführen. Alle Fehler und Unstimmigkeiten sind entsprechend definierter Standards und Kategorien zu dokumentieren, um ihre Nachverfolgung und Behebung zu erleichtern.
- Ergebnisanalyse und Berichterstattung
Im Anschluss werden die Testergebnisse auf Basis der Dokumentation analysiert, um die Ursachen von Fehlern zu verstehen und Maßnahmen zur Verbesserung der Softwarequalität abzuleiten. Sinnvoll ist es zudem, Berichte zu erstellen, die die Testergebnisse und Empfehlungen für das Projektteam enthalten.
Unser Tipp: Oft können die Ergebnisse des Testings sogar Learnings nicht nur für das konkrete Projekt, sondern auch für kommende Projekte mit dem selben Team oder des selben Auftraggebers bereithalten! Es kann daher sinnvoll sein, Testberichte oder eine kurze Zusammenfassung dessen ins gesamte Team zu spielen.
Typische Fehlerquellen im Software-Testing
Nachfolgend wollen wir auf einige – aus unserer Erfahrung häufig vorkommende – Fehlerquellen hinweisen:
- Unvollständige Testabdeckung: Nicht alle Teile der Anwendung werden getestet, was zu unentdeckten Fehlern führen kann. Dies folgt vor allem daraus, dass Schritte 1. und 2. (s.o.) nicht sorgfältig durchgeführt werden.
- Mangel an realistischen Testdaten: Tests, die mit unrealistischen Daten durchgeführt werden, können das Verhalten der Software in der realen Welt nicht genau vorhersagen. Im Rahmen von Planung und Vorbereitung (Schritt 1) sollte sichergestellt werden, dass dieses Problem vermieden und verlässliche Datenquellen verwendet werden.
- Übermäßige Abhängigkeit von manuellen Tests: Ausschließlich manuelle Tests durchzuführen, ist zeitaufwändig und fehleranfällig. Deswegen setzen auch wir mit unserem Angebot auf einen ausgewogenen Mix aus manuellen und automatisierten Tests, um Effizienz und Zuverlässigkeit zu steigern.
- Vernachlässigung von nicht-funktionalen Anforderungen: Sicherheit, Leistung und vor allem Benutzerfreundlichkeit (Usability) sind beim Testing ebenso wichtig wie funktionale Anforderungen und sollten entsprechend getestet werden.
Und zuletzt: Welche Konstellationen bergen besonders hohe Risiken für Fehler beim Software-Testing?
- Agile Entwicklungsumgebungen: In agilen Umgebungen, wo Flexibilität und schnelle Iterationen gefragt sind, ist es wichtig, schnelles Feedback durch sog. Continuous Integration und Continuous Testing zu implementieren. Hier eine kurze Erläuterung:
- Continuous Integration (CI): Continuous Integration (CI) ist eine Softwareentwicklungspraxis, bei der Teammitglieder ihre Arbeit häufig – oft mehrmals täglich – in ein gemeinsames Repository (zentraler Speicherort) integrieren. Jede Integration wird dann automatisch verifiziert, indem die Software gebaut und automatisierte Tests ausgeführt werden. Dies ermöglicht es Teams, frühzeitig Probleme zu erkennen und zu beheben, was zu einer höheren Softwarequalität führt. CI zielt darauf ab, den Integrationsprozess zu beschleunigen und zu vereinfachen, indem die Dauer und der Aufwand für die Integration von Änderungen reduziert werden.
- Continuous Testing (CT): Continuous Testing (CT) ist der Prozess der Ausführung automatisierter Tests als Teil der Softwareauslieferungspipeline, um Feedback über das Geschäftsrisiko durch eine Softwarefreigabe so schnell wie möglich zu erhalten. CT findet in allen Phasen des Entwicklungszyklus statt, von der ersten Codierung bis zur Auslieferung und darüber hinaus. Ziel ist es, Softwarefehler so früh und so oft wie möglich zu identifizieren und zu beheben. Continuous Testing hilft dabei, die Qualität der Software kontinuierlich zu überprüfen und sicherzustellen, dass sie den Anforderungen der Benutzer entspricht, bevor sie in die Produktion geht.
- Großprojekte mit mehreren Teams: Bei Großprojekten ist eine koordinierte Teststrategie entscheidend, um Überschneidungen und Lücken in der Testabdeckung zu vermeiden. Die Verwendung gemeinsamer Teststandards und -werkzeuge kann die Konsistenz und Effizienz verbessern. Zudem ist die Einrichtung einer gemeinsamen Koordination des Testings sinnvoll.
- Projekte mit hohen Sicherheitsanforderungen: In Projekten, bei denen Sicherheit eine hohe Priorität hat, wie z.B. in der Finanz- oder Gesundheitsbranche oder bei Software für sog. Kritische Infrastrukturen, sind spezialisierte Sicherheitstests und auch nach Implementierung der Software regelmäßige Penetrationstests unerlässlich.
Fazit
Software-Testing ist ein komplexer, aber unverzichtbarer Prozess, der entscheidend zur Qualitätssicherung von Softwareprodukten beiträgt. Durch die Beachtung der oben genannten Best Practices und die Anpassung des Testprozesses an die spezifischen Anforderungen und Konstellationen eines Projekts können IT-Outsourcing-Anbieter sicherstellen, dass ihre Softwareprodukte den höchsten Qualitätsstandards entsprechen.