Softwaretest
Softwaretest ist die dynamische Ausführung eines Programms mit ausgewählten Eingaben, um Fehler zu erkennen und Vertrauen zu gewinnen, dass die Software wie beabsichtigt funktioniert.
Definition
Softwaretest ist die Aktivität des Entwerfens und Ausführens von Testfällen – Eingaben gepaart mit erwarteten Ergebnissen –, um Diskrepanzen zwischen tatsächlichem und gefordertem Verhalten aufzudecken und die Softwarezuverlässigkeit abzuschätzen.
Scope
Dieses Thema behandelt Teststufen (Unit-, Integrations-, System-, Akzeptanztests); Black-Box-Techniken wie Äquivalenzklassenbildung, Grenzwertanalyse und kombinatorisches Testen; White-Box-Techniken, die durch Code-Coverage-Kriterien gesteuert werden; Regressionstests, Performance-Tests und exploratives Testen; Testautomatisierung; sowie die Theorie der Testadäquanz und -abdeckung.
Core questions
- Wie werden effektive Testfälle aus einem unüberschaubar großen Eingaberaum ausgewählt?
- Welche Abdeckungskriterien messen die Angemessenheit einer Testsuite?
- Wie ergänzen sich die Teststufen von der Unit- bis zur Akzeptanzprüfung gegenseitig?
- Wie kann das Testen automatisiert und in die Bereitstellungspipeline integriert werden?
Key theories
- Black-Box- und White-Box-Testdesign
- Black-Box-Techniken leiten Tests aus der Spezifikation durch Partitionierung und Grenzwertanalyse ab, während White-Box-Techniken Tests aus der Codestruktur ableiten, geleitet von Abdeckungskriterien; die beiden ergänzen sich.
- Abdeckungs- und Testadäquanzkriterien
- Adäquanzkriterien wie Anweisungs-, Zweig- und Bedingungsabdeckung sowie modellbasierte Kriterien über Kontroll- und Datenflussgraphen geben messbare Ziele dafür, wie gründlich eine Testsuite ein Programm ausführt.
Clinical relevance
Testen ist das am weitesten verbreitete Mittel, um sicherzustellen, dass Software vor der Veröffentlichung korrekt funktioniert; gut konzipierte automatisierte Tests erkennen Regressionen frühzeitig, unterstützen Refactoring und Continuous Delivery und sind zentral für zuverlässige Software.
Evidence & guidelines
ISO/IEC/IEEE 29119 bietet internationale Standards für Softwaretestprozesse, -dokumentation und -techniken, und der SWEBOK Software Testing Wissensbereich gibt einen Konsensüberblick.
History
Das Testen entwickelte sich von ad-hoc-Debugging zu einer Disziplin mit Myers' systematischer Behandlung im Jahr 1979; Coverage-Theorie, modellbasiertes Testen und Testautomatisierung entwickelten sich in den folgenden Jahrzehnten, und Test-Driven Development sowie Continuous Integration machten automatisiertes Testen zu einer zentralen agilen Praxis.
Debates
- Wie viel automatisiertes Testen sich lohnt
- Das richtige Gleichgewicht zwischen Unit-, Integrations- und End-to-End-automatisierten Tests wird diskutiert; die Testpyramide bevorzugt viele schnelle Unit-Tests gegenüber langsamen End-to-End-Tests, aber Kritiker merken an, dass dieses Gleichgewicht vom Systemtyp und Risiko abhängt.
Key figures
- Glenford Myers
- Paul Ammann
- Jeff Offutt
- Boris Beizer
Related topics
Seminal works
- myers2011
- ammann2016
- swebok2014
Frequently asked questions
- Warum können wir nicht jede mögliche Eingabe testen?
- Der Raum der möglichen Eingaben und Ausführungspfade ist für die meisten Programme astronomisch groß oder unendlich, daher ist ein erschöpfendes Testen undurchführbar; stattdessen wählt das Testen repräsentative und Grenzfälle unter Verwendung systematischer Techniken aus, um die Fehlererkennung pro Test zu maximieren.
- Was ist der Unterschied zwischen Teststufen?
- Unit-Tests prüfen einzelne Komponenten isoliert, Integrationstests überprüfen deren Interaktionen, Systemtests bewerten das gesamte System anhand seiner Anforderungen, und Akzeptanztests bestätigen, dass es die Benutzerbedürfnisse erfüllt; jede Stufe zielt auf unterschiedliche Arten von Fehlern ab.