Software-Test

Maximilian Schluer

Ich bin Max und finde seit über 10 Jahren Bugs, die richtig Geld kosten könnten.

Software-Test

Ein Software-Test ist ein systematischer Prozess zur Überprüfung und Validierung von Software, um sicherzustellen, dass sie den Anforderungen entspricht und fehlerfrei funktioniert. Software-Tests sind ein essenzieller Bestandteil der Qualitätssicherung und helfen, potenzielle Fehler frühzeitig zu identifizieren und zu beheben. Im Folgenden gehe ich darauf ein, warum Software-Tests wichtig sind, wie sie ablaufen und welche Best Practices beim Gelingen helfen können.

Was ist ein Software-Test?

Ein Software-Test ist die systematische Untersuchung einer Anwendung, um Fehler zu finden und sicherzustellen, dass sie den funktionalen und nicht-funktionalen Anforderungen entspricht. Dabei werden verschiedene Testarten eingesetzt, um unterschiedliche Aspekte der Software zu überprüfen.

Auswahl von Testarten

  • Unit Test: Der Test einzelner Funktionen im Quellcode.
  • Komponententest: Die Funktion einzelner Komponenten als Ganzes.
  • Integrationstest: Test der Arbeit verschiedener Komponenten im Verbund.
  • Funktionaler Test: Prüfung, ob vom Testgegenstand angegebene Funktionen fachlich und technisch korrekt funktionieren.
  • End2End-Test: Prüfung, ob das Gesamtsystem die spezifizierten Funktionen im Gesamtaufbau erfüllt.
  • Akzeptanztest: Prüfung, ob Änderungen den Spezifikationen entsprechen (akzeptiert werden können).
  • Explorativer Test: Der Versuch, ohne feste Agenda Probleme mit dem Produkt zu lösen.
  • Performance-Test: Prüfung, wie Zeit- und Ressourceneffizient das Produkt Probleme löst.
  • Smoke-Test: Ursprünglich aus der Elektrotechnik prüft dieser Test einfach nur, ob das Produkt gestartet werden kann. Der Test galt als nicht bestanden, wenn Rauch aufstieg, daher der Name.
  • Penetrationstest: Die strukturierte Untersuchung des Produkts auf Sicherheitslücken zum Beispiel im Verbund der eingebundenen Abhängigkeiten oder bei der Umsetzung von Entwurfsmustern.

Die hier vorgestellte Liste ist nicht abschließend und zeigt, wie während einer Test-Session der Fokus gelegt werden und auf welche Aspekte besonders geachtet werden kann. Bei der Auswahl der geeigneten Methoden und/oder der Durchführung helfe ich gern.

Warum sind Software-Tests wichtig?

1. Verbesserung der Software-Qualität

Durch strukturierte Tests werden Fehler frühzeitig erkannt und behoben, bevor sie in die Produktion gelangen.

2. Reduzierung von Risiken

Software-Fehler können hohe Kosten verursachen und das Unternehmensimage schädigen. Tests helfen, diese Risiken zu minimieren und sorgen für eine nahtloser User-Experience, für die das Produkt weiterempfohlen wird.

3. Kundenzufriedenheit

Fehlerfreie und leistungsfähige Software sorgt für eine bessere Benutzererfahrung und steigert die Kundenzufriedenheit.

4. Effizienzsteigerung

Regelmäßig ausgeführte Tests schulen die Tester:innen und sparen dadurch Zeit und Ressourcen, indem sie wiederholbare Prozesse optimieren. Außerdem werden Bugs schon in früherer Stage behoben, was diese Kosten um bis zu 80% senken kann.

Ablauf eines Software-Tests

Eine strukturierte Vorgehensweise stellt sicher, dass Software-Tests effektiv sind. Die folgenden Schritte stellen eine Möglichkeit der Durchführung dar:

1. Testplanung

Neben der Herangehensweise werden Methoden und Werkzeuge definiert, die verwendet werden sollen. Außerdem werden Zeitrahmen, Ressourcenbedarf und die Testumgebung definiert. Die Ergebnisse werden kommuniziert, sodass sich beispielsweise Fachbereiche darauf einstellen, und ggf. Personal bereitstellen können.

2. Testfalldefinition

Auf Basis der Anforderungen (und Erfahrungen) werden Testfälle erstellt, die anhand der daraus abgeleiteten Skripte manuell oder automatisch ausgeführt werden können.

3. Testdurchführung

Durchführung der Tests (manuell und/oder automatisiert) und Dokumentation der Ergebnisse.

4. Bugfixing

Gefundene Fehler werden analysiert und dokumentiert. In Zusammenarbeit mit dem Entwicklungsteam erfolgt die Behebung.

5. Regressionstest

Der Regressionstest dient der Sicherstellung, dass die Bugfixes für sich keine neuen Fehler produziert haben. Hierzu werden einzelne Tests wiederholt.

6. Abschluss und Bericht

Auf Basis der gewonnen Erkenntnisse erfolgt die Analyse der Software-Qualität. Je nach Ziel des Tests erfolgt beispielsweise eine Freigabeempfehung – oder nicht, sollte die Qualität nicht den zuvor definierten Standards entsprechen.

Best Practices im Software-Test

Frühes Testen

Je früher Tests im Entwicklungsprozess beginnen, desto geringer sind die Kosten für Fehlerbehebungen. Dieser Ansatz wird auch oft "Shift Left" genannt.

Testautomatisierung, wo sinnvoll

Automatisierte Tests sparen Zeit und verbessern die Testabdeckung, sollten aber gezielt eingesetzt werden, da sie kein Allheilmittel sind und keine gründliche Qualitätssicherung ersetzen.

Klare Testfälle und Dokumentation

Gute Testfälle sind nachvollziehbar, reproduzierbar und gut dokumentiert. Wird hierauf kein Augenmerk gelegt, leidet darunter die Nachvollziehbarkeit, was dann wiederum zu aufwändigen Fehlersuchen oder Absprechen führen kann.

Auf die richtige Teststufe achten

Für eine effiziente Verwendung der Ressourcen, sollte alles, was über einen Unit-Test abgedeckt werden kann, auch in dieser Teststufe passieren. End-to-End-Tests sind in Erstellung, Wartung und Betrieb um ein Vielfaches teurer und sollten nur für die Anwendungsfälle benutzt werden, für die sie Vorgesehen sind (möglichst keine Grenzwert-Tests, sondern eher das Zusammenspiel der verschiedenen Systembereiche)

Kontinuierliche Verbesserung

Testprozesse sollten regelmäßig überprüft und optimiert werden, um Effizienz und Effektivität zu steigern.

Herausforderungen im Software-Test

Unvollständige Anforderungen

Problem: Unklare Spezifikationen führen zu ungenauen Tests.

Lösung: Enge Zusammenarbeit mit Stakeholdern zur Klärung der Anforderungen.

Zeit- und Budgetbeschränkungen

Problem: Oft steht nicht genügend Zeit oder Geld für umfassende Tests zur Verfügung.

Lösung: Priorisierung der wichtigsten Testfälle und Automatisierung kritischer Tests. Sensibilisierung des Managements im Hinblick auf den wirklich nötigen Scope.

Testdaten-Management

Problem: Realistische Testdaten sind oft schwer verfügbar.

Lösung: Nutzung von Testdaten-Generierungstools und Anonymisierung realer Daten. Bei der Anonymisierung von Echtdaten bitte UNBEDINGT die für Datenschutz zuständige Person involvieren, um juristische Probleme zu vermeiden.

Komplexität

Problem: Große und vernetzte Systeme erschweren das Testen.

Lösung: Modulares Testen und kontinuierliche Integration mit CI/CD-Pipelines unter beachtung der korrekten Teststufe.

Fazit

Software-Tests sind ein unverzichtbarer Bestandteil der Softwareentwicklung, um Qualität, Sicherheit und Benutzerfreundlichkeit sicherzustellen. Durch eine strukturierte Vorgehensweise, die Kombination von manuellen und automatisierten Tests sowie die Berücksichtigung bewährter Methoden lassen sich effiziente und zuverlässige Tests durchführen. Unternehmen, die in gute Teststrategien investieren, profitieren langfristig von stabilen und leistungsfähigen Softwareprodukten. Bei Planung und Durchführung eines Testlaufs unterstütze ich jederzeit gern.

Häufig Gestellte Fragen

Mein Team testet selbst – Wieso sollte ich den Test nach Extern vergeben?

Zunächst sind Entwickler:innen keine spezialisierten Tester, finden daher nicht alles, was eine Fachperson finden würde. Weiterhin ist Entwicklungszeit die knappste Ressource und sollte daher nicht leichtfertig investiert werden. Zuletzt sehen vier Augen mehr als zwei, das lässt sich auch auf die Entwicklung übertragen.

Was wird beim Software-Test getestet?

Das hängt ganz vom gewünschten Fokus ab. In der Regel werden zunächst Funktionalität und optisches Gefallen geprüft, danach folgt der Test für Grenzfälle. Außerdem können Aspekte wie Sicherheit und Perfomanz oder Barrierefreiheit in den Fokus genommen werden.

Was muss ich für einen Software-Test vorbereiten?

Neben Accounts, die alle zu testenden Fälle abdecken ist eine isolierte Testumgebung benötigt. Tests können auf der produktiven Instanz durchgeführt werden, dies ist allerdings hochriskant – Vor allem bei buchenden Systemen.

Wie lang dauert ein Software-Test?

Das hängt von verschiedenen Faktoren wie der gewünschten Detailtiefe und der Komplexität des zu testenden Produkts ab. In der Regel lässt sich innerhalb eines Tages ein gutes Ergebnis erzielen, bei guter Kenntnis des Produkts vielleicht sogar schneller.

Ist ein externer Software-Test das Geld wert?

Dadurch, dass nicht nur technische Probleme, sondern auch weitere Usell-Potenziale aufgedeckt werden, wirkt ein Software-Test sogar umsatzsteigernd.

Verwandte Dienstleistungen

Zu diesem Thema biete ich die folgenden Dienstleistungen an:

Maximilian Schluer

Ich bin Max und finde seit über 10 Jahren Bugs, die richtig Geld kosten könnten.