Was ist Functional Testing?

Autoren

Phill Powell

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

Functional Testing definiert

Functional Testing ist ein Softwaretestverfahren, bei dem die Funktionalität einer Anwendung anhand der festgelegten Anforderungen überprüft wird.

In der Softwareentwicklung gibt es verschiedene Typen von Softwaretests. Jeder geht die Aufgabe mit einem etwas anderen Ansatz an. Functional Testing entsprechen am ehesten dem Konzept der Benutzererfahrung und konzentrieren sich auf eine entscheidende Frage: Funktionieren die Softwarefunktionen wie erwartet und gemäß den festgelegten Anforderungen?

Die Softwarequalität wird häufig im Rahmen des Softwareentwicklungslebenszyklus aus verschiedenen Blickwinkeln bewertet. In Bezug auf Functional Testing müssen Tester die grundlegenden Funktionen validieren und sicherstellen, dass die Softwarefunktionen die Geschäftsanforderungen angemessen unterstützen. Die Testausführung ermöglicht es den DevOps-Teams, die tatsächlichen Testergebnisse mit den erwarteten Ergebnissen zu vergleichen.

Testen ist ein wesentlicher Bestandteil des Entwicklungsprozesses. Durch Funktionstests können Qualitätssicherungsteams eine Art Qualitätssicherung im Vorfeld durchführen und erhalten so einen klaren Einblick in die voraussichtliche Funktionsweise von Workflows, wenn diese tatsächlich eingeführt werden.

Die neuesten Tech-News – von Experten bestätigt

Bleiben Sie mit dem Think-Newsletter über die wichtigsten – und faszinierendsten – Branchentrends in den Bereichen KI, Automatisierung, Daten und mehr auf dem Laufenden. Weitere Informationen finden Sie in der IBM Datenschutzerklärung.

Vielen Dank! Sie haben sich angemeldet.

Ihr Abonnement wird auf Englisch geliefert. In jedem Newsletter finden Sie einen Abmeldelink. Hier können Sie Ihre Abonnements verwalten oder sich abmelden. Weitere Informationen finden Sie in unserer IBM Datenschutzerklärung.

Wie funktioniert Functional Testing?

Je nachdem, welche Art von Softwaretests im Rahmen der gesamten Teststrategie eingesetzt wird, stehen unterschiedliche operative Elemente im Vordergrund. Functional Testing bewertet die allgemeine Kompatibilität zwischen verschiedenen Softwaremodulen, was sich direkt auf andere damit verbundene Aspekte auswirkt, wie beispielsweise die erwarteten Benutzerinteraktionen und die Funktionsfähigkeit der Benutzeroberfläche.

Die durch Functional Testing bereitgestellte Testumgebung gilt als Beispiel für Black-Box-Testing, bei denen die Tester keinen Einblick in die inneren Abläufe des Systems erhalten (wie dies bei White-Box-Tests der Fall ist), sondern einen „Bestanden/Nicht bestanden”-Bericht darüber erhalten, ob das System und seine Pipelines wie gewünscht funktionieren.

Die sechs Schritte des Functional Testing

Functional Testing folgt in der Regel einem Testprozess, der sechs Schritte umfasst:

  1. Identifizierung der verschiedenen Funktionen, die die Software ausführen muss.
  2. Erstellung von Eingabedaten gemäß den funktionalen Anforderungen.
  3. Die erwarteten Ausgaben gemäß den funktionalen Spezifikationen festlegen.
  4. Testfälle durchführen.
  5. Die Übereinstimmung der tatsächlichen Ergebnisse mit den erwarteten Ergebnissen bewerten.
  6. Feststellen, ob die Softwareanwendung den Erwartungen entsprechend zufriedenstellend funktioniert.
Anwendungsentwicklung

Steigen Sie ein: Entwicklung von Enterprise-Anwendungen in der Cloud

In diesem Video erläutert Dr. Peter Haumer, wie die moderne Entwicklung von Unternehmensanwendungen in der Hybrid Cloud heute aussieht, indem er verschiedene Komponenten und Praktiken demonstriert, darunter IBM Z Open Editor, IBM Wazi und Zowe. 

Arten von Functional Testing

Genauso wie es verschiedene Softwaretestmodelle gibt, gibt es auch verschiedene Typen von Functional Testing. Es gibt zahlreiche davon, und dies ist nur eine unvollständige Liste. Functional Testing-Typen umfassen eine Vielzahl von Nuancen und sind hier alphabetisch aufgelistet.

Ad-hoc-Tests

Beim Testen von Software wird häufig der formale Testprozess durch Ad-hoc-Tests ergänzt. Diese informelle Form des explorativen Testens basiert vollständig auf den Fähigkeiten und der Intuition der Tester. Es gibt keine definierte Struktur. Stattdessen werden die verwendeten Testtechniken durch die Instinkte der Tester bestimmt.

Beispiel: „Buddy Testing“, bei dem ein Entwickler und ein Tester zusammenarbeiten, um ein Modul oder eine App zu verbessern. Bei dieser Form des Ad-hoc-Testens findet der Tester in der Regel Fehler oder andere Dinge, die behoben werden müssen, während sich der Entwickler auf die Behebung dieser Fehler konzentriert.

API-Tests

Programmierschnittstellen (APIs) ermöglichen die Softwareentwicklung und die Verbindung verschiedener Anwendungen oder Systeme. API-Tests stellen sicher, dass die API-Verbindungspunkte wie erforderlich funktionieren. Sie bieten außerdem einen Überblick über Benutzerberechtigungen und die Art und Weise, wie über APIs Datenverwaltung erfolgt.

Beispiel: „Headless Testing“ tritt auf, wenn keine Benutzeroberfläche oder kein Eingabefeld für Benutzeroberflächendaten vorhanden ist. In solchen Situationen lassen sich die mit einem Schnittstellendienst oder einer Schnittstellen-App geteilten Eingabedaten häufig am besten durch API-Tests überprüfen.

Komplexe Testszenarien

Viele Unternehmen wünschen sich, dass ihr Testprozess die tatsächlichen Erfahrungen der echten Nutzer widerspiegelt. Für solche Unternehmen bieten komplexe Testszenarien das gewünschte Maß an Genauigkeit, wobei jedoch zu beachten ist, dass eine höhere Komplexität einen größeren Vorbereitungsaufwand erfordert.

Beispiel: Die Online-Auftragsabwicklung erscheint nur auf den ersten Blick als nahtloser Vorgang. Im Hintergrund gibt es zahlreiche Prozesse, die getestet werden müssen, beispielsweise wie einfach Artikel in den Online-Warenkorb eines Kunden gelegt werden können, wie schnell Funktionen wie die Anwendung von Rabatten integriert werden und wie reibungslos solche Käufe abgewickelt werden können.

Integration Testing

Integration Testing wird häufig gleichzeitig mit Komponententests durchgeführt, da sie Vorteile wie eine frühzeitige Fehlererkennung und eine breitere Testabdeckung bieten. Integration Testing trägt nicht nur zur Angleichung von Datenformaten bei, sondern liefert auch Erkenntnisse in die Funktionsweise und Leistung von Microservices.

Beispiel: Angenommen, ein Order-Management-System ist mit einem Typen von Modul integriert, das die Zahlungsabwicklung steuert. Integration Testing zeigt auf, wo es in Zukunft zu Störungen zwischen den beiden Einheiten kommen kann, und bietet Entwicklern einen Entwurf, um Integrationsprobleme frühzeitig und kostengünstig zu beheben.

Regressionstests

In einer perfekten Welt würde ein Funktionstest, sobald er einmal bestanden wurde, immer bestanden werden. Aber das entspricht nicht der Realität, in der Software häufig von Entwicklern beeinflusst wird, die möglicherweise unwissentlich durch neue Codeänderungen Fehler verursachen. Regressionstests stellen sicher, dass eine stabile Basis beibehalten wird.

Beispiel: Bei jeder Änderung am Code wird eine Form von Regressionstests durchgeführt. Dies umfasst alle damit verbundenen Aktualisierungen, die nach einer Fehlerbehebung, der Einführung neuer Funktionen oder nach einem Software-Update vorgenommen werden.smoke

Sanity-Testing

Sanity-Testing ist eine schnelle und flexible Methode, um zu überprüfen, ob bestehende Funktionen durch relativ geringfügige Änderungen oder Fehlerbehebungen beeinträchtigt wurden. Sanity-Tests werden häufig als schnelle Methode eingesetzt, um sicherzustellen, dass neue Funktionen die übrigen Systemfunktionen nicht beeinträchtigen.

Beispiel: Ähnlich wie bei Regressionstests kann mit Sanity-Tests das System auf einen früheren Funktionszustand zurückgesetzt werden, um Leistungsverbesserungen zu überprüfen, die grundlegende Funktionsweise zu bestätigen und sicherzustellen, dass das System wie erwartet funktioniert. Bei jeder Änderung des Codes wird eine Form des Regressionstests durchgeführt. Dies umfasst alle damit verbundenen Aktualisierungen, die nach einer Fehlerbehebung, der Einführung neuer Funktionen oder nach einem Software-Update vorgenommen werden.smoke

Smoketests

Das alte Sprichwort besagt: „Wo Rauch ist, ist auch Feuer.“ Dieses Sprichwort scheint den Namen „Smoketests“ inspiriert zu haben. Smoketests werden zu Beginn des Entwicklungsprozesses durchgeführt und beurteilen die End-to-End-Funktionalität. Bei Funktionsfehlern nehmen die QA-Teams die erforderlichen Korrekturen vor.

Beispiel: Smoketests können verwendet werden, um die kontinuierliche Integration und kontinuierliche Pipelines als abschließende Überprüfung zu validieren, bevor neue Software-Builds (oder größere Codeänderungen) bereitgestellt werden können.

Systemtests

Systemtests, manchmal auch als End-to-End-Tests bezeichnet, dienen dazu, die Zusammenarbeit der Software eines gesamten Softwaresystems zu bewerten. Systemtests umfassen häufig die Analyse mehrerer separater Softwaresysteme, die innerhalb eines bestimmten Softwaresystems möglicherweise zusammenarbeiten oder auch nicht.

Beispiel: End-to-End-Szenarien ermöglichen es Testern, vollständige Workflows zu bewerten. Für den Online-Einzelhandel könnte dies das gesamte Einkaufserlebnis des Verbrauchers umfassen, von der ursprünglichen Bestellung bis hin zum gesamten Abwicklungsprozess.

Komponententest

Unit-Tests sind eine Form des Testens in einem Mikrokosmos. Hier wird nicht das gesamte System getestet, sondern nur ein begrenzter Teil des Codes. Ein Codeabschnitt wird in einer isolierten Testumgebung bewertet, und wenn der Unit-Test fehlschlägt (basierend auf einem Vergleich der Testdaten mit den Funktionszielen), können weitere Tests auf Systemebene durchgeführt werden.

Beispiel: Einfachere Rechenelemente werden durch Unit-Tests gründlich geprüft. Betrachten Sie eine einfache Funktion, die Celsius-Temperaturen in Fahrenheit-Temperaturen umrechnet. Die Testumgebung enthält den betreffenden Code und die zugehörigen Testfälle.

Benutzerakzeptanztest

Als spätere Phase der Softwareprüfung zielt die Benutzerakzeptanzprüfung darauf ab, die Leistungsprüfung, die von Personen durchgeführt wird, die die Zielgruppe der entwickelten Software repräsentieren, zu integrieren und daraus zu lernen. Diese Endbenutzer verleihen dem Prüfprozess zusätzliche Realitätsnähe.

Beispiel: Ein Nutzer eines Software-Plans führt ein Upgrade auf die nächste Servicestufe durch, wodurch er Anspruch auf die Freischaltung völlig neuer Funktionen erhält. Benutzerakzeptanztests überprüfen, ob der Nutzer wie erwartet einen erweiterten Zugriff auf Funktionen erhält.

Functional Testing vs. nicht-funktionale Tests

Wie der Name schon sagt, werden bei nicht-funktionalen Tests Anwendungsverhalten bewertet, die in der Regel nicht als entscheidend für die Funktionalität angesehen werden. Dennoch gilt die Bereitstellung einer gut organisierten und angenehmen Benutzererfahrung heute als wesentlicher Bestandteil der Softwareentwicklung. Nicht-funktionale Tests können potenzielle Systemprobleme aufdecken, insbesondere wenn die Software maximiert wird, um eine größere Skalierbarkeit zu demonstrieren.

Lasttests

Lasttests sind eine wichtige Form der nicht-funktionalen Tests. Theoretisch sollte ein System in der Lage sein, Tausende von Systemanfragen mit derselben Dringlichkeit zu verarbeiten, wie es eine einzelne Systemanfrage versendet. Diese Logik wird jedoch durch die realistische Erfahrung nicht bestätigt. Lasttests prüfen, ob Systeme Spitzenlasten und sogar extreme Workload-Spitzen bewältigen können.

Leistungstests

Eine weitere Form der nicht-funktionalen Prüfung legt besonderen Wert auf die Leistung. Für eine gute Leistung ist es wichtig, dass ein System reibungslos und schnell auf Anfragen reagiert. Der Testplan im Leistungstest bewertet, wie lange Benutzer auf die Bearbeitung ihrer Anfragen warten müssen. Wenn Leistungstests sorgfältig erstellt werden, können sie dazu beitragen, Latenzen frühzeitig zu minimieren.

Sicherheitstests

Angesichts der Bedeutung der Datensicherheit ist es nicht überraschend, dass eine Form der Prüfung speziell auf dieses hochaktuelle Anliegen zugeschnitten ist. Sicherheitstestmethoden wie Dynamic Application Security Testing (DAST) und Static Application Security Testing (SAST) unterstützen Tester bei der Überprüfung auf Sicherheitslücken. Die Sicherheitstestmethoden eines Unternehmens werden entsprechend den potenziellen Bedrohungen ausgewählt.

Usability-Test

Eine Art der nicht-funktionalen Prüfung konzentriert sich vollständig auf die Qualität der User Experience (UX). Usability-Tests sind manuelle Testverfahren, die am besten in kleinem Umfang durchgeführt werden. Dennoch sollten sie wann immer möglich angewendet werden – insbesondere bei Maßnahmen wie der Lokalisierung von Anwendungen, die mit Risiken verbunden sein können, wenn Komplexitäten eingeführt werden, die zu menschlichen Fehlern führen können.

Functional Testing Tools

Die genaue Nachverfolgung aller verschiedenen Functional Testing Tools kann aufwendig sein, da die meisten verschiedene Plattformen und Anwendungstypen unterstützen. Obwohl es unmöglich ist, mit diesem boomenden Markt Schritt zu halten – Schätzungen zufolge gibt es Hunderte, vielleicht sogar Tausende von Functional Testing Tools –, möchten wir Ihnen hier einige vorstellen, die sich durch ihre nachgewiesene Beliebtheit und anerkannte Nützlichkeit auszeichnen.

  • Appium: Der Markt für Functional Testing bietet zahlreiche Open-Source-Tools, wobei Appium an erster Stelle steht. Appium unterstützt mehrere Programmiersprachen. Darüber hinaus können Sie mit Appium native, mobile Web- und Hybrid-Anwendungen sowohl für iOS- als auch für Android-Plattformen automatisieren.
  • Katalon Studio: Die Testautomatisierungsplattform Katalon Studio bietet die Möglichkeit, Ergebnisse aus Regressionstests und End-to-End-Tests zu erstellen und auszuwerten. Sie verfügt über eine Aufzeichnungs- und Wiedergabefunktion sowie plattformübergreifende Koordinationsfunktionen.
  • Micro Focus Unified Functional Testing (UFT): UFT von Micro Focus ist ein weiteres kommerzielles Test-Tool, das Testern einen übersichtlichen, plattformübergreifenden Einblick in die Nutzung von Webdiensten, Anwendungsprogrammierschnittstellen (APIs) und grafischen Benutzeroberflächen (GUIs) bietet.
  • Playwright: Microsoft hat dieses kommerzielle Framework für die Automatisierung von Webbrowsern entwickelt. Es ist dafür bekannt, die Zuverlässigkeit zu erhöhen. Obwohl Playwright moderne Webfunktionen unterstützt, bietet es weniger Optionen für den Umgang mit Programmiersprachen.
  • Selenium: Eines der beliebtesten Tools zur Testautomatisierung ist Selenium, ein Open-Source-Framework. Dieses browserbasierte Tool ermöglicht es Testern, Testskripte in einer Vielzahl gängiger Programmiersprachen zu schreiben und auszuwerten – darunter JavaScriptTM, NodeJS und Python. 
Weiterführende Lösungen
IBM Enterprise Application Service für Java

Ein vollständig verwalteter, mandantenfähiger Service für die Entwicklung und Bereitstellung von Java-Anwendungen.

Java-Apps erkunden
DevOps-Lösungen

Verwenden Sie DevOps-Software und -Tools, um cloudnative Anwendungen für mehrere Geräte und Umgebungen zu erstellen, bereitzustellen und zu verwalten.

DevOps-Lösungen erkunden
Services für die Entwicklung von Unternehmensanwendungen

Die Entwicklung von Cloud-Anwendungen bedeutet: einmal erstellen, schnell iterieren und überall bereitstellen.

Services für die Anwendungsentwicklung
Machen Sie den nächsten Schritt

IBM Cloud Application Development Consulting Services bieten fachkundige Beratung und innovative Lösungen zur Optimierung Ihrer Cloud-Strategie. Arbeiten Sie mit den Cloud- und Entwicklungsexperten von IBM zusammen, um Ihre Anwendungen zu modernisieren, skalieren und beschleunigen und so transformative Ergebnisse für Ihr Unternehmen zu erzielen.

Mehr zu Services zur Anwendungsentwicklung Erste kostenlose Schritte beim Erstellen auf IBM Cloud