Software Testing: Die wichtigsten Methoden im Praxis-Check
Software, Apps, Websites oder digitale Services sollten einfach zu bedienen sein, stabil laufen und alle funktionalen Anforderungen der Nutzer erfüllen. Wenn diese Merkmale gegeben sind, handelt es sich um eine qualitativ gute Software. Die beste Möglichkeit, um alle Qualitätsmerkmale sicherzustellen, ist ein umfangreiches Software Testing.
Das Software Testing und die damit verbundene Qualitätssicherung wird von Softwareentwicklern nicht immer im notwendigen Umfang unterstützt. Es ist aber ein wichtiger Teil im Entwicklungsprozess, um Kosten einzusparen und die Kundenzufriedenheit zu steigern. In diesem Beitrag erklären wir, was unter Software Testing zu verstehen ist, welche Methoden es gibt und warum Software Testing für den Erfolg eines Produkts entscheidend ist.
Was ist Software Testing?
Der Begriff Software Testing beschreibt den Test-Prozess, bei dem die Funktionalität einer Software überprüft wird. Dabei wird festgestellt, ob eine Anwendung mit hoher Wahrscheinlichkeit fehlerfrei ist, alle Funktionen erfüllt, stabil läuft und einfach zu bedienen ist.
Ein kurzer Blick zurück: Testverfahren für Software sind nahezu so alt, wie die Softwareentwicklung selbst. In den frühen 70er-Jahren konzentrierte man sich auf die Beseitigung von Fehlern am Ende eines Wasserfallprozesses. In dieser Zeit wurden die ersten formalen Testverfahren entwickelt. Glenford J. Myers veröffentlichte 1972 das Buch "The Art of Software Testing", welches als Meilenstein in der Entwicklung der Software Testmethodik gilt und auf das einige der Grundlagen heutiger Testverfahren zurückzuführen sind.
In den 80er-Jahren wurde unter anderem mit dem „V-Modell“ ein größerer Wert auf den Software-Test unter realen Bedingungen gelegt. Unit-Tests und Integration Tests wurden erstmals entwickelt und parallel zur Software-Entwicklung durchgeführt. Aus einer einfachen Fehlersuche wurden umfangreiche Testprozesse, die der Qualitätssicherung dienen sollten und die Basis der heutigen agilen Software Tests darstellen.
Warum ist Software Testing so wichtig?
1. Kosten einsparen
Der Prozess der Softwareentwicklung läuft in verschiedenen Phasen ab und folgt bekannten Abläufen von der Konzeption und Entwicklung bis zur Umsetzung und Auswertung. Je früher Bugs und Fehler entdeckt werden, desto einfacher und kostengünstiger können diese behoben werden. Es bietet sich daher an, so früh wie möglich mit dem Testing der Software bzw. deren testfähigen Einzelelementen zu beginnen. Nach dem Prinzip des Test-Driven-Development sollten die Software-Test-Routinen idealerweise bereits vor der Entwicklung geschrieben werden.
2. Sicherheit erhöhen
Datendiebstähle und Hackerangriffe sind heute leider nicht mehr per se auszuschließen. Die Sicherheit einer Software sollte aus diesem Grund höchste Priorität haben und bereits im frühen Entwicklungsstadium kontinuierlich überprüft werden, damit Endnutzer eine vertrauenswürdige Software erhalten. Ein spezielles Security-Testing auch in frühen Entwicklungsstadien beseitigt Risiken bereits vor dem Release und sorgt für ein sicheres Produkt.
3. Produktqualität steigern
In die Konzeption einer Software fließen eine Vielzahl an Informationen ein. Die Definition der relevanten Zielgruppe sowie ihrer Use Cases bzw. der „Jobs to be Done“ sind für die spätere Umsetzung sehr wichtige Leitplanken. Software-Tests in Ergänzung mit weiteren Testverfahren geben darüber Aufschluss, ob das Produkt von der Zielgruppe angenommen wird und es seinen gewünschten Zweck einfach und effizient erfüllt. Ziel ist die Entwicklung einer qualitativ hochwertigen Software, die Endnutzern einen Mehrwert bietet. In speziellen Fällen kann es auch sinnvoll sein, dass sich eine Anwendung beim Auftreten eines Fehlers selbst beendet. Dies soll verhindern, dass ein festgestellter Fehler (z.B. in einer API) zu noch größeren Fehlern führt und die Qualität des Service oder Produktes nachhaltig negativ beeinflusst. Verbreitet ist dieser Ansatz unter dem Begriff Fast-Fail-Prinzip.
Neben einem günstigen Entwicklungsprozess, Sicherheit und der Qualität des Produkts ist natürlich auch die letztendliche Kundenzufriedenheit bei Nutzung der Software von großer Wichtigkeit. Deswegen sollte das Software Testing den gesamten Life Cycle einer Anwendung umfassen, um an jedem Punkt die bestmögliche User Experience zu bieten. Das schafft Vertrauen und bindet Kunden langfristig an eine Software.
Erklärung von Fehlerquellen: Die Bedeutung von Error, Fault, Bug und Failure
In einer Software können diverse Fehler auftreten, die von den tatsächlich erwarteten Ergebnissen abweichen. Dabei unterscheidet man zwischen verschiedenen Arten von Fehlern:
Error
Als Error bezeichnet man einen Fehler der Softwareentwickler. Dies geschieht, wenn ein Programmierer eine Variable falsch benennt oder der Entwickler eine Information missinterpretiert. Ein Error zeigt sich schließlich beim Ausführen der Software oder einer bestimmten Aktion innerhalb der Anwendung.
Fault
Bei einem Fault handelt es sich um einen falschen Schritt oder Prozess innerhalb der Software, der dazu führt, dass diese nicht richtig ausgeführt werden kann.
Bug
Ein Bug ist ein Programmierfehler in der Anwendung. Die Software kann zwar ausgeführt werden, erfüllt aber nicht alle Funktionen – oder erfüllt eine Funktion nicht richtig. Diese Fehlfunktion kann sich in einem Absturz oder auch einem Falschergebnis äußern.
Failure
Kann eine Software eine bestimmte Funktion in einer gewissen Leistungsanforderung nicht erfüllen, so spricht man bei dieser Unfähigkeit von einem Failure.
Welche Software Testing Methoden gibt es?
Um die Funktionsfähigkeit einer Software zu testen, gibt es verschiedene Software Testing Methoden, die auch als Testtechniken bezeichnet werden können und in verschiedenen Bereichen des Software-Engineering eingesetzt werden. Dabei unterscheiden wir die folgenden Typen von Testtechniken:
Statische Testverfahren
Statische Testverfahren werden in der Softwareentwicklung verwendet, um Arbeitsergebnisse zu prüfen. Bei diesem Testverfahren handelt es sich um Korrekturarbeiten, wozu die Software nicht auf einem Rechner ausgeführt werden muss. Dabei können beispielsweise der Quellcode, Dokumente, Designspezifikationen oder auch komplette Websites geprüft werden. Diese Form der Testausführung kann noch einmal in Reviews und statische Analysen gegliedert werden. Bei einer statischen Analyse wird eine Software auf Form, Struktur, Inhalt und Dokumentation geprüft.
Die Vor- und Nachteile von statischen Testverfahren
Zu den klaren Vorteilen der statischen Textverfahren zählen eine frühe Fehlererkennung, die bereits in der Spezifikation stattfindet, ohne die Software dabei ausführen zu müssen. Somit können viele Fehler bereits vor den zeit- und kostenintensiven dynamischen Testverfahren ermittelt und beseitigt werden. Nach dem 4-Augen-Prinzip kann die Software in diesem Verfahren schnell und leicht geprüft werden, wobei ein kontinuierlicher Wissensaustausch der Teammitglieder für die Qualität und Geschwindigkeit der Testläufe eine sehr wichtige Rolle spielen. Nachteilig ist, dass sich statische Testverfahren nicht für sehr komplexe Anwendungen eignen und sich damit trotz erfolgter Tests einige Fehler erst bei der Ausführung der Anwendung zeigen können.
Dynamische Testverfahren
Anders als bei den statischen Testtechniken werden dynamische Testverfahren im Betrieb der Software durchgeführt, um Fehler und Fehlfunktionen zu finden. Auch hier gibt es unterschiedliche Software Test Types:
Black Box Testing
Black Box Tests betrachten das von außen erkennbare Verhalten der Software. Die Software-Tester müssen hierfür kein Wissen über den Quellcode besitzen. Die Tests basieren auf den spezifizierten Anforderungen und Funktionen der Software. Der Vorteil des Black-Box-Tests liegt darin, dass er von Personen durchgeführt werden kann, die keine tiefgreifenden Kenntnisse der internen Implementierung haben. Daher können beispielsweise Tester aus der Zielgruppe entsprechende User-Tests durchführen. Dies ermöglicht eine unvoreingenommene Sichtweise und hilft, mögliche Anwendungsfehler oder Abweichungen von den definierten Spezifikationen aufzudecken.
White Box Testing
Der White Box Test ist eine der am häufigsten angewandten Methoden des Software Testings. Hier basieren die Tests auf der Kenntnis des Quellcodes und der Struktur der Software. Der White Box Test ermöglicht es, spezifische Komponenten, Funktionen oder Algorithmen innerhalb der Software zu überprüfen und sicherzustellen, dass sie gemäß den Anforderungen und den erwarteten Spezifikationen funktionieren. Dieser Testansatz ist besonders nützlich, um potenzielle Schwachstellen, logische Fehler oder unerwartetes Verhalten aufzudecken, die sich aus der internen Implementierung ergeben können. Aus diesem Grund werden diese Software Tests auch als strukturbasierte oder strukturelle Testverfahren bezeichnet.
Um einen White-Box-Test durchzuführen, kann der Entwickler verschiedene Techniken verwenden. Neben der Pfadabdeckung, bei der die Ausführungspfade im Code getestet werden, können die Codierungsstandards überprüft werden oder eine Codeinspektion von Bedingungen, Schleifen oder Sonderfällen erfolgen.
Erfahrungsbasierte Testverfahren
In einem erfahrungsbasierten Testverfahren werden selten systematische Testfälle abgearbeitet. Vielmehr kommen die Erfahrungen der Entwickler und Software-Tester zum Einsatz, die bereits mit ähnlichen Softwaremodellen oder einer älteren Version gearbeitet haben. Die Kenntnis zu bestimmten Fehlermodellen der Technologien oder Programmiersprachen ist ebenso relevant, wie das Wissen über spezielle Rahmenbedingungen bei konkreten Softwareentwicklung. Dabei gibt es weitere Unterscheidungen zwischen den einzelnen Verfahren:
- Intuitive Tests: Mit ihrer Erfahrung können Software-Tester häufig auftretende Fehler vorhersagen und anhand einer Liste individuelle Testfälle erstellen, um Fehler aufzudecken.
- Explorative Tests: Explorative Tests finden meist ohne Vorbereitung statt. In 1–2 Stunden langen Sessions wird die Software auf Fehler überprüft.
- Checklisten-basierte Tests: Checklisten-basierte Tests werden anhand einer Checkliste oder einer Reihe von Regeln und Kriterien durchgeführt. Die Kriterien werden auf Basis von Erfahrungen oder konkreten Testzielen erstellt. Die Software wird dabei auf alle vorgegebenen Punkte überprüft, um mögliche Fehler zu entdecken.
Die Vor- und Nachteile beim dynamischen Software Testing
Der größte Vorteil beim dynamischen Software Testing ist die Ausführung des Testobjekts, ähnlich der tatsächlichen Nutzung der Software. Hierbei werden das Zusammenspiel einzelner Komponenten geprüft und auch nicht-funktionale Tests, z. B. ein Performancetest, durchgeführt. Dynamische Tests sind jedoch sehr zeitaufwendig und setzen eine bereits funktionsfähige Software in der Testumgebung voraus. Außerdem werden nur Fehlerwirkungen erkannt, deren Ursache später erst ermittelt werden muss.
Die Methode der Durchführung ist nur eine Weise, nach der die verschiedenen Testverfahren für Software unterschieden werden können. Zusätzlich können Software Testing Types auch nach ihrem Ziel untergliedert werden:
Funktionale Tests
Um zu überprüfen, ob das System seine Funktion erfüllen kann, werden funktionale Tests oder Funktionstests durchgeführt. Hierbei wird ausschließlich die Funktionalität der Software überprüft. Zu den funktionalen Tests zählen:
- White Box Testing
- Smoke Testing
- End-to-End-Tests (auch als End-2-End-Testing bezeichnet)
- änderungsbezogene Tests (z. B. Regressionstest, Fehlernachtest)
- Akzeptanztests
Nicht-funktionale Testtypen
Außer der reinen Funktionalität gibt es jedoch auch weitere Qualitätsmerkmale, die eine Software aufweisen sollte. Diese sind nach DIN ISO 25010 festgelegt und müssen bei der Entwicklung durch geeignete Testverfahren geprüft und validiert werden. Wir teilen gern einen ersten Überblick aus unserer Praxis. Konkrete Anwendungsfälle werden in der Praxis weitaus umfangreicher konzipiert und dokumentiert.
Effizienz & Performance
Die Performance und Effizienz einer Anwendung wird durch sogenannte Performancetests (Antwortzeiten und Verarbeitungsgeschwindigkeit) und Lasttests (Anzahl der zugreifenden Nutzer oder Transaktionen) ermittelt.
Zuverlässigkeit
Zu einer ausreichenden Softwarequalität zählt auch die Fähigkeit, ein Leistungsniveau über einen bestimmten Zeitraum unter festgelegten Bedingungen aufrechtzuerhalten. Dies wird durch Zuverlässigkeitstests überprüft. Stresstests ermitteln, wie sich die Anwendung bei Überlastung verhält und Robustheitstests – auch Recovery Tests genannt – stellen fest, wie schnell das System nach einem Fehler wieder einsatzbereit ist.
Gebrauchstauglichkeit und Nutzbarkeit
Usability Tests oder Gebrauchstauglichkeitstests untersuchen, wie einfach die Software für einen Nutzer zu bedienen ist.
Sicherheitstests
Da Datenschutz und Sicherheit in der heutigen Zeit von hoher Priorität sind, werden Sicherheitstests durchgeführt. Es wird getestet, wie gut das System vor unerlaubten Zugriffen, Viren oder anderen externen Bedrohungen geschützt ist.
Kompatibilität
Soll die Software mit anderen Komponenten oder System interagieren, sind Kompatibilitätstests notwendig, um die Kompatibilität festzustellen.
Übertragbarkeit
Viele Arten von Software finden in verschiedenen Umgebungen Anwendung, beispielsweise auf einem Desktop-Computer und als mobile App auf Android- oder iOS-Geräten. Hierzu müssen Portabilitätstests durchgeführt werden, um sicherzustellen, dass die Anwendung in verschiedenen Soft- und Hardwareumgebungen funktionsfähig ist.
Wartungsfähigkeit
Die Wartungsfähigkeit einer Software wird meist durch statische Analysen oder Reviews überprüft.
Beispiele für nicht-funktionale Tests sind:
- Usability Tests
- Akzeptanztests
- Leistungs- und Performancetests
- Penetrationstests
- Recovery Tests
- Portabilitätstests
Welche Software Testing Tools eignen sich am besten?
Es gibt diverse Software Testing Tools und Software Test Automations, welche die Durchführung notwendiger Tests vereinfachen und Software Tester in ihrer Arbeit unterstützen. Testlink ist ein web-basiertes Open Source Testmanagement Tool, welches zur Qualitätsüberprüfung einer Software genutzt werden kann. Selenium eignet sich zum Front-End Testing und für Webbrowser Tests und ist in diesem Bereich eines der gängigsten Tools. Für API-Tests kann Postman verwendet werden. Auch Karate ist ein API-Tool für Automated Tests.
Best Practices für Softwaretests
Kontinuierliche Tests
Je früher ein Fehler entdeckt wird, desto einfacher und kostengünstiger kann er behoben werden. Daher gehören kontinuierliche Tests zu den Best Practices im Software Testing. Dabei wird die Anwendung in den einzelnen Entwicklungsstadien kontinuierlich getestet.
Testautomatisierung
Testautomatisierungen sparen Zeit und Geld. Vor allem repetitive Arbeiten müssen dank Automated Tools nicht länger manuell ausgeführt werden. Sowohl die Genauigkeit der Tests als auch die Testabdeckung und Geschwindigkeit können mit Automatisierungen verbessert werden.
Defekt- oder Fehlerverfolgung
Defekte und Fehler sollten über den gesamten Softwareentwicklungsprozess verfolgt werden, um die Qualität zu verbessern. Durch die genaue Verfolgung mit hilfe von Automatisierungen können alle Ausmaße der Fehlfunktion und auch zusammenhängende Probleme erkannt und beseitigt werden.
Metriken, KPIs und Berichte
Über Metriken, KPIs und Berichte erhalten alle Softwareentwickler und -tester einen genauen Überblick über den Fortschritt des Software Testings sowie gefundene und behobene Fehlfunktionen. Sie dienen einem einfachen und schnellen Informationsaustausch, können von vielen Software Testing Tools automatisch generiert werden und gehören aus diesem Grund zu den Best Practices.
Code Coverage erhöhen
Code Coverage – auch Testabdeckung genannt – ist eine wichtige KPI im Software Testing, die angibt, wie viel Prozent des Quellcodes bereits getestet und geprüft wurden. Für eine qualitativ hochwertige Software mit wenigen Fehlfunktionen sollte die Code Coverage möglichst hoch ausfallen.
Schlaue End-to-End-Tests
End-To-End-Tests oder End-2-End-Testing bezeichnet einen Software-Test, in dem eine Anwendung aus Sicht des Endnutzers getestet wird. Dabei wird die gesamte Software von Anfang bis Ende in einem realitätsnahen Szenario getestet, um sicherzustellen, dass die Anwendung in jedem Schritt funktionsfähig und fehlerfrei ist.
Fazit: Speed Up
Wer eine erfolgreiche, funktionsfähige und sichere Software veröffentlichen möchte, kann eine entsprechende Quality Assurance (QA, Qualitätssicherung) im Software Testing nicht umgehen. Ein Software-Team ohne entsprechende QA ist vergleichbar mit einem Fußballspiel ohne Schiedsrichterteam, die kontinuierlich das Spiel analysieren und bei relevanten Ereignissen einschreiten. Das Entwicklerteam wird durch die Quality Assurance befähigt, Anwendungen schneller und sicherer zu entwickeln, wodurch die Anwender profitieren.
Die verschiedenen Testarten und Testtechniken können in Kombination mit cleveren Automatisierungen und Software Testing Tools gezielt genutzt werden, um Entwicklungskosten einzusparen, das Produkt schneller zu veröffentlichen und die Nutzerzufriedenheit zu erhöhen. So haben die Software-Tests einen direkten Einfluss auf den Erfolg der Anwendung.
Bitgrip unterstützt Unternehmen bei der Qualitätssicherung während der Softwareentwicklung sowie beim Betrieb der Software in der Cloud, lokal oder in hybriden Umgebungen. Wir beraten bei der Konzeption und Durchführung geeigneter Software-Tests. Unser QA-Team verantwortet die Qualitätssicherung bei unseren Projekten u. a. für die KSB Group, UNICEF Deutschland und Phoenix Contact. Bei Interesse buchen Sie einen Termin für ein unverbindliches Beratungs- und Kennenlerngespräch.
FAQs
Was versteht man unter Software Testing?
Beim Software Testing handelt es sich um einen Prozess, der die Funktionalität einer Software oder Anwendung überprüft, um Fehler und Fehlfunktionen zu entdecken und zu beseitigen.
Wie läuft Software Testing ab?
Beim Software Testing wird überprüft, ob eine gesamte Anwendung oder Teile davon die definierten Anforderungen erfüllen können und fehlerfrei funktionieren. Dabei können verschiedene Testtechniken und Testarten zum Einsatz kommen.
Welche Software-Testarten gibt es?
Software Testing wird in funktionale und nicht-funktionale Tests eingeteilt. Zu den funktionalen Tests zählen beispielsweise White Box Tests, Smoke Tests, Regressionstests, Fehlernachtests, Akzeptanztests und End-to-End-Tests. Nichtfunktionale Tests umfassen unter anderem Akzeptanztests, Leistungs- und Performancetests, Usability Tests, Penetrationstests, Portabilitätstests und Recovery Tests.
Wann sollte ich mit dem Testen beginnen und wieder aufhören?
Das Software Testing sollte im frühestmöglichen Stadium beginnen, da Fehler so schneller und kostengünstiger beseitigt werden können. Im Test-Driven-Development werden die Tests bereits vor der Softwareentwicklung festgelegt. Der Software-Test ist dann beendet, wenn Software-Tester und Entwickler genügend Daten über Fehler und potenzielle Risiken gesammelt haben.