Software Testing/Qualitätssicherung - Alle Methoden und Tools
Softwaretest-Methoden sind die verschiedenen Ansätze und Wege, um sicherzustellen, dass insbesondere eine Softwareanwendung vollständig getestet wird. Softwaretestmethoden umfassen alles vom Unit-Test einzelner Module über Integrationstests eines gesamten Systems bis hin zu speziellen Testformen wie Sicherheit und Leistung.
Was sind Testmethoden?
Testmethoden sind die Strategien und Ansätze, die verwendet werden, um ein bestimmtes Produkt zu testen, um sicherzustellen, dass es für seinen Zweck geeignet ist. Testmethoden beinhalten normalerweise die Prüfung, dass das Produkt gemäß seiner Spezifikation funktioniert, keine unerwünschten Nebenwirkungen hat, wenn es außerhalb seiner Konstruktionsparameter verwendet wird und im schlimmsten Fall ausfallsicher ist (z. B. ein Kernreaktor wird bei einem Ausfall abgeschaltet).
Bedeutung von Testmethoden
Da Softwareanwendungen immer komplexer und miteinander verflochten werden und mit der großen Anzahl verschiedener Plattformen und Geräte, die getestet werden müssen, ist es wichtiger denn je, über eine robuste Testmethodik zu verfügen. So kann sichergestellt werden, dass die Softwareprodukte/-systeme korrekt entwickelt wurden und ihre spezifizierten Anforderungen erfüllen sowie in allen erwarteten Umgebungen mit der erforderlichen Benutzerfreundlichkeit und Sicherheit erfolgreich arbeiten können.
Funktionelle Testing
Der Funktionstestteil einer Testmethodik wird in vier Komponenten unterteilt – Unit-Tests, Integrationstests, Systemtests und Akzeptanztests – die normalerweise in dieser Reihenfolge ausgeführt werden. Jeder von ihnen wird im Folgenden beschrieben:
Unit-Tests
Der Unit-Testing-Teil einer Testmethodik ist das Testen einzelner Softwaremodule oder Komponenten, aus denen eine Anwendung oder ein System besteht. Diese Tests werden normalerweise von den Entwicklern des Moduls geschrieben und in einer testgetriebenen Entwicklungsmethodik (wie Agile, Scrum oder XP) tatsächlich geschrieben, bevor das Modul als Teil der Spezifikation erstellt wird. Jede Modulfunktion wird von einem spezifischen Gerätetestgerät getestet, das in derselben Programmiersprache geschrieben ist.
Integrationstests
Der Integrationstest-Teil einer Testmethodik ist das Testen der verschiedenen Module/Komponenten, die bei Integration zusammen erfolgreich getestet wurden, um bestimmte Aufgaben und Aktivitäten durchzuführen (auch bekannt als Szenariotests oder End-to-End-Tests (E2E)). Diese Tests werden normalerweise mit einer Kombination aus automatisierten Funktionstests und manuellen Tests durchgeführt, je nachdem, wie einfach es ist, automatisierte Tests für integrierte Komponenten zu erstellen.
Systemtests
Der Systemtest-Teil einer Testmethodik beinhaltet das Testen des gesamten Systems auf Fehler und Bugs. Dieser Test wird durchgeführt, indem die Hardware- und Softwarekomponenten des gesamten Systems (die zuvor Unit-Tests und Integrationstests unterzogen wurden) miteinander verbunden und dann als Ganzes getestet werden. Diese Tests sind unter der Black-Box-Testmethode aufgeführt, bei der die Software auf die vom Benutzer erwarteten Arbeitsbedingungen sowie auf mögliche Ausnahme- und Randbedingungen überprüft wird.
Akzeptanztests
Der Akzeptanztest-Teil einer Testmethodik ist die letzte Phase des funktionalen Softwaretests und beinhaltet die Sicherstellung, dass alle Produkt-/Projektanforderungen erfüllt wurden und dass die Endbenutzer und Kunden das System getestet haben, um sicherzustellen, dass es wie erwartet funktioniert und erfüllt alle ihre definierten Anforderungen:
Benutzerakzeptanztest (UAT)
Dies ist eine äußerst wichtige Aktivität, da der Kunde oder die Organisation in vielen Fällen die Software nicht akzeptieren und abzeichnen wird, bis Sie UAT abgeschlossen haben. Daher ist es sehr wichtig, ein reibungsloses und erfolgreiches UAT zu haben.
Der Schlüsselaspekt von UAT besteht darin, dass die Tester Endbenutzer sind, die möglicherweise über erhebliche funktionale Fachkenntnisse und Kenntnisse verfügen, aber an die Funktionsweise früherer Systeme oder Prozesse gewöhnt sind und nicht an das neue getestete System. Daher müssen die Testfälle, die sie ausführen müssen, präskriptiver sein und die einzelnen Schritte / Aufgaben beschreiben, die ausgeführt werden müssen. Es ist wichtig, dass sie ein Werkzeug zur Verfügung haben, das den Testprozess so einfach wie möglich macht. So können Sie beispielsweise dem Skript leicht folgen, idealerweise mit dem zu testenden System im selben Fenster interagieren und Ergebnisse, Screenshots ohne unnötige Komplexität aufzeichnen.
Unit-Tests
Der Unit-Testing-Teil einer Testmethodik ist das Testen einzelner Softwaremodule oder Komponenten, aus denen eine Anwendung oder ein System besteht. Diese Tests werden normalerweise von den Entwicklern des Moduls geschrieben und in einer testgetriebenen Entwicklungsmethodik (wie Agile, Scrum oder XP) tatsächlich geschrieben, bevor das Modul als Teil der Spezifikation erstellt wird. Jede Modulfunktion wird von einem spezifischen Gerätetestgerät getestet, das in derselben Programmiersprache geschrieben ist.
Integrationstests
Der Integrationstest-Teil einer Testmethodik ist das Testen der verschiedenen Module/Komponenten, die bei Integration zusammen erfolgreich getestet wurden, um bestimmte Aufgaben und Aktivitäten durchzuführen (auch bekannt als Szenariotests oder End-to-End-Tests (E2E)). Diese Tests werden normalerweise mit einer Kombination aus automatisierten Funktionstests und manuellen Tests durchgeführt, je nachdem, wie einfach es ist, automatisierte Tests für integrierte Komponenten zu erstellen.
Systemtests
Der Systemtest-Teil einer Testmethodik beinhaltet das Testen des gesamten Systems auf Fehler und Bugs. Dieser Test wird durchgeführt, indem die Hardware- und Softwarekomponenten des gesamten Systems (die zuvor Unit-Tests und Integrationstests unterzogen wurden) miteinander verbunden und dann als Ganzes getestet werden. Diese Tests sind unter der Black-Box-Testmethode aufgeführt, bei der die Software auf die vom Benutzer erwarteten Arbeitsbedingungen sowie auf mögliche Ausnahme- und Randbedingungen überprüft wird.
Akzeptanztests
Der Akzeptanztest-Teil einer Testmethodik ist die letzte Phase des funktionalen Softwaretests und beinhaltet die Sicherstellung, dass alle Produkt-/Projektanforderungen erfüllt wurden und dass die Endbenutzer und Kunden das System getestet haben, um sicherzustellen, dass es wie erwartet funktioniert und erfüllt alle ihre definierten Anforderungen:
Benutzerakzeptanztest (UAT)
Dies ist eine äußerst wichtige Aktivität, da der Kunde oder die Organisation in vielen Fällen die Software nicht akzeptieren und abzeichnen wird, bis Sie UAT abgeschlossen haben. Daher ist es sehr wichtig, ein reibungsloses und erfolgreiches UAT zu haben.
Der Schlüsselaspekt von UAT besteht darin, dass die Tester Endbenutzer sind, die möglicherweise über erhebliche funktionale Fachkenntnisse und Kenntnisse verfügen, aber an die Funktionsweise früherer Systeme oder Prozesse gewöhnt sind und nicht an das neue getestete System. Daher müssen die Testfälle, die sie ausführen müssen, präskriptiver sein und die einzelnen Schritte / Aufgaben beschreiben, die ausgeführt werden müssen. Es ist wichtig, dass sie ein Werkzeug zur Verfügung haben, das den Testprozess so einfach wie möglich macht. So können Sie beispielsweise dem Skript leicht folgen, idealerweise mit dem zu testenden System im selben Fenster interagieren und Ergebnisse, Screenshots ohne unnötige Komplexität aufzeichnen.
Nicht-funktionale Tests
Bei den meisten Testmethoden umfasst der Funktionstest das Testen der Anwendung anhand der Geschäftsanforderungen. Die Funktionsprüfung erfolgt anhand der vom Kunden bereitgestellten funktionalen Spezifikationen oder anhand der Designspezifikationen wie Anwendungsfälle, die vom Designteam bereitgestellt werden.
Auf der anderen Seite beinhaltet das nicht-funktionale Testen das Testen der Anwendung gegen die nicht-funktionalen Anforderungen, was typischerweise das Messen/Testen der Anwendung gegen definierte technische Eigenschaften beinhaltet (auch bekannt als "-ilities", da sie alle auf "-ility" enden). , zum Beispiel: Verwundbarkeit, Skalierbarkeit, Benutzerfreundlichkeit. Im Folgenden werden einige Beispiele für nicht funktionale Tests beschrieben:
Leistung, Last, Stresstests
Bei den meisten Testmethoden gibt es verschiedene Arten von Leistungstests, zum Beispiel: Leistungstests messen, wie sich ein System unter steigender Last verhält (sowohl Anzahl von Benutzern als auch Datenvolumen), Lasttests überprüfen, ob das System mit der erforderlichen Leistung arbeiten kann Reaktionszeiten, wenn sie der erwarteten Last ausgesetzt werden, und Stresstests finden die Fehlerstelle(n) im System, wenn die getestete Last die unterstützte Last überschreitet.
Sicherheit, Schwachstellentests
Früher wurde Sicherheit im Nachhinein getestet. Mit der Zunahme der Cyberkriminalität und dem Bewusstsein für die Risiken, die mit Software-Schwachstellen verbunden sind, muss die Anwendungssicherheit jetzt gleichzeitig mit der gewünschten Geschäftsfunktionalität entworfen und entwickelt werden. Sicherheitstests testen die Software auf Vertraulichkeit, Integrität, Authentifizierung, Verfügbarkeit und Nichtabstreitbarkeit. Individuelle Tests werden durchgeführt, um einen unbefugten Zugriff auf den Softwarecode zu verhindern.
Usability-Tests
Der Usability-Test-Teil einer Testmethodik befasst sich mit dem Aspekt der Benutzerfreundlichkeit der Software für den Endbenutzer. Die Leichtigkeit, mit der ein Benutzer auf das Produkt zugreifen kann, bildet den Haupttestpunkt. Usability-Tests betrachten fünf Aspekte des Testens: Erlernbarkeit, Effizienz, Zufriedenheit, Einprägsamkeit und Fehler.
Kompatibilitätstests
Der Kompatibilitätsteil einer Testmethodik testet, ob das Produkt oder die Anwendung mit allen angegebenen Betriebssystemen, Hardwareplattformen, Webbrowsern, Mobilgeräten und anderen entwickelten Programmen von Drittanbietern (z. B. Browser-Plugins) kompatibel ist. Kompatibilitätstests überprüfen, ob das Produkt über alle verschiedenen Hardware-/Software-Kombinationen hinweg wie erwartet funktioniert und dass alle Funktionen konsistent unterstützt werden.
Was ist mit agilen Testmethoden?
Agile Projekte müssen ihre Systeme in Bezug auf die zu berücksichtigenden Tests genauso testen wie traditionelle Wasserfallprojekte. Die Aktivitäten werden jedoch in kleineren Bursts als Teil der Iterationen oder Sprints stattfinden. Darüber hinaus können die Personen, die die Arbeit ausführen, Testspezialisten (z. B. Leistung, Sicherheit) sein, werden jedoch vollständig in die agilen Teams eingebettet.
Da agile Projekte mit einem möglicherweise höheren Maß an Unsicherheit und Veränderungen umgehen, haben Sie möglicherweise kein vollständig funktionierendes System, keine schriftlichen Testfälle (abgesehen von High-Level-Akzeptanztests) oder sogar vollständig geformte Anforderungen (User Stories sind in der Regel ziemlich hohes Level). Es gibt also einige Techniken, die helfen können.
Exploratives / sitzungsbasiertes Testen
Exploratives Testen ist ein nützlicher Ansatz, der beim Softwaretesten verwendet wird, bei dem es darum geht, die Software zu erkunden, was sie tut, was sie nicht tut, was funktioniert und was nicht. Der Tester muss Entscheidungen darüber treffen, was als nächstes getestet werden soll und wo er eine bestimmte Zeit verbringen soll. Exploratives Testen ist am nützlichsten, wenn unklare Anforderungen vorliegen (z. B. zu Beginn eines agilen Sprints) oder Sie unbekannte Probleme finden möchten, die durch formalere Testmethoden nicht aufgedeckt wurden.
Sitzungsbasiertes Testen ist eine Variante des explorativen Testens, bei dem Sie Testcharts und spezifische zeitlich begrenzte „Sitzungen“ haben, um Ihre Aktivitäten durchzuführen.
Kontinuierliche Tests
Ein weiterer Aspekt agiler Projekte ist der Wechsel zu Development & Operations (DevOps). Da Unternehmen DevOps annehmen und Pipelines mit Funktionen von der Einführung bis zur Produktion haben und beenden, müssen die Tests während der gesamten DevOps-Pipeline kontinuierlich durchgeführt werden.
Auf der anderen Seite beinhaltet das nicht-funktionale Testen das Testen der Anwendung gegen die nicht-funktionalen Anforderungen, was typischerweise das Messen/Testen der Anwendung gegen definierte technische Eigenschaften beinhaltet (auch bekannt als "-ilities", da sie alle auf "-ility" enden). , zum Beispiel: Verwundbarkeit, Skalierbarkeit, Benutzerfreundlichkeit. Im Folgenden werden einige Beispiele für nicht funktionale Tests beschrieben:
Leistung, Last, Stresstests
Bei den meisten Testmethoden gibt es verschiedene Arten von Leistungstests, zum Beispiel: Leistungstests messen, wie sich ein System unter steigender Last verhält (sowohl Anzahl von Benutzern als auch Datenvolumen), Lasttests überprüfen, ob das System mit der erforderlichen Leistung arbeiten kann Reaktionszeiten, wenn sie der erwarteten Last ausgesetzt werden, und Stresstests finden die Fehlerstelle(n) im System, wenn die getestete Last die unterstützte Last überschreitet.
Sicherheit, Schwachstellentests
Früher wurde Sicherheit im Nachhinein getestet. Mit der Zunahme der Cyberkriminalität und dem Bewusstsein für die Risiken, die mit Software-Schwachstellen verbunden sind, muss die Anwendungssicherheit jetzt gleichzeitig mit der gewünschten Geschäftsfunktionalität entworfen und entwickelt werden. Sicherheitstests testen die Software auf Vertraulichkeit, Integrität, Authentifizierung, Verfügbarkeit und Nichtabstreitbarkeit. Individuelle Tests werden durchgeführt, um einen unbefugten Zugriff auf den Softwarecode zu verhindern.
Usability-Tests
Der Usability-Test-Teil einer Testmethodik befasst sich mit dem Aspekt der Benutzerfreundlichkeit der Software für den Endbenutzer. Die Leichtigkeit, mit der ein Benutzer auf das Produkt zugreifen kann, bildet den Haupttestpunkt. Usability-Tests betrachten fünf Aspekte des Testens: Erlernbarkeit, Effizienz, Zufriedenheit, Einprägsamkeit und Fehler.
Kompatibilitätstests
Der Kompatibilitätsteil einer Testmethodik testet, ob das Produkt oder die Anwendung mit allen angegebenen Betriebssystemen, Hardwareplattformen, Webbrowsern, Mobilgeräten und anderen entwickelten Programmen von Drittanbietern (z. B. Browser-Plugins) kompatibel ist. Kompatibilitätstests überprüfen, ob das Produkt über alle verschiedenen Hardware-/Software-Kombinationen hinweg wie erwartet funktioniert und dass alle Funktionen konsistent unterstützt werden.
Was ist mit agilen Testmethoden?
Agile Projekte müssen ihre Systeme in Bezug auf die zu berücksichtigenden Tests genauso testen wie traditionelle Wasserfallprojekte. Die Aktivitäten werden jedoch in kleineren Bursts als Teil der Iterationen oder Sprints stattfinden. Darüber hinaus können die Personen, die die Arbeit ausführen, Testspezialisten (z. B. Leistung, Sicherheit) sein, werden jedoch vollständig in die agilen Teams eingebettet.
Da agile Projekte mit einem möglicherweise höheren Maß an Unsicherheit und Veränderungen umgehen, haben Sie möglicherweise kein vollständig funktionierendes System, keine schriftlichen Testfälle (abgesehen von High-Level-Akzeptanztests) oder sogar vollständig geformte Anforderungen (User Stories sind in der Regel ziemlich hohes Level). Es gibt also einige Techniken, die helfen können.
Exploratives / sitzungsbasiertes Testen
Exploratives Testen ist ein nützlicher Ansatz, der beim Softwaretesten verwendet wird, bei dem es darum geht, die Software zu erkunden, was sie tut, was sie nicht tut, was funktioniert und was nicht. Der Tester muss Entscheidungen darüber treffen, was als nächstes getestet werden soll und wo er eine bestimmte Zeit verbringen soll. Exploratives Testen ist am nützlichsten, wenn unklare Anforderungen vorliegen (z. B. zu Beginn eines agilen Sprints) oder Sie unbekannte Probleme finden möchten, die durch formalere Testmethoden nicht aufgedeckt wurden.
Sitzungsbasiertes Testen ist eine Variante des explorativen Testens, bei dem Sie Testcharts und spezifische zeitlich begrenzte „Sitzungen“ haben, um Ihre Aktivitäten durchzuführen.
Kontinuierliche Tests
Ein weiterer Aspekt agiler Projekte ist der Wechsel zu Development & Operations (DevOps). Da Unternehmen DevOps annehmen und Pipelines mit Funktionen von der Einführung bis zur Produktion haben und beenden, müssen die Tests während der gesamten DevOps-Pipeline kontinuierlich durchgeführt werden.
Wir helfen Ihnen.
Wir bei Q-Centric haben uns auf Software Testing und Testautomatisierung spezialisiert. Wenn Sie Unterstützung oder Rat bei Themen Rund um die Qualitätssicherung oder Automatisierung benötigen, wenden Sie sich jederzeit an uns. Einfach telefonisch, per E-Mail oder per Kontaktformular.