Code

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

Die Bedeutung von Error, Fault, Bug und Failure
Fehlerquellen, die beim Software Testing erfasst werden können

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.

Testverfahren im Überblick
Testverfahren im Überblick

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.

Die ISO Norm 25010 definiert die QualitĂ€tsmerkmale fĂŒr Software
Die ISO Norm 25010 definiert die QualitĂ€tsmerkmale fĂŒr Software

‍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.

Erfahre mehr ĂŒber uns und unsere Kultur.

Iris Jonsson, unser Kopf fĂŒr People und Culture steht dir mit Rat und Tat zu Fragen rund um Jobs und Personalentwicklung zur Seite.

Erfahre, wie Bitgrip deinem Unternehmen helfen kann, bessere digitale Erlebnisse zu schaffen.

Vereinbare einen kostenfreien und persönlichen Termin mit unserem Kollegen Stephan Stechow.